操作系统中的进程在其生命周期中会经历多种状态,常见的状态包括以下五种基本类型,部分系统可能在此基础上扩展(如挂起状态):
1. 新建状态(New)
- 描述:进程正在被创建,操作系统为其分配资源(如内存、PID等),但尚未完成初始化。
- 转换:创建完成后进入就绪状态。
2. 就绪状态(Ready)
- 描述:进程已准备好运行,具备所需资源(除CPU外),等待被调度器分配CPU时间片。
- 转换:
- 被调度选中 → 运行状态。
- 若被挂起(如内存不足) → 就绪挂起状态(扩展状态)。
3. 运行状态(Running)
- 描述:进程正在CPU上执行指令。
- 转换:
- 时间片用完或被更高优先级进程抢占 → 就绪状态。
- 需要等待事件(如I/O) → 阻塞/等待状态。
- 执行完毕或被终止 → 终止状态。
4. 阻塞/等待状态(Blocked/Waiting)
- 描述:进程因等待外部事件(如I/O完成、信号量释放)而暂停运行,主动让出CPU。
- 转换:
- 等待的事件完成 → 就绪状态。
- 若被挂起 → 阻塞挂起状态(扩展状态)。
5. 终止状态(Terminated)
- 描述:进程执行完毕或异常终止,操作系统回收其资源(内存、文件句柄等),但进程控制块(PCB)可能暂存以供父进程查询。
- 转换:无后续状态,最终由系统清理。
扩展状态(挂起模型)
某些系统引入挂起状态以优化资源使用:
- 就绪挂起(Ready Suspended):进程在就绪状态被换出到外存,需换入内存后才能运行。
- 阻塞挂起(Blocked Suspended):进程在阻塞状态被换出到外存,事件完成后需先换入内存再转为就绪。
状态转换示意图
新建 → 就绪 ↔ 运行 ↔ 阻塞 → 终止
↑↓挂起 ↑
就绪挂起 ↔ 阻塞挂起
关键点
- 核心状态:就绪、运行、阻塞(三状态模型)。
- 完整生命周期:新建、就绪、运行、阻塞、终止(五状态模型)。
- 挂起状态:用于处理内存紧张或交互式系统的进程调度优化。
不同操作系统的具体实现可能略有差异(如Linux中的TASK_INTERRUPTIBLE等),但核心逻辑一致。