进程有着 运行 - 暂停 - 运行 的活动规律。
**

进程的三种状态

在一个进程的活动期间至少具备三种基本状态,即运行状态、就绪状态、阻塞状态。

进程的状态 - 图1
进程的三种基本状态

  • 运行状态(Runing):该时刻进程占用CPU;
  • 就绪状态(Ready) :可运行,但因为其他进程正在运行而暂时停止;
  • 阻塞状态(Blocked) :该进程正在等待某一事件发生而暂时停止运行,这时,即使给它CPU控制权,它也无法运行。

进程另外两个基本状态:

  • 创建状态(new):进程正在被创建时的状态;
  • 结束状态(Exit) :进程正在从系统中消失时的状态。

进程的状态变迁

一个完整的进程状态的变迁如下图:
进程的状态 - 图2
进程五种状态的变迁
进程的状态变迁:

  • NULL -> 创建状态:一个新进程被创建时的第一个状态;
  • 创建状态 -> 就绪状态:当进程被创建完成并初始化后,一切就绪准备运行时,变为就绪状态,这个过程是很快的;
  • 就绪态 -> 运行状态:处于就绪状态的进程被操作系统的进程调度器选中后,就分配给 CPU 正式运行该进程;
  • 运行状态 -> 结束状态:当进程已经运行完成或出错时,会被操作系统作结束状态处理;
  • 运行状态 -> 就绪状态:处于运行状态的进程在运行过程中,由于分配给它的运行时间片用完,操作系统会把该进程变为就绪态,接着从就绪态选中另外一个进程运行;
  • 运行状态 -> 阻塞状态:当进程请求某个事件且必须等待时,例如请求 I/O 事件;
  • 阻塞状态 -> 就绪状态:当进程要等待的事件完成时,它从阻塞状态变到就绪状态;

挂起状态

挂起状态:表示进程没有占用物理内存空间,跟阻塞状态不一样,阻塞状态是等待某个事件的返回。

由于虚拟内存管理原因,进程的所使用的空间可能并没有映射到物理内存,而是在硬盘上,这是进程就会挂起状态,另外调用sleep也会被挂起。
进程的状态 - 图3
虚拟内存管理-换入换出
挂起状态可以分为两种:

  • 阻塞挂起状态:进程在外存(硬盘)并等待某个事件的出现;
  • 就绪挂起状态:进程在外存(硬盘),但只要进入内存,即可立刻运行。

进程的状态 - 图4
七种状态变迁