进程、线程与进程间通信
掌握进程的概念、PCB、五种状态及其转换、进程的创建与控制原语,线程的概念与用户级、内核级线程的实现;掌握共享内存、消息传递、管道、信号四种进程间通信方式的特点。
本节导读
「进程管理」是操作系统内容最多的一章,本课分四节:这一节讲进程与线程,第 22 节讲 CPU 调度,第 23 节讲同步与互斥,第 24 节讲死锁。大纲在进程与线程下列了:基本概念、状态与转换、线程的实现(内核支持的线程、线程库支持的线程)、组织与控制、进程间通信(共享内存、消息传递、管道、信号)。其中「信号」是常见资料称 2025 年版新增的内容。
学完你应该能判断一个事件会引起进程怎样的状态变化,能数出含 fork 的程序会产生几个进程,并能比较四种进程间通信方式。
进程的概念与状态
进程是程序在一个数据集合上的一次执行过程,是系统进行资源分配和调度的独立单位(引入线程后,调度单位变成线程)。进程实体由程序段、数据段和进程控制块 PCB 组成;PCB 是进程存在的唯一标志,记录进程标识符、状态、优先级、程序计数器与寄存器现场、内存与文件等资源信息。进程具有动态性、并发性、独立性和异步性。
进程有五种状态:创建、就绪(只差 CPU)、运行、阻塞(等待某个事件,即使给它 CPU 也不能运行)、终止。三种基本状态之间的转换:
| 转换 | 原因 | 主动还是被动 |
|---|---|---|
| 就绪 → 运行 | 被进程调度程序选中 | — |
| 运行 → 就绪 | 时间片用完,或被更高优先级的进程抢占 | 被动 |
| 运行 → 阻塞 | 请求资源未满足、等待 I/O 或其他事件 | 进程主动 |
| 阻塞 → 就绪 | 等待的事件发生(如 I/O 完成),由别的进程或中断处理程序唤醒 | 被动 |
被唤醒的进程进入就绪队列,等调度程序选中才能运行。
进程的组织与控制
系统中的 PCB 按状态组织成就绪队列、各种阻塞队列(链接方式),或建立索引表(索引方式)。进程控制用原语实现,原语执行时不可被打断:创建、撤销(终止)、阻塞、唤醒、挂起、激活等。
UNIX 类系统用 fork 创建子进程:子进程得到父进程地址空间的副本,从 fork 之后的语句开始执行;fork 在父进程中返回子进程的进程号(大于 0),在子进程中返回 0,据此可以让父子进程走不同的分支。
线程
线程是进程中的一个执行流,是 CPU 调度的基本单位;进程仍是资源分配的基本单位。同一进程的线程共享进程的地址空间(代码、全局变量、堆)和打开的文件等资源,每个线程有自己的线程控制块、程序计数器、寄存器和栈。线程切换不必切换地址空间,开销比进程切换小。
| 比较项 | 用户级线程(线程库支持) | 内核级线程(内核支持) |
|---|---|---|
| 管理者 | 用户空间的线程库,内核不知道线程存在 | 内核,内核为每个线程建立 TCB |
| 切换 | 不进入内核,快 | 要进入内核,较慢 |
| 一个线程阻塞时 | 整个进程都被阻塞 | 只有这个线程阻塞,其他线程可继续运行 |
| 多处理器 | 同一进程的线程不能同时在多个 CPU 上运行 | 可以并行运行 |
多线程模型:多对一(多个用户级线程映射到一个内核级线程)、一对一(每个用户级线程对应一个内核级线程)、多对多。
本节后面还有约 1233 字:报名学员看全文
每门课前 10 节免费看全文;从第 11 节起,完整教程要报名后由顾问在后台为你的账号开通才能看。
题库账号可以直接登录,但第 11 节起的完整教程要报名后由后台开通才能看。
学完练一练
按本节考点从本课的课后练习里抽题(每次 10 道以内),做完看解析、错题自动进错题本。第 11 节起的课后练习报名学员才能练。
本节内容由 AI 辅助编写,配图由 AI 生成,仅供备考参考;考试要求以《全国各类成人高等学校招生考试大纲(2024 年版)》及浙江省教育考试院当年公布为准。