【题目一】
考虑下图所示的交通死锁的情况:
(1)请说明这个实例中死锁的 4 个必要条件
(2)请设计一条简单的规则来避免产生死锁
答 : \color{red}{答:} 答:
(1)
①互斥,每个十字路口都处于非共享状态,每一个十字路口一次都只能允许一辆车通行
②占有并等待,每一个十字路口都有车辆,此时其他车辆不允许通行,但是车辆要是想要前进,必须等下一次十字路口空闲
③非抢占,十字路口不能被抢占,智能在当前车辆走后,下一车辆才能进入
④循环等待,还没有进入十字路口的车辆一直在等待十字路口空闲,但是每个十字路口又被车辆占有,要想前进只能等下一个十字路口空闲
(2) 设置红绿灯。
在每个路口都设置一个红绿灯。绿灯亮起,允许所有纵向车辆通行,红灯亮起,允许所有横向车辆通行。
【题目二】
考虑如下系统:该系统包含 3 个进程,共享同一类型的资源 4 个,每一个进程最多需要 2 个该类型的资源,试说明为什么该系统不会发生死锁。
答 : \color{red}{答:} 答:
不会发生死锁。一共有4份资源,3个进程,每个进程最多需要2个资源。所以无论如何总有一个进程可以得到两份资源。得到之后,就可以顺利执行,然后再释放资源,接下来的2个进程就可以顺利执行。所以不会发生死锁。
假设,我们有a份资源,b个进程,每个进程最多需要c份资源。
我们假设最差的情况,每个进程平均分配资源。每个进程分配c-1份资源,此时所占有的资源数也就是b*(c-1).但是若此时还会有一份多余资源,就不会发生死锁。所以总的资源数a>=b*(c-1)+1时,就不会造成死锁。
【题目三】
现有单实例资源系统:进程 P1 占有资源 R2,请求资源 R1;进程 P2 占有资源 R1,请求资源 R3 R4 R5;进程 P3 占有资源 R4,请求资源 R5;进程 P4 占有资源 R5,请求资源 R2;进程 P5 占有资源 R3,请求资源 R1;
(1)请画出对应的资源分配图和资源等待图;
(2)请问该系统中存在死锁吗?并请给出解释。
答 : \color{red}{答:} 答:
(1)
(2)存在死锁
因为每个资源只有单例,所以只要在资源分配图中存在环就会发生死锁。可以发现P1-R1-P2-R4-P3-R5-P4-R2-P1以及P2-R3-P5-R1-P2都构成了环,所以进程P1,P2,P3,P4循环等待构成了死锁,进程P2、P5也构成了死锁。
【题目四】
考虑系统的情况如下图所示,请依据银行家算法回答如下问题:
(1)请给出 Need 矩阵。
(2)该系统目前是否是安全的?
(3)如果 P1 请求资源 (0, 4, 2, 0),是否应该给该进程立即分配资源?
答:
(1)
(2) 我们可以试着计算一个安全序列
对于P0,可以给,然后收回,此时Available={1,5,3,2}
对于P1,给不起,跳过
对于P2,可以给,然后收回,此时Available={2,8,8,6}
对于P3,可以给,然后收回,此时Available={2,14,11,8}
对于P4,可以给,然后收回,此时Available={2,14,12,12}
对于P1,可以给,然后收回,此时Available={3,14,12,12}
最终,可以得到一个安全序列{P0,P2,P3,P4,P1},所以当前系统是安全的
(3) 如果 P1 请求资源 (0, 4, 2, 0),那么此时的Allocation矩阵贺Need矩阵,分别如下
此时我们试着求安全序列
对于P0,可以给,然后收回,此时Available={2,1,1,2}
对于P1,给不起,跳过
对于P2,可以给,然后收回,此时Available={3,4,6,6}
对于P3,可以给,然后收回,此时Available={3,10,9,8}
对于P4,可以给,然后收回,此时Available={3,10,10,12}
对于P1,可以给,然后收回,此时Available={3,14,12,12}
最终,可以得到一个安全序列{P0,P2,P3,P4,P1},所以当前系统是安全的,但是还是不能立即给P1分配资源