当前位置: 首页 > news >正文

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

前言:

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

目录

一、进程状态分类

二、状态转换流程

(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的实现更简化,但核心逻辑(就绪、运行、阻塞)保持一致。

http://www.dtcms.com/a/275267.html

相关文章:

  • 智能文本抽取在合同管理实战应用
  • 人事系统选型与应用全攻略:从痛点解决到效率跃升的实战指南
  • Datawhale AI夏令营:基于带货视频评论的用户洞察挑战赛上分全攻略
  • 自动驾驶线控系统与动力电池系统
  • 【天坑记录】cursor jsx文件保存时错误格式化了
  • K230摄像头配置与显示配置误解:而这根本没关系
  • 【驱动】移植CH340驱动,设置 udev 规则,解决和 BRLTTY 的冲突
  • 软件测试面试200问(附30W字面试文档)
  • 跟着Carl学算法--二叉树【3】
  • 静态路由技术
  • DeepSeek模型分析及其在AI辅助蛋白质工程中的应用-文献精读148
  • [electron]升级功能
  • CSS Grid布局和Flexbox有什么区别?
  • C语言文件读写操作详解:fgetc与feof函数的应用
  • 经典同步问题详解
  • 使用 lstrip() 和 rstrip() 方法
  • java集合类
  • 【牛客刷题】吃糖果----糖果甜度问题(贪心策略详解)
  • 机器学习详解
  • Windows删除文件或者拔出U盘显示正在使用/占用解决办法
  • Android tombstones memory map分析
  • HarmonyOS从入门到精通:动画设计与实现之四 - 转场动画设计与流畅交互体验
  • 优选算法 --(双指针算法 1~8)
  • The Practice of Programming
  • 深入解码 Docker 镜像与容器的奇妙世界
  • 小车循迹功能的实现(第六天)
  • 自由学习记录(68)
  • C#事件:从原理到实践的深度剖析
  • 数据结构 顺序表(3)---顺序表的应用
  • 网安学习NO.14