目录
一、进程的三种基本状态
每个进程至少处于三种基本状态之一。
就绪(Ready)状态指进程已准备好运行,即已经分配到除CPU以外的所有必要资源,只要再获得CPU就可以立即执行。处于就绪态的进程会按一定策略排成一个队列,称作就绪队列。
执行(Running)状态指进程已获得CPU,程序正在执行。单处理机系统某一时刻只有一个进程处于运行态,而多处理机系统在某一时刻有多个进程处于运行态。
阻塞(Block)状态指正在执行的进程由于发生某事件暂时无法继续执行,即进程的执行受到阻塞。此时会引起进程调度。处于阻塞态的进程也会排成一个队列,称作阻塞队列。
二、三种基本状态的转换
可用转换关系图表示三种基本状态之间的转换:
三、创建状态和终止状态
创建(New)状态,进程的创建分为三个步骤:首先进程申请一个空白PCB,并向PCB中填写用于控制和管理进程的信息;然后为该进程分配运行时所必须的资源;最后,将该进程转入就绪状态并插入就绪队列中。如果进程所需资源不能被满足,那么创建工作便无法完成,进程也不能被调度运行,此时进程所处的状态就是创建状态。
终止(Terminated)状态,进程的终止分为两个步骤:首先等待OS进行善后处理,然后将其PCB清零,并将PCB空间返还系统。当一个进程到达了自然结束点,或是出现了无法克服的错误,或是被OS所终结,或是被其他有终止权的进程所终结,它将进入终止状态。进入终止态的进程以后不能再执行,但是在OS中依然保留一个记录,其中保存状态码和一些计时统计数据,供其他进程收集,一旦收集完成,该进程将被删除,即PCB被清零,并返还系统。
引入创建状态和终止状态后进程的五种状态的转换关系图如下:
四、引入挂起原语操作
为了系统和用户观察和分析进程的需要,引入了挂起操作。当该操作作用于某个进程时,该进程将被挂起,意味着此时该进程处于静止状态。如果进程正在执行,它将暂停执行。若原本处于就绪状态,则该进程暂时不接受调度。与挂起操作对应的是激活操作。
引入挂起操作的原因,是基于系统和用户的如下需要:终端用户的需要;父进程的请求;负荷调节的需要;操作系统的需要。
原语操作的特点是:执行期间不允许中断,只能一气呵成。
1.引入挂起原语后三个进程状态的转换
具有挂起状态的进程状态图如下:
引入挂起原语Suspend和激活原语Activate后,进程将可能发生以下几种状态的转换:
活动就绪→静止就绪:活动就绪状态(Readya)指进程处于未被挂起的就绪状态,此时进程可以接受调度;使用挂起原语Suspend将该进程挂起后,该进程转变为静止就绪状态(Readys),处于Readys状态的进程不再被调度执行。
活动阻塞→静止阻塞:活动阻塞状态(Blockeda)指进程处于未被挂起的阻塞状态,使用挂起原语Suspend将该进程挂起后,该进程转变为静止阻塞状态(Blockeds),处于该状态的进程在其所期待的事件出现后,它将从Blockeds状态变为Readys状态。
静止就绪→活动阻塞:处于Readys状态的进程被Activate原语激活后转变为Readya状态。
静止阻塞→活动阻塞:处于Blockeds状态的进程被Activate原语激活后转变为Blockeda状态。
2.引入挂起原语后五个进程状态的转换
增加了创建状态和终止状态后具有挂起状态的进程状态图如下:
增加考虑的情况有:
NULL→创建:一个新进程产生时处于创建状态。
创建→活动就绪:进程创建完成后,该进程转为活动就绪状态。
创建→静止就绪:考虑到系统当前资源状况和性能的要求,不分配给新建进程所需资源,主要是主存,该进程转为静止就绪状态,被安置在外存,不参与调度,此时进程创建工作尚未完成。
执行→终止:当一个进程已完成任务时,或是出现了无法克服的错误,或是被OS或是被其他进程所终结,此时进程转为终止状态。
3.“挂起”与“阻塞”的异同点
“挂起”和“阻塞”都是暂时不能获得CPU的服务,但“挂起”是将进程映像调到外存,而“阻塞态”下进程映像还在内存中。