1、试举例说明因竞争可重用资源和可消耗资源引起的死锁

在这里插入图片描述
在这里插入图片描述

2、什么叫死锁?产生死锁的必要条件是什么?

答:死锁是指一组进程中的每一个进程,均无限期地等待此组进程中某个其它进程占有的,因而永远无法得到的资源

死锁产生的必要条件:

①互斥条件:一个资源在同一时刻只能分配给一个进程。

②请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有。

③不可抢占条件:进程已获得的资源,在未使用完之前不能被抢占,只能在进程使用完时由自己释放。

④循环等待条件:叫环路等待条件,存在一个循环等待链,其中,每一个进程分别等待它前一个进程所持有的资源,造成永远等待

3、举例说明可通过哪些途径预防死锁。

答:①摈弃“请求和保持”条件,就是如果系统有足够资源,便一次性把进程需要的所有资源分配给它;

②摈弃“不剥夺”条件,就是已经拥有资源的进程,当它提出新资源请求而不能立即满足时, 必须释放它已保持的所有资源,待以后需要时再重新申请;

③摈弃“环路等待”条件,就是将所有资源按类型排序标号,所有进程对资源的请求必须严格按序号递增的次序提出

4、在银行家算法例子中,如果P0发出的请求向量由Request(0,2,0)改为Request(0,1,0),问系统可否将资源分配给它?
答:

能;系统按银行家算法检查:

Request0(0,1,0) <= Need0(7,4,3);

Request0(0,1,0) <= Available(2,3,0)

暂时先假定可为P0分配资源:

在这里插入图片描述

进行安全性检查:

在这里插入图片描述

故存在一个安全序列{p1,p3,p0,p2,p4},故系统是安全的,可以分配

5、教材31题(P.128):

在这里插入图片描述

(1)

在这里插入图片描述

跟据银行家算法,存在安全序列<P0,P3,P1,P2,P4>,故系统是安全的

(2)

Request(1,2,2,2) <= Need

Request(1,2,2,2) <= Avaiable

假设将资源分配给P2

在这里插入图片描述

根据银行家算法,不存在一条安全队列,故系统不能分配资源给P2

6、
(1)某系统有5个进程共享6个资源,每个进程申请的资源数不超过多少(时,系统一定不会发生死锁?

设每个进程分配n - 1个资源不会发生死锁

则有:(n – 1) * 5 + 1 > 6

解得n > 2

则当n <= 2时,系统不会发送死锁

(2)某系统有8个进程,每个进程最多申请7个资源,当系统资源数不少于多少时,就不会发生死锁?

不会发生死锁?

设系统总资源数为 n

则有 6 * 8 + 1 > n

解得n = 49 个

(3)某系统同类资源m个,供n个进程共享。如果每个进程至少申请k个资源,m、n、k满足什么条件,系统就不会发生死锁?

k满足什么条件,系统就不会发生死锁?

设每个进程最多分配k个资源

如果每个进程分配k- 1个资源时,刚好分配完

此时,再分配一个资源,则会发生死锁

如果每个进程分配k- 1个资源时,还有一个资源

此时,如果再分配一个资源,则不会发生死锁

故有 n(k– 1) + 1> m

化简得 nk > m – 1 + n

nk > m + n

7、假定凡死锁都存在死锁进程集的一个循环等待链,画出5个进程陷入死锁的所有非同构模型。
8、什么是安全状态?什么是安全序列?

答:安全状态是指系统中存在一种执行路径,使可用的系统资源能满足所有进程的资源请求,从而顺利结束。

安全序列指的是使可用的系统资源能满足所有进程资源请求要求的一个进程序列。

9、假定系统中有4个进程P1、P2、P3、P4和3类资源R1、R2、R3(资源数量分别为9、3、6),在t0时刻的资源分配情况如下表所示:

资源情况 claim allocation need available

进程 R1R2R3 R1R2R3 R1R2R3 R1R2R3

P1 3 2 2 1 0 0 2 2 2 1 1 2

P2 6 1 3 5 1 1 1 0 2

P3 3 1 4 2 1 1 1 0 3

P4 4 2 2 0 0 2 4 2 0

试问:(1)t0时刻系统是否安全?

在这里插入图片描述

存在一个安全序列{P2,P1,P3,P4}故t0时刻系统安全

(2)P2发出请求向量request2(1,0,1),系统能否将资源分配给它?

假设系统相应了request2(1,0,1)后,资源分配如下:

在这里插入图片描述

进行安全性检查,可用资源Available(0,1,0)已不能满足任何进程的需要,故系统进入不安全状态,此时系统不能分配资源。

(3)在P2申请资源后,若P1发出请求向量request1(1,0,1),系统能否将资源分配给它?

在P2申请资源后

①request1(1,0,1)<=need(2,2,2);

②request1(1,0,1)>available(0,1,1);

让P2等待,系统不会将资源分配给它。

10、对于表3-7所描述的系统,画出资源分配图

在这里插入图片描述
在这里插入图片描述

11.假设系统配有相同类型的m个资源,系统中有n个进程,每个进程至少请求一个资源(最多不超过m)。请证明,当n个进程最多需要的资源数之和小于(m+n) 时,该系统不会发生死锁。

设每个进程最多分配x个资源
如果每个进程分配x- 1个资源时,刚好分配完
此时,再分配一个资源,则会发生死锁
如果每个进程分配x- 1个资源时,还有一个资源
此时,如果再分配一个资源,则不会发生死锁
故有 n(x – 1) + 1> m
化简得 nx > m – 1 + n
固有nx > m + n
所有当n个进程最多需要的资源数之和小于(m+n) 时,该系统不会发生死锁

12.思考下图的交通阻塞“死锁”

在这里插入图片描述

a.在这个例子中说明死锁产生的四个必要条件

互斥:每个转角只能通过一辆车。
占有并等待:当一辆车进入了路口,需要等待前面的车通行
非抢占:车辆占用了路口后,其他车子只能等待该车离开
循环等待:下方的车辆等待右边的车辆通过,右边的车辆等待上方的车辆通过,上方的车辆等待左方的车辆通过,左边的车量等待下方的车辆通过。

b.设置一个简单的规则去避免该情况的发生

13.一座单行桥连接着佛蒙特州的两个村庄北通桥和南通桥。这两个村庄的农民用这座桥把他们的农产品运到邻近的城镇。如果一个北向的农民和一个南向的农民同时上了桥,这座桥就会陷入僵局。(佛蒙特州的农民很固执,不能后退。)使用信号量和/或互斥锁,用伪代码设计一个防止死锁的算法。首先,不要是关于饥饿的算法(北方农民阻止南方农民使用桥的情况,反之亦然)。
Semaphore mutex = 1;
北方居民上桥()
{
    Wait(mutex);
    过桥;
Signal(mutex);
}
南方居民上桥()
{
    Wait(mutex);
    过桥;
Signal(mutex);
}

锁,用伪代码设计一个防止死锁的算法。首先,不要是关于饥饿的算法(北方农民阻止南方农民使用桥的情况,反之亦然)。

Semaphore mutex = 1;
北方居民上桥()
{
    Wait(mutex);
    过桥;
Signal(mutex);
}
南方居民上桥()
{
    Wait(mutex);
    过桥;
Signal(mutex);
}
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐