进程的描述

本文最后更新于:2025年10月16日 下午

一、进程的核心定位与实体构成

1. 进程的核心作用

在多道程序批处理系统和分时系统中,程序无法独立运行,进程是OS中资源分配和独立运行的基本单位。操作系统的并发、共享、虚拟、异步四大基本特征,均基于进程实现。

2. 进程实体的组成

进程实体(进程映像)由三部分构成,缺一不可:

  • 程序段:存放进程执行的指令序列,是进程运行的“逻辑依据”。
  • 相关数据段:存放进程运行所需的数据(如变量、常量、输入输出数据等),是程序段操作的对象。
  • 进程控制块(PCB):OS用于管理和控制进程的核心数据结构,是进程存在的唯一标志,后续章节将详细展开。

二、进程与程序的核心区别

进程与程序是OS中的两个关键概念,二者差异显著,具体对比如下:

对比维度 进程 程序
存在形态 动态实体 静态实体
生命周期 暂时的(从创建到撤销,有明确生命周期) 永久的(以文件形式存储在磁盘,无生命周期限制)
数据结构 拥有独立的PCB,记录进程状态、资源等信息 无专用数据结构,仅为指令和数据的有序集合
运行方式 可独立调度、抢占CPU运行 无法独立运行,需依托进程实体
资源占用 运行时占用系统资源(如内存、CPU、I/O设备) 存储时仅占用磁盘空间,不占用运行资源

三、进程的定义与核心特征

1. 进程的典型定义

从不同角度出发,进程有多种权威定义,核心围绕“动态运行”和“独立单位”两大核心:

  1. 进程是程序的一次执行过程(强调动态性);
  2. 进程是程序及其数据在处理机上顺序执行时的活动(强调执行场景);
  3. 进程是具有独立功能的程序在数据集合上的运行过程,是系统资源分配和调度的独立单位(强调资源与调度属性);
  4. 结合进程实体概念,传统OS中进程定义为:进程是进程实体的运行过程,是系统资源分配和调度的独立单位(最全面的定义)。

2. 进程的四大核心特征

进程的特征是其与程序、线程的关键区分点,其中动态性是最根本特征:

  • 动态性:进程最基本的特征。进程由“创建”产生,经“调度”执行,因“资源不足”暂停,最终由“撤销”消亡,整个生命周期有明确的状态变化。
  • 并发性:多个进程可在同一时间段内交替执行(宏观并发、微观交替)。需注意:未建立PCB的程序无法并发执行,只有进程具备并发能力。
  • 独立性:进程是能独立运行、独立获取资源(如内存、I/O)、独立接受调度的基本单位。非进程形态的程序(如无PCB的代码)无法独立参与系统运行。
  • 异步性:进程按“各自独立、不可预知的速度”向前推进。即使初始条件相同,因调度时机、资源竞争等差异,进程完成时间也可能不同,需同步机制保证结果可再现。

四、进程的状态及转换

进程在生命周期中会因资源获取、事件触发等发生状态变化,核心状态分为“基本三状态”“扩展五状态”(含创建、终止)及“挂起状态”(含静止/活动子状态)。

1. 三大基本状态(核心状态)

状态名称 定义 典型触发场景
就绪(Ready)状态 进程已获得除CPU外的所有资源,只要分配到CPU即可立即执行 进程创建完成、I/O操作完成、时间片用完后重新进入就绪队列
执行(Running)状态 进程已获得CPU,正在执行指令 进程调度器选中某就绪进程,将CPU分配给它
阻塞(Block)状态 进程因等待某事件(如I/O完成、资源申请失败)暂时无法执行,即使有CPU也不能运行 进程发起I/O请求、申请共享资源失败、等待其他进程的信号

三大基本状态的转换逻辑

  1. 就绪 → 执行:进程调度器从就绪队列中选中一个进程,分配CPU;
  2. 执行 → 就绪:进程时间片用完,或有更高优先级进程进入就绪队列,当前进程释放CPU;
  3. 执行 → 阻塞:进程主动请求某事件(如I/O),或申请资源失败,主动放弃CPU;
  4. 阻塞 → 就绪:进程等待的事件发生(如I/O完成、资源可用),由OS唤醒后进入就绪队列。

2. 扩展状态:创建状态与终止状态

为完整描述进程生命周期,在基本三状态基础上增加“创建”和“终止”状态:

  • 创建状态:进程正在被OS创建的过程,尚未进入就绪状态。
    • 流程:申请空白PCB → 填写PCB信息(如进程标识、资源需求)→ 分配必要资源(如内存)→ 转入就绪状态;
  • 终止状态:进程完成任务或因异常(如越界错、I/O故障)终止,等待OS善后处理的状态。
    • 流程:OS回收进程占用的资源(如内存、I/O设备)→ 清空PCB内容 → 释放PCB空间给系统。

扩展后的状态转换(五状态)

  • NULL(无状态)→ 创建:用户或系统发起进程创建请求;
  • 创建 → 就绪:进程创建完成,资源分配到位;
  • 执行 → 终止:进程正常完成或异常终止;
  • 终止 → NULL:OS完成善后处理,PCB释放。

3. 挂起状态与状态细分

引入挂起状态的原因

为满足系统和用户的特殊需求,引入“挂起(Suspend)”操作,使进程进入“静止状态”,对应的激活操作(Active)使进程恢复“活动状态”。引入原因包括:

  1. 终端用户需求:用户暂停自己的进程(如调试程序时暂停运行);
  2. 父进程请求:父进程暂停子进程,避免其干扰其他进程;
  3. 负荷调节需求:系统负载过高时,挂起部分进程释放资源;
  4. 操作系统需求:OS为进行资源整理(如内存对换),暂时挂起进程。

挂起后的状态细分与转换

挂起操作会将进程的“活动状态”转为“静止状态”,具体转换如下:

  1. 活动就绪 → 静止就绪:挂起就绪状态的进程,暂不参与CPU调度;
  2. 活动阻塞 → 静止阻塞:挂起阻塞状态的进程,即使等待的事件发生,也需先激活才能进入活动阻塞;
  3. 静止就绪 → 活动就绪:激活静止就绪的进程,重新加入就绪队列,参与调度;
  4. 静止阻塞 → 活动阻塞:激活静止阻塞的进程,若后续等待事件发生,可直接转入活动就绪。

挂起状态的核心性质

处于挂起状态的进程,无论原状态是就绪还是阻塞,均无法接收CPU调度,必须经激活操作转为活动状态后,才能参与正常的状态转换。

五、进程管理的数据结构

OS通过专门的数据结构管理进程和资源,核心包括“进程控制块(PCB)”及PCB的组织方式。

1. 进程控制块(PCB)的核心作用

PCB是OS中最重要的记录型数据结构,是进程存在的唯一标志(OS通过PCB感知进程,无PCB则进程不存在),具体作用包括:

  1. 独立运行的标志:PCB记录进程的唯一标识和运行状态,OS通过PCB识别进程并调度;
  2. 实现间断性运行:进程因I/O等事件暂停时,PCB保存其处理机上下文(如寄存器值、程序计数器),恢复时可从断点继续执行;
  3. 提供进程管理信息:记录进程的程序/数据地址、资源清单(如占用的内存、I/O设备),供OS管理资源;
  4. 提供进程调度信息:记录进程优先级、等待CPU时间、阻塞原因等,供调度器选择下一个执行进程;
  5. 实现同步与通信:记录进程的同步信号量、消息队列指针等,支持进程间的协作与信息交换。

2. PCB中的关键信息

PCB记录OS管理进程所需的全部信息,按功能可分为四类:

(1)进程标识符(唯一标识进程)

  • 外部标识符:由字母/数字组成,供用户使用(如“Chrome.exe”),由进程创建者提供;
  • 内部标识符:系统分配的唯一数字(如进程ID),供OS内部管理(如调度、资源分配)。

(2)处理机状态(保存进程上下文)

又称“处理机上下文”,记录进程暂停时CPU的状态,用于恢复执行:

  • 通用寄存器:用户可访问的寄存器,暂存运算数据;
  • 指令计数器(PC):存放进程下一条要执行的指令地址;
  • 程序状态字(PSW):含进程状态(如执行/就绪)、条件码(如运算结果正负)、中断屏蔽标志等;
  • 用户栈指针:指向进程的用户栈,用于存放函数调用参数和返回地址。

(3)进程调度信息(供调度器使用)

  • 进程状态:就绪/执行/阻塞/静止就绪/静止阻塞等;
  • 进程优先级:决定进程被调度的优先顺序(优先级高的进程优先获得CPU);
  • 调度辅助信息:如等待CPU的总时间、已执行时间,用于调度算法(如时间片轮转、优先级调度);
  • 阻塞原因:记录进程阻塞的事件(如等待I/O、等待信号量)。

(4)进程控制信息(供OS管理进程)

  • 程序和数据地址:指向进程的程序段(如代码在内存的地址)和数据段(如变量存储地址);
  • 同步与通信机制:如进程使用的信号量、消息队列指针,支持进程间同步;
  • 资源清单:记录进程占用的所有资源(除CPU外),如内存块、打开的文件、I/O设备;
  • 链接指针:指向同一队列中其他进程的PCB地址(如就绪队列中下一进程的PCB指针)。

3. PCB的组织方式

OS通过特定方式组织所有进程的PCB,便于快速查找、插入和删除,常见组织方式有三种:

(1)线性方式

  • 实现逻辑:将所有PCB存放在一个连续的内存区域(PCB数组);
  • 优点:实现简单,查找时无需遍历指针,开销小;
  • 缺点:遍历效率低(查找某进程需扫描整个数组),不适合进程数量多的系统;
  • 适用场景:进程数量少的简单OS(如早期单道批处理系统)。

(2)链接方式

  • 实现逻辑:按进程状态(如就绪、阻塞)将PCB链接成不同队列(就绪队列、阻塞队列),每个PCB含“下一个PCB指针”;
  • 优点:按状态分类管理,插入/删除效率高(只需修改指针),适合进程数量多的系统;
  • 缺点:查找某进程需遍历对应队列,依赖指针完整性;
  • 典型结构:就绪队列指针指向第一个就绪进程的PCB,每个就绪PCB的指针指向后续就绪进程,队尾PCB指针为NULL。

(3)索引方式

  • 实现逻辑:为不同状态的进程建立“索引表”(如就绪索引表、阻塞索引表),索引表的每个条目指向对应状态的PCB;
  • 优点:查找效率高(先查索引表确定PCB位置,再直接访问),支持快速定位不同状态的进程;
  • 缺点:需额外存储索引表,占用少量内存;
  • 适用场景:进程数量多、对查找效率要求高的OS(如现代分时系统)。

进程的描述
https://hellowydwyd.github.io/2025/10/16/进程的描述/
作者
YuDong Wang
发布于
2025年10月16日
许可协议