
【Linux】操作系统上的进程状态及其转换
- 摘要
- 目录
-
- 一、操作系统上的进程状态
-
- [1. 图解](#1. 图解)
- [2. 操作系统进程管理核心](#2. 操作系统进程管理核心)
-
- [2.1 就绪状态](#2.1 就绪状态)
- [2.2 运行状态](#2.2 运行状态)
- [2.3 阻塞状态](#2.3 阻塞状态)
- [2.4 挂起状态](#2.4 挂起状态)
- 总结
摘要
本文深入探讨了操作系统中进程的核心概念------进程状态及其转换机制。文章通过图文并茂的方式,详细阐述了进程从创建到终止所经历的就绪、运行、阻塞和挂起等基本状态。重点剖析了每种状态的触发条件、底层管理原理(如PCB、运行队列、阻塞队列)以及它们之间的转换过程,旨在帮助读者清晰理解操作系统是如何通过精妙的状态管理来实现并发执行和高效的资源调配。
操作系统的认识详解----------》请点击(帮助我们更好的了解本文)
目录
一、操作系统上的进程状态
1. 图解

进程的执行状态

2. 操作系统进程管理核心
2.1 就绪状态
就绪就是进程已经具备运行的所有条件,只差一个CPU。
就像我们排队进行打比赛,我们已经换好了比赛的服装,热完身,但是裁判还没有喊我们上场------一但轮到我们,立刻开打。
2.2 运行状态

进程真正占用 CPU,正在执行指令。就像我们已经上场比赛,正在积极操作、输出技能。
- CPU运行队列与进程调度机制
在操作系统中,每一个CPU对应一个运行队列,这个运行队列的结构体中保存了两个指针,分别指向进程控制块(PCB)的队列和队尾。
实际上在运行队列中排队的并不是进程本身,而是进程的PCB。每个PCB内部又包含了指向这个进程的代码段和数据的指针。 因此,所谓的运行队列并不是所有的进程都在运行,而是表示这些进程已经准备好被调度器调度执行,即处于运行态(R态,Runing)。
- 调度与进程切换
调度器负责从运行队列中选择进程来运行。通常位于运行队列头部的进程会被优先调度到CPU上进行执行。
当一个进程运行一小段时间后(如时间片用完),调度器会将他从CPU上取下,放到运行队列的尾部,然后把下一个进程调度到CPU上。这种"进程上CPU运行,被取下,重新排队"的过程就叫做进程切换。
- 并发进行的本质
CPU的运行速度很快,通常以纳秒级为单位,以我们的电脑为例,我们可以同时打开QQ,微信,CSDN等多个应用。从我们人的感官来看,似乎这些程序在"同时运行",但实际上在单个的CPU上,同一时刻只能执行一个进程。
CPU通常告诉切换不同的进程,让每个进程都能在自己的时间片内运行。例如时间是10ms,CPU在这10ms内可能完成了数百万次命令的执行。由于切换速度远超人类的感知范围,我们就看到了"同时运行"的现象,这其实是CPU在不同进程之间快速轮流执行的结果------这就是并发执行的本质。
2.3 阻塞状态

在计算机系统中,硬件设备(外设)的种类繁多,如键盘、显示器、磁盘、打印机等,而操作系统为了作为软硬件资源的管理核心,负责协调和调度这些设备的使用,为了更高效的管理设备,操作系统采用了先描述再组织的管理策略。
- 设备的描述(设备控制块DCB)
操作系统为每一个设备创建了一个数据结构,用于描述设备的状态和控制信息,这个结构被称为设备控制块(Device Control Block,DCB)。
每个DCB对象描述一个设备;设备之间通过单链表或者其他的数据结构进行组织;操作系统可以通过遍历这个链表,对系统中的所有设备进行统一管理。
- 设备访问与进程阻塞
当一个进程需要访问某个外设(比如需要从键盘读取数据)时,操作系统会先检查该设备的状态。如果设备准备好,进程可以立即访问;如果设备没有准备好(比如用户还没有按按键),进程就无法执行,此时操作系统就会让该进程进入等待状态(阻塞状态)。
- 阻塞队列的形成
每个设备的DCB中都维护着一个指向等待该设备的进程队列指针。当进程等待设备时,它的PCB会被链接到对应设备的阻塞队列上。
设备DCB → PCB1 → PCB2 → PCB3 → ...第一个等待该设备的进程PCB被挂到DCB的队列头,后续等待的进程一次接在队列末尾,这个队列就被称为阻塞队列。
- 进程从阻塞态到就绪态
假如一个进程需要从键盘读取数据,但是键盘还没有输入的时候:操作系统就会发现键盘没有准备好,然后将该进程的PCB插入到键盘DCB的阻塞队列,调度器就会切换到其他就绪的进程。而当用户按下按下按键,设备就绪的时候,操作系统就会唤醒该进程,将PCB从阻塞队列移出并放入就绪队列。这就是进程从阻塞态----》就绪态
2.4 挂起状态

在操作系统中,当内存资源严重不足的时候,操作系统需要采取一系列的措施来确保程序的正常运行,保证系统的安全,稳定和高效性。其中进程的挂起(换出)和换入是应对内存不足的有效方法之一。
- 内存不足时的资源节省
操作系统作为软硬件资源的管理者,必须在资源紧张的时候采取措施。当系统内存不足的时候,为了避免系统崩溃或者程序异常,操作系统通过将某些进程的代码和数据从内存中换出(挂起),腾出内存空间,以保证其他重要进程活任务的正常执行。
- 进程的内存占用和阻塞状态
一个进程是一个程序的运行实例,有以下几部分组成:进程控制块(PCB),代码段,数据段。当多个进程同时运行的时候,系统内存会被大量占用,尤其是当这些进程存在较多的进程阻塞的时候,内存的消耗会更加的严重。
当进程需要访问外设但是外设没有准备好的时候(等待键盘的输入),进程会进入阻塞状态。这意味着进程无法继续执行,处于"等待"状态。阻塞状态的进程虽然占用了内存,但是不需要立刻执行,所以考虑将其换出到磁盘,从而释放内存的资源。
- 进程的换出与换入
换出:当操作系统内存严重不足的时候,他会将处于阻塞状态的进程从内存中移出,保存到磁盘的交换区,这个过程叫做换出或者进程挂起。
阻塞进程的代码和数据会被移动到磁盘上,而PCB会被继续保留在内存中,用于记录进程的等待状态和回复信号;磁盘的空间相对内存来说更大,可以容纳更多的进程,而磁盘的访问速度比虽然比内存慢,但在内存资源紧张的时候。换出是一种折中方案。
当外设就绪,阻塞的进程就可以继续执行了,操作系统就会从磁盘的交换区将该进程的代码和数据换回内存,这个过程就是换入。这样进程的状态就变成了就绪,并被加入到CPU的运行对列,换入后的进程可以再次执行,读取外设的数据,回复正常运行。
- 换入和换出的触发条件
通常发生在内存资源严重不足的时候。
其他条件:
- 开发人员调试需求:在某些调试场景中,进程可能被手动挂起,等待调试或恢复。
- 统管理操作:管理员可以根据系统的优先级策略或资源管理需要,挂起低优先级进程。
- 进程优先级策略:操作系统根据进程的优先级来决定哪些进程需要挂起,哪些进程优先执行。
总结
综上所述,进程状态的管理是操作系统实现多任务并发与资源高效利用的核心机制。通过就绪、运行、阻塞和挂起等状态的精妙转换,操作系统能够合理地调度CPU时间、响应外部设备请求,并在内存紧张时进行空间置换。理解这些状态及其背后的PCB、队列和调度器原理,不仅能揭示并发执行的本质,也为我们深入学习系统性能优化与底层开发奠定了坚实的基础。
✨ 坚持用 清晰易懂的图解 + 代码语言, 让每个知识点都 简单直观 !
🚀 个人主页 :不呆头 · CSDN
🌱 代码仓库 :不呆头 · Gitee
📌 专栏系列 :
💬 座右铭 : "不患无位,患所以立。"