操作系统第二章pv操作典型问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

哲学家进餐 解决办法3

规定奇数号哲学家先拿他左边的筷子,然后再 去拿右边的筷子;而偶数号哲学家则相反。按 此规定,将是1、 2号哲学家竞争1号筷子;3、 4号哲学家竞争3号筷子。即五位哲学家都先竞 争奇数号筷子,获得后,再去竞争偶数号筷子, 最后总会有一位哲学家能获得两只筷子而进餐
semaphore chopstick[5]={1,1,1,1,1}; process i {while(ture) {think(); if(i%2!=0) { P(chopstick[i]); P(chopstick[i+1]%5);} else {P(chopstick[i+1]%5); P(chopstick[i]);} eat(); V(chopstick[i]); V(chopstick[i+1]%5); } }
典型的进程同步问题,可设四个信号量S1 、S2 、S3 和 S4 来协调进程工作。
var S1 , S2 ,S3 , S4 : semaphore ; S1 : = 1 ;S2 :=S3 : = S4 : = 0 ; cobegin process P4 process P2 process P3 { process P1 begin begin begin begin repeat repeat repeat repeat P( S4 ) ; 有顾客到来; 收款并提交食品; P (S2 ) ; P (S3 ) ; P ( S1 ); 将做好的饭菜打包; V ( S1 ) ; 接受顾客点菜; 准备顾客的饭菜; ufltile false ; V ( S2 ); v ( S3 ) ; V ( S4 ) ; end untile false; untile false ; untile false ; } end end end coend . consumer
哲学家进餐 解决办法1
至多只允许有四位哲学家同时去拿左边的筷子, 最终能保证至少有一位哲学家能够进餐,并在 用毕时能释放出他用过的两只筷子,从而使更 多的哲学家能够进餐。
semaphore seat=4; chopstick[5]={1,1,1,1,1}; process i {while(ture) { think(); P (seat); P (chopstick[i]); P (chopstick[i+1]%5);} eat(); V (chopstick[i]); V (chopstick[i+1]%5); V (seat); } }
典型生产者问题2
桌上有一只盘子,最多可以容纳两个水果,每 次仅能放入或取出一个水果。爸爸向盘子中放 苹果(apple ) ,妈妈向盘子中放桔子(orange ) , 两个儿子专等吃盘子中的桔子,两个女儿专等 吃盘子中的苹果.试用:信号量和P 、V 操作, 描述进程同步。
begin mutex := 1; empty := 2; mother: apple := 0; orange := 0; begin repeat cobegin P(empty); father: P(mutex); begin 向盘中放桔子; repeat V(mutex); P(empty); V(orange); P(mutex); until false 向盘中放苹果; end V(mutex); V(apple); until false end
有三个并发进程:R 负责从输入设备读入信息 块,M 负责对信息块加工处理;P 负责打印输 出信息块。今提供; 1)一个缓冲区,可放置K 个信息块; 2 )二个缓冲区,每个可放置K 个信息块;
daughteri(i = 1, 2;): begin repeat P(apple); P(mutex); 取盘中苹果; V(mutex); V(empty); until false end
soni(i = 1, 2): begin repeat P(orange); P(mutex); 取盘中桔子; V(mutex); V(empty); until false end coend end;
拣子问题

在一个盒子里,混装了数量相等的黑白围棋 子· 现在用自动分拣系统把黑子、白子分开, 设分拣系统有二个进程P1 和P2 ,其中P1 拣 白子;P2 拣黑子。规定每个进程每次拣一子; 当一个进程在拣时,不允许另一个进程去拣; 当一个进程拣了一子时,必须让另一个进程去 拣.试写出两进程P1 和P2 能并发正确执行的 程序。
Process A组学生 begin repeat P ( Sa ) ; P ( mutexa ) ; take the pen from box ; V ( mutexa ) ; V(S); write a letter; untile false ; end
Process B组学生 begin repeat P ( Sb ) ; P ( mutexb ) ; take the paper from box ; V ( mutexb ) ; V(S); wnte a letter ; untile false ; end } Coend .
Fra Baidu bibliotek
设置两个信号量S1和S2来协调进程P1和P2之间的同步。 假定先让P1拣白子,则信号量S1和S2的初值分别为1和0。 两个并发进程相应的程序如下:
begin S1 :=1; S2 := 0; cobegin P1: begin repeat P(S1); 拣白子; V(S2); until false end
思考:

某寺庙有小和尚和老和尚各若干人,水缸一只, 由小和尚提水入缸给老和尚饮用。水缸可容水 10 桶,水取自同一口水井中。水井径窄,每 次仅能容一只水桶取水,水桶总数为3 个。若 每次入、取水仅为1 桶,而且不可同时进行。 试用一种同步工具写出小和尚和老和尚入水、 取水的活动过程。
思考:


P2: begin repeat P(S2); 拣黑子; V(S1); until false end coend end
典型生产者问题1

有一材料保管员,他保管纸和笔若干。有A 、 B 两组学生,A 组学生每人都备有纸,B 组学 生每人都备有笔.任一学生只要能得到其他一 种材料就可以写信。有一个可以放一张纸或一 支笔的小盒,当小盒中无物品时,保管员就可 任意放一张纸或一支笔供学生取用,每次允许 一个学生从中取出自己所需的材料,当学生从 盒中取走材料后允许保管员再存放一件材料, 请用信号量与P 、V 操作。
PV操作典型问题
司机与售票员的问题
司机 P1 售票员 P2 semaphore s1=0,s2=0; while (true) while (true) { { P(S1); 启动车辆; 关门; V(S1); 正常运行; 售票; P(S2); 到站停车; 开门; V(S2); } }
前驱关系

. 一个快餐厅有4 类职员:(1)领班:接受顾 客点菜;( 2 )厨师:准备顾客的饭菜;( 3 ) 包工:将做好的饭菜打包;( 4 )出纳员:收 款并提交食品。每个职员可被看作一个进程, 试用一种同步机制写出能让四类职员正确并发 运行的程序。
semaphore s, Sa , Sb, mutexa , mutexb ; s =1;mutexa =1;mutexb=1; sa =0; sb= 0 ; box ( PaPer , pen ) ;
cobegin { process 保管员 begin repeat P(S); take a material intobox ; if ( box ) = Paper then V ( Sa ) ; else V( Sb ) ; untile false ; end
相关文档
最新文档