从就绪到终止:操作系统进程状态转换指南

前言:

在操作系统的核心机制中,进程管理是至关重要的组成部分。进程在其生命周期中会经历多种状态的变化,如创建、就绪、运行、阻塞、挂起和终止等。理解这些状态及其转换关系,不仅有助于掌握操作系统的调度原理,也能为系统性能优化、进程调试和并发程序设计提供理论基础。

目录

一、进程状态分类

二、状态转换流程

(1)从创建到就绪

(2)就绪与运行的转换

(3)运行到阻塞

(4)阻塞到就绪

(5)挂起状态的转换

(6)终止

三、关键转换场景

四、与Linux实际状态的对比

五、总结


进程状态转换模型,通常出现在操作系统理论中,用于说明进程在其生命周期中的状态变化:

一、进程状态分类

图中涉及的主要状态包括:

  1. **创建状态(New):**进程刚被创建,尚未进入就绪队列。

  2. **就绪状态(Ready):**进程已准备好运行,等待CPU调度。

  3. **运行状态(Running):**进程正在CPU上执行。

  4. **阻塞状态(Blocked/Waiting):**进程因等待某事件(如I/O完成)而暂停运行。

  5. **挂起状态(Suspended):**进程被移到外存(Swap),暂时不参与调度(可能是就绪挂起或阻塞挂起)。

  6. **结束状态(Terminated):**进程执行完毕或被终止。


二、状态转换流程

(1)从创建到就绪

  • 创建状态 → 就绪状态

    进程初始化完成后,进入就绪队列等待调度。

(2)就绪与运行的转换

  • 就绪状态 → 运行状态

    被CPU调度器选中,开始执行。

  • 运行状态 → 就绪状态

    • 时间片用完:进程未执行完,但CPU时间片耗尽,重新放回就绪队列。

    • 被更高优先级进程抢占:调度器强制切换进程。

(3)运行到阻塞

  • 运行状态 → 阻塞状态

    进程主动等待某事件(如读取磁盘数据),主动让出CPU。

(4)阻塞到就绪

  • 阻塞状态 → 就绪状态

    等待的事件完成(如I/O操作结束),进程重新具备运行条件。

(5)挂起状态的转换

  • 就绪状态 ↔ 就绪挂起状态

    • 挂起:系统资源不足时,将就绪进程移到外存(暂停调度)。

    • 激活:资源恢复时,重新调入内存。

  • 阻塞状态 ↔ 阻塞挂起状态

    • 挂起:即使进程在等待事件,也可能被换出到外存。

    • 激活:事件完成后,需先回到内存的阻塞队列。

(6)终止

  • 运行状态 → 结束状态

    进程正常结束或被强制终止(如kill -9)。


三、关键转换场景

转换 触发条件
就绪 → 运行 CPU调度器选择该进程执行。
运行 → 就绪 时间片用完或被更高优先级进程抢占。
运行 → 阻塞 进程主动等待I/O、信号量等事件(如read()系统调用)。
阻塞 → 就绪 等待的事件完成(如磁盘数据就绪)。
就绪 ↔ 就绪挂起 系统内存不足时挂起,资源充足时激活。
阻塞 ↔ 阻塞挂起 即使进程在等待,也可能被挂起以释放内存(需等待事件完成才能激活)。

四、与Linux实际状态的对比

后面将要讲解的Linux中的进程状态(如RSDTZ)是此模型的具体实现:

  • 就绪状态TASK_RUNNINGR)。

  • 阻塞状态TASK_INTERRUPTIBLES)或 TASK_UNINTERRUPTIBLED)。

  • 挂起状态 → 部分情况对应TASK_STOPPEDT),或通过Swap机制实现。


五、总结

  • 该图是通用操作系统的进程状态机模型,适用于理论分析。

  • 挂起状态 是资源管理的优化手段**(缓解内存压力)**。

  • Linux的实现更简化,但核心逻辑(就绪、运行、阻塞)保持一致。