死锁的产生及其解决方法

死锁的书面定义:一组相互竞争系统资源或进行通信的进程间的“永久”阻塞。
死锁原理:当一组进程中的每个进程都在等待某个事件发生,而只有这组进程中的其他被阻塞进程才能触发该事件,这时就称这组进程发生了死锁。
一种死锁情况:
这里写图片描述
死锁的必要条件
1、互斥:一次只有一个进程可以使用一个资源。其他进程不能访问已分配给其他进程的资源。
2、占有且等待:当一个进程等待其他进程时,继续占有已经分配的资源。
3、不可抢占:不能强行抢占进程已占有的资源。
4、循环等待:存在一个进程链,使得每个进程都占有下一个资源所需的一个资源。
当程序运行到一个“敏感区域”时,就会发生死锁。而只有当上面的前三个条件都满足时,这个敏感区域才存在。如果一个或多个条件不能满足,就不存在所谓的敏感区域,死锁就不会发生。因此上述的前三个条件是死锁的必要条件。如果出现循环等待的情况,那么进程实际上已经进入了敏感区域。上述四个条件是死锁的充分条件。因此这四个条件连在一起构成了死锁的充分必要条件。可总结如下:
这里写图片描述
处理死锁的三种方法:
1、采用某种策略来消除四个条件中的一个的出现来预防死锁
2、基于资源分配的当前状态做动态选择来避免死锁
3、检测死锁(满足四个条件)的存在并且从死锁中恢复出来。

死锁预防
死锁预防策略是试图设计一种系统来排除发生死锁的可能性。
分类:
1、间接的死锁预防方法:防止前面列出的三个必要条件中任何一个的发生。
2、直接的死锁预防方法:防止循环等待的发生。
具体分析:
a、互斥。一般来说,互斥是不可能禁止的,如果需要对资源进行互斥访问,那么系统必须支持互斥。
b、占有且等待。要防止这个条件发生,可要求进程一次性地请求所有所需要的资源,并且阻塞这个进程直到所有请求都同时满足。这种方法是比较低效的:
(1)为了等待系统满足所有请求,某个进程可能被阻塞很长时间。而只要有一部分资源这个进程就可以运行。
(2)分配给某个进程的资源很可能在相当长的时间内都不会被使用,而在这期间,其他进程也不能使用这部分资源。
还有个问题是一个进程很可能不知道它所需要的所有资源。
c、不可抢占。两种预防方法:
(1)如果占有某些资源的一个进程进一步申请资源时被拒绝,则该进程必须释放它最初占有的资源。
(2)如果一个进程请求当前被另一个进程占有的一个资源,则操作系统可以抢占另一个进程,要求它释放资源。(只有在任意两个进程不同的情况下才能预防死锁)
只有在资源状态容易恢复的情况下这种方法才实用。
d、循环等待。可通过定义资源类型的线性顺序来预防。可将每个资源编号,当一个进程占有编号为i的资源时,那么它下一次申请资源只能申请编号大于i的资源。其关系可这样表示:
这里写图片描述
这样就避免了循环等待。但是这种方法是低效的,它会使资源执行速度变慢,并且可能在没有必要的情况下拒绝资源访问。
总结:死锁预防通过约束资源请求,使得4个死锁条件中至少有一个被破坏,来防止死锁的发生。但是会导致低效的资源使用和低效的进程执行。

死锁避免
在死锁避免中,是否允许当前的资源分配请求是通过判断该请求是可能导致死锁来决定的。因此,死锁避免需要知道将来的进程资源请求的情况。
两种死锁避免方法:
1、如果一个进程的请求会导致死锁,则不启动此进程。
2、如果一个进程增加的资源请求会导致死锁,则不允许此分配。
具体分析:
a、进程启动拒绝
下图来自《 操作系统——精髓与设计原理》一书:
这里写图片描述
对于新进程P(n+1),只有当
这里写图片描述
时,才启动新进程P(n+1)。
当一个新进程的资源需求会导致死锁,则拒绝启动这个新进程。只有所有当前进程的最大请求量加上新的进程请求可以满足时,才会启动该进程。
资源分配拒绝
资源分配拒绝策略,又称为银行家算法。该策略能确保系统的进程和资源总处于安全状态。当一个进程请求资源时,假设同意该请求,从而改变系统状态,然后确定其结果是否还处于安全状态。如果是则同意该请求,不是则阻塞该进程直到同意该请求后结果是安全的。在这里不对银行家算法进行详细探讨,后面会有专门的博客来详述此算法。
死锁避免的优点:不需要死锁预防中的抢占和重新运行进程,并且比死锁预防的限制少。
死锁避免的限制
a、必须事先声明每个进程请求的最大资源量。
b、考虑的进程必须是无关的,也就是说,它们执行的顺序必须没有任何同步要求的限制。
c、分配的资源数目必须是固定的。
d、在占有资源时,资源不能退出。

死锁检测
死锁检测不限制资源访问或约束资源行为。对于死锁检测方法,只要有可能资源就会被授权给进程。系统周期性的执行一个算法检测循环等待。
在《 操作系统——精髓与设计原理》一书中对这种方法作了很好的阐述,直接来看原文叙述:
这里写图片描述
并且用下面例子说明:
这里写图片描述
同时在检测出死锁后,给出如下恢复办法:
这里写图片描述
另外,书中给出了综合解决死锁的方法,其思想是针对不同情况、不同资源发生的死锁,采取相应的死锁解决方法:
这里写图片描述
PS:强烈推荐《 操作系统——精髓与设计原理》一书。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值