进程组成和状态

1.进程组成和状态

1.1. 进程的组成

您提到的三个部分是逻辑上进程必不可少的组成部分:

  • 进程控制块 (PCB)唯一标志,操作系统的"管理控制中心"。
  • 程序段描述进程要做什么,即可执行的代码。
  • 数据段存放进程执行时所需数据,包括初始数据、工作区和堆等。

补充:在实际的内存布局中,数据段通常还会细分为:

  • 初始化数据区(如全局变量)
  • 未初始化数据区(BSS段)
  • (动态增长)
  • 用户栈(函数调用、局部变量),它虽属于"数据",但在管理上和作用上非常独特。

1.2. 进程的状态

您的"三态图"和"五态图"是理解进程生命周期的核心。我们来清晰地展示和解释它们。

三态图(最基本、最核心的模型)

这个模型只关注进程与CPU自身运行条件的关系。
调度 时间片到/被抢占 等待事件(如I/O) 事件发生 就绪 运行 阻塞

三态解析

  1. 运行:占用CPU。
  2. 就绪:万事俱备,只欠CPU。
  3. 阻塞:欠缺某种条件(非CPU,也欠CPU),即使给CPU也无法运行。

关键:所有复杂的多状态模型,都是在这个"就绪-运行-阻塞"铁三角的基础上扩展而来的。


五态图(更完整的生命周期模型)

在三态的基础上,增加了进程的"诞生"与"死亡",以及因资源管理 (尤其是内存紧张)而产生的挂起状态。
创建 接纳 调度 时间片到/被抢占 等待事件 事件发生 结束/异常终止 内存紧张/主动挂起 激活 (事件发生且被激活) 内存紧张 激活 新建 就绪 运行 阻塞 终止 挂起阻塞 挂起就绪

五态解析(新建、就绪、运行、阻塞、终止)及挂起

  • 新建:PCB已创建,但资源未完全就绪,尚未进入就绪队列。
  • 终止:进程结束,资源待回收,PCB信息可能被保留以供父进程查询。
  • 挂起 :这是一个非常重要的非活动 状态。
    • 目的 :将暂时不运行的进程的完整映像(程序+数据)从内存移到外存,以释放宝贵的内存资源。
    • 挂起就绪:进程在外存,但只要调入内存即可运行。
    • 挂起阻塞:进程在外存,并且等待某个事件。即使事件发生,也需先被"激活"调入内存,才能转为就绪状态。

为什么从三态发展到五态(及更多)?

模型 关注点 解决的问题
三态模型 CPU调度 如何公平、高效地在多个进程间分配CPU时间。
五态模型 CPU调度 + 完整生命周期 + 内存管理 1. 描述进程从创建到消亡的全过程。 2. 引入了"挂起"来处理内存资源不足的问题,使系统能在有限物理内存下运行更多/更大的进程。

记忆与理解技巧

  1. 抓住核心三角 :永远先理解"就绪 ↔ 运行 ↔ 阻塞"这个三角关系。这是进程调度的灵魂。
  2. 理解转换箭头 :每个状态转换的箭头都对应一个具体的事件或系统调用
    • 运行 -> 阻塞进程主动请求资源或I/O(等待某事件,如:进程主动请求 I/O、等待资源、调用 sleep 等,导致无法继续执行。)。
    • 阻塞 -> 就绪操作系统被动响应(所等待的事件完成,(如 I/O 结束),进程重新具备运行条件,进入就绪队列等待调度)。
    • 运行 -> 就绪操作系统主动调度(时间片用完(在分时系统中)或被更高优先级进程抢占(在抢占式调度中))。
    • 就绪 → 运行调度程序选中该进程,分配 CPU。
  3. 挂起的本质 :是内存管理 介入进程调度的体现,是进程映像在内存与外存之间的移动 ,目的是腾出物理内存空间

您的总结"进程组成三部分,状态先有三态图,扩展为五态图"是非常准确和高效的学习路径。掌握这些,就掌握了进程概念最核心的骨架。

2.前驱图

用来表示哪些任务可以并行执行,哪些任务之间有顺序关系,具体如下图:

可知,AB C可以并行执行,但是必须A B C都执行完后,才能执行D,这就确定了

两点:

任务间的并行、任务间的先后顺序

3.

用来表示进程和资源之间的分配和请求关系,如下图所示:

P代表进程,R代表资源,R方框中有几个圆球就表示有几个这种资源,在上

图中,R1指向P1,表示R1有

一个资源已经分配给了P1,P1指向R2,表示P1还需

要请求一个R2资源才能执行。

阻塞节点:某进程所请求的资源已经全部分配完毕,无法获取所需资源,该

进程被阻塞了无法继续。如上图中P2。

非阻塞节点:某进程所请求的资源还有剩余,可以分配给该进程继续运行。

如上图中P1、P3。

当一个进程资源图中所有进程都是阻塞节点时,即陷入死锁状态

一个进程执行完成后,会把请求的资源还回去

相关推荐
ShineWinsu9 小时前
对于Linux:线程概念与分页存储管理的解析
linux·运维·服务器·面试·线程·进程·虚拟空间地址
梦想不只是梦与想2 天前
Python 中的进程(Process)
python·进程·进程间通
遇事不決洛必達6 天前
【Python基础】GIL 锁是什么及其对爬虫的影响
爬虫·python·线程·进程·gil锁
ShineWinsu7 天前
对于Linux:进程信号的解析—下
linux·运维·服务器·面试·笔试·进程·信号
Dlrb12119 天前
Linux系统编程-进程回收
linux·exec·进程·进程回收
Dlrb121110 天前
Linux系统编程-进程及相关指令与函数
linux·进程·并发·进程状态·调度·进程控制指令·进程函数
sulikey11 天前
个人Linux操作系统学习笔记7 - 进程理解
linux·笔记·学习·操作系统·进程·pid
sulikey13 天前
个人Linux操作系统学习笔记6 - 操作系统与进程初识
linux·笔记·学习·操作系统·进程
阿昭L17 天前
调试CreateProcess
windows·进程·逆向工程·windows内核
fengxin_rou21 天前
【juc面试第一章】:线程基础
线程·进程·juc