Appearance
408
操作系统
进程状态与状态转换(五状态/七状态模型)
一、定位信息
- 所属圈层:核心层
- 前置知识:了解进程和PCB的概念(OS-02-01)
- 知识网络位置:进程状态是理解进程调度(OS-02-06)和进程控制(OS-02-03)的基础,状态转换图是OS考试的高频图形题
- 考点热度等级:H级(高频重点)——近5年选择题和综合题出现≥4次
二、知识点讲解
2.1 五状态模型
进程在其生命周期中经历五种基本状态:
| 状态 | 含义 | 说明 |
|---|---|---|
| 创建(New) | 进程正在被创建 | OS分配PCB、初始化资源 |
| 就绪(Ready) | 已获得除CPU外的所有资源,等待CPU | 在就绪队列中排队 |
| 运行(Running) | 正在CPU上执行 | 单CPU系统中最多一个进程处于运行态 |
| 阻塞(Waiting/Blocked) | 因等待某事件(如I/O完成)而暂停 | 不在就绪队列中,即使CPU空闲也不会被调度 |
| 终止(Terminated) | 进程执行完毕或被终止 | OS回收资源,保留PCB供父进程读取 |
2.2 五状态转换图
状态转换关系:
创建 → 就绪 → 运行 → 终止
↑ ↕ ↓
└── 阻塞 ←┘关键转换:
- 就绪→运行:被调度器选中,获得CPU(调度)
- 运行→就绪:时间片用完或被高优先级进程抢占(时间片到/抢占)
- 运行→阻塞:进程主动请求等待某事件(如发起I/O请求)(主动行为)
- 阻塞→就绪:等待的事件发生(如I/O完成)(被动行为,由中断触发)
重要注意:阻塞→就绪是被动的(事件发生后由OS完成),运行→阻塞是主动的(进程自己发起的请求)。没有"阻塞→运行"的直接转换!
2.3 七状态模型
引入**挂起(Suspend)**状态后,五状态扩展为七状态。挂起是将进程从内存换出到外存(磁盘),以节省内存空间。
| 新增状态 | 含义 | 说明 |
|---|---|---|
| 就绪挂起(Ready Suspend) | 在外存中等待被调入内存 | 被挂起的就绪进程 |
| 阻塞挂起(Blocked Suspend) | 在外存中等待事件完成 | 被挂起的阻塞进程 |
七状态的完整转换增加了:
- 就绪→就绪挂起(挂起就绪进程到外存)
- 阻塞→阻塞挂起(挂起阻塞进程到外存)
- 阻塞挂起→就绪挂起(事件在外存中发生)
- 就绪挂起→就绪(从外存调入内存)
2.4 五状态 vs 七状态对比
| 维度 | 五状态模型 | 七状态模型 |
|---|---|---|
| 内存管理 | 所有就绪/阻塞进程都在内存中 | 支持将进程换出到外存 |
| 挂起状态 | 无 | 有(就绪挂起、阻塞挂起) |
| 内存利用率 | 较低(进程都在内存中) | 较高(不活跃进程换出外存) |
| 虚拟内存支持 | 不支持 | 支持 |
| 复杂度 | 简单 | 较复杂 |
| 考试重点 | 重点掌握 | 了解即可 |
三、记忆与理解辅助
- 口诀记忆状态转换:"创就运阻终,就运互转靠调度,运阻主动是请求,阻就被动是事件"
- 关键易错点:没有"阻塞→运行"的直接转换!阻塞进程必须先变为就绪,再被调度才能运行
- 区分主动与被动:运行→阻塞(主动,进程自己请求),阻塞→就绪(被动,事件发生后OS完成)
- 挂起一句话:挂起=换出到外存,是为了节省内存空间
四、例题与精解
例题1(基础巩固)
题目:在进程状态转换中,下列转换一定不能发生的是( )
A. 就绪→运行 B. 运行→阻塞 C. 阻塞→运行 D. 运行→就绪
命题意图:考查进程状态转换的合法性。
精解:
- 审题分析:题目要求选出"一定不能发生"的转换
- 解题思路:回忆状态转换图,逐项检查每个转换是否存在
- 完整步骤:
- A选项:就绪→运行,这是调度器选中进程的正常转换,可以发生
- B选项:运行→阻塞,进程主动请求I/O等待时发生,可以发生
- C选项:阻塞→运行,不可能发生。阻塞进程必须先变为就绪态(等待的事件完成),进入就绪队列,然后被调度器选中才能变为运行态。没有从阻塞直接到运行的转换
- D选项:运行→就绪,时间片用完或被抢占时发生,可以发生
- 方法反思:状态转换图中"阻塞→就绪→运行"是固定路径,不能跳过就绪态
答案:C
例题2(中等提升)
题目:某进程请求I/O操作后,其状态将从( )转变为( )。当I/O操作完成后,该进程的状态将从( )转变为( )。
A. 运行→阻塞,阻塞→就绪 B. 就绪→阻塞,阻塞→就绪 C. 运行→就绪,就绪→运行 D. 运行→阻塞,阻塞→运行
命题意图:考查I/O操作引起的进程状态转换。
精解:
- 审题分析:进程请求I/O→需要等待→I/O完成后恢复
- 解题思路:请求I/O是进程主动行为(运行→阻塞),I/O完成是被动事件(阻塞→就绪)
- 完整步骤:
- 请求I/O时:进程正在运行,主动请求等待I/O,状态从运行→阻塞
- I/O完成后:等待的事件(I/O完成)发生了,状态从阻塞→就绪
- 注意:I/O完成后进程变为就绪态而非运行态,因为CPU可能被其他进程占用
- A选项正确描述了这两个转换
- D选项的第二个转换"阻塞→运行"是不存在的
- 方法反思:记住"阻塞不能直接到运行",必须经过就绪态
答案:A
五、考情分析
- 考查频次:近5年约4–5次
- 常见题型:选择题,偶尔在综合题中出现
- 分值占比:2分/题(选择题)
- 命题趋势:状态转换的合法性判断是经典题型,近年倾向于在具体场景下判断状态转换方向
六、易错点提醒
错误表现:认为存在"阻塞→运行"的直接转换 错误原因:想当然地认为事件发生后阻塞进程可以直接获得CPU 正确理解:阻塞进程必须先变为就绪态(进入就绪队列),再被调度才能运行
错误表现:认为"运行→阻塞"是被动的 错误原因:混淆了主动和被动的概念 正确理解:运行→阻塞是进程主动发起的(如请求I/O),阻塞→就绪才是被动的(由事件触发)
错误表现:将七状态模型中的挂起状态等同于阻塞状态 错误原因:两者都是"暂停等待" 正确理解:阻塞进程在内存中等待事件,挂起进程在外存中。挂起可能是就绪挂起(不等事件)或阻塞挂起(等事件)
错误表现:认为时间片用完后进程进入阻塞态 错误原因:混淆了"时间片到"和"I/O等待" 正确理解:时间片用完→运行→就绪(不是阻塞)。阻塞是因为进程主动等待某事件
七、来源标注
- 依据2026考研统考408大纲
- 依据《计算机操作系统》(汤小丹/汤子瀛版)第3章
- 依据《操作系统概念》(Silberschatz版)第3章