软考--快速掌握操作系统的PV操作

文章介绍了PV操作在解决并发进程间约束关系的问题中的作用。P操作会导致进程阻塞,而V操作用于唤醒被阻塞的进程。通过示例分析了生产者-消费者问题,解释了如何使用P和V操作来协调生产者和消费者的动作。同时,文章提供了一个书店购书场景的PV操作实例,强调找到约束关系、确定P和V的操作对象以及信号量的设置是解决问题的关键。
摘要由CSDN通过智能技术生成

开门见山:PV操作解决的是并发进程之间某些约束关系的问题,心急的直接看【做题分析技巧】

P操作会阻塞;
V操作会唤醒P操作;
P操作与V操作成对出现;

💯原理

P(S)、V(S)中的S就是信号量
T--进程操作阻塞(不会往下执行)
F--继续循环操作(执行下面的内容)

✅示例分析

这部分如果有点晕,可以直接看后面的【做题技巧分析】之后再回头看这里就好了。

设置S1初值为1,S2初值为0.

😈PV操作的流程【我个人理解】:

①生产者角度,S1=1,先进行P操作,S1=0,将产品送到缓冲区后继续循环生产者S1-=1,=》 S1=-1,此时S1<0了,阻塞当前进程(等待消费者发出继续的指令)

②S2+=1 =》 S2=1

③消费者拿到S2信号量后进行P操作,S2-=1 =》 S2=0,消费者开始使用缓冲区的商品,此时对S1进行V操作,S1+=1 =》 S1=0,消费产品。生产者拿到S1后,发现S1不小于0,阻塞停止,生产者继续进行。

消费者继续循环S2-=1 =》 S2=-1,此时S2<0了,消费者将阻塞住,不会继续从缓冲区取东西,直到生产者再次向缓冲区中加入新产品,S2至0时为止。

先从消费者开始也是类似的。S2初值是 0,P(S2)后得-1<0此时会被阻塞,防止从空集合中取出内容。

📖做题分析技巧

下面是书店购书的一个PV操作例子

注意:
①P操作具备阻塞的职能,V操作不具备阻塞能力。
②PV操作关键要找到约束,找到谁是因变量,谁是自变量,谁约束谁。【PV操作是成对出现的】
③一对儿PV操作信号量是相同的

看题发现已经存在了一对PV操作,信号量为Sn,Sn的值为n,很容易想到这对PV操作的作用就是控制进入书店的人数的。当人数达到n了,阻止人继续进入书店,这种状态直到有人付款离开书店为止。

再来看题发现还有两对PV操作,首先通过图能知道购书者和收银员之间存在约束关系,收银员要等待购书者付款才能工作,购书者要等待收银员反馈才能离开书店。那么这两对PV操作就是控制这个约束的。

先从购书者分析,购书者开始付款了,收银员才能开始收款,所以a1与b1之间是一对PV操作,进一步分析,如果没有购书者付款,那么收银员是不能执行收款操作的,也就是说收银员进程应该及时阻塞,故b1应该是P(S1),a1应该是V(S1)。

购书者发起付款操作的时候,不能马上离开书店,因为他要等收银员的反馈,付款成功拿到 小票才能离开,也就是说购书者在等待收银员反馈的时候应该及时阻塞住,故a2与b2之间是一对PV操作,且a2是P(S2),对应的b2就是V(S2)。

再检查一遍看看是否合理呢?

从收银员角度开始,假设没有人付款,P操作能及时阻塞,使得收银员进程不会进入收费状态,所以b1位置放P操作没有问题,进一步分析信号量S1的初始值应该为0,经过b1后S1为-1,阻塞。

从购书者角度看,开始付款的时候激活收银员进程,所以a1是V操作也没有问题,通过a1的操作,S1信号量又为0了,收银员进程可以进行收费了。

再返回收银员角度,收费完毕后要给购书者信号,购书者从才能离开,所以b2为V操作没有问题。

从购书者角度看,a2应该是P操作,应该及时阻塞住。进一步分析,S2信号量也应该是0才符合要求。

😁总结

PV操作从做题的角度出发,我认为首先要找到约束关系,就是谁和谁是一对约束,第二步确定这对约束谁是P谁是V(用反证方法推一下看看),最后一步考虑信号量,信号量为多少取决于是否马上阻塞还是说执行几次后再阻塞,这个要结合具体问题具体分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韦_恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值