软考复习——PV操作



   

    在操作系统中,进程之间经常会存在互斥(都需要共享独占性资源时)和同步(完成异步的两个进程的协作)两种关系。而信号量和PV操作完美有效的处理了这两种情况。

 

    互斥:就好比过独木桥,一次只能执行一个进程。

    同步:好比一个人骑车一个人步行,双方协作完成一件事情,速度快的每过一段时间就停下来等等速度慢的


    信号量是一种特殊的变量,表现形式是一个整型S和一个队列,根据控制对象的不同被赋予不同的值。分为以下两类:

    1,公用信号量。实现进程间的互斥,初值为1或资源的数目,

    2,私用信号量。实现进程间的同步,初值为0或某个正整数。

 

        S的物理意义:S>=0表示某资源的可用数,若S<0,则其绝对值表示阻塞队列中等待该资源的进程数。

 

         P操作:也称为down()wait()操作,使S=S-1,若S<0,进程暂停执行,放入信号量的等待队列。表示申请一个资源。

 

        V操作:也称为up()signal()操作,使S=S+1,S<=0,唤醒等待队列中的一个进程。表示释放一个资源。

 

利用PV操作实现进程的互斥


    令信号量S的初值为1,当进入临界区时执行P操作,退出临界区时执行V操作。这样,利用PV操作实现进程互斥的代码如下:

P(S)

   临界区

V(S)

 

利用PV操作实现进程的同步


    令信号量S的初值为0,进程A在进程B到达L2以前,不应前进到超过点L1

             进程A                       进程B

            …                           …

L1:P(S)                       L2: V(S)

       …                            …


    当进程A先执行到L1时,执行完P操作后,信号量S=S-1<0,停止执行。直到进程B执行到L2时,信号量S=S+1=1,唤醒进程A继续执行。达到了同步的目的。

 


最后通过一个实例分析来巩固一下


    例如,某仓库有一名保管员,该仓库可存放n箱零件。现有m名工人,只要仓库空闲,工人即可将生产好的零件放入仓库,并由保管员登记入库数量;另外有k名销售员,只要仓库的零件数满足顾客要求,便可提货并由保管员登记出库数量。

   规定:工人和销售员不能同时进入仓库,但是工人和工人,销售员和销售员可以同时进入仓库。设置信号量S1,初值为n,表示仓库空闲位置数;信号量S2,初值为0,表示仓库中零件箱数;信号量S3,初值为1,用于实现对保管员的互斥访问。则其管理系统流程图如下:

       

     


    对于工人进程,首先执行P(S1)申请资源,看仓库中是否有空闲位置。若有,则将零件送入仓库,然后执行V(S2)表明仓库中已经有一箱零件,唤醒销售员进程,告知销售员可以提货了。然后执行PS3)申请资源,看是否有保管员空闲,若有,则登记入库数,然后执行VS3)释放保管员资源,使保管员处于空闲状态。


    对销售员进程,首先执行P(S2)申请资源,看仓库是否有货物,若有,进入仓库提货,然后执行V(S1)释放资源,使仓库空闲出一个位置,告知工人进程可以放置货物了,然后执行P(S3)申请资源,看是否有保管员空闲,若有,则登记出库数,然后执行VS3)释放保管员资源,使保管员处于空闲状态。

 

    通过上述实例可知,在现实生活中互斥和同步都是同时存在的,两者相辅相成。

 

    关于PV操作,相对来讲在软考的复习内容中是比较生疏的一部分,了解了它是什么,为什么使用它,它有什么优点以后,剩下的就是通过多多的实践练习来加深对理论的理解和吸收了。

 


  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值