1. PV 操作与案例分析
PV 操作是一种实现进程互斥与同步的有效方法。PV 操作与信号量的处理相关, P 表示通过的意思, V 表示释放的意思。
PV 操作是典型的同步机制之一。用一个信号量与一个消息联系起来:
- 当信号量的值为 0 时, 表示期望的消息尚未产生;
- 当信号量的值非 0 时, 表示期望的消息已经存在。
用 PV 操作实现进程同步时, 调用 P 操作测试消息是否到达, 调用 V 操作发送消息。
1.1. PV 操作的原则
P 操作: 相当于请求资源、输入
V 操作: 相当于释放资源、输出
- 在单一进程内部, 由 P 操作 —> V 操作
1、 P: 请求到资源 (相当于程序输入)
2、 执行…
3、 V: 释放资源 (相当于程序的输出)
- 在两个进程之间, 由 V 操作 —> P 操作
1、 V: 一个进程释放了资源
2、 P: 另一个进程可以申请该资源
- 起始进程: 只有 V 操作(输出), 没有 P 操作(输入)
相当于程序只出不进
- 终止进程: 只有 P 操作(输入), 没有 V 操作(输出)
相当于程序只进不出
- 前趋图中信号排序规则: 从左到右、从上到下 , 依次为 1、2、3…
1.2. 案例分析
1.2.1. 案例一
假设系统中有 n 个进程共享 3 台打印机, 任一进程在任一时刻最多只能使用 1 台 打印机。若用 PV 操作控制 n 个进程使用打印机, 则相应信号量 s 的取值范围为 3 ~ -(n-3)
; 若信号量 S 的值为 -3, 则系统中有 3 个进程等待使用打印机。
1.2.2. 案例二
1、案例
2、分析
1) 先标信号 S
按照从左到右、从上到下
如果两条线的起点相同, 就比较终点; 终点在上或在前的, 就排在前面
2) 依次分析每个进程
原则:
- 初始进程, 只有 V, 没有 P
- 终止进程, 只有 P, 没有 V
- 进程内, 从 P 到 V
- 进程间, 从 V 到 P
- 一个进程有几个输入, 就有几个 P; 有几个输出, 就有几个 V
- P1
初始进程: 只有 V
有两个输出 S1、S2, 所以 V 为: V(s1)、V(s2)
- P2
一个输入 S1, 两个输出 S3、S4
所以 P 为: P(s1), V 为: V(s3)、V(s4)
- P3
两个输入 S2、S3, 两个输出 S5、S6
所以 P 为: P(s2)、P(s3), V 为: V(s5)、V(s6)
- P4
两个输入 S4、S5, 一个输出 S7
所以 P 为: P(s4)、P(s5), V 为: V(s7)
- P5
一个输入 S6, 一个输出 S8
所以 P 为: P(s6), V 为: V(s8)
- P6
终止进程, 只有 P, 没有 V
两个输入 S7、S8
所以 P 为: P(s7)、P(s8)
3)答案