PV操作的简单理解

          PV操作的简单理解

一、什么是PV操作

在操作系统中,进程是一个很要花时间理解的东西,进程通常分为就绪、运行和阻

塞三个工作状态。三种状态在某些条件下可以转换,三者之间的转换关系如下:

         

进程三个状态之间的转换就是靠PV操作来控制的。PV操作主要就是P操作、V操作

和信号量。其中信号量起到了至关重要的作用。

1、什么是信号量?

  信号量(semaphore),我们有时被称为信号灯,是在多线程环境下使用的一种设

施,是可以用来保证两个或多个关键代码段不被并发调用。信号量的数据结构为一个值

和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况

有关。

  

  一般来说,信号量S>0时,S表示可用资源的数量。执行一次P操作意味着请求分配

一个单位资源,因此S的值减1;

  当S<0时,表示已经没有可用资源,请求者必须等待别的进程释放该类资源,它才

能运行下去。而执行一个V操作意味着释放一个单位资源,因此S的值加1;

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

温馨贴士:信号量的值只能由PV操作来改变。

2、PV操作:

 自己通俗的理解, P就是请求资源,V就是释放资源。 P操作是减法运算(S:=S-

1),当信号量S小于0时申请资源;V操作是加法运算(S:=+1),当信号量小于等于0

时释放资源;P、V操作二者必须成对出现。

二、pv操作的意义

  我们用信号量及PV操作来实现进程的同步和互斥。PV操作是属于进程的低级通信。

进程的同步、互斥:

  同步:与其说同步我更愿说”协作“,就是我们的目标只有一个,我们奔着同一个目

标去的,都是在大家的努力下共同完成这么一件事情。还是比较容易理解的吧。不见得

太难。

  互斥:借用别人的一句话“千军万马过独木桥”,很通俗的一句话,就把咱们这个概

念表达的淋漓尽致,就好比有一个大部队来到独木桥这,但是必须排好队,一个一个

来;其实计算机中,还有一个很好的例子可以说明这个互斥的概念,比如打印机,打印

机这个工具就非常好的体现了互斥的概念,打印机一旦被别人占用了,那无乱你有多着

急,都只能等着,对吧。

三、PV操作实践

  讲了那么久,我们接下来进入PV操作具体实践篇,看来这个PV操作还是挺有意思

的。

PV操作就是为了解决互斥和同步的问题。

PV操作是分开来看的:

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

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

下面我们通过生活中的一个司机与售票员的例子来理解:

在公共汽车上,为保证乘客的安全,司机和售票员应协调工作:停车后才能开门,

关车门后才能行车。用PV操作来实现他们之间的协调。

S1:是否允许司机启动汽车的变量

S2:是否允许售票员开门的变量

driver()//司机进程
{
  while (1)//不停地循环
  {
   P(S1);//请求启动汽车
   启动汽车;
   正常行车;
   到站停车;
   V(S2); //释放开门变量,相当于通知售票员可以开门
  }
}

busman()//售票员进程
{
   while(1)
   {
    关车门;
    V(S1);//释放开车变量,相当于通知司机可以开车
    售票
    P(S2);//请求开门
    开车门;
    上下乘客;
   }
}

小结

pV操作:

1、宏观:  P就是请求资源,V就是释放资源。

2、微观:P操作是减法运算(S:=S-1),当信号量S小于0时申请资源;V操作是加法运

算(S:=+1),当信号量小于等于0时释放资源;P、V操作二者必须成对出现。

自己一开始看书没有很深入的理解,后来看第二遍的时候和同学一起交流讨论了,

讨论就是可以让自己变得印象时刻,把一些模糊的东西变得清晰明了了,更重要的是一

起交流,通过生活中活生生的例子,让看起来高大上的PV操作,和生活中的例子建立起

联系,PV操作也就是那么回事,这样不断的结网、建立知识网,用已有的、旧的知识去

理解新的知识点,学习起来越来越有劲。

时间: 2024-11-05 16:02:13

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

PV操作——软考探究(五)

之前总结了和资源有关的银行家算法,随着学习的深入,对于资源的理解也有了更深的理解,此篇文章通过解决同步.异步问题的典型机制--PV操作来加深对资源的理解. P操作:申请一个资源.它是执行操作的前提,只有有了资源才可以执行操作.就和现实生活是一样的,只有有了资源才能够进行生产. V操作:释放一个资源.在执行完毕一个操作以后要将占用的资源释放掉,和银行家算法吻合, 同时发出信号. [例]两个相关联的进程A和B,他们共享一个缓冲器.进程A不断地读入数据,并送入缓冲器:进程B不断地从缓冲器中取出数据并加

转 PV操作简单理解

传送门 PV操作简单理解 进程通常分为就绪.运行和阻塞三个工作状态.三种状态在某些条件下可以转换,三者之间的转换关系如下: 进程三个状态之间的转换就是靠PV操作来控制的.PV操作主要就是P操作.V操作和信号量.其中信号量起到了至关重要的作用. 信号量 信号量是最早出现的用来解决进程同步与互斥问题的机制. 信号量(Saphore)由一个值和一个指针组成,指针指向等待该信号量的进程.信号量的值表示相应资源的使用情况.信号量S>=0时,S表示可用资源的数量.执行一次P操作意味着请求分配一个资源,因此S

理解同步的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