基于本文回答
0
评论

进程有哪些状态?

知识点图片

在操作系统中,进程的状态描述了进程在生命周期中当前所处的阶段。根据操作系统的复杂程度,通常分为三态模型五态模型(最常用)和七态模型(包含挂起)。

以下是详细的解释:

一、 最基本的“三态模型”

这是描述进程调度最核心的三个状态:

  1. 运行态 (Running)
    • 定义: 进程占有 CPU,并在 CPU 上执行指令。
    • 注意: 在单核系统中,同一时刻只有一个进程处于运行态;在多核系统中,可以有多个。
  2. 就绪态 (Ready)
    • 定义: 进程已经具备运行条件(获得了除 CPU 以外的所有资源),只等 CPU 调度即可运行。
    • 排队: 通常这些进程会排成一个“就绪队列”。
  3. 阻塞态 (Blocked / Waiting)
    • 定义: 进程因等待某些事件发生(如 I/O 操作完成、等待信号量、等待网络数据)而暂时无法运行。即使此时给它 CPU,它也无法执行。

二、 标准的“五态模型”

在三态的基础上,增加了进程的创建结束,构成了完整的生命周期。这是教科书中最常见的模型。

  1. 创建态 (New / Created)
    • 定义: 进程正在被创建中。操作系统正在为它分配资源(如内存)、初始化 PCB(进程控制块),但尚未将其放入就绪队列。
  2. 终止态 (Terminated / Exit)
    • 定义: 进程执行完毕或因错误被强制退出。操作系统正在回收该进程占用的资源,并注销 PCB。

五态之间的转换关系(关键):

  • New → Ready: 系统准许接纳该进程,将其放入就绪队列。
  • Ready → Running: 调度程序(Scheduler)选中该进程,分配 CPU 给它(进程调度)。
  • Running → Ready:
    • 时间片用完(Time Slice Exhausted)。
    • 被更高优先级的进程抢占。
  • Running → Blocked: 进程请求 I/O 或等待某事件(主动行为)。
  • Blocked → Ready: I/O 完成或等待的事件发生(被动行为,进程不能直接回到 Running,必须先回 Ready 排队)。
  • Running → Terminated: 进程执行结束或出现严重错误。

三、 完善的“七态模型”(引入“挂起”)

在实际系统中,内存资源是有限的。当内存不足时,操作系统会将某些进程从内存“交换”(Swap)到磁盘(外存)中,以腾出空间。这种状态称为挂起 (Suspend)

在五态基础上增加了两个状态:

  1. 就绪挂起 (Ready Suspended)
    • 定义: 进程在磁盘(外存)中,但只要被调回内存,就可以立即进入就绪队列等待 CPU。
    • 场景: 内存不足,或者系统认为该进程优先级较低,暂时移出内存。
  2. 阻塞挂起 (Blocked Suspended)
    • 定义: 进程在磁盘(外存)中,并且正在等待某事件。
    • 场景: 进程在等待 I/O 时,内存紧张,被系统移至磁盘。

挂起相关的转换:

  • Blocked → Blocked Suspended: 内存不足,将阻塞进程换出到磁盘。
  • Blocked Suspended → Ready Suspended: 进程在磁盘中等待的事件发生了(如 I/O 完成),但它还在磁盘里,所以变成了“就绪挂起”。
  • Ready Suspended → Ready: 内存有空闲了,或者该进程优先级变高,被系统“激活”调回内存。
  • Running → Ready Suspended: 极其罕见,通常是运行中的进程被高优先级抢占且内存极度紧张时直接挂起。

总结图解 (文字版)

plaintext
       (创建)        (调度)
[创建态] ---> [就绪态] --------> [运行态] ---> [终止态]
              ^  |   <--------     |
              |  |    (时间片完)   |
      (事件发生)|  |                 | (等待事件/I/O)
              |  v                 v
           [阻塞态] <-------------+

核心记忆点:

  • 只有就绪态和运行态可以相互转换(基于时间片或抢占)。
  • 只有运行态可以转为阻塞态(进程主动请求)。
  • 阻塞态只能转为就绪态(不能直接回运行态)。
右滑查看面试常问