pv操作的几个例子
在软考考试中,关于操作系统的知识有一个考点是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!
公交车司机与售票员的问题:
我们来分析这个过程,我们把S1和S2的初值都设为0。我们来分析分析:
1、P(S1):S1=S1-1=-1,那么司机进程就被暂停,等会售票员进程,售票员关车门。
2、V(S1):S1=S1+1=0,激活了司机进程,那么司机就开始启动车辆、正常行驶、到站停车,当然售票员也有可能同时在售票。
3、P(S2):S2=S2-1,售票员在售票之后的进程就被暂停,等待司机进程。这样就避免了售票员售票之后就开车门了。因为这是不允许的。
4、V(S2):S2=S2+1,司机到站停车之后,就激活了售票员P(S2)的进程,那么售票员就进程 开车门、上下客的操作。
F_V.: 按字节编址
珈蓝冰雨: 铁子,war包不都是开发自己打包么,哪能找别人要啊
珈蓝冰雨: 怎么感觉这玩意儿有点类似国产东方通啊
just_crackpot: 请问16位的地址是按字节编址,所以一个地址代表一个B吗
color_pen: a类地址范围有误建议楼主修改一下