进程组成和状态

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。

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

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

相关推荐
代码AC不AC2 天前
【Linux】进程状态
linux·进程·进程状态
我在人间贩卖青春7 天前
进程信号机制
进程·信号·进程信号
柏木乃一8 天前
进程(8)虚拟地址空间/虚拟内存概述.part1
linux·服务器·c++·进程·虚拟内存·fork
序属秋秋秋9 天前
《Linux系统编程之进程控制》【进程替换】
linux·c语言·c++·操作系统·进程·系统编程·进程替换
序属秋秋秋9 天前
《Linux系统编程之进程控制》【进程等待】
linux·c语言·c++·进程·系统编程·进程控制·进程等待
序属秋秋秋10 天前
《Linux系统编程之进程控制》【进程创建 + 进程终止】
linux·c语言·c++·操作系统·进程·进程创建·进程终止
艾莉丝努力练剑11 天前
【Linux进程(七)】进程虚拟地址空间详解:从概念到实现与设计哲学
java·linux·运维·服务器·人工智能·安全·进程
HABuo14 天前
【Linux进程(一)】进程深入剖析-->进程概念&PCB的底层理解
linux·运维·服务器·c语言·c++·后端·进程
程序员龙一15 天前
进程、线程、协程通俗讲解与对比
c++·线程·进程·协程
_OP_CHEN16 天前
【Linux系统编程】(十八)Linux 进程创建与终止进阶:等待机制与程序替换的底层密码
linux·服务器·操作系统·进程·进程等待·进程替换·exec函数族