当前位置: 首页 > 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.lryc.cn/news/585296.html

相关文章:

  • YS高容量通风器说明
  • BLE低功耗设计:从广播模式到连接参数优化的全链路分析与真题解析
  • 输入流挂起
  • 基于openEuler搭建Glusterfs集群实验
  • 2025企业官网黑链攻防实战:从紧急处置到长效防御体系构建
  • Python-异常、模块与包
  • 1Panel V1 无缝升级到 V2 版本 实现多个 PHP 网站共享一个容器
  • MySQL表的增删查改(下)(7)
  • 2025 年第十五届 APMCM 亚太地区大学生数学建模竞赛-B题 疾病的预测与大数据分析
  • 藏不住了,全是硬货!极空间快照,夸克网盘挂载,HDMI桌面输出全部安排!
  • 数据结构 之 【链式二叉树】(C语言实现二叉树的前序中序后序层序遍历,节点个数、树的高度、第K层的节点个数、查找、完全二叉树的判别、销毁创建二叉树)
  • 北京-4年功能测试2年空窗-报培训班学测开-第四十八天
  • 奇哥面试记:SpringBoot整合RabbitMQ与高级特性,一不小心吊打面试官
  • Ant ASpin自定义 indicator 报错
  • map数据结构在Golang中是无序的,并且键值对的查找效率较高的原因
  • 一些有意思的Python语法特性
  • pytorch的介绍以及张量的创建
  • 企业培训笔记:Vue3前端框架配置
  • mac电脑的usr/libexec目录是干什么的?
  • 怎么处理多源异构数据?搞不清楚就别谈数据融合!
  • Linux的基础I/O
  • PDF 转图助手 PDF2JPG 绿色版:免安装直接用,急处理文件的救急小天使
  • Genus:设计信息结构以及导航方式(路径种类)
  • 牛客 —— JZ22 链表中倒数最后k个结点
  • cesium添加原生MVT矢量瓦片方案
  • 云暴露面分析完整指南
  • 香港站群服务器8C/4C/2C/1C有什么区别
  • Elasticsearch混合搜索深度解析(上):问题发现与源码探索
  • C++11中的std::minmax与std::minmax_element:原理解析与实战
  • 12. 说一下 https 的加密过程