转 PV操作简单理解

传送门

PV操作简单理解

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

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

信号量

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

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

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

  

 

关于PV操作容易产生的一些疑问:

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时,表示刚好用完。

时间: 2024-10-12 14:05:51

转 PV操作简单理解的相关文章

PV操作的简单理解

 PV操作的简单理解 一.什么是PV操作 在操作系统中,进程是一个很要花时间理解的东西,进程通常分为就绪.运行和阻 塞三个工作状态.三种状态在某些条件下可以转换,三者之间的转换关系如下: 进程三个状态之间的转换就是靠PV操作来控制的.PV操作主要就是P操作.V操作 和信号量.其中信号量起到了至关重要的作用. 1.什么是信号量? 信号量(semaphore),我们有时被称为信号灯,是在多线程环境下使用的一种设 施,是可以用来保证两个或多个关键代码段不被并发调用.信号量的数据结构为一个值 和一个指针

理解同步的PV操作

PV操作是Edsger Dijkstra提出的一种经典的解决同步不同执行线程的问题的方法,这种方法是基于一种叫信号量的特殊变量来实现的. 简单理解为就是通过共享变量+信号量实现的一种同步机制,其应用与生产者消费者模型,读写问题等领域. 在Java中有基于AQS实现的Semaphore信号量类. wiki对于其名字来源的解释 https://en.wikipedia.org/wiki/Semaphore_(programming)#Operation_names 可以做出以下对比:P(down/s

(转)关于PV操作理解的例子

P就是请求资源,V就是释放资源. 问题1 一个司机与售票员的例子 在公共汽车上,为保证乘客的安全,司机和售票员应协调工作: 停车后才能开门,关车门后才能行车.用PV操作来实现他们之间的协调. S1:是否允许司机启动汽车的变量 S2:是否允许售票员开门的变量 driver()//司机进程 { while (1)//不停地循环 { P(S1);//请求启动汽车 启动汽车; 正常行车: 到站停车: V(S2); //释放开门变量,相当于通知售票员可以开门 } } busman()//售票员进程 { w

PV操作例题解析

虽然自己看了书,老师讲了课,以为对PV操作理解了,可是遇到题的时候还是不会思考.以下这道题,花了非常长时间才弄明确,如今把思路写出来,大家共同探讨下. 大家都来思考: 信号量S1.S2.S3.S4分别代表什么含义? 误区: 把S1.S2.S3.S4当成是P1.P2.P3.P4的信号量 关键点: 1.P1运行不须要信号量的制约 2.信号量初始值为0 3.结合前驱图 4.从简单入手(P4) 我的思路: 依据图中P2运行完后V(S3),P3运行完后V(S4),结合前驱图,P2在P3之前,P3在P4之前

软考(2)-操作系统之PV操作

在操作系统中已经学过PV操作,一直懵懵懂懂的,这次软考又有操作系统的内容,对PV操作有了新的认识.PV操作是操作系统中的一个难点也是重点,只要理解了,也不是什么难题.接下来简单的介绍一下PV操作. 1)基本概念 为了解决进程间的同步与互斥问题,我们引入了PV操作.接下来理解一下同步与互斥及相关的概念: 临界资源:在进程中,一次只能供一个进程使用的资源,如打印机,磁带机等. 进程间的互斥:同一个资源,多个程序想要使用,但只有一个程序能够占用资源.如千军万马过独木桥. 进程间的同步:双方共同协作完成

PV 操作经典例题---三个进程之间的同步

问题: 总共有 读入.执行.打印 三个进程,试用PV操作描述读入B1打印B2的同步过程. 问题解读: 这个问题就是说了这样一件事:一个输入B1,被操作之后,成为B2,将B2打印.怎样用PV操作来说这件事.那么新的问题来了:啥是个PV操作? 就拿这道题来解释PV操作吧,我想打印一个值,前提条件是这个值存在吧,如果不存在,那么打印这个动作就不应该被执行,不能说啥也没有在那瞎打印吧.那么怎样才能让它不执行呢? 这就需要引入信号量机制了: 当一个操作的信号量为负数的话,就会挂起等待,不执行. 当一个操作

PV操作,我终于懂你了!

上个星期,米老师给我们讲课实在是精彩!本人终于对Pv操作有了自己的理解.之前一直不太理解Pv操作,现在总结一下,以供下阶段学习和总结. 为什么叫PV操作?原因是:这是狄克斯特拉用荷兰文定义的,因为在荷 兰文中,通过叫passeren,释放叫vrijgeven,PV操作因此得名. 这张图乍一看谁也不知道我想说明什么.我想通过这张图来给大家解释一下PV操作! 中间这加粗的黑线是秤杆,就像我们生活中的上下控制的电源开关!只有两个状态,一个是向上,一个是向下. 这张图的上面是消费者(儿子),对于消费者来

php类的封装、继承和多态的简单理解

.面象对向的三大特点:封装性.继承性.多态性 首先简单理解一下抽象: 我们在前面定义一个类的时候,实际上就是把一类事物共有的属性和行为提取出来,形成一个物理模型(模版),这种研究问题的方法称为抽象 一.封装性  封装就是把抽取出来的数据和对数据的操作封装在一起,数据被保护在内部,程序的其他部分只有被授权的操作(方法)才能对数据进行操作.  php提供了三种访问控制修饰符  public 表示全局,本类内部,类外部,子类都可以访问  protected 表示受保护的,只有本类或子类可以访问  pr

回溯法之八皇后问题简单理解

回溯法,简单理解就是有源可溯.基本思想要借鉴穷举法,但是它不是一味地穷举,当发现某一步不符合条件时,这一步后面的穷举操作就不进行了(俗称“剪枝”),我自己把它叫做动态穷举法.假设第一个步骤可行,那么执行第二个步骤,第三个......如果其中第三个步骤不行,那么我们再回过来(回溯),第二个步骤换一种方法尝试,然后再重新第三个步骤,第四个......直到完成任务要求为止. 这里,以八皇后问题为例.试图把回溯法讲清楚. 注意:递归应该是一种算法结构,回溯法是一种算法思想. 何为八皇后问题? (百度百科