进程在操作系统中有五个常见的状态,分别是新建(New)就绪(Ready)执行(Running)阻塞(Blocked)终止(Terminated)。这些状态描述了进程在生命周期中的不同阶段,以及进程之间如何在这些状态之间进行转换。

1、进程的五个状态

(1)新建(New)

  • 描述:进程处于创建阶段。进程控制块(PCB)被初始化,操作系统分配必要的资源,但尚未开始执行。
  • 状态说明:此时进程的代码和数据尚未加载到内存中,进程尚未准备好执行。

(2)就绪(Ready)

  • 描述:进程已经准备好执行,但由于系统中的其他进程正在运行,因此被挂起,等待操作系统调度器分配CPU资源。
  • 状态说明:进程在就绪队列中等待,等待调度器将其从就绪队列中调度出来执行。

(3)执行(Running)

  • 描述:进程正在被CPU执行。它从就绪队列中被调度出来,并获得了CPU资源。
  • 状态说明:此时进程的程序计数器指向当前正在执行的指令,进程正在运行。进程一旦获得CPU资源,它就进入了执行状态。

(4)阻塞(Blocked)

  • 描述:进程因等待某些外部事件(如I/O操作、资源获取等)而无法继续执行。它不会占用CPU时间,因此被挂起在阻塞队列中,直到等待的事件发生。
  • 状态说明:进程可能因为等待磁盘I/O、网络数据、信号等资源而被阻塞。

(5)终止(Terminated)

  • 描述:进程已经执行完毕,或者由于某种原因(如错误、强制终止等)被操作系统终止。
  • 状态说明:进程完成了任务或出现了错误,操作系统将清理资源并删除进程。终止状态下,进程的内存和控制块会被操作系统回收。

2、进程状态的转换

进程的状态并非一成不变,它们会在不同条件下发生转换。状态转换通常由操作系统的调度器根据进程的需要和系统的资源状况来进行。

(1)新建 → 就绪(New → Ready)

  • 触发条件:进程被创建后,操作系统已为其分配必要的资源(PCB、内存等),但尚未获得 CPU 控制权。

  • 原因:进程完成初始化,进入就绪队列,等待调度器安排执行。

(2)就绪 → 运行(Ready → Running)

  • 触发条件:操作系统的调度器选中了一个就绪进程,并将 CPU 分配给它。

  • 原因:CPU 从就绪队列中取出该进程,开始执行其指令。

(3)运行 → 阻塞(Running → Blocked)

  • 触发条件:进程正在执行,但由于某些事件尚未完成(如等待 I/O 操作),无法继续推进,因此被挂起。

  • 原因:进程主动请求资源或等待外部事件(如 I/O 完成、信号量),进入阻塞状态。

(4)阻塞 → 就绪(Blocked → Ready)

  • 触发条件:进程等待的事件(如 I/O 完成、网络数据到达)完成后,操作系统将其重新加入就绪队列。

  • 原因:阻塞条件满足,进程重新获得被调度的资格,等待 CPU。

(5)运行 → 终止(Running → Terminated)

  • 触发条件:进程执行完毕,或因异常、错误、外部信号(如 kill 命令)被操作系统强制终止。

  • 原因:进程完成任务或发生致命错误,操作系统回收其占用的资源,进程进入终止状态。

(6)运行 → 就绪(Running → Ready)

  • 触发条件:进程正在 CPU 上执行,但由于时间片用完,或者被更高优先级的进程抢占,操作系统强制收回 CPU。

  • 原因:调度器决定将 CPU 分配给其他进程,当前进程从运行状态退回到就绪状态,重新排队等待下一次被调度。

(7)阻塞 → 就绪(Blocked → Ready)

  • 触发条件:进程等待的事件(如 I/O 操作完成、网络数据到达、信号量释放)已经发生,操作系统将其从阻塞队列中移出。

  • 原因:阻塞条件已满足,进程重新具备被调度的资格,因此被唤醒并加入就绪队列,等待调度器分配 CPU。

3、转换示意图

                  +-----------+
                  |    New    |
                  +-----------+
                        |
                        | (创建完成)
                        V
                  +-----------+      (调度)      +-----------+
         +------->|   Ready   |----------------->|  Running  |
         |        +-----------+                  +-----------+
         |              ^                              |
         |              |                              |
         |       (I/O完成/事件发生)              (时间片用完/被抢占)
         |              |                              |
         |              |                              V
         |        +-----------+                  +-----------+
         +--------|  Blocked  |<-----------------|  Running  |
                  +-----------+   (请求I/O/等待)   +-----------+
                                                        |
                                                        | (执行完毕/异常终止)
                                                        V
                                                  +-----------+
                                                  |Terminated |
                                                  +-----------+

总结

进程的五个状态及其相互转换如下:

  • 新建(New):进程正在创建。
  • 就绪(Ready):进程准备好执行,但等待CPU调度。
  • 执行(Running):进程正在执行,获得CPU资源。
  • 阻塞(Blocked):进程等待某些事件(如I/O)完成,无法继续执行。
  • 终止(Terminated):进程执行完成或被终止。

进程的状态转换是操作系统进程调度的核心,涉及的条件包括CPU调度、I/O操作、时间片轮转等。操作系统通过合理的状态转换和调度策略,确保系统资源得到合理分配,进程能够高效、稳定地执行。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐