进程有哪些状态?
在操作系统中,进程的状态描述了进程在生命周期中当前所处的阶段。根据操作系统的复杂程度,通常分为三态模型、五态模型(最常用)和七态模型(包含挂起)。
以下是详细的解释:
一、 最基本的“三态模型”
这是描述进程调度最核心的三个状态:
- 运行态 (Running)
- 定义: 进程占有 CPU,并在 CPU 上执行指令。
- 注意: 在单核系统中,同一时刻只有一个进程处于运行态;在多核系统中,可以有多个。
- 就绪态 (Ready)
- 定义: 进程已经具备运行条件(获得了除 CPU 以外的所有资源),只等 CPU 调度即可运行。
- 排队: 通常这些进程会排成一个“就绪队列”。
- 阻塞态 (Blocked / Waiting)
- 定义: 进程因等待某些事件发生(如 I/O 操作完成、等待信号量、等待网络数据)而暂时无法运行。即使此时给它 CPU,它也无法执行。
二、 标准的“五态模型”
在三态的基础上,增加了进程的创建和结束,构成了完整的生命周期。这是教科书中最常见的模型。
- 创建态 (New / Created)
- 定义: 进程正在被创建中。操作系统正在为它分配资源(如内存)、初始化 PCB(进程控制块),但尚未将其放入就绪队列。
- 终止态 (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)。
在五态基础上增加了两个状态:
- 就绪挂起 (Ready Suspended)
- 定义: 进程在磁盘(外存)中,但只要被调回内存,就可以立即进入就绪队列等待 CPU。
- 场景: 内存不足,或者系统认为该进程优先级较低,暂时移出内存。
- 阻塞挂起 (Blocked Suspended)
- 定义: 进程在磁盘(外存)中,并且正在等待某事件。
- 场景: 进程在等待 I/O 时,内存紧张,被系统移至磁盘。
挂起相关的转换:
- Blocked → Blocked Suspended: 内存不足,将阻塞进程换出到磁盘。
- Blocked Suspended → Ready Suspended: 进程在磁盘中等待的事件发生了(如 I/O 完成),但它还在磁盘里,所以变成了“就绪挂起”。
- Ready Suspended → Ready: 内存有空闲了,或者该进程优先级变高,被系统“激活”调回内存。
- Running → Ready Suspended: 极其罕见,通常是运行中的进程被高优先级抢占且内存极度紧张时直接挂起。
总结图解 (文字版)
plaintext
(创建) (调度)
[创建态] ---> [就绪态] --------> [运行态] ---> [终止态]
^ | <-------- |
| | (时间片完) |
(事件发生)| | | (等待事件/I/O)
| v v
[阻塞态] <-------------+
核心记忆点:
- 只有就绪态和运行态可以相互转换(基于时间片或抢占)。
- 只有运行态可以转为阻塞态(进程主动请求)。
- 阻塞态只能转为就绪态(不能直接回运行态)。
右滑查看面试常问