操作系统--PV操作

        还有不到一个多星期就开始自考考试了,可是我的PV操作还没有弄懂呢!真是急煞我也!不过幸好经过米老师一遍又一遍的给苹果和吃苹果的讲解下,也略微的懂了一点点。但是让我做题,还是不知道怎么应用!这不,前天晚上我就在中华同学讲题的过程中结合米老师讲的“苹果”渐渐的明白了什么是PV操作,从而对PV操作有了一个自己的理解!仅供大家参考!

首先,来点概念性的东西:

    Dijkstra发明的PV操作其实是由两个操作--P操作原语和V操作原语组成的。他们是不可中断的过程,我们把不可中断的过程叫做原语。而至于为什么叫PV操作,这是我从网上查的内容:P是荷兰语Proberen(测试)的首字母。为阻塞原语。V是荷兰语Verhogen(增加)的首字母。为唤醒原语。而Dijkstra是荷兰计算机科学家,所以他就把这个操作命名为PV操作!PV操作是对信号量的操作!
       P操作P(s):将信号量S减去1,若结果小于0,则把调用P(S)的进程置成等待信号量S的状态!
       V操作V(s):将信号量S加1,若结果不大于0,则释放一个等待信号量S的进程。
我们还要明白两个概念:进程的同步和互斥!(通常对确定信号量的初值有作用)
      进程的同步:在并发进程之间存在一种制约的关系,一个进程的执行依赖另一个进程的消息,当一个进程没有得到另一个进程的消息时应等待,知道消息到达才被唤醒!
     进程的互斥:当有若干个进程都要使用某一共享资源时,任何时刻最多只允许一个进程去使用该资源,其他要使用它的进程必须等待,直到该资源的占用者释放 了该资源。

其次,咱们用米老师的例子来解释一下这个PV操作:

爸爸有一个苹果,儿子要吃掉一个苹果,那么这个苹果就是信号量S(暂定只有一个苹果,儿子手里没有苹果),爸爸和儿子分别是不同的进程。爸爸进行一个P操作(给儿子一个苹果)的同时进行一个V操作(告诉儿子:我给了你一个苹果),此时爸爸手里没有苹果了但是同时儿子就有了一个苹果的信号量,接下来就是儿子做一个P操作(吃苹果)同时做一个V操作(通知爸爸:我吃了这个苹果,你又该给我一个苹果了)如果此时爸爸又摘了一个苹果,那么就又可以继续执行P操作给儿子苹果,但是如果爸爸手里没有苹果的话,就不能执行P操作。儿子也就吃不到苹果了!
用代码来体现就是:
先定义  老爸手里苹果S1,儿孑手中苹果S2
初值        S1=1,S2=0
begin
        L1:
             P(S1)
             老爸给儿子苹果
              V(S2)
               GOTO      L1
              END
       L2:
               P(S2)
             儿子吃苹果
              V(S1)
               GOTO      L2
              END
上面所讲是针对的同步操作,而互斥的强调共用一个资源,也就是老爸不给儿子苹果了,他自己也要吃,儿子也不需要跟老爸要,直接自己拿,可悲催的是,只有一个苹果,究竟谁吃呢?互斥产生了…
最后,通过题再来解释这个PV操作:
     
题目:要应用系统分拣黑棋和白棋,该系统有两个并发进程A和B组成。A进程专门捡黑子,B进程专门捡白子。当一个进程去捡的时候,不允许另一个进程去捡;每个进程只捡一枚棋子,随后另一个进程去捡。
假定先让A进程去捡,那么我们应该先定义信号量,由于这里有两个进程用以捡两个颜色的棋子,并且这两个进程是并发进行的,所以我们定义两个信号量黑棋S1和白棋S2,他们的初值分别1,0;也就是S1=1;S2=0.
那么对应的PV操作为:
进程A:begin
         L1:P(S1)       ;开始S1=1,所以A进程去执行P操作捡一个黑棋子,此时S1=0;
              捡一个黑子;
            V(S2)       ;同时执行V操作通知B进程该捡白子了,此时S2+1=1.
            goto L1    ;由于现在S1已经是0了,如果在执行P操作会造成信号量小于0 ,因此A进程进入等待态!
      end
进程B:begin
         L2:P(S2)    ;由于进程A的执行,使S2信号量变为了1,那么B进程去执行P操作捡一个白棋子,此时S2=0。
                 捡一个白子;
             V(S1)    ;同时执行V操作,让S1=1,通知进程A又可以去捡黑棋了!
             goto L2  ;由于现在S2=0,所以如果再执行P(S2)的操作的话会致使信号量小于0,因此B进程进入等待态,但是此时S1=1,A进程又开始执行了!
       end

小结:总的来说这个PV操作就是实现对临界区的管理而发明的,我们只要明白,一个进程执行一个P操作就必须有对应的一个V操作就可以了!希望考操作系统的时候预见PV操作的题自己可以顺利的完成!
PS:只是我的个人理解,如果有错误的话,欢迎指正!


  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值