信号量机制学习卡片
🔒
信号量机制概述
点击查看详情
信号量机制概述
背景与问题
软件实现方法存在严重问题:
单标志法
、
双标志先检查
、
双标志后检查
硬件实现方法无法实现
"让权等待"
原则
信号量定义
一种变量,可以是整数或更复杂的
记录型数据结构
用于表示系统中某种资源的数量(如打印机资源)
可解决
进程互斥
和
进程同步
问题
原语特性
不可中断
的特殊程序段
保证检查和上锁操作的
原子性
通过
wait
和
signal
一对原语操作信号量(PV操作)
记住: 信号量解决互斥和同步问题,通过PV操作实现
🔢
整型信号量
点击查看详情
整型信号量
定义
用
整数型变量
表示系统资源数量
仅允许
初始化
、
P操作(wait)
、
V操作(signal)
三种操作
不能进行常规数学运算
应用案例(打印机)
初始化:
int S=1
执行流程:
P0执行wait(S): S=1→0(通过)
P1执行wait(S): S=0→循环等待
P0执行signal(S): S=0→1→P1可继续
存在问题
忙等待
: 不满足"让权等待"原则
理论矛盾: wait原语不可中断与循环等待导致的进程切换矛盾
记住: 整型信号量有忙等问题,不满足让权等待
📊
记录型信号量
点击查看详情
记录型信号量
定义
数据结构包含:
value
: 资源剩余数量
*L
: 等待该资源的进程队列指针
改进动机: 解决"忙等"问题,实现
"让权等待"
操作原语实现
wait(S)/P(S)操作
:
S.value--
若S.value < 0: 调用block(S.L)阻塞当前进程
value负数的绝对值表示等待进程数量
signal(S)/V(S)操作
:
S.value++
若S.value ≤ 0: 调用wakeup(S.L)唤醒队首进程
记住: 记录型信号量通过阻塞/唤醒机制解决忙等问题
🖨️
记录型信号量应用案例
点击查看详情
记录型信号量应用案例
打印机资源管理
初始值:
S.value=2
,S.L=空队列
执行序列:
P0申请: value=2→1
P1申请: value=1→0
P2申请: value=0→-1(阻塞)
P3申请: value=-1→-2(阻塞)
P0释放: value=-2→-1(唤醒P2)
P2释放: value=-1→0(唤醒P3)
P1释放: value=0→1
P3释放: value=1→2
记住: value负数表示等待进程数,释放时会唤醒
📝
重要考点与对比
点击查看详情
重要考点与对比
整型信号量缺陷
仅用整型变量表示资源数
违反
"让权等待"
原则,存在
忙等
现象
记录型信号量要点
P操作必须先
S.value--
,再判断是否阻塞
V操作必须先
S.value++
,再判断是否唤醒
考试中默认P(S)/V(S)指
记录型信号量
PV操作对比
整型信号量: 仅检查资源数并加减
记录型信号量: 附加
进程阻塞/唤醒
机制
高频考点
能自行推导
block/wakeup
触发条件
理解
value正负值
的实际含义
编程实现
wait/signal
原语
记住: 考试默认记录型信号量,注意value正负含义