进程组成和状态

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。

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

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

相关推荐
柏木乃一2 天前
进程(2)进程概念与基本操作
linux·服务器·开发语言·性能优化·shell·进程
ikkkkkkkl3 天前
进程同步与死锁
操作系统·进程
_OP_CHEN3 天前
【Linux系统编程】(十四)深入 Linux 内核:进程优先级调度与切换的底层逻辑全解析
linux·运维·linux内核·进程·进程切换·进程优先级·调度算法
_OP_CHEN3 天前
【Linux系统编程】(十五)揭秘 Linux 环境变量:从底层原理到实战操作,一篇吃透命令行参数与全局变量!
linux·运维·操作系统·bash·进程·环境变量·命令行参数
CQ_YM4 天前
Linux进程基础
linux·服务器·进程
CQ_YM4 天前
Linux进程终止
linux·服务器·前端·进程
Trouvaille ~6 天前
【Linux】进程调度与环境变量:Linux内核的智慧
linux·运维·服务器·操作系统·进程·环境变量·调度算法
ベadvance courageouslyミ7 天前
系统编程之进程
linux·进程·pcb结构体
Yxw52648 天前
进程奥秘:从创建到消亡全解析,进程函数
进程