操作系统第3章处理机调度与死锁-习题.pptx
至多允许四个哲学家同时进餐,来保证至少有一个哲学家能够进餐,最终总会放下他所用的筷子,从而更多的哲学家可以进餐;仅当哲学家的左、右两只筷子都可用时,才允许他进餐;规定奇数号哲学家先拿他左边的筷子,再拿右边的筷子;偶数号哲学家先拿他右边的筷子,再拿其左边的筷子。这样,1、2号哲学家竞争1号筷子,3、4号哲学家竞争3号筷子(哲学家顺时针就座,筷子也顺时针放置,且1号筷子在1号哲学家左边),这样他们总是先竞争奇数号筷子,获得后,再竞争偶数号筷子,最后总能保证一位哲学家能拿到两只筷子。试利用记录型信号量写出一个不会出现死锁的哲学家进餐问题的算法。解决办法有三:
01采用⑴方案,我们增加一位服务生(信号量room),让他只允许四位哲学家同时进入餐厅。02varchopstick:array[0,…,4]ofsemaphore:=(1,1,1,1,1);03room:semaphore:=4;04i:=integer;
procedurephilosopher(i:integer);beginrepeatthink;wait(room);wait(chopstick[i]);wait(chopstick[(i+1)mod5]);eat;signal(chopstick[(i+1)mod5]);signal(chopstick[i]);signal(room);untilfalse;end
beginparbeginphilosopher(0);philosopher(1);philosopher(2);philosopher(3);philosopher(4);parendend
01varchopstick:array[0,…,4]ofsemaphore:=(1,1,1,1,1);02mutex:semaphore:=1;03i:=integer;另一种方法:
procedurephilosopher(i:integer);beginrepeatthink;wait(mutex);wait(chopstick[i]);wait(chopstick[(i+1)mod5]);signal(mutex);eat;signal(chopstick[(i+1)mod5]);signal(chopstick[i]);untilfalse;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)
进程AllocationNeedAvailableP0020733220P1302020P2302600P3211011P4002431
进程WorkNeedAllocationWork+AllocationFinishP1220020302522trueP3522011211733trueP0733733020753trueP27536003021055trueP410554310021057true进行安全性检查,可以找到一个安全序列{P1,P3,P0,P2,P4}。可以将P0所申请的资源分配给它。
另外还可找到的安全序列有:{P1,P3,P4,P2,P0},01{P1,P3,P2,P4,P0},{P1,P3,P4,P0,P2}。02
22.在银行家算法中,若出现下述资源分配情况:ProcessAllocationNeedAvailableP0003400121622P110001750P213542356P303320652P4