操作系统习题解答《计算机操作系统》PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下:P(S):①将信号量S的值减1,即S=S1;②如果S0,则该进程继续执行;否则该进程置为等待状态,排入等待队列
V(S):①将信号量S的值加1,即S=S+1;②如果S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程
PV操作的意义:我们用信号量及PV操作来实现进程的同步和互斥
PV操作属于进程的低级通信
信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程
信号量的值与相应资源的使用情况有关
当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数
注意,信号量的值仅能由PV操作来改变
利用信号量和PV操作实现进程互斥的一般模型是:进程P1进程P2……进程Pn………………P(S);P(S);P(S);临界区;临界区;临界区;V(S);V(S);V(S);……………………其中信号量S用于互斥,初值为1
使用PV操作实现进程互斥时应该注意的是:(1)每个程序中用户实现互斥的P、V操作必须成对出现,先做P操作,进临界区,后做V操作,出临界区
若有多个分支,要认真检查其成对性
(2)P、V操作应分别紧靠临界区的头尾部,临界区的代码应尽可能短,不能有死循环
(3)互斥信号量的初值一般为1
生产者-消费者问题一个生产者,一个消费者,公用一个缓冲区
定义两个同步信号量:empty——表示缓冲区是否为空,初值为1
full——表示缓冲区中是否为满,初值为0
生产者进程while(TRUE){生产一个产品;P(empty);产品送往Buffer;V(full);}消费者进程while(True){P(full);从Buffer取出一个产品;V(empty);