zoukankan      html  css  js  c++  java
  • 软测试综述——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操作,相对来讲在软考的复习内容中是比較生疏的一部分,了解了它是什么,为什么使用它,它有什么长处以后,剩下的就是通过多多的实践练习来加深对理论的理解和吸收了。

     

    

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    Android sdk + PhoneGap 配置
    一个解析url参数方法
    开始写笔记了~~
    Codevs 3305 水果姐逛水果街Ⅱ 倍增LCA
    Codevs 3304 水果姐逛水果街Ⅰ 线段树
    Cogs 1070. [焦作一中2012] 玻璃球游戏 带权并查集,逆序处理
    Bzoj 1901: Zju2112 Dynamic Rankings 主席树,可持久,树状数组,离散化
    Bzoj 2453: 维护队列 && Bzoj 2120: 数颜色 分块,bitset
    Uoj #131. 【NOI2015】品酒大会 后缀数组,并查集
    Tyvj P1463 智商问题 分块
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4729583.html
Copyright © 2011-2022 走看看