在了解PV操作之前,我认为有必要先简单理解进程的状态与其之间的转换。
三态模型(图左)中最基本的三个状态:运行、等待和就绪。
- 运行:进程正在处理机上运行。对于单处理机系统,处于运行状态的进程只有一个。
- 等待:进程因发生某事情而暂停执行。
- 就绪:顾名思义进程已经具备执行条件但并未执行。
在进程运行过程中,由于自身进展情况及外界环境的变化,这三种状态在一定条件下相互转换。
五态模型则是在三态模型的基础上增加了新建态和终止态。
- 新建态:简单理解为进程刚被创建但还没有被提交的状态,等待系统完成创建进程的所 有必要信息。创建进程分为两个阶段,第一个阶段为一个新进程创建必要的管理信息,第二个阶段让该进程进入就绪状态。
- 终止态:进程已结束运行,回收除进程控制块之外的其他资源,并让其他进程从中收集有关信息。终止进程分为两个阶段,第一个阶段等待操作系统进行善后处理,第二个阶段释放主存。
由于进程不断创建,主存资源不能满足所有进程运行的要求,则需对某些进程挂起以平衡系统负载,则出现图右的情况。简单理解就是将进程对换到主辅存时进程的状态,这里不过多讲解。
P、V操作有三个概念需要理解:临界资源、临界区和信号量。
- 临界资源:诸进程间需要互斥方式对其进行共享的资源,如打印机、磁带机等。
- 临界区:每个进程中访问临界资源的那段代码称为临界区
有空即进,无空则等;有效等待,让权等待 - 信号量:是一种特殊的变量(S)。
信号量机制主要有整形信号量、记录型信号量、信号量集机制。
这篇主要讲的是整形信号量与P、V操作。
信号量是一个整形变量,根据控制对象的不同赋不同的值,信号量可分为两类:
- 公用信号量:实现进程间的互斥,初值等于1或资源的数目。
- 私用信号量:实现进程间的同步,初值等于0或某个正整数。
信号量S的物理意义为:S≥0,表示某资源的可用数;S<0,其绝对值表示阻塞队列中等待该资源的进程数。

P操作定义:S=S-1,若S≥0,则执行P操作的进程继续执行;否则,若S<0,则置该进程为阻塞状态,并将其插入阻塞队列。
V操作定义:S=S+1,若S>0,则执行V操作的进程继续执行;否则,若S≤0,则从阻塞状态唤醒一个进程,并将其插入就绪队列,执行V操作的进程继续执行。
下面我们来看一道例题加深理解:

先不看P、V,单从生产者和消费者我们不难看出,生产者生产一个产品,并将产品送到缓冲区等待消费者使用,消费者从缓冲区拿走产品并消费产品这么一个流程。
那么这里有一个问题,假设生产者进程生产一轮送到缓冲区后,消费者进程没有运行,再次执行生产者进程,则缓冲区中的产品则会溢出,反之消费者一直取出产品直至缓冲区为空,同样也会出现问题,PV操作的好处就体现在这里了。
加入PV操作后,根据流程图公式计算可知,第一轮生产者进程的值为P(S1)为0,P(S2)为1,一个产品被放入缓冲区,当消费者进程没有运行时,生产者进程再次运行后P(S1)为-1时,则符合S<0的判断,并加入进程队列等待,这时就能较好解决产品溢出的问题了。
以上就是我对PV操作的理解和认识,如有错误可在下方评论我会及时做出修改。