考点频率:★★★★★(几乎必考1-2题)
难度:⭐
建议:熟练画出三态模型转换图,掌握五态模型中新增状态的转换条件
1️⃣ 为什么进程需要状态?
进程在执行过程中,会因CPU调度、I/O请求、资源等待等原因,在不同状态之间切换。操作系统通过记录进程的状态,来决定下一步对其采取什么操作(比如分配CPU、等待资源等)。进程状态是操作系统进行进程调度和资源分配的重要依据。就好比工厂里的订单有“待处理”、“处理中”、“已发货”等状态,以便统筹安排。
2️⃣ 三态模型(最基本的模型)
三态模型将进程分为三种基本状态,它们是进程生命周期的核心。几乎所有操作系统教材都从这里开始讲起。
| 状态 | 说明 | 典型场景 |
|---|---|---|
| 就绪(Ready) | 进程已获得除CPU外的所有资源,等待CPU调度 | 刚被创建、时间片用完被换下 |
| 运行(Running) | 进程正在CPU上执行指令 | 被调度选中 |
| 阻塞(Blocked/Waiting) | 进程因等待某事件(如I/O完成)而暂停执行 | 等待键盘输入、等待磁盘读写完成 |
三态转换图(文字描述)
┌─────────────────────┐ │ ↓ ┌─────┴─────┐ ┌─────┴─────┐ │ 就绪 │────────│ 运行 │ │ (Ready) │ 调度 │ (Running) │ └─────┬─────┘ └─────┬─────┘ │ │ │ 释放CPU │ 等待I/O │ (时间片完/抢占) │ (资源不足) │ ↓ │ ┌─────┴─────┐ └───────────────│ 阻塞 │ 事件发生 │ (Blocked) │ (I/O完成) └───────────┘四种状态转换(重点记箭头)
| 转换 | 方向 | 触发条件 | 说明 |
|---|---|---|---|
| 就绪 → 运行 | 就绪 → 运行 | 进程被调度程序选中 | 由调度算法决定(如时间片轮转、优先级) |
| 运行 → 就绪 | 运行 → 就绪 | 时间片用完 / 被高优先级进程抢占 | 当前进程让出CPU,回到就绪队列末尾(或按优先级插入) |
| 运行 → 阻塞 | 运行 → 阻塞 | 请求I/O / 等待事件(如wait、信号量) | 进程主动放弃CPU,去等待某种资源或事件 |
| 阻塞 → 就绪 | 阻塞 → 就绪 | I/O完成 / 等待的事件发生 | 进程获得了所需资源,回到就绪队列等待调度 |
⚠️不能直接转换的状态:
- 阻塞 → 运行(阻塞的进程不能直接获得CPU,必须先转为就绪)
- 就绪 → 阻塞(就绪进程没有占用CPU,无法主动请求I/O)
3️⃣ 五态模型(更完整的模型)
三态模型缺少对“进程被创建但尚未加载”和“进程已终止但尚未回收”这两个阶段的描述,五态模型在此基础上补充了新建态和终止态,让进程的生命周期描述更加完整。五态模型比三态模型多了两个状态,常用于考察进程从生到死的完整过程。
| 新增状态 | 说明 |
|---|---|
| 新建(New) | 进程正在被创建,尚未加载到内存(如fork()后、exec()之前),操作系统还在为它分配资源、建立PCB。 |
| 终止(Terminated) | 进程已结束执行(调用了exit或收到终止信号),但PCB尚未被回收(僵尸状态),等待父进程读取退出状态后由操作系统回收资源。 |
五态模型的状态转换
新建 ────→ 就绪 ────→ 运行 ────→ 终止 ↑↑ │ ↓ ││ │ 等待I/O ││ ↓ ││ 阻塞 │└─────────┘ │ 事件发生 └──────────┘新增转换:
- 新建 → 就绪:操作系统完成进程创建,将其放入就绪队列
- 运行 → 终止:进程执行完毕或发生致命错误
- 阻塞 → 就绪:等待的事件发生(同三态)
- 就绪 → 运行:被调度器选中(同三态)
- 运行 → 就绪:时间片完或被抢占(同三态)
- 运行 → 阻塞:请求I/O(同三态)
4️⃣ 三态 vs 五态对比表
| 对比项 | 三态模型 | 五态模型 |
|---|---|---|
| 状态数 | 3种 | 5种 |
| 缺少的状态 | 无新建/终止 | 包含完整生命周期 |
| 适用场景 | 简化理解、进程调度核心 | 完整描述进程从创建到消亡 |
| 考查重点 | 四种转换关系 | 新增状态的含义 |
5️⃣ 常见考点与易错点
- 进程状态转换由谁控制:调度是操作系统内核完成的,不是进程自己随意跳转。
- 运行→阻塞一定是进程主动:因为请求I/O等操作是进程自己发起的(通过系统调用),所以是进程主动行为。
- 阻塞→就绪是被动行为:由I/O中断或事件完成唤醒,进程被操作系统移回就绪队列,是被动的。
- 新建态和终止态可能不在内存中:新建时PCB在创建但进程映像可能尚未加载;终止时进程映像已被回收但PCB残留。
6️⃣ 经典例题
例题1:某进程从运行状态变为阻塞状态的原因可能是( )。
A. 时间片用完
B. 被更高优先级进程抢占
C. 请求I/O操作
D. 进程调度程序选中了该进程
解析:A和B会导致运行→就绪,D是就绪→运行,只有C(请求I/O)会导致运行→阻塞。选C。
例题2:在三态模型中,一个进程从阻塞状态变为就绪状态,通常是由( )触发的。
A. 调度程序
B. 该进程主动请求
C. 等待的事件发生(如I/O完成)
D. 时间片用完
解析:阻塞→就绪是被动转换,由等待的事件完成(如I/O中断)触发。选C。
例题3:下列进程状态转换中,不可能发生的是( )。
A. 就绪→运行
B. 运行→就绪
C. 阻塞→运行
D. 运行→阻塞
解析:阻塞→运行不可能,必须先经过阻塞→就绪,再就绪→运行。选C。
例题4(五态模型):五态模型中,进程处于“新建态”时,以下描述正确的是( )。
A. 进程正在CPU上执行
B. 进程正在等待I/O操作完成
C. 进程的PCB正在被创建,但尚未进入就绪队列
D. 进程已执行完毕,等待父进程回收
7️⃣ 记忆口诀
就绪等待CPU,运行指令正执行。
阻塞等待I/O完,三种状态要分清。
新建终止补两态,完整生命周期明。
状态转换速记:
- 就绪→运行:被调度
- 运行→就绪:时间到/被抢
- 运行→阻塞:等I/O
- 阻塞→就绪:I/O完
8️⃣ 小测验(评论区对答案)
某进程正在执行,此时发生了一个时钟中断,该进程的状态转换是( )。
A. 运行→就绪
B. 运行→阻塞
C. 就绪→运行
D. 阻塞→就绪
🔔本专栏日更2篇,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容
#软考中级 #软件设计师 #进程状态 #三态模型 #五态模型 #操作系统