进程状态模型

简述

进程在整个生命周期中,由于各进程之间的相互制约关系以及外部运行环境的变化,进程需要在不同的状态之间进行切换,进程状态模型通常如下三种:

  • 三状态模型:包含运行态、就绪态、阻塞态三种基本状态模型
  • 五状态模型:除三状态模型中的三种基本状态外,由于进程需要经过创建过程并且最终结束运行,因此添加创建态、终止态
  • 七状态模型:除五状态模型五种状态外,在引入挂起概念后,多出了就绪挂起、阻塞挂起两种状态

三状态模型

三状态模型包含的是进程最基本的状态。运行态是指当前进程正在占用CPU;就绪态是指当前进程已经具有运行的条件,只是当前没有空闲CPU而暂时无法运行的状态;阻塞态是指当前进程因等待某一事件的发生而无法运行的状态,其又称为等待态、封锁态、睡眠态等。状态之间的转换如下图所示:
进程三状态转换模型

  • 就绪态->运行态

调度程序选择程序进入CPU运行

  • 运行态->就绪态

当前进程的时间片用完或者CPU被高优先级进程抢占导致被剥夺CPU使用权而转入就绪态

  • 运行态->阻塞态

当前进程由于需要等待某个事件的发生或者调用类似pause等系统调用来进入阻塞态。事件可是请求OS服务、请求资源且暂时不可用、等待I/O、等待其他进程提供信息等。

  • 阻塞态->就绪态

当进程等待的事件完成后(如I/O操作结束、中断结束时),中断处理程序必须把相应的进程状态由阻塞态转换为就绪态。

五状态模型

进程在整个生命周期中,除了就绪态、运行态、阻塞态以外,还包含创建态以及终止态。创建态是因为系统在创建进程时,需要填写PCB里面的相关信息,但是由于当前系统资源有限暂未同意执行;终止态是进程在结束运行时,系统需要处理资源释放和回收以及一些数据统计工作而处于的状态。下图为五状态之间的转换图:
进程五状态转换模型

  • 创建态->就绪态

当系统创建进程的主要工作完成后(申请PCB并填写相关信息),通过提交进入就绪态

  • 运行态->终止态

进程运行结束后进程进入终止态

其余状态转换和三状态模型相似。

七状态模型

由于系统的资源是有限的,如果当前有大量的进程在运行时,系统负载大,内存可能出现不足,此时就需要将一部分进程暂时保存到磁盘上,当进程再次运行时再调入内存。此时就会多出就绪挂起态以及阻塞挂起态,其互相转换图如下:

进程七状态转换模型

  • 创建态->就绪挂起态

此时进程创建完毕后,系统可能没有足够内存来运行该进程,因此进入就绪挂起态

  • 就绪态->就绪挂起态

系统负载过重时,可能会将一部分进程换出到磁盘中以腾出空间。

  • 阻塞态->阻塞挂起态

原因和就绪态被挂起的原因一致,减轻系统负载。

  • 运行态->就绪挂起态

直接被系统换出内存而不经历就绪态

  • 就绪挂起态->就绪态

在条件允许时激活就绪挂起态使其进入内存,成为就绪态

  • 阻塞挂起->阻塞态

激活使其进入内存,成为阻塞态

进程队列

由于进程在不同的状态之间转换,因此操作系统为每一类进程建立一个或多个PCB队列,随着进程状态的转变,PCB由一个队列转换到另外一个队列。对于一个五状态模型,其队列模型如下图所示:

进程五状态队列模型

如图所示,等待队列可以有多个,每个等待队列等待不同的事件发生。实际就绪队列也可以实现为多个,比如不同的优先级进程在不同的就绪队列中。