发布时间 : 星期一 文章操作系统原理课后习题答案更新完毕开始阅读6208a7d977232f60ddcca1ec
程使用,每一进程对任一资源都只能使用一有限时间,使用完便立即释放,并且每个进程对该类资源的最大需求量小于该类资源的数目。设所有进程对资源的最大需求数目之和小于p+m.试证:在该系统中不会发生死锁。
证:假设每个进程最多请求Xi(1
X1+X2+...+Xp-1+Xp
(X1-1)+(X2-1)+...+(Xp-1-1)+(Xp-1) (X1-1)+(X2-1)+...+(Xp-1-1)+(Xp-1)+1 这说明在最坏情况下,每个进程均还差一个资源,而此时系统中还有一个没被分配的可用资源。将它分配给任何一个进程,都可以使该得到全部资源的 进程运行结束而释放其占有的资源,并将释放的资源分配给其它的进程,使其 它进程都能运行结束,系统不会发生死锁。 证毕。 5-6 图5.9表示一带闸门的运河,其上有两家吊桥。吊桥坐落在一条公路上,为使该公路避开一块沼泽地而令其横跨运河两次。运河和公路的交通都是单向的。运河上的基本运输由驳船担负。在一般驳船接近吊桥A时就拉汽笛警告,若吊桥上无车辆,吊桥就吊起,直到驳船尾部通过此桥为止。对吊桥B也按同样次序处理。 一艘典型驳船的长度为200m,当它在河上航行时是否会产生死锁?若会,其理由是什么? 如何能克服一个可能的死锁?请提出一个防止死锁的办法。 如何利用信号灯的P,V操作,实现车辆和驳船的同步? (1)驳船长 200 米,当驳船通过了A桥,其船头到达B桥,请求B桥吊起,而此时它的尾部仍占据 A 桥。若这个时候 B 桥上及 B 桥到 A 桥之间的公路上都被汽车占据,而汽车又要求通过 A 桥。这样驳船和汽车都无法前进,形成死锁的局面。 (2)可以有以下两种方法: c资源的静态分配。即进程把它所需要的所有资源在运行前提前申请,系统把它所需要的全部资源一次性都分配给它。也就是说,这时把 A 桥和 B 桥看成一个资源。打破了产生死锁的四个必要条件之一的部分分配条件。 d可以规定资源按序申请和分配,从而破坏了死锁的循环等待条件,防止死锁的发生。规定如下:B 桥的序号小于 A 桥的序号,驳船和汽车都必须先申请序号小的资源 B 桥,申请得到满足后,再申请序号大的资源 A 桥。 (3)算法如下: c设置两个互斥信号量 mutexa,mutexb,用来实现驳船和汽车对 A 桥和对 B 桥的互斥使用;设置一个共享变量 count,用来记录当前占用 A 桥和 B 桥的汽车数并设置互斥信号量 mutex,用来实现汽车对共享变量 count 的互斥访问。 Main( ){ int mutexa, mutexb, mutex, count mutexa=1; mutexb=1; mutex=1; count=0; cobegin bargei; //i=1,2,..,m carj; //j=1,2,..,n coend } bargei(){ ..... P(mutexb); P(mutexa); 吊起 B 桥; 吊起 A 桥; 驳船通过 A 桥; 放下 A 桥; 驳船通过 B 桥; 放下 B 桥; V(mutexa); V(mutexb); ..... } carj(){ ...... P(mutex); count++; if(count==1) { P(mutexb); P(mutexa); } V(mutex); 汽车通过 B 桥; 汽车通过 AB 段公路; 汽车通过 A 桥; P(mutex); count--; if(count==0) { V(mutexb); V(mutexa); } V(mutex); ..... } d设置两个互斥信号量mutexa,mutexb,用来实现驳船和汽车对A桥和对B桥的互斥使用;设置两个共享变量counta和countb,分别用来记录A桥和B桥上的汽车数并设置互斥信号