进程管理-PV操作

  • 临界资源:进程间需要互斥方式对其进行共享的资源,如打印机、磁带机等
  • 临界区:每个进程中访问临界资源的那段代码称为临界区
  • 信号量:是一种特殊的变量
    在这里插入图片描述
    在这里插入图片描述
  • 未引入PV操作
    为了充分理解PV操作的含义,首先我们先将生产者与消费者进程中的PV操作去掉,我们以单缓冲区为例,也就是市场只有一个,只能容纳一个产品。
    生产者生产一号产品,并且送到缓冲区,市场便拥有一号产品,这时假使消费者进程并未进行,再次运行生产者进程,生产者进程生产看2号产品,此时要将2号产品放入市场中,会产生溢出的情况。
    假使开始时,消费者先执行,生产者并未生产,市场中没有东西,这时便会出错。
    所以说,不论从哪开始执行,如果没有PV操作的管控,该整体就会出错。
  • 引入PV操作
    生产者生产1号产品,之后执行P(s1)操作,s1初值为1,执行完P操作后,s1=0且没有<0,不会造成阻塞,继续向下执行,将1号产品放入市场,执行V操作,V(s2),s2初值为0,自加1,s2=1;此时先不执行消费者进程,继续执行生产者进程,生产2号产品,进行P(s1),s1=-1,此时s1<0,当前进程就会被放入带等待队列,阻塞进程,就是说当加入PV操作后,如果当前市场中的产品未被消费者消费,那么即使生产者再生产产品,也不会被放入到市场中。此时执行消费者进程,P(s2),s2=0,继续下一步,从缓冲区取走1号产品,执行V(s1),s1=-1,加1 等于0,那就会去等待队列找到一个进程激活,也就是激活生产者,生产品可继续执行送产品到缓冲区。

为了让大家能更加深刻理解PV操作,给大家列举几道题一起做一做。
在这里插入图片描述
接下来给大家详细解释一下这道题目
题目中说该书店最多允许N个购书者进入,那么该如何进行管控呢,其实很简单,也就是使用PV操作,每进入一个人,执行一次P(n)操作,每出来一个人,执行一次V(n)操作,如果进入了n个人,那么当第n+1个人想要进入时,将会被阻塞在外面。
进行付款操作时,并不是购书者一个人可以完成的,他需要与收银员进行交互,才可以顺利执行,所以在这个过程中,会有同步的关系在里面,同步关系型的关键点就在于a1a2b1b2要填的内容,如果没有b1b2操作,那么收银员将会一直进行收费动作,显然是不合理的,所以b1应该是一个P操作,而对于P操作应该是谁唤醒呢,那只能是付款动作唤醒的,所以,a1应该是V操作,目的就是唤醒收银员的b1操作,V操作时不具备阻塞功能的,付款时,并不是顾客直接将钱交给收银员就可以走,而是需要收银员消磁或者找零之后才可以走,所以在付款动作a2中应该有个等待操作,也就是P操作,那么对应的V操作就是b2。

  • PV操作和前趋图
    在这里插入图片描述
    对于ABC而言,在其前是没有任何活动的,是可以直接执行的,对于D而言,是必须在ABC完成之后的,同理,E操作时必须在D操作之后的。
    所以说在D之前应该有P(sa)P(sb)P(sc)操作,在ABC之后要有V(sa)V(sb)V(sc)操作,同理D之后应该有V(sd),E之前应该有P(sd)。

接下来再看一道较为复杂的题目
在这里插入图片描述
同上题一样P123后都应该有一个V操作,345之前都应该有一个P操作,但是这样较为复杂,小编看了许多视频后,得到一个较为简单的方法,不妨在每根箭头上标上序号,p1p2的箭头为s1,p2p3的箭头为s2,p3p4的箭头为s3,p3p5的箭头为s4,标序号有个规则就是从左到右,从上到下,在每根箭头的起点位置是V操作,箭头的终点位置是P操作,也就是如下图所示。
在这里插入图片描述
不知道各位能不能理解,有什么不理解的可以私信或者评论,我会翻的!

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值