您的位置:首页 > 其它

关于pv操作的理解

2017-10-28 21:23 260 查看
在软考考试中,关于操作系统的知识有一个考点是pv操作,同时也是一个考点,现在我给大家略微谈一下我对这个的理解吧

首先先弄清楚pv操作的含义,pv操作是实现进程同步和互斥的常用方法,pv操作是低级通信原语,在执行期间不可分割,其中,p操作表示申请一个资源、v操作表示释放一个资源

p操作定义:s:=s-1,若s>=0,则执行p操作的进程继续执行;否则,若s<0,则设置该进程为阻塞状态,并将其插入阻塞队列。

v操作定义:s:=s-1,若s>0,则执行v操作的进程继续执行;否则,若s<=0,则从阻塞状态唤醒另一个进程,并将其插入就绪队列,执行v操作的进程继续执行。

直接上题吧,让我们从真题中发现技巧!!



这一题中,我们先抓住信息,该题有三个信号量s1,s2,sn,初值分别为0,0,n,先理解这三个值分别代表什么?sn可以理解是表示超市可以放n个顾客进来,也就是此时还有n个资源,超市里一个顾客都没有,那么s1和s2初值为0指的是临界资源,顾客和收银员都只有0个资源。

再来分析整个进程顺序,大概就是首先顾客进来,买完东西之后,准备付款,收银员开始准备收银,此时另外的顾客则需要排队等待结账,等顾客结账完了,也就可以离开超市了,关于收银员的话,有顾客来的话就结账,没有的话就休息。从这里我们可以发现,顾客和收银员是同步关系,要协作完成工作。



然后,我们继续看到顾客的进程,首先顾客进来,因为有人数的限制,看可不可以进来,可以的话,p(sn)一下!sn=sn-1=n-1>0,所以继续购物!到了付款的时候,因为此时s1,s2初始值都为0,所以要付款必须要先释放一个收银员,即V操作,是v(s1)还是v(s2)呢?哪个是代表的收银员哪个代表的是顾客?我们先假设好了,s1为收银员,所以先v(s1),此时s1=s1+1=1>0,然后开始付费,这时p(s2)一下,s2=s2-1=0-1<0,也就是说,其他顾客别来了,我这忙着呢



接下来看到收银员,按一般来说,都是先p后v,先p自己后v别人,收银员此时先p(s1)一下,s1=s1-1=0<=0,表示我这忙着呢,收银员的资源已经被占用了,然后再收费,完了后v(s2)一下,释放一个顾客的资源,s2=s2+1=1>0,所以顾客又可以开始来付钱了。

最后顾客走了,释放了它占用的那个资源!v(sn),所以按分析来说,答案为p(sn),v(s1),p(s2),p(s1),v(s2),如果信号量错误的话,答案相反,根据题目中答案,就只有cda符合答案了!!!

第二题



还是类似的题目,我相信其实通过前面一题的解析,这个题目就很容易了吧,分析的情况也差不多。

首先看到,设置了两个信号量,不难发现,信号量s1,s2初始值为2,1,因为发货员2名,审核员1名,可以解释为s1还有2个资源,一个发货员也没有被占用;s2还有1个资源,1个审核员也没有被占用。

看图分析,首先顾客进来提货,申请一个发货员的资源,p(s1)一下,s1=s1-1=1>0,去仓库提货,提完货后,什么时候释放资源呢?假设现在释放,v(s1),s1=s1-1=0,然后去检验,申请一个审核员p(s2),s2=s2-1=0,其他人不能再用审核员了,再释放一个审核员,v(s2),s2=s2+1=1,此时审核员又可以继续为顾客效力了,再看看答案,假设成立,答案就是p(s1),v(s1),p(s2),v(s2),答案为AC!

以上是两个真题的分析结果,有误勿喷,学习交流就好~~

4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: