news 2026/5/6 17:45:30

进程状态与转换详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
进程状态与转换详解

进程是操作系统进行资源分配和调度的基本单位,其生命周期由一系列状态及状态间的转换构成 。理解这些状态及其转换是掌握进程管理的关键。常见的描述模型包括三态、五态和七态模型。

一、核心状态模型

1. 三态模型

三态模型是描述进程状态最基本、最核心的模型,包括运行态、就绪态和阻塞态(也称等待态)。

状态描述示例
运行态进程已获得CPU,其指令正在处理器上执行。一个正在计算圆周率的程序。
就绪态进程已具备运行所需的所有条件(除CPU外),等待被调度器选中。多个后台任务等待CPU时间片。
阻塞态进程因等待某个事件(如I/O完成、信号量)而暂停执行,即使CPU空闲也无法运行。程序等待用户键盘输入。

2. 五态模型

五态模型在三态基础上增加了新建态终止态,更完整地描述了进程的生命周期 。

状态描述触发条件示例
新建态进程刚被创建,操作系统正为其分配资源(如PID、内存)。用户双击程序图标或命令行输入命令。
终止态进程已结束运行,操作系统正回收其占用的资源。程序执行完毕或收到终止信号。

3. 七态模型

七态模型在五态模型基础上引入了挂起概念,以解决内存资源紧张的问题。挂起态进程的映像被交换到外存(二级存储器)。

  • 挂起就绪态:进程在外存中,但已具备运行条件。
  • 挂起阻塞态:进程在外存中,并正在等待某个事件。

二、状态转换详解

状态间的转换由特定事件触发,以下是主要转换路径及原因。

1. 基本转换(三态模型内)

graph LR A[就绪态] -- 被调度器选中 --> B[运行态] B -- 时间片用完/被更高优先级进程抢占 --> A B -- 等待I/O/信号等事件 --> C[阻塞态] C -- 等待的事件发生 --> A
  • 就绪态 -> 运行态:进程被操作系统的调度程序选中,获得CPU使用权 。
  • 运行态 -> 就绪态:通常因为时间片耗尽,或被更高优先级的就绪进程抢占 。
  • 运行态 -> 阻塞态:进程主动请求并等待系统资源或事件,如进行I/O操作、申请互斥锁失败、等待子进程结束等 。
  • 阻塞态 -> 就绪态:进程所等待的事件已发生(如I/O完成、收到信号),重新具备了运行资格 。

2. 生命周期起止转换

  • 新建态 -> 就绪态:操作系统完成进程创建和资源分配,将其加入就绪队列,等待调度 。
  • 运行态 -> 终止态:进程执行完毕或被强制终止(如发生致命错误、被用户杀死)。进入终止态后,操作系统进行资源回收等善后工作。

3. 挂起相关转换

挂起通常由操作系统或用户(父进程)发起,目的是腾出内存

  • 就绪态 -> 挂起就绪态:操作系统需要释放内存,将暂时不会运行的进程换出。
  • 阻塞态 -> 挂起阻塞态:同样为释放内存,将处于长期等待的进程换出。
  • 挂起就绪态 -> 就绪态:当内存有足够空闲,且需要激活该进程时,将其映像换入内存。
  • 挂起阻塞态 -> 阻塞态:进程被换入内存,但其等待的事件仍未发生,故转为阻塞态。
  • 运行态 -> 挂起就绪态(直接):一个运行中的进程也可能被挂起,这通常发生在交互式系统中用户主动挂起前台进程时。

三、应用实例与系统视角

在Linux系统中,可以使用ps aux命令查看进程状态,常见状态字母包括:

  • R (Running):运行或就绪。
  • S (Sleeping):可中断的休眠(阻塞)。
  • D (Disk Sleep):不可中断的休眠(通常与磁盘I/O相关,深度阻塞)。
  • T (Stopped):暂停状态(如收到SIGSTOP信号)。
  • Z (Zombie):僵尸态,进程已终止但资源未完全回收 。

状态转换的意义在于,它使得操作系统能够通过有限的CPU资源,让多个进程并发执行,提高系统利用率。调度器根据状态和策略决定哪个就绪进程获得CPU;当进程阻塞时,CPU可立即切换到其他就绪进程,避免空闲等待 。挂起机制则通过平衡内存与CPU的负载,进一步提升系统整体性能和资源管理效率。


参考来源

  • 进程的状态转换详解
  • 操作系统之进程的状态和转换详解
  • 操作系统之进程的状态和转换详解
  • 操作系统之进程的状态和转换详解
  • 【操作系统】进程的状态及转换
  • 【进程与线程】进程的状态
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/6 17:44:31

W3x2lni如何解决魔兽争霸III地图格式兼容性难题?

W3x2lni如何解决魔兽争霸III地图格式兼容性难题? 【免费下载链接】w3x2lni 魔兽地图格式转换工具 项目地址: https://gitcode.com/gh_mirrors/w3/w3x2lni 魔兽争霸III地图开发者面临的最大挑战之一就是地图文件在不同编辑器、版本和发布平台之间的格式兼容性…

作者头像 李华
网站建设 2026/5/6 17:40:49

MCP工具池:标准化AI工具调用,提升智能体开发效率

1. 项目概述:一个为AI应用设计的“工具池”最近在折腾AI应用开发,特别是围绕OpenAI的Assistant API或者一些开源框架构建智能体时,一个绕不开的痛点就是工具调用。Assistant可以很聪明地规划任务,但最终执行具体操作——比如查天气…

作者头像 李华
网站建设 2026/5/6 17:37:29

揭秘Windows 11系统瘦身:告别卡顿,重获流畅体验

揭秘Windows 11系统瘦身:告别卡顿,重获流畅体验 【免费下载链接】windows-11-debloat Script to optimize your installation of Windows 11. 项目地址: https://gitcode.com/gh_mirrors/wi/windows-11-debloat 还在为Windows 11的臃肿而烦恼吗&a…

作者头像 李华
网站建设 2026/5/6 17:33:35

35.人工智能实战:大模型队列积压怎么排查?从 Redis Queue 到优先级队列、超时丢弃与削峰填谷方案

人工智能实战:大模型队列积压怎么排查?从 Redis Queue 到优先级队列、超时丢弃与削峰填谷方案 一、问题场景:接口没报错,但用户一直在排队 大模型服务上线后,很多团队都会加队列。 初衷很简单: 高峰流量来了,不要直接打爆 GPU。架构通常是: Client↓ API↓ Redis Q…

作者头像 李华
网站建设 2026/5/6 17:32:29

新手别纠结!Qt项目到底用qmake还是CMake?一个实际项目对比告诉你答案

Qt项目构建工具选择:qmake与CMake实战对比指南 引言 刚接触Qt开发的程序员常常会面临一个看似简单却令人纠结的问题:到底该用qmake还是CMake来构建项目?这个问题在技术论坛和开发者社区中被反复讨论,但大多数回答要么过于理论化&a…

作者头像 李华