在操作系统中已经学过PV操作,一直懵懵懂懂的,这次软考又有操作系统的内容,对PV操作有了新的认识。PV操作是操作系统中的一个难点也是重点,只要理解了,也不是什么难题。接下来简单的介绍一下PV操作。
1)基本概念
为了解决进程间的同步与互斥问题,我们引入了PV操作。接下来理解一下同步与互斥及相关的概念:
临界资源:在进程中,一次只能供一个进程使用的资源,如打印机,磁带机等。
进程间的互斥:同一个资源,多个程序想要使用,但只有一个程序能够占用资源。如千军万马过独木桥。
进程间的同步:双方共同协作完成一个东西。如只有生产者生产处产品以后,消费者才能消费。
2)PV操作的具体概念
PV操作由P操作原语和V操作原语组成,它们都是低级通信原语,在执行期间不可分割,对信号量进行操作,具体定义如下:
P(S):①将信号量S的值减1,即S=S-1;
②如果S>=0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。
V(S):①将信号量S的值加1,即S=S+1;
②如果S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。
3)生产者与消费者实例
如图,生产者进程不断地把生产的产品送入市场,消费者不断地从市场取走产品。为了实现两个进程的同步问题,需要设置一个信号量S0且初值为1,表示市场为空,可以将产品送入市场;另设一个信号量S1,且初值为0。
首先,对生产者进行操作:P(S0)=S0-1=0>=0,表示生产者可以进行操作,V(S1)=S1+1=1;此时生产者想继续生产时,再次进行操作:P(S0)=S0-1-0-1=-1<0,表示不可以进行生产,只能等待,由于PV操作的原子性,此操作不执行。
对消费这进行操作,P(S1)=S1-1=0>=0,表示市场有产品供消费者消费,V(S0)=S0+1=1;再进行消费时原理同上。
总的来说,PV操作要注意以下几点:
1)PV操作具有原子性,P和V是如影随形的,一个出现,另一个必相随。
2)P操作自己(-1),V操作对方(+1)
3)首先进行资源占用情况判断,然后再进行PV操作。