操作系统用于管理系统的硬件、软件和数据资源,控制程序的运行,是应用软件与硬件之间的接口,也是人机之间的接口。操作系统的职能包括进程管理、存储管理、文件管理、设备管理、作业管理等。
在进程管理中,PV操作在处理进程的同步与互斥问题方面非常重要,当多个进程需要同时访问共享资源时会用到。PV是用荷兰语表示的简写,P表示通过,V表示释放,据说这是计算机领域为数不多的非英语简写。
PV操作由P操作原语和V操作原语组成,原语也叫原子操作,表示不可中断的过程,这两个原语要操作信号量S。
P操作将S的值减1,如果S<0,则将该进程置为等待状态并加入进程队列中,否则继续执行。
V操作将S的值加1,如果S<=0则唤醒等待队列中的第一个进程,否则继续执行。
接下来使用单缓存区生产者、消费者问题来描述PV操作的运用,由于只有一个单缓存区,生产速度过快会使缓存区溢出,而消费速度过快会从缓存区拿到空值,如图所示,在加入PV操作后就能解决这些问题
有生产者、消费者两个进程,使用两个PV操作,S1的初值为1,S2的初值为0。生产者第一次执行,S1=0,送产品到缓存区,S2=1;第二次执行时S1=-1,生产者进程转为等待状态并加入进程队列。对于消费者进程,第一次执行过程中S2=0,从缓存区取产品,S1=0,消费产品,由于S1=0,生产者进程便被唤醒了,此时正好缓存区的产品被消费完。同理,如果消费者进程先执行,也照样能保证两个进程的配合无间。
PV操作便是通过这样的过程来协调几个需要同步的进程的。