关于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操作的进程继续执行。
直接上题吧,让我们从真题中发现技巧!!
![](https://img-blog.csdn.net/20131015211716640?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1eWFubGluZ2xhbnE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
这一题中,我们先抓住信息,该题有三个信号量s1,s2,sn,初值分别为0,0,n,先理解这三个值分别代表什么?sn可以理解是表示超市可以放n个顾客进来,也就是此时还有n个资源,超市里一个顾客都没有,那么s1和s2初值为0指的是临界资源,顾客和收银员都只有0个资源。
再来分析整个进程顺序,大概就是首先顾客进来,买完东西之后,准备付款,收银员开始准备收银,此时另外的顾客则需要排队等待结账,等顾客结账完了,也就可以离开超市了,关于收银员的话,有顾客来的话就结账,没有的话就休息。从这里我们可以发现,顾客和收银员是同步关系,要协作完成工作。
![](https://img-blog.csdn.net/20131015211804375?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1eWFubGluZ2xhbnE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
然后,我们继续看到顾客的进程,首先顾客进来,因为有人数的限制,看可不可以进来,可以的话,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,也就是说,其他顾客别来了,我这忙着呢
![](https://img-blog.csdn.net/20131015211749718?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1eWFubGluZ2xhbnE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
接下来看到收银员,按一般来说,都是先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符合答案了!!!
第二题
![](https://img-blog.csdn.net/20131015211837125?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1eWFubGluZ2xhbnE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
还是类似的题目,我相信其实通过前面一题的解析,这个题目就很容易了吧,分析的情况也差不多。
首先看到,设置了两个信号量,不难发现,信号量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
首先先弄清楚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
相关文章推荐
- 关于PV操作的理解
- 关于PV操作
- 关于PV操作
- PV操作简单理解
- 关于c#的config配置文件操作网上很多讲的和实际运用感觉不符,终于理解了一点点,记录一下
- 关于内存和指针操作,数据类型转换本质的理解
- 关于p操作和v操作的理解
- 关于指针的加减操作的理解
- 关于字符串操作的面试题(牛客网视频文字个人理解版)
- android中关于对线程池的理解以及操作
- 关于P,V操作理解的分析
- 关于ajax操作的个人理解
- python open函数关于w+ r+ 读写操作的理解
- 关于LPC2132操作EEPROM的一些理解
- 关于PV操作
- 关于联网操作一些理解
- [转]关于内存地址的个人理解和操作原理
- 关于linux定时操作cron的理解
- 绝对精辟!关于精解PV操作之信号量
- [置顶] ADO.NET在C#中关于SQL操作的理解