由于多个进程在并发执行时共享系统资源,致使它们在运行过程中呈现间断性的运行规律,所以进程在其生命周期内可能具有多种状态。
一、进程的三种基本状态
1. 就绪状态(Ready)
进程已分配到除CPU之外的所有必要资源,只要再获得CPU,便可立即执行。
2. 执行状态 (Running)
进程已获得CPU,正在执行。(多处理机系统中,则有多个进程处于执行状态)
3. 阻塞状态(Block / Waiting)
正在执行的进程由于发生某时间(如I/O请求、申请缓冲区失败等)暂时无法继续执行的状态,即进程的执行受到阻塞。
引起进程阻塞的事件:
① 向系统请求共享资源失败
② 等待某种操作的完成
③ 新数据尚未到达
④ 等待新任务的到达
在执行过程中,如果发生了上述事件,进程便通过阻塞原语 block 将自己阻塞。可见,阻塞是进程自身的一种主动行为。
二、三种基本状态的转换
三、创建状态和终止状态
1. 创建状态(New)
进程正在创建的状态。创建工作尚未完成(即未进入就绪状态),进程不能被调度运行。
创建原语:Create()
(1)引起进程创建的事件
由系统内核创建的三种情况:
① 用户登录
在分时系统中,用户登录成功后,系统将为该用户建立一个进程。
② 作业调度
在多道批处理系统中,从后备队列中选择进程调度时,便为它(们)创建进程,并插入就绪队列中。
③ 提供服务
比如用户程序要求文件进行打印,操作系统将为它创建一个打印进程。
用户进程自己创建:
④ 应用请求
(2)创建的步骤
① 申请空白 PCB
② 为新进程分配其运行所需的资源
③ 初始化进程控制块 PCB
④ 将新进程插入就绪队列
(3)进程的层次结构
在OS中,允许一个进程创建另一个进程,也就是父进程创建子进程,由此便形成了一个进程的层次结构。
2. 终止状态(Terminated)
进程正常或异常结束,移出就绪队列,但尚未被撤销时的状态。
终止原语:Destroy(n) n是进程标识符
引起进程终止的事件:
① 正常结束
表示进程的任务已经完成,准备退出运行。
② 异常结束
指进程在运行时发生了某种异常事件,使程序无法继续运行。比如越界错、保护错、非法指令、运行超时等等。
③ 外界干预
进程应外界的请求而终止运行。比如操作员或操作系统干预、父进程请求、父进程终止时随着父进程而终止。
终止需要经过两个步骤:
① 等待操作系统进行善后处理
② 将进程的PCB清零,并将PCB空间返还系统
四、五种状态的转换
五、引入挂起原语(Suspend)
在许多系统中,为了系统和用户观察分析进程的需要,还引入了挂起操作。
程序被挂起,意味着进入静止状态。
如果程序正处于执行状态,它将暂停执行。
如果程序正处于就绪状态,它将暂不接受调度。
1. 引入原因
(1)终端用户的需要
用户发现自己的程序有可疑问题,希望暂停时,可以使用挂起使之停止。
(2)父进程请求
有时父进程希望挂起自己的某个子进程,以便考察和修改。
(3)负荷调节的需要
实时系统中的工作负荷较重时,可以将一些不重要的进程挂起。
(4)操作系统的需要
操作系统有时需要挂起某些进程,以便检查运行中的资源使用情况或进行记账。
2. 引入挂起操作后的状态转换图
活动就绪 Readya(Ready + active)
静止就绪 Readys(Ready + suspend)
活动阻塞 Blockeda(Blocked + active)
静止阻塞 Blockeds(Blocked + suspend)