Appearance
进程状态与转换
考情分析
进程状态转换是进程管理的基础知识,408 选择题中经常出现「以下哪种状态转换是不可能的」这类题目。属于 🔥🔥 中高频考点。
进程从创建到消亡,并不是一路执行到底的。它会因为等 I/O 而暂停,因为被抢占而让出 CPU——理解这些状态切换,是理解整个进程管理的基础。
三状态模型
最基本的进程状态模型包含三种状态:
| 状态 | 说明 |
|---|---|
| 就绪(Ready) | 已获得除 CPU 外的所有资源,等待 CPU 分配 |
| 运行(Running) | 正在 CPU 上执行 |
| 阻塞(Blocked/Waiting) | 等待某事件发生(如 I/O 完成),即使给 CPU 也无法执行 |
五状态模型
在三状态基础上增加创建态和终止态:
状态转换及触发条件
| 转换 | 触发条件 | 由谁完成 |
|---|---|---|
| 创建→就绪 | 系统完成进程创建,分配好资源 | 操作系统 |
| 就绪→运行 | 调度程序选中该进程 | 调度程序 |
| 运行→就绪 | 时间片用完或被更高优先级进程抢占 | 操作系统/调度程序 |
| 运行→阻塞 | 进程主动请求等待事件(如 I/O、P操作) | 进程自身(主动行为) |
| 阻塞→就绪 | 等待的事件已发生(如 I/O 完成、V操作) | 操作系统 |
| 运行→终止 | 进程执行完毕或发生异常 | 进程自身/操作系统 |
易错
以下转换不可能发生(选择题高频陷阱):
- 就绪→阻塞:进程没在运行,无法发出 I/O 请求
- 阻塞→运行:必须先到就绪态,再被调度才能运行
- 终止→任何状态:进程已经结束
另一个常见错误:认为"运行→就绪"只有时间片用完一种情况。实际上抢占式调度中,更高优先级进程到达也会导致运行→就绪。
七状态模型(引入挂起)
在虚拟存储系统中,为了将进程从内存换出到外存(腾出内存空间),引入两种挂起状态:
| 状态 | 说明 |
|---|---|
| 挂起就绪(Ready Suspend) | 进程在外存中,但只要调入内存就可以运行 |
| 挂起阻塞(Blocked Suspend) | 进程在外存中,且正在等待某事件 |
挂起和阻塞容易混淆——阻塞是"我在等快递,干不了别的",挂起是"我被赶出办公室去走廊待着了"。一个是等事件,一个是被换出内存。
挂起(Suspend)和阻塞(Block)的区别:
| 比较 | 挂起 | 阻塞 |
|---|---|---|
| 原因 | 系统资源不足,被换出到外存 | 等待某事件完成 |
| 位置 | 进程映像在外存 | 进程映像在内存 |
| 恢复方式 | 被激活(换入内存) | 等待的事件完成 |
交互可视化
通过下方的交互动画,观察进程在不同状态之间的转换过程:
进程状态的组织
操作系统使用队列来组织处于不同状态的进程:
就绪队列: PCB₁ → PCB₃ → PCB₇ → null
阻塞队列: PCB₂ → PCB₅ → null(可按事件类型分多个队列)
运行指针: → PCB₄(单处理机只有一个)考研高频考点
- 🔥🔥🔥 哪些状态转换是合法的/不可能的(选择题必考)
- 🔥🔥🔥 运行→阻塞是进程主动行为,阻塞→就绪是被动行为
- 🔥🔥 五状态模型的各状态含义
- 🔥🔥 七状态模型中挂起和阻塞的区别
- 🔥 就绪态和阻塞态的本质区别(是否缺 CPU 以外的资源)
进程有了状态,但每次创建进程的开销都很大。有没有更轻量的执行单元?下一篇看线程如何解决这个问题。