计算机操作系统pv操作.ppt
计算机操作系统教程P、V操作P、V操作的引入为禁止两个进程同时进入临界区,使用了锁操作方法。但这带来两个问题:1.当临界资源被占用,不停的测试会造成错误。2.无法实现同步为此E.W.Dijkstra提出了一种解决同步,互斥问题的更一般的方法,这就是信号量以及有关的P、V操作信号量信号量是表示资源的实体,是一个与队列有关的整型变量,其值只能由P、V操作来改变。操作系统利用信号量对进程和资源进行控制和管理。根据用途的不同,分为公用信号量和私用信号量。公用信号量通常用于实现进程之间的互斥,初值为1,他所联系的一组并发进程均可对其实施P,V操作;私用信号量一般用于实现进程间的同步,初值为0或为某个正整数n,仅允许拥有它的进程对其实施P、V操作。P、V操作的定义P、V操作是定义在信号量S上的两个操作。P(S):(1)S:=S-1;(2)若S=0,则调用P(S)的进程继续运行。(3)若S0,则调用V(S)的进程继续运行;(3)若S0时的数值表示某类可用资源的数量,执行P操作意味着申请分配一个单位的资源。因此可描述为S:=S-1,当S0时,表示已无资源可用,此时S的绝对值表示信号量S的阻塞队列中的进程数;而执行一次V操作意味着释放一个单位的资源,描述为S:=S+1,若此时S=1 then if r=1 then begin begin r r:=:=r r 1;1;A:=r;A:=r;V(S);V(S);售出一张票;end end else else 售出票已售完;endend;PROCESS Pir:integer;begin P(S);r:=A;if r=1 then begin r:=r 1;A:=r;V(S);售出一张票售出一张票;end else begin V(S);售出票已售完售出票已售完 endend;例例3 3:有有m m个个生生产产者者和和r r个个消消费费者者共共享享容容量量为为n n的的缓缓冲冲器器(m m、r r、n n均均大大于于1 1)。每每个个生生产产者者把把自自己己生生产产的的物物品品存存入入缓缓冲冲区区,每每个个消消费费者者从从缓缓冲冲区区中中取取出出物物品品去去消消费费。要要求求用用P P、V V操操作作对对这这些些生生产产者者和和消消费费者者进进行行正正确确管理。管理。定义:整型数组:定义:整型数组:B0n-1B0n-1 整型变量:整型变量:k k,t t 初值均为初值均为0 0 信号量:信号量:S1S1:初值:初值1 1 用于生产者放入物品用于生产者放入物品 S2 S2:初值:初值1 1 用于消费者取出物品用于消费者取出物品 SP SP:初值:初值n n 缓冲区是否可用缓冲区是否可用 SG SG:初值:初值0 0 缓冲区里是否有物品缓冲区里是否有物品PROCESS PibeginL1:produce a product;P(SP);P(S1);Bk:=product;k:=(k+1)mod n;V(S1);V(SG);goto L1endPROCESS CjbeginL2:P(SG);P(S2);take a product from Bt;t:=(t+1)mod n;V(S2);V(SP);consume;goto L1end生产者分别向生产者分别向缓冲区送产品,缓冲区送产品,由由S1控制互控制互斥访问。斥访问。消费者分别从消费者分别从缓冲区中取出缓冲区中取出产品,由产品,由S2控制互斥访问控制互斥访问例例4 4:读者写者问题:读者写者问题:规规定定:允允许许多多个个进进程程同同时时读读;只只允允许许一一个个进进程程写写;当当有进程读时不允许其它进程写。有进程读时不允许其它进程写。第第一一种种方方案案:定定义义信信号号量量:S:S:semaphoresemaphore;初初值值1 1;定义一个整数:定义一个整数:rs rs,初值,初值0 0;读者:PROCESS Readeribegin rs:=rs+1;if rs=1 then P(S);read file F;rs:=rs 1;if rs=0 then V(S);end;写者:PROCESS Writerjbegin P(S);write file F;V(S);end;问题:对共享变量问题:对共享变量rsrs访问的程序段也是临界区。访问的程序段也是临界区。课后练习24有一阅览室一阅览室,读者进入时必须先在一张登记表上进,读者进入时必须先在一张登记表上进行登记。该表为每一作为列出了一个表目,包括座号,行登记。该表为每一作为列出了一个表目,包括座号,姓名。读者离开时要撤销登记信息。阅览室有姓名。读者离开时要撤销登记信息。阅览室有100100个个作为,试问:作为,试问:(1)(1)为描述读者的动作,应编写几个程序,应该设置为描述读者的动作,应编写几个程序,应该设置几个进程?进程和程序之间的对应关系如何?几个进程?进程和程序之间的对应关系如何?(2)2)试用试用P,VP,V操作描述这些进程之间的同步算法。操作描述这些进程之间的同步算法。分析:设读者有任意多个,但能同时阅览的只能分析:设读者有任意多个,但能同时阅览的只能100100人,所以,设一个信号量人,所以,设一个信号量S S代表空座位数目,初值为代表空座位数目,初值为100100,用它来控制进入阅览室的读者进程不超过,用它来控制进入阅览室的读者进程不超过100100。另设信号量另设信号量m m,用于控制对登记表这一共享资源的互,用于控制对登记表这一共享资源的互斥使用,其初值为斥使用,其初值为1 1。(1)需编写一个程序,100个进程,进程之间通过登记表之间存在同步关系(2)Process 第i个读者进程 begin P(S);P(m);填写登记表;V(m);坐下阅览;P(m);在登记表上去掉登记;V(m);V(S);goto L1;end25设有两个优先级相同的进程P1,P2如下所示。令信号量S1,S2的初值为0,试问P1,P2并发运行结束后,x=?,y=?,z=?进程P1 进程P2y:=1;x:=1;y:=y+2;x:=x+1;V(S1);P(S1);z:=y+1;x:=x+y;P(S2);V(S2);y:=x+y z:=x+zX=5,y8,Z 9.28.桌上有一只盘子,每次只能放一个水果。爸爸专向盘子中放苹果,妈妈专向盘子中方桔子,一个女儿专等吃盘中的苹果,一个儿子专等吃盘中的桔子,试用P、V操作写出他们能同步的程序。semaphore S_Plate=1,S_Apple=0,S_Orange=0;void father()/父亲进程父亲进程 while(1)P(S_Plate);往盘子往盘子中放入一个中放入一个苹果;苹果;V(S_Apple);void mother()/母亲母亲进程进程 while(1)P(S_Plate);往盘往盘子中放入子中放入一个桔子;一个桔子;V(S_Orange);void son()/儿子进程儿子进程 while(1)P(S_Orange);从盘中从盘中取出一个取出一个 桔桔子;子;V(S_Plate);吃桔子;吃桔子;void daughter()/女子进女子进程程 while(1)P(S_Apple);从盘中取从盘中取出一个出一个 苹果;苹果;V(S_Plate);吃苹果;吃苹果;谢谢观赏WPS OfficeMake Presentation much more funWPS官方微博kingsoftwps