《操作系统pv操作典型问题.pptx》由会员分享,可在线阅读,更多相关《操作系统pv操作典型问题.pptx(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、司机与售票员的问题 司机 P1 售票员 P2 semaphore s1=0,s2=0;while(true)while(true)P(S1);启动车辆;关门;V(S1);正常运行;售票;P(S2);到站停车;开门;V(S2);第1页/共16页前驱关系.一个快餐厅有4 类职员:(1)领班:接受顾客点菜;(2)厨师:准备顾客的饭菜;(3)包工:将做好的饭菜打包;(4)出纳员:收款并提交食品。每个职员可被看作一个进程,试用一种同步机制写出能让四类职员正确并发运行的程序。第2页/共16页典型的进程同步问题,可设四个信号量S1、S2、S3 和S4 来协调进程工作。var S1,S2,S3,S4:sema
2、phore;S1:=1;S2:=S3:=S4:=0;cobegin process P1begin repeat 有顾客到来;P(S1);接受顾客点菜;V(S2);untile false;end consumerprocess P4 begin repeat P(S4);收款并提交食品;V(S1);ufltile false;end coend.process P2 begin repeat P(S2);准备顾客的饭菜;v(S3);untile false;end process P3 begin repeat P(S3);将做好的饭菜打包;V(S4);untile false;end 第3
3、页/共16页拣子问题在一个盒子里,混装了数量相等的黑白围棋子 现在用自动分拣系统把黑子、白子分开,设分拣系统有二个进程P1 和P2,其中P1 拣白子;P2 拣黑子。规定每个进程每次拣一子;当一个进程在拣时,不允许另一个进程去拣;当一个进程拣了一子时,必须让另一个进程去拣试写出两进程P1 和P2 能并发正确执行的程序。第4页/共16页设置两个信号量S1和S2来协调进程P1和P2之间的同步。假定先让P1拣白子,则信号量S1和S2的初值分别为1和0。两个并发进程相应的程序如下:P2:beginrepeat P(S2);拣黑子;V(S1);until falseendcoendendbeginS1:=
4、1;S2:=0;cobeginP1:beginrepeat P(S1);拣白子;V(S2);until falseend第5页/共16页有一材料保管员,他保管纸和笔若干。有A、B 两组学生,A 组学生每人都备有纸,B 组学生每人都备有笔任一学生只要能得到其他一种材料就可以写信。有一个可以放一张纸或一支笔的小盒,当小盒中无物品时,保管员就可任意放一张纸或一支笔供学生取用,每次允许一个学生从中取出自己所需的材料,当学生从盒中取走材料后允许保管员再存放一件材料,请用信号量与P、V 操作。典型生产者问题1第6页/共16页cobegin process 保管员begin repeat P(S);take
5、 a material intobox;if(box)=Paper then V(Sa);else V(Sb);untile false;endProcess B组学生begin repeat P(Sb);P(mutexb);take the paper from box;V(mutexb);V(S);wnte a letter;untile false;end Coend.semaphore s,Sa,Sb,mutexa,mutexb;s=1;mutexa=1;mutexb=1;sa=0;sb=0;box(PaPer,pen);Process A组学生begin repeat P(Sa);P
6、(mutexa);take the pen from box;V(mutexa);V(S);write a letter;untile false;end第7页/共16页典型生产者问题2 桌上有一只盘子,最多可以容纳两个水果,每次仅能放入或取出一个水果。爸爸向盘子中放苹果(apple),妈妈向盘子中放桔子(orange),两个儿子专等吃盘子中的桔子,两个女儿专等吃盘子中的苹果试用:信号量和P、V 操作,描述进程同步。第8页/共16页beginmutex:=1;empty:=2;apple:=0;orange:=0;cobeginfather:begin repeat P(empty);P(mu
7、tex);向盘中放苹果;V(mutex);V(apple);until falseendmother:begin repeat P(empty);P(mutex);向盘中放桔子;V(mutex);V(orange);until falseenddaughteri(i=1,2;):begin repeat P(apple);P(mutex);取盘中苹果;V(mutex);V(empty);until falseendsoni(i=1,2):begin repeat P(orange);P(mutex);取盘中桔子;V(mutex);V(empty);until falseendcoendend;
8、第9页/共16页哲学家进餐 解决办法1 至多只允许有四位哲学家同时去拿左边的筷子,最终能保证至少有一位哲学家能够进餐,并在用毕时能释放出他用过的两只筷子,从而使更多的哲学家能够进餐。第10页/共16页semaphore seat=4;chopstick5=1,1,1,1,1;process iwhile(ture)think();P(seat);P(chopsticki);P(chopsticki+1%5);eat();V(chopsticki);V(chopsticki+1%5);V(seat);第11页/共16页哲学家进餐 解决办法3规定奇数号哲学家先拿他左边的筷子,然后再去拿右边的筷子;
9、而偶数号哲学家则相反。按此规定,将是1、2号哲学家竞争1号筷子;3、4号哲学家竞争3号筷子。即五位哲学家都先竞争奇数号筷子,获得后,再去竞争偶数号筷子,最后总会有一位哲学家能获得两只筷子而进餐第12页/共16页semaphore chopstick5=1,1,1,1,1;process iwhile(ture)think();if(i%2!=0)P(chopsticki);P(chopsticki+1%5);else P(chopsticki+1%5);P(chopsticki);eat();V(chopsticki);V(chopsticki+1%5);第13页/共16页思考:某寺庙有小和尚和老和尚各若干人,水缸一只,由小和尚提水入缸给老和尚饮用。水缸可容水10 桶,水取自同一口水井中。水井径窄,每次仅能容一只水桶取水,水桶总数为3 个。若每次入、取水仅为1 桶,而且不可同时进行。试用一种同步工具写出小和尚和老和尚入水、取水的活动过程。第14页/共16页思考:有三个并发进程:R 负责从输入设备读入信息块,M 负责对信息块加工处理;P 负责打印输出信息块。今提供;1)一个缓冲区,可放置K 个信息块;2)二个缓冲区,每个可放置K 个信息块;第15页/共16页感谢您的观看!第16页/共16页
限制150内