欢迎来到天天文库
浏览记录
ID:37016350
大小:44.01 KB
页数:7页
时间:2019-05-15
《《操作系统pv操作的作业参考答案》》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、理发师问题:customers=0; file://顾客等待服务的信号量barbers=0; file://理发师等待顾客的信号量mutex=1; //互斥信号量(对共享变量操作)一个计数共享变量(1分)waiting=0; 等待理发的顾客数一个常量CHAIRs表示椅子总数(1分)程序如下:(10分)Process barberbegin while true do begin P(customers); 顾客数为零,则入睡 P(mutex); 进入临界区
2、 Waiting:=waiting-1; 减少顾客数 V(barbers); 理发师准备理发 V(mutex); Cut_hair(); 理发 End;End;Process customerbegin P(mutex); 进入临界区 If(waiting<CHAIRs) begin Waiting=waiting+1; 增加等待的顾客数 V(customers); 如有必要,则唤醒理发师
3、 V(mutex); 释放信号量mutex P(barbers); 如果无顾客.则理发师入睡 Get_hair() 进入理发室理发 end else V(mutex) 已满,不能停留End;
4、儿子看有无橘子,若有则抢盘子,取走橘子后发出盘子置空的信号;置空信号应是爸爸和妈妈都可以接收的。该题是生产者/消费者问题的变形,有两对生产者和消费者。生产者需要指明是给哪个消费者的产品,但消费者取走产品后无须特别通知某个生产者,因为空出的缓冲区可由两个生产者随意争夺。此处无需设置信号量控制对盘子的互斥访问,因为盘子只能放一个产品;apple表示盘中有苹果,orange表示盘中有橘子,初值均为0。Parbegin 爸爸:begin L1:P(empty); 放苹果; V(apple); GotoL1; End;
5、妈妈:begin L2:P(empty); 放橘子; V(orange); GotoL2; End; 女儿:begin L3:P(apple); 取苹果; V(empty); GotoL3; End; 儿子:begin L4:P(orange); 取橘子; V(empty); GotoL4; End;Parend例2桌上有一只盘子,每次只能放入一只水果,爸爸专向盘子中放苹果(apple),
6、妈妈专向盘子中放桔子(orange),一个儿子专等吃盘子中的桔子,一个女儿专等吃盘子中的苹果。只要盘子中空则爸爸或妈妈可向盘子中放一只水果,仅当盘中有自己需要的水果时,儿子或女儿可从中取出。把爸爸、妈妈、儿子、女儿看做四个进程,用PV操作进行管理,使这4个进程能正确地并发执行。如图所示。图7.114个进程并发执行 这个问题实际上可看作是两个生产者和两个消费者共享了一个仅能存放一件产品的缓冲区,生产者各自生产不同的产品,消费者各自取走自己需要的产品。 由于盘子中每次只能存放一个水果,因此爸爸和妈妈在存放水果时必须互斥。儿子和女儿分别要吃桔子和苹果,因而,当爸爸向盘子中放入一
7、只苹果后应把“盘中有苹果”的消息发送给女儿;同样,当妈妈向盘子中放入一只桔子后应把“盘中有桔子”的消息发送给儿子。如果儿子或女儿取走盘子中的水果,则应发送“盘子中又可存放水果”的消息。但这个消息不应特定地发送给爸爸或妈妈,至于谁能再向盘中放水果则要通过竞争资源(盘子)的使用权来决定。 应怎样定义信号量呢?首先应定义一个是否允许向盘子中存放水果的信号量S,其初值为“1”,表示允许存放一只水果;其次要定义两个信号量SP和SO分别表示盘子中是否有苹果或桔子的消息,初值应该均为“0”,至于儿子或女儿取走水果后
此文档下载收益归作者所有