以下四点是408中死锁这一节的内容,考频基本上为每年一道题,虽然一半以上的题目是关于银行家算法的不安全序列的送分题,但其中有几道题综合了这以下几个概念,如果现在不提前分析这几个概念之间的关系的话。可能考场上就是随便蒙一个了。
- 死锁的概念
- 死锁预防
- 死锁避免
- 死锁的检测和接触
2015年真题
死锁产生的四个必要条件是:互斥资源;不可剥夺;请求并保持;循环等待链。只要破坏了死锁产生的必要条件之一,死锁就一定不会发生,这又称死锁预防。记忆口诀为,预防吃播病殉。
题中S1会限制用户申请资源的顺序,这是破坏了循环等待链,属于死锁预防,而题干说的是死锁避免,所以第一条肯定不对。
第二条说死锁避免需要资源总量信息,没问题,这是银行家算法需要的。死锁检测和解除不会管你怎么分配资源,而是提供检测和解除的手段,所以第三条也对。但是按理说资源分配图是需要知道进程需要申请多少资源的,你不知道进程要多少资源你怎么检测?不过这道题把第一条排除后只能选B。
2016年真题
这道题太牛B了,首先P4进程只需要一个资源,它不满足请求和保持条件,所以不参与死锁,排除D选项,然后就不用讨论P4了,这是这道题做出来的关键。然后循环等待条件死锁至少是要有2个进程的,排除A选项。
剩下的可以穷举了:
P1占R1,P2占R3,P3又不需要R2,此时不死锁。P1占R1,P2占R2,P3必须占R3才能死锁,三个死锁。
P1占R2,P2占R3,P3占R1,三个死锁。
P1啥都不占,P2,P3不会死锁。
只能选C了。
课后一道概念题
选项B抖动先排除了。
死锁的一个必要条件是不可剥夺,而题目说了剥夺其他已经阻塞了的进程的资源给一个进程,那么肯定不会发生死锁了,排除A选项。
而回退是死锁解除的方法,前提是已经发生死锁了,排除C选项。
只能选D。不是我想选,被逼的我不得不选。
课后题
也是死锁的检测和预防里综合了死锁预防的内容,四个必要条件。
C选项我个人不太同意,答案说的是C必定死锁。我觉得是不一定。
除非这个图不是资源分配图,或者没有环,这显然有环,因为它没有拓扑排序序列。从环的定义来看:第一个顶点和最后一个顶点相同的路径称为回路或环,也没问题。不过考试的时候我会按答案的那种做法,上面这个图应该不属于题目中的那种情况,但是不知道为什么不属于。