pv操作系统_操作系统中pv操作中v操作的条件 - CSDN
  • 操作系统——PV操作

    2018-10-30 10:58:57
    PV操作概念:操作系统中的一种同步机制,实现对于并发进程临界区的管理。 并发进程分为两种: ①无交互的并发进程:每个进程是相互独立的,谁也不影响谁,基本不会用到PV操作。 ②有交互的并发进程:多个进程...

    PV操作概念:操作系统中的一种同步机制,实现对于并发进程中临界区的管理

    并发进程分为两种:

    无交互的并发进程:每个进程是相互独立的,谁也不影响谁,基本不会用到PV操作。

    有交互的并发进程:多个进程共享资源,一个进程的运行,有可能会被外界的原因而中断,且断点不固定。进程执行的相对速度不能由进程自己来控制,于是就会导致并发进程在共享资源的时出现与时间有关的错误

    临界区:并发进程中与共享变量有关的程序段都称为临界区。

    P操作:申请资源操作。

    V操作:释放资源操作。

    信号量S:用来记录资源数量,看是否能满足申请资源的操作。例如:S=3 表示三个可用空闲资源S<0表示可用空闲资源无,进程申请要进入等待队列中。

    P(S):S <—— S - 1 

              如果S >= 0,进程继续执行

              如果S < 0,进程停止执行,放入信号量等待队列中。

    V(S):S <—— S +1 

               如果S > 0,进程继续执行;

               如果S <= 0,唤醒等待队列中的一个进程。

    例子:银行排队取号,按号叫人,值得一提的是窗口上有个大大的LED屏,显示着有几个人在等待,一共三个窗口,这时,10个人想办理业务。(资源-窗口,人-进程,大屏幕-S,很符合了吧)

        没人在窗口办理业务,屏幕:3个窗口可以办理;

        1人在窗口办理业务,屏幕:2个窗口可以办理;

        2人在窗口办理业务,屏幕:1个窗口可以办理;

        3人在窗口办理业务,屏幕:0个窗口可以办理;

        又来一个人取号,屏幕:1人在等待;       。。。。。

       第十个人来了,屏幕:7人在等待;

    以上取号都是申请资源操作 P(S),取号就相当于对屏幕上信号量减一,即 P(S) 中的 S-1 , 减成负数时就要在等待区等待。

    当一个人办理完业务,将释放一个窗口,则屏幕信号量 V(S) 中的 S 加1, 1人办理完业务,屏幕:6人在等待(一人去了窗口办理业务)

    用PV操作表示

    申请资源P(S)中的S 操作:信号量初始值S = 3 ,一个申请 S <—— 3-1 ,S >= 0,进程继续。不阻塞。。。。。到第4个申请的时候,

    S <——0-1,S < 0 ,进入阻塞队列中等待。。。。。到第10个申请的时候, S <—— -6-1,,S = -7 ,等待队列中有7个正着等着用资源。

    释放资源V(S)中的S 操作:1人办理完业务,释放资源,S <—— -7+1 ,S < =0 ,唤醒等待队列中的一个。。。。7个人办理完业务,释放资源 S <—— -1 +1 ,S <=0 ,没有申请了,就空闲继续执行进程即可。全部办理完,S = 3 则有3个空闲资源可用。

    关于PV操作前驱后继图的解答

    重要的几点解题条件:

    ①信号量初值都为0

    ②将信号量看成一个互斥量,如果想要某个结点停止执行,那么就对它做P操作,这样信号量的值就小于0,被压入阻塞队列。如果完成了某个结点的计算,那么就把它连向的结点做V操作,这样就相当于“激活”了下一个其他的结点,继续执行程序,这样就完成了进程间的同步过程。

    ③前驱图可以看作是拓扑结构图,想要执行 P2 ,必须先执行 P1 后才可以 ,想要执行 P3,必须执行 P1 和 P2 后才可以。

    总结就是:一个进程 A 引出某些信号量,则在 A 进程末尾对这些信号量执行 V 操作。

                     信号量指向某进程 A ,则在 A 进程开始位置有这些信号量的 P 操作。

    如上图,四个信号量都为0,我们将信号量标记在图上,但不是随意乱标记,有一定的规则

    【原创】PV操作 <wbr>前驱图

    情况1中:P1 进程引出信号量 S1、S2 ,所以在 P1 末尾对这些信号量执行 V(S1)、V(S2);P2 进程引入 S1 信号量,则在 P2 开始的位置有 P(S1) 操作,P2 进程引出 S3 信号量,则在 P2 末尾执行 V(S3) 操作;依次类推。

    情况2中:同情况1一样分析。

    带入答案中会发现,只有 情况1 符合题意,所以按照 情况1 来标记信号量,做题时,尽量先按照顺序来标记,有很大的机会误打误撞标记正确。

    学习资料:http://blog.sina.com.cn/s/blog_6d79d83a0101b6tp.html

    展开全文
  • 操作系统PV操作

    2018-09-20 18:05:01
    进程三个状态之间的转换是通过PV操作和信号量来控制的,其中信号量起到了很重要的作用。   信号量 信号量是最早出现的用来解决进程同步与互斥问题的机制。 信号量(Saphore)由一个值和一个指针组成,指针指向...

    三态模型

    进程通常分为就绪、运行和阻塞三种工作状态。

    三种状态在某些条件下可以转换,具体转换关系如下:

     

    img

     

    进程三个状态之间的转换是通过PV操作和信号量来控制的,其中信号量起到了很重要的作用。

     

    信号量

    信号量是最早出现的用来解决进程同步与互斥问题的机制。

    信号量(Saphore)由一个值和一个指针组成,指针指向等待该信号量的进程,信号量的值表示相应资源的使用情况。

    信号量 S>=0 时,S 表示可用资源的数量,执行一次P操作意味着请求分配一个资源,因此 S 的值减 1 ;

    信号量 S<0 时,表示已经没有可用资源,S 的绝对值表示当前等待该资源的进程数,请求者必须等待其他进程释放该类资源才能继续运行,而执行一个V操作意味着释放一个资源,因此 S 的值加 1 ;

    若 S<0 ,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。

    注意,信号量的值只能通过PV操作来改变。

     

    两类问题

    在说明这两类问题之前首先解释一些相关的概念:

    PV操作:一种实现进程互斥与同步的有效方法,包含P操作与V操作。

    P操作:使 S=S-1 ,若 S>=0 ,则该进程继续执行,否则排入等待队列。

    V操作:使 S=S+1 ,若 S>0 ,唤醒等待队列中的一个进程。

    临界资源:同一时刻只允许一个进程访问的资源,与上面所说的 S 有关联。

     

    缓冲区问题

    进程 P1 将信息输入到缓冲区 B 中,进程 P2 负责从缓冲区 B 中取出数据输出,缓冲区容量为 n 。

     

    img

     

    对于进程 P1 来说,如果缓冲区满,则应暂停输入,等待 P2 进程取走数据后再输入新数据;

    而对于进程 P2 来说,如果缓冲区空,则应等待 P1 进程送来新数据。

     

    我们首先分析一下,假设缓冲区未满且有数据存在时, P2 进程可以顺利的取出一个数据,同样 P1 进程此时也可以顺利的添加一个数据。

    也就是说,对于这两个进程的每一次操作,只要初始条件满足,那么它一定可以顺利的执行下去,不会受到其他条件的制约。

     

    于是便有:

    P1()
    {
        P(empty);
        输入新数据;
        V(full);
    }
    
    P2()
    {
        P(full);
        取出数据;
        V(empty);
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    其中 empty 初始值为缓冲区容量 n , full 初始值为 0 。

    假如缓冲区为空时, P2 进程阻塞, P1 可以顺利执行,随后唤醒 P2 进程运行。

    假如缓冲区为满时, P1 进程阻塞, P2 可以顺利执行,随和唤醒 P1 进程运行。

     

    其中的制约关系如下

     

    img

     

     

    公交车司机售票员问题

    设公交车上司机的活动是启动车辆,正常行车,到站停车;售票员的活动是关车门,售票,开车门,用信号量和PV操作来实现它们的同步。

    首先设信号量 S1 、 S2 ,其中:

    S1 表示是否允许司机启动汽车,初始值为 0 。

    S2 表示是否允许售票员开门,初始值为 0 。

     

    于是便有:

    司机进程()
    {
        P(S1);
        启动车辆;
        正常行驶;
        到站停车;
        V(S2);
    }
    
    售票员进程()
    {
        关车门;
        V(S1);
        售票;
        P(S2);
        开车门;
        上下客;
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    我们来分析一下这个过程, S1 与 S2 的初始值都为 0 。

    如果售票员没有关车门的话司机进程会阻塞在P操作之前,直到售票员关闭车门后执行V操作唤醒司机进程启动车辆…

    之后的一段时间司机进程与售票员进程可以同时运行。

    当司机到站停车前售完票的售票员会阻塞在P操作之前,直到司机到站停车后执行V操作唤醒售票员开车门,然后上下客。

    (那么问题来了,如果到站停车后售票员还没有售完票会怎么样呢?答案是售票员会继续售票,直到结束以后才会开车门上下客,然后耽误了好多乘客的时间于是被解雇了,hahah没有那么夸张啦~)

     

    这便是公交车司机与售票员之间的制约关系了,如下:

     

    img

     

     

    总结

    使用PV操作实现进程同步时应该注意的问题有:

    • 同一信号量的P、V操作要成对出现
    • 信号量的初始值与相应资源的数量有关,也与P、V操作在程序中出现的位置有关
    • 我们要首先分析出进程间的制约关系,在保证进程间有正确同步关系的情况下,确定哪一个进程先执行,哪一个进程后执行,彼此间应该用什么信号量来协调
    展开全文
  • 信号量与 PV 操作 概念 信号量(semaphore) 一个进程在某一特殊点上被迫停止执行直到接收到一个对应的特殊变量值,这种特殊变量就是信号量 记录型信号量 struct semaphore { int count; queue_t waiting_...

    信号量与 PV 操作

    概念

    • 信号量(semaphore)

      • 一个进程在某一特殊点上被迫停止执行直到接收到一个对应的特殊变量值,这种特殊变量就是信号量
      • 记录型信号量
      struct semaphore {
          int count;
          queue_t waiting_queue;
      }
    • PV 操作

      • 荷兰语中“检测”(Proberen)和“增量”(Verhogen)的首字母
      void P(semaphore s) {
        s.count--;
        if (s.count < 0) {
            将此进程放入信号量 s 的等待队列;
            阻塞此进程;
        }
      }
      void V(semaphore s) {
        s.count++;
        if (s.count <= 0) {
            从等待队列取出一个进程;
            将此进程设为就绪态;
        }
      }
    展开全文
  • 操作系统PV操作

    2016-05-16 11:25:23
    进程三个状态之间的转换就是靠PV操作来控制的。PV操作主要就是P操作、V操作和信号量。其中信号量起到了至关重要的作用。 信号量:信号量是最早出现的用来解决进程同步与互斥问题的机制。信号量(Saphore)由一个值和...

    基本概念:

    进程状态进程通常分为就绪、运行和阻塞三个工作状态。三种状态在某些条件下可以转换,三者之间的转换关系如下:


    进程三个状态之间的转换就是靠PV操作来控制的。PV操作主要就是P操作、V操作和信号量。其中信号量起到了至关重要的作用。

    信号量:信号量是最早出现的用来解决进程同步与互斥问题的机制。信号量(Saphore)由一个值和一个指针组成,指针指向等待该信号量的进程。信号量的值表示相应资源的使用情况。信号量S>=0时,S表示可用资源的数量。执行一次P操作意味着请求分配一个资源,因此S的值减1;当S<0时,表示已经没有可用资源,S的绝对值表示当前等待该资源的进程数。请求者必须等待其他进程释放该类资源,才能继续运行。而执行一个V操作意味着释放一个资源,因此S的值加1;若S<0,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。注意,信号量的值只能由PV操作来改变

    同步:其实说同步还不如说”协作“,就是我们的目标只有一个,我们奔着同一个目标去的,都是在大家的努力下共同完成这么一件事情。还是比较容易理解的吧。不见得太难。

    互斥:借用别人的一句话“千军万马过独木桥”,很通俗的一句话,就把咱们这个概念表达的淋漓尽致,就好比有一个大部队来到独木桥这,但是必须排好队,一个一个来;其实现实生活中,还有一个很好的例子可以说明这个互斥的概念,比如打印机,打印机这个工具就非常好的体现了互斥的概念,打印机一旦被别人占用了,那无乱你有多着急,都只能等着,对吧。

    我们接下来还继续看一下一张同步的图:

    这张图也特别的形象具体,我们具体来看看这张图,A仓库有货物,然后我们需要把货物搬运到B仓库,由搬运工甲和搬运工乙来完成这个过程;那么他们的目标就只有一个,就是把货物从A搬到B去,共同奔着这个方向去发展,所以我们说这是一个同步的问题。

    临界资源:就是咱们刚刚说的互斥,诸进程间需要互斥方式对其进行共享资源,如打印机、光驱等。

    临界区:就是进程访问临界资源的那段代码。

    PV操作:解决互斥和同步的问题。分开来看,

    P操作:使S=S-1,若S>=0,则该进程继续执行,否则该进程排入等待队列。

    V操作:使S=S+1,若S>0,唤醒等待队列中的一个进程(如果有)。

    这样理解不太好理解,咱们还是来看例子吧:

    接下来,我们来看一个与咱们生活很贴切的问题:生产者——消费者问题:

    我们还是一样,通过图片来分析问题:

    这是一个著名的同步问题,虽然生产者进程和消费者进程都是异步方式运行的,但它们之间必须保持同步,即不允许消费者进程到一个空缓冲区去取产品,也不允许生产者进程向一个已装满产品且尚未被取走的缓冲区中投放产品。这是一个单缓冲区情况。那么这个单缓冲区的PV操作,应该是怎样的呢?我们来看看:

    我们分析分析,很容易的发现这个流程,前提是S1初值为1,S2初值为0。我们需要记住P操作减1,V操作加1,然后这个分析就变得易如反掌了,我们先对初值进行一下说明:

    a、我们把S1的初值设为1:是说明缓冲区还有一个空间可以使用,对于生产者而言,每一个缓冲区的一个空间就是一个资源,也就是说,一开始运行的时候,就允许生产者投放一个产品到缓冲区,

    b、然后投放到缓冲区之后,我们来看消费者进程,P(S2):首先我们要进程一个判断,判断缓冲区中是否有产品,对消费者而言,缓冲区中有产品,就代表有一个资源可以使用,但是最初状态那个缓冲区中是没有资源的,所以S2的初值应该是为0的。

    我们刚才都提到了资源的问题,就是信号量的一个值应该是表示资源的数量,但是就消费者和生产者而言,对于他们的资源是不同的,概念是不同的,生产者:缓冲区有多少个空格,就有多少个资源;而对消费者来说,缓冲区有多少个满的格,就有多少个资源,是刚好是相反,所以说,就是这么相反,所以当消费者从缓冲区取出一个产品之后,对于生产者而已,就多了一个资源。

    其实这个过程就是这样的。

    1、生产者:P(S1),那么P(S1),S1=S1-1,得到P(S1=0)这个进程还能进行,那么生产者把一个产品投放到缓冲区。

    2、V(S2),S2=S2+1,S2初值为0,所以S2=S2+1>0,那么就激活了P(S2),那么消费者就能取出一个产品。

    4、消费产品:消费产品之前,还有一个V(S1),就激活了P(S1),让生产者继续投放产品到缓冲区。

    特别简单吧,这是单缓冲区分析。

    我们接下来看一个相对来说,有点复杂一点点的,多缓冲区的,其实也一样一样的,继续:

    我们还是分析一样的问题,生产者、消费者问题:

    对应的PV操作应该是这样的:

    有一点区别,就是要引用互斥的概念,因为缓冲区是一个临界资源,它始终只能有一个进程对其进行操作,所以我们就可以用一个互斥信号量来完成这一点,所以当某一个进程要使用到缓冲区之前,我们就进行以下判断,判断这个缓冲区现在是不是空闲呢?是不是有生产者或者消费者的进程在使用这个这个缓冲区呢?如果有,mute的初值为1,当有人使用这个缓冲区的时候,这个mute的值就由1变为0,这时,第二个进程向再来操作这个缓冲区,就不可能了,就会被阻塞,当第一个进程使用完缓冲区

     

    公交车司机与售票员的问题:

    我们来分析这个过程,我们把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)的进程,那么售票员就进程 开车门、上下客的操作。

    那么这个进程就完成了。

    一些疑问

    1,S大于0那就表示有临界资源可供使用,为什么不唤醒进程?

    S大于0的确表示有临界资源可供使用,也就是说这个时候没有进程被阻塞在这个资源上,所以不需要唤醒。

    2,S小于0应该是说没有临界资源可供使用,为什么还要唤醒进程?

    V原语操作的本质在于:一个进程使用完临界资源后,释放临界资源,使S加1,以通知其它的进程,这个时候如果S<0,表明有进程阻塞在该类资源上,因此要从阻塞队列里唤醒一个进程来“转手”该类资源。比如,有两个某类资源,四个进程A、B、C、D要用该类资源,最开始S=2,当A进入,S=1,当B进入S=0,表明该类资源刚好用完, 当C进入时S=-1,表明有一个进程被阻塞了,D进入,S=-2。当A用完该类资源时,进行V操作,S=-1,释放该类资源,因为S<0,表明有进程阻塞在该类资源上,于是唤醒一个。

    3,如果是互斥信号量的话,应该设置信号量S=1,但是当有5个进程都访问的话,最后在该信号量的链表里会有4个在等待,也是说S=-4,那么第一个进程执行了V操作使S加1,释放了资源,下一个应该能够执行,但唤醒的这个进程在执行P操作时因S<0,也还是执行不了,这是怎么回事呢?

    当一个进程阻塞了的时候,它已经执行过了P操作,并卡在临界区那个地方。当唤醒它时就立即进入它自己的临界区,并不需要执行P操作了,当执行完了临界区的程序后,就执行V操作。

    4,S的绝对值表示等待的进程数,同时又表示临界资源,这到底是怎么回事?

    当信号量S小于0时,其绝对值表示系统中因请求该类资源而被阻塞的进程数目.S大于0时表示可用的临界资源数。注意在不同情况下所表达的含义不一样。当等于0时,表示刚好用完。



    展开全文
  • PV操作

    2015-04-26 21:15:46
    什么是PV操作?  P操作是不可中断的原语,主要用于占用资源。   V操作时不可中断的原语,主要用于释放资源。 优点:   解耦合,把两个事情通过PV操作分开处理。 应用:   同步    代码:  ...
  • 操作系统PV操作

    2015-11-03 14:51:34
    在计算机操作系统中PV操作是进程管理的难点。 首先应弄清PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下:  P(S):①将信号量S的值减1,即S=S-...
  • 刚开始学习操作系统的时候,就听说PV操作,简单说说PV操作。 ● P(S): S=S-1    如果S≥0,则该进程继续执行;  S,进程暂停执行,放入信号量的等待队列   ● V(S): S=S+1  如果S>0,则...
  • 操作系统PV操作

    2017-01-26 16:11:32
    在我们学习操作系统的时候,PV操作这一块有一些晦涩难懂,在对PV操作展开说明之前,首先了解一下进程的基本状态和临界区之后,形成了感官的认识,对PV操作会比较容易理解,否则看起来就是每一个都懂,连起来不知道说...
  • 操作系统PV操作课件

    2020-07-18 23:34:14
    该课件收录了操作系统中各种PV操作练习题及详细解答易学易懂,希望对大家有所帮助。。
  • 大家都说操作系统中PV操作部分看不懂,确实我在专业课学习这门课时,PV操作被列为书的重点和难点,就是因为它不好理解。当时自己听完课也是一头雾水,到期末考试结束,也没弄明白这是怎么一回事,更没有意识到...
  •  在操作系统中,进程是一个很要花时间理解的东西,进程通常分为就绪、运行和阻 塞三个工作状态。三种状态在某些条件下可以转换,三者之间的转换关系如下:    进程三个状态之间的转换就是靠PV操作来控制的。...
  • 在计算机操作系统中PV操作是进程管理的难点。 首先应弄清PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下:  P(S):①将信号量S的值减1,即S=S-...
  • 操作系统PV操作经典例题含详细讲解、适合冲刺。
  • PV操作操作系统

    2020-03-21 22:43:34
    操作系统中,进程之间经常会存在互斥(都需要共享独占性资源时) 和同步(完成异步的两个进程的协作)两种关系.为了有效的处理这两种情况,狄克斯特拉(W.Dijkstra)在1965年提出信号量 (semaphore)和PV操作. PV操作是一种...
  • 操作系统课程的资料 PV 操作的经典题目
  • 操作系统中PV操作

    2012-08-27 16:43:26
    操作系统的进程管理PV是重点和难点。 信号量:信号量是个数据结构。 struct semaphore{int value;pcb *blockqueue;}mutex; 其中value是信号量的值;blockqueue是等待使用该信号量的进程排成的队列的对手指针...
  • PV操作 PV操作与信号量的处理相关,P表示通过的意思,V表示释放的意思。 目录 1 简介 2 详细资料 3 解释 ▪ 信号量的概念 ▪ 典型理解偏差 简介 1962年,狄克斯特拉离开数学中心进入位于荷兰南部的艾...
  • 可以这样理解: 临界区门前有棵树 用来挂红灯 进程想进CPU的门 先得上树取下盏灯(调用一次P) 取下一个去敲门(S=S-1) 如果树上没有灯取(S) 树说暂时欠你一盏灯(S为负时)...放个进程进去完成(Release
  • 转自:http://blog.csdn.net/gnuhpc/article/details/7001865PV操作原语和信号量sem是计算机操作系统进程和线程同步的核心手段,虽然说起来只有句话,但有几个点非常容易引起模糊。先把PV操作的说明如下:P操作原语: ...
  • 操作系统实验PV操作

    2020-07-22 23:32:57
    桌子上有一只盘子,最多可容纳两个水果,每次只能放入或取出一个水果。爸爸专向盘子放苹果(apple),妈妈专向盘子N放橘子(orange),两个儿子专等...请用PV操作来实现爸爸、妈妈、儿子、女儿之间的同步与互斥关系
1 2 3 4 5 ... 20
收藏数 49,459
精华内容 19,783
关键字:

pv操作系统