操作系统原理课后习题答案 联系客服

发布时间 : 星期一 文章操作系统原理课后习题答案更新完毕开始阅读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桥上的汽车数并设置互斥信号