2-2 信号量与pv操作
信号量机制
信号量
信号量是OS提供的管理公有资源的有效手段
信号量是一个整数:
- 当信号量大于等于零时,代表可供并发进程使用的资源数量;
- 如S = 10代表系统中可供进程使用的资源数量为10
- 当信号量小于零时,表示处于阻塞态进程的个数;
- 如S = -10代表有10个进程由于得不到资源而处于阻塞状态
- 当信号量大于等于零时,代表可供并发进程使用的资源数量;
信号量PV操作
Wait操作(P操作)
- 申请资源,对信号量进行减量操作,S.value := S.value - 1
- 当S.value < 0时,表示资源分配完,进程进行自我阻塞
Signal操作(V操作)
- 释放资源,对信号量进行增量操作,S.value := S.value + 1
- 当S.value ≤ =0时,唤醒S.L链表中的等待进程
例题

解析:系统可用资源数为3
- 当所有进程都不使用资源时,信号量S表示可供分配的资源数量,S最大值取到3,排除A、D
- 当所有可用资源都用尽时,信号量S表示阻塞的进程个数,S绝对值最大值取到n-3(最多阻塞n-3个进程),即S最小值取到-(n-3)


解析:
前趋图表示的是一种依赖关系,上述5个进程在执行时存在依赖关系
每个访问过程对应一个信号量,6个信号量表示在上图中箭头处
执行期间对资源申请和释放情况:即进程执行之前申请资源,进程执行结束释放资源
a处:P1执行结束,应当释放资源S1、S2即V(S1) V(S2)
b处:P2执行结束,应当释放资源S3、S4即V(S3) V(S4)
c处:P3执行之前,应当申请资源S1、S3即P(S1) P(S3)
d处:P3执行结束,应当释放资源S5、S6即V(S5) V(S6)[理解何时申请了S5和S6见下面引用]
e处:P4执行之前,应当申请资源S2、S5即P(S2) P(S5)
f处:P5执行结束,应当释放资源S4、S6即V(S4) V (S6)
因此:23选择C,24选择B,25选择C
在前趋图中引入信号量是为了实现进程间的同步与互斥。信号量是一种同步机制,它是一个整数值,通常与一个特定的系统资源关联,也可以用于表示进程状态或进程间的逻辑依赖关系。
当将信号量应用于前趋图时:
每条有向边(代表前趋关系)在编程实现中常常被一个信号量所对应。例如,如果有两个进程A和B,且A必须在B之前完成,那么可以用一个信号量S来保护这个依赖关系,初始时将S设为0。
当进程A完成其任务后,它会对信号量S执行“V(signal)”操作,增加信号量的值。这相当于进程A告诉系统:“我已经完成了我的工作,你可以允许那些依赖于我的进程继续执行。”
进程B在开始执行之前,会对信号量S执行“P(wait)”操作,试图减少信号量的值。如果信号量的值大于等于1,则进程B可以继续执行,因为它知道它的直接前趋A已经完成。如果信号量的值小于1,则进程B会被阻塞,等待信号量的值变为正值才能继续执行。
通过这种方式,信号量不仅能够控制资源访问,还可以作为进程间通信的一种手段,确保进程严格按照前趋图规定的顺序进行执行。在复杂的并发程序设计中,利用信号量描述和控制前趋图中的执行顺序是解决进程间同步问题的有效方法之一。