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操作也就是那么回事,这样不断的结网、建立知识网,用已有的、旧的知识去
理解新的知识点,学习起来越来越有劲。