操作系统第3章处理机调度与死锁-习题.ppt
27.试利用记录型信号量写出一个不会出现死锁的哲学家进餐问题的算法。,解决办法有三:至多允许四个哲学家同时进餐,来保证至少有一个哲学家能够进餐,最终总会放下他所用的筷子,从而更多的哲学家可以进餐;仅当哲学家的左、右两只筷子都可用时,才允许他进餐;规定奇数号哲学家先拿他左边的筷子,再拿右边的筷子;偶数号哲学家先拿他右边的筷子,再拿其左边的筷子。这样,1、2号哲学家竞争1号筷子,3、4号哲学家竞争3号筷子(哲学家顺时针就座,筷子也顺时针放置,且1号筷子在1号哲学家左边),这样他们总是先竞争奇数号筷子,获得后,再竞争偶数号筷子,最后总能保证一位哲学家能拿到两只筷子。,采用方案,我们增加一位服务生(信号量room),让他只允许四位哲学家同时进入餐厅。var chopstick:array0,4 of semaphore:=(1,1,1,1,1);room:semaphore:=4;i:=integer;,procedure philosopher(i:integer);beginrepeat think;wait(room);wait(chopsticki);wait(chopstick(i+1)mod 5);eat;signal(chopstick(i+1)mod 5);signal(chopsticki);signal(room);until false;end,begin parbegin philosopher(0);philosopher(1);philosopher(2);philosopher(3);philosopher(4);parendend,另一种方法:var chopstick:array0,4 of semaphore:=(1,1,1,1,1);mutex:semaphore:=1;i:=integer;,procedure philosopher(i:integer);beginrepeat think;wait(mutex);wait(chopsticki);wait(chopstick(i+1)mod 5);signal(mutex);eat;signal(chopstick(i+1)mod 5);signal(chopsticki);until false;end,21.在银行家算法的例子中,如果P0发出的请求向量由Request(0,2,0)改为Request(0,1,0),问系统可否将资源分配给它?,答:P0请求资源:P0发出请求向量Requst0(0,1,0),系统按银行家算法进行检查:Request0(0,1,0)Need0(7,4,3);Request0(0,1,0)Available(2,3,0);系统暂时先假定可为P0分配资源,并修改有关数据,Available=(2,3,0)-(0,1,0)=(2,2,0),进行安全性检查,可以找到一个安全序列P1,P3,P0,P2,P4。可以将P0所申请的资源分配给它。,另外还可找到的安全序列有:P1,P3,P4,P2,P0,P1,P3,P2,P4,P0,P1,P3,P4,P0,P2。,22.在银行家算法中,若出现下述资源分配情况:,试问:(1)该状态是否安全?(2)若进程P2提出请求Request(1,2,2,2)后,系统能否将资源分配给它?,答:(1)系统按银行家算法进行检查:,进行安全性检查,可以找到一个安全序列P0,P3,P1,P2,P4。所以系统是安全的。,另外还可找到的安全序列有:P0,P3,P4,P1,P2,P0,P3,P1,P4,P2,P0,P3,P1,P2,P4。,答:(2)P2请求资源:请求向量Requst(1,2,2,2),系统按银行家算法进行检查:Request(1,2,2,2)Need2(2,3,5,6);Request(1,2,2,2)Available(1,6,2,2);系统暂时先假定可为P2分配资源,并修改有关数据,Available=(1,6,2,2)-(1,2,2,2)=(0,4,0,0),进行安全性检查,可用资源Available(0,4,0,0)已不能满足任何进程的需求,故系统进入不安全状态,此时系统不分配资源给P2。,