2.21、2.22
一些概念:
进程控制是进程管理中最基本的功能。创建、终止、可负责进程运行中的状态转换。
进程控制一般是由OS的内核中的原语来实现的。
原语(Primitive)是由若干条指令组成的,用于完成一定功能的一个过程。
它与一般过程的区别在于:它们是“原子操作(Action Operation)”。即不可分割、不允许中断、常驻内存。
•进程图(Process Graph) 进程图是用于描述一个进程的家族关系的有向树。
2.2.3 进程的阻塞与唤醒
1. 引起进程阻塞和唤醒的事件
有下述几类事件会引起进程阻塞或被唤醒。
•请求系统服务(如请求打印服务)
•启动某种操作(如I/O操作)
•新数据尚未到达
•无新工作可做(某些特定功能的系统进程、如发送进程)
2.进程阻塞过程
无法继续执行,调用阻塞原语block把自己阻塞,是主动行为。
•立即停止执行
•PCB中的现行状态由“执行”改为“阻塞” 并将PCB插入相应阻塞队列
•转调度程序进行重新调度,将处理机分配给另一就绪进程并进行切换
(保留被阻塞进程的处理机状态(在PCB中),再按新进程的PCB中的处理机状态设置CPU的环境)。
3.进程唤醒过程
当被阻塞进程所期待的事件出现时,将等待该事件的进程唤醒。(如I/O完成)
唤醒原语执行的过程是:
•把被阻塞的进程移出阻塞队列
•将PCB中的现行状态由阻塞改为就绪,然后再将该PCB插入到就绪队列中。
应当指出,block原语和wakeup原语是一对作用刚好相反的原语。
故在某进程中调用了阻塞原语,则必须在与之相合作的另一进程中或其他相关的进程中安排唤醒原语,以能唤醒阻塞进程;
否则,其将长久地处于阻塞状态,从而再无机会继续运行。
2.2.4 进程的挂起与激活
1.进程的挂起
当出现了引起进程挂起的事件时(比如,用户进程请求将自己挂起,或父进程请求挂起某子进程)。
挂起原语suspend( )的执行过程是:
•首先检查被挂起进程的状态并进行相应操作(执行态、活动就绪 - 静止就绪; 活动阻塞 - 静止阻塞)。
•为便于用户或父进程考查该进程的运行情况,把该进程的PCB复制到某指定的内存区域。
•最后,若被挂起的进程正在执行,则转向调度程序重新调度,从而将处理机重新分配。
2.进程的激活过程
当发生激活进程的事件时(如父进程或用户进程请求激活指定进程)
激活原语active( )激活过程:
•激活原语将进程从外存调入内存
•检查该进程的现行状态并进行相应操作(静止就绪-活动就绪; 静止阻塞 - 活动阻塞)。
假如采用的是抢占调度策略,则每当有新进程进入就绪队列时,
检查是否要进行重新调度,即比较被激活进程与当前进程的优先级,决定处理机归属。