本文基于教材内容与王道考研视频的顺序,对操作系统第二章中的“进程管理”进行系统化总结。
本章的核心任务是理解进程的本质、进程的运行状态和转换、进程控制方式、进程通信等内容,为后续 CPU 调度、同步互斥等章节奠定基础。
一、进程的描述
1.1 进程的定义
进程(Process)是操作系统最重要的概念之一。
程序本身只是静态的指令集合,而进程是它的动态执行过程。
教材中常见的几种典型定义:
- 进程是程序的一次执行。
- 进程是程序及其数据在处理机上顺序执行时所发生的活动。
- 进程是具有独立功能的程序在一个数据集合上运行的过程,是 OS 最基本的调度单位。
进一步结合进程实体可以给出更严格的定义:
进程 = 进程实体的执行过程
其中进程实体包括:
- 程序段(要运行的代码)
- 数据段(程序运行需要的数据)
- 进程控制块(PCB)
操作系统以 PCB 作为进程存在的唯一标志。
1.2 进程的组成
进程由以下三部分构成:
进程 = PCB + 程序段 + 数据段
- 程序段:程序代码本身;
- 数据段:程序运行时的数据;
- PCB(Process Control Block):进程的唯一标识,是 OS 管理进程信息的核心数据结构。
在 OS 角度:
- 创建进程:创建 PCB,初始化必要信息;
- 撤销进程:撤销 PCB,回收资源;
- 进程存在与否:看 PCB 是否存在即可。
这是进程管理的最核心要点。
1.3 进程的组织方式
1. 链接方式组织 PCB
操作系统按照进程状态,将各 PCB 链接成不同队列,如:
- 就绪队列
- 阻塞队列
- 终止队列
每个队列通过链表连接,操作系统维护这些队列头指针。
2. 索引方式组织 PCB
根据进程状态建立多个索引表,操作系统维护索引表地址。
索引方式适合随机查找,链接方式适合顺序遍历。
1.4 进程的特征
进程具有以下四个本质特征:
- 动态性:进程是程序运行的动态过程;
- 并发性:多个进程在宏观上同时执行;
- 独立性:进程是 OS 调度资源的独立单位;
- 异步性:进程执行速度不可预知,表现为走走停停。
其中“异步性”是多道程序环境导致复杂性的根源,也是后续引入同步互斥机制的原因。
二、进程的基本状态与转换
2.1 进程的三种基本状态
1. 就绪状态(Ready)
进程已具备运行条件,获得 CPU 即可运行。
2. 运行状态(Running)
进程占有 CPU,正在执行。
注意:单核 CPU 下任一时刻最多一个进程处于运行态;多核 CPU 则每核一个。
3. 阻塞状态(Blocked)
进程因某事件(如 I/O、资源不可用)无法继续执行,需要等待。
2.2 其他两种辅助状态
1. 创建状态(New)
系统正在为进程分配资源、初始化 PCB。
2. 终止状态(Exit)
OS 正在回收进程资源,撤销 PCB。
2.3 挂起状态与状态转换
为了便于管理,操作系统引入了挂起(Suspend)机制。
1. 引入挂起机制的原因
- 用户希望暂停程序检查错误;
- 父进程希望检查子进程状态;
- 系统负荷过大,需要挂起部分进程;
- 操作系统需要重新分配资源、维护系统状态。
2. 引入挂起后出现的状态
进程状态会进一步细分:
- 活动就绪(Ready)
- 静止就绪(Suspend Ready)
- 活动阻塞(Blocked)
- 静止阻塞(Suspend Blocked)
状态转换主要涉及“活动”与“静止”的切换(即是否在内存)。
2.4 五状态模型与七状态模型
五状态模型:
新建 → 就绪 → 运行 → 阻塞 → 终止
七状态模型(含挂起):
活动就绪 → 静止就绪 → 活动阻塞 → 静止阻塞
教材中常用七状态模型用于完整描述 OS 控制进程的能力。
三、进程的控制(核心内容)
进程控制是操作系统进程管理部分的核心。
所谓进程控制,就是 OS 对进程的生命周期进行管理,包括:
- 创建(Create)
- 撤销(Terminate)
- 阻塞(Block)
- 唤醒(Wakeup)
- 切换(Switch)
下文对每个操作进行系统总结。
3.1 进程的创建
进程创建通常涉及以下步骤:
- 分配唯一进程标识符(PID);
- 分配 PCB 并初始化;
- 为程序和数据分配必要资源;
- 设置初始状态(通常为就绪);
- 将 PCB 插入就绪队列。
通常由系统调用 fork、CreateProcess、clone 等触发。
3.2 进程的终止
进程终止包括:
- 正常结束(exit)
- 异常终止(如非法指令)
- 被其他进程终止(kill)
终止过程:
- 收回所有资源(内存、I/O等);
- 清理文件、缓存;
- 撤销 PCB;
- 通知父进程更新状态。
3.3 阻塞与唤醒
阻塞由进程自己主动触发(如等待 I/O)。
唤醒由事件发生后操作系统触发(如 I/O 完成)。
阻塞过程:
- 修改进程状态为阻塞;
- 将 PCB 从运行队列移入阻塞队列;
- 触发调度。
唤醒过程:
- 修改进程状态为就绪;
- 将 PCB 从阻塞队列移入就绪队列。
阻塞与唤醒不得由用户直接控制,必须由内核管理。
3.4 进程切换
进程切换是 OS 调度的核心,是多道程序并发执行的关键。
切换过程包括:
- 保存当前进程上下文(寄存器、PC 等);
- 更新 PCB 信息;
- 选择新进程;
- 恢复新进程上下文;
- 进入用户态继续执行。
注意:切换只发生在核心态。
进程切换开销高于线程切换,因为线程共享地址空间。
3.5 进程控制的实现:原语操作
所有进程控制操作(创建、唤醒、阻塞等)都属于原语,具有:
- 原子性
- 不可中断性
- 在核心态执行
操作系统通过中断禁止-开中断机制保证这些操作的原子性。
四、进程通信(补充)
虽然你在原文中未涉及,但进程通信(IPC)也是第二章的重要内容,这里进行简要补充。
进程间通信的主要方法包括:
- 共享存储
- 管道通信
- 消息传递(信箱机制)
- 套接字(Socket)
每一种方式都有自己的使用场景和适用范围。
五、总结
第二章围绕进程构建了整个操作系统管理的基础:
- 进程是 OS 管理资源和调度执行的基本单位;
- PCB 是进程存在的唯一标志;
- 进程具有动态性、并发性、独立性和异步性;
- 通过状态模型描述进程运行过程;
- 通过进程控制操作管理生命周期;
- 通过通信机制支持进程协作。
这些内容是学习调度算法、同步机制、死锁原理等后续章节的基础框架。
&spm=1001.2101.3001.5002&articleId=108238384&d=1&t=3&u=8ec3ea6bf3bc43e1966ad3d8fbdc6380)
2702

被折叠的 条评论
为什么被折叠?



