目录
进程是现代分时操作系统的工作单元,是操作系统进行资源分配和调度的基本单位
通过CPU的多路复用(进程之间切换CPU),所有进程可以并发执行
进程不只是程序代码,进程还包括当前活动,如程序计数器的值和寄存器的内容等,还包括堆.栈,数据等
1.进程状态
进程执行时会改变状态
有下面几个状态:
新的(new):进程正在被创建
运行(running):指令正在执行
等待(waiting):又称阻塞状态,进程等待发生某个事件
就绪(ready):进程等待分配处理器
终止(terminated):进程已经结束
2.进程控制块(Process Control Block,PCB)
1.CPU通过读取PCB内的信息来执行对应的进程
2.从保存状态PCB0到PCB1重新加载状态,这个时间段CPU是空闲时间,不执行P0和P1
3.在Lunix内核(C/C++)中,PCB采用task_stuct的双向链表表示
3.进程调度
1.调度队列
- 进程在进入系统时会被加入到作业队列(job queue) 中,这个队列包括系统内所有进程
- 就绪队列(ready queue)保存驻留在内存中,就绪的,等待运行的进程
- 设备队列(device queue)等待特定IO设备的进程列表
2.调度程序
操作系统通过调度程序来选择进程,而后执行进程
1.长期调度程序
如批处理系统,提交的进程数量多于可以立即执行的数量,就将进程保存到大容量存储设备(如磁盘)的缓冲池,长期调度就是将缓冲池内的进程调到内存里面去
2.短期调度程序
从准备执行的进程中选择进程,并分配CPU执行
3.中期调度程序
进程a正在执行,突然进程b需要立即执行,进程a就会中断,调度程序会将中断的进程调到缓冲池中,等到进程b执行完,又会从缓冲池中把进程a调到内存中继续执行
4.进程运行
进程树:进程在执行的过程中可能创建多个新的进程,创建进程称为父进程,而新的进程称为子进程.每个新进程可以再创建其他进程,形成进程树
PID:操作系统通过唯一的进程标识符(process identifier,pid)进行标识
1.进程创建
当进程创建新进程时,有两种执行可能:
1.父进程与子进程并发执行
2.父进程等待,直到某个或全部子进程执行完成
子进程的两种类型:
1.子进程是父进程的复制品
2.子进程执行的是一个新程序
linux操作系统使用fork()创建新进程
2.进程终止
当进程完成执行最后语句并且通过系统调用exit()请求操作系统删除自身时,进程终止,操作系统会释放其资源
父进程终止子进程的类型:
1.子进程使用了超过它所分配的资源(如超过分配的内存的大小,无打印机等)
2.分配给子进程的任务,不在需要
3.父进程正在退出,而操作系统不允许无父进程的子进程继续执行(父进程终止,下面的所有子进程必须终止,级联终止)
5.客户机/服务器通信
1.socket(套接字)
通信的端点.通过网络通信的每对进程需要使用一对套接字
每个socket由ip和端口号组成
ip对应进程所在主机的地址
端口号对应进程
2.远程过程调用(RPC)
RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复 信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。(查看原文)
3.管道(pipe)
普通管道:单向的,只允许单向通信;若要实现双向通信,就需要两个管道;当进程通信开始管道建立,如果进程通信结束,管道不存在
命名管道:可以双向;多个进程可以用一个命名管道进行通信;通信完成后,命名管道继续存在