《计算机操作系统pv操作》由会员分享,可在线阅读,更多相关《计算机操作系统pv操作(25页珍藏版)》请在金锄头文库上搜索。
1、计算机操作系统教程,P、V操作,P、V操作的引入,为禁止两个进程同时进入临界区,使用了锁操作方法。但这带来两个问题: 1.当临界资源被占用,不停的测试会造成错误。 2.无法实现同步为此E.W.Dijkstra提出了一种解决同步,互斥问题的更一般的方法,这就是信号量以及有关的P、V操作,信号量,信号量是表示资源的实体,是一个与队列有关的整型变量,其值只能由P、V操作来改变。 操作系统利用信号量对进程和资源进行控制和管理。 根据用途的不同,分为公用信号量和私用信号量。公用信号量通常用于实现进程之间的互斥,初值为1,他所联系的一组并发进程均可对其实施P,V操作;私用信号量一般用于实现进程间的同步,初
2、值为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 beginr := r 1;A := r;V(S);售出一张票;ende
3、lse 售出票已售完; end;,PROCESS Pi r : integer; beginP(S);r := A;if r = 1 then beginr := r 1;A := r;V(S);售出一张票;endelse beginV(S);售出票已售完end end;,例3:有m个生产者和r个消费者共享容量为n的缓冲器(m、r、n均大于1)。每个生产者把自己生产的物品存入缓冲区,每个消费者从缓冲区中取出物品去消费。要求用P、V操作对这些生产者和消费者进行正确管理。 定义:整型数组:B0n-1整型变量:k,t 初值均为0信号量:S1:初值1 用于生产者放入物品S2:初值1 用于消费者取出物品
4、SP:初值n 缓冲区是否可用SG:初值0 缓冲区里是否有物品,PROCESS Pi begin L1: produce aproduct;P(SP);P(S1);Bk := product;k := (k + 1) mod n;V(S1);V(SG);goto L1 end,PROCESS Cj begin L2: P(SG);P(S2);take a product fromBt;t := (t + 1) mod n;V(S2);V(SP);consume;goto L1 end,生产者分别向缓冲区送产品,由S1控制互斥访问。 消费者分别从缓冲区中取出产品,由S2控制互斥访问,例4:读者写者
5、问题: 规定:允许多个进程同时读;只允许一个进程写;当有进程读时不允许其它进程写。 第一种方案:定义信号量:S: semaphore;初值1;定义一个整数:rs ,初值0;,读者: PROCESS Readeri beginrs := rs + 1;if rs = 1 then P(S);read file F;rs := rs 1;if rs = 0 then V(S); end;,写者: PROCESS Writerj beginP(S);write file F;V(S); end; 问题:对共享变量rs访问的程序段也是临界区。,课后练习,24有一阅览室,读者进入时必须先在一张登记表上进
6、行登记。该表为每一作为列出了一个表目,包括座号,姓名。读者离开时要撤销登记信息。阅览室有100个作为,试问: (1)为描述读者的动作,应编写几个程序,应该设置几个进程?进程和程序之间的对应关系如何? (2)试用P,V操作描述这些进程之间的同步算法。 分析:设读者有任意多个,但能同时阅览的只能100人,所以,设一个信号量S代表空座位数目,初值为100,用它来控制进入阅览室的读者进程不超过100。另设信号量m,用于控制对登记表这一共享资源的互斥使用,其初值为1。,(1)需编写一个程序,100个进程,进程之间通过登记表之间存在同步关系,(2)Process 第i个读者进程beginP(S);P(m)
7、;填写登记表;V(m);坐下阅览;P(m);在登记表上去掉登记;V(m);V(S);goto L1;end,25设有两个优先级相同的进程P1,P2如下所示。令信号量S1,S2的初值为0,试问P1,P2并发运行结束后,x=? ,y=? ,z=? 进程P1 进程P2 y:=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.桌上有一只盘子,每次只能放一个水果。爸爸专向盘子中放苹果,妈妈专向盘子中方桔子,一个女儿专等吃盘中的苹果,一个儿子专等吃盘中的桔子,
8、试用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 Office,Make Presentation much more fun,WPS官方微博kingsoftwps,