所属模块:OS-3 同步与互斥(信号量与 PV 设计) · 本模块第 3 / 16 个概念
flowchart TD
A["并发进程共享资源<br/>→ 竞争条件"] --> B["临界资源 / 临界区"]
B --> C["互斥四原则<br/>空闲让进 / 忙则等待<br/>有限等待 / 让权等待"]
C --> D1["软件算法<br/>单标志→双标志→Peterson"]
C --> D2["硬件指令<br/>关中断 / TSL / Swap"]
C --> D3["信号量<br/>整型→记录型"]
C --> D4["管程"]
D1 -- "忙等、不满足让权等待" --> D2
D2 -- "仍忙等" --> D3
D3 -- "P/V 分散在代码中易错" --> D4
D3 --> E["扩展:同步问题<br/>前驱关系 / 经典模型"]
E --> F["PV 设计题"]
核心概念清单:
| 概念 | 定义要点 | 易考点 |
|---|---|---|
| 临界资源 | 一次只允许一个进程使用的资源(打印机、共享变量、缓冲区) | 局部变量不是临界资源(2016 年 30 题) |
| 临界区 | 访问临界资源的那段代码(不是资源本身) | 进入区/临界区/退出区/剩余区四段结构 |
| 互斥四原则 | 空闲让进、忙则等待、有限等待、让权等待 | “让权等待”是判别忙等方案的关键词(2016 年 27、2018 年 32、2020 年 32 题) |
| 信号量 S | 一个整数值 + 一个阻塞队列,只能经 P/V 访问 | 初值 = 可用资源数;当前值 1、初值 3 → 可用 1 个、等待 0 个(2010 年 25 题) |
| P / wait(S) | S--;若 S < 0 则阻塞自己并入队 |
P、V 本身必须是原子操作(2022 年 45 题第 1 问) |
| V / signal(S) | S++;若 S ≤ 0 则唤醒队首一个进程 |
唤醒≠立即运行,只是变就绪 |
| 管程 | 把共享数据结构和其上操作封装为一个模块,编译器保证任一时刻最多一个进程在内执行 | “管程只能实现互斥”是错误说法(2016 年 32 题,管程也能实现同步) |
来源:复习资料 P3 §四;王道 2027 操作系统 进程管理章。