首页/操作系统/进程管理/临界区与临界资源 🔗 在 Obsidian 中打开
操作系统 · 进程管理

临界区与临界资源

重要度 ★★★★★ 临界区临界资源互斥同步
速查
临界资源是共享资源本身(一次只允许一个进程用);临界区是访问临界资源的代码段。同步机制四大准则:空闲让进 · 忙则等待 · 有限等待 · 让权等待(忙则等待最基本,让权等待最高)。

基本概念

临界资源:一次只允许一个进程(或线程)使用的共享资源,如共享变量、共享文件、打印机等。

临界区:进程中访问临界资源的代码段。同一时刻只允许一个进程处于临界区。

辨析临界资源是资源,临界区是代码段——两者不是同一概念。

访问临界资源的代码结构

do {
    进入区;    // 检查并设置标志,请求进入临界区
    临界区;    // 访问临界资源
    退出区;    // 清除临界区使用标志
    剩余区;    // 其他代码
} while(true);
注意进入区和退出区必须是原子操作,否则无法保证互斥。

同步机制的四个准则

空闲让进临界区空闲时允许立即进入 忙则等待临界区忙时其他进程必须等待 有限等待保证有限时间内进入(防饥饿) 让权等待不能进入时释放 CPU(非忙等)
点击上方按钮查看每个准则的含义
准则含义违反后果
空闲让进临界区空闲时允许进入浪费资源
忙则等待临界区忙时其他进程等待最基本要求
有限等待保证有限时间内进入进程饥饿
让权等待不能进入时释放 CPU忙等浪费 CPU
难点"忙则等待"是最基本要求(任何机制必须满足);"让权等待"是最高要求——信号量满足,Peterson 等软件方法不满足(忙等)。

易错点

必记
  1. 临界区是代码段,临界资源是资源——不是同一概念。
  2. "忙则等待"是最基本的要求,任何同步机制都必须满足。
  3. "让权等待"最难满足——Peterson 算法不满足(忙等)。
  4. 信号量的 wait 操作满足让权等待(阻塞并释放 CPU);Peterson 不满足
  5. 临界区的进入区和退出区必须是原子操作

记忆卡片

临界区 vs 临界资源?
临界资源是共享资源本身,临界区是访问临界资源的代码段。
四个准则?
空闲让进、忙则等待、有限等待、让权等待。
最基本的准则?
忙则等待(临界区忙时其他进程必须等待)。
什么机制满足让权等待?
信号量机制(wait 不成功时阻塞并释放 CPU)。
什么机制不满足让权等待?
Peterson 算法等忙等方式(while 循环等待浪费 CPU)。
进入区的作用?
检查并设置标志(原子操作),防止多个进程同时进入临界区。

交互动画 · 临界区互斥进入(8 步)

手动模式
进程 P1想要打印 进程 P2想要打印 打印机临界资源 进入区(检查+设置 flag) 临界区(使用打印机) 等待区(忙则等待) flag = false(空闲)
P1、P2 竞争打印机:观察互斥进入与等待过程
空闲让进 · 忙则等待 · 有限等待 · 让权等待

相关知识点

process-synchronization-semaphore peterson-algorithm

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。