死锁的那些事儿
2016-03-03 10:22
281 查看
关于死锁
死锁的定义: 如果一个进程集合中的每个进程都在等待只能由该进程集合中的其他进程才能引发的事件,那么,该进程集合就是死锁的。产生死锁的四个必要条件
互斥条件: 每个资源要么已经分配给一个进程,要么就是可用的。
占用和等待条件: 已经得到某个资源的进程可以再请求新的资源。
不可抢占条件: 已经分配给一个进程的资源不能强制性的被抢占,它只能被占有他的进程显式地释放。
环路等待条件: 死锁发生时,系统中一定有由两个或两个以上的进程组成的一条环路,该环路中的每一个进程都等待着下一个进程所占有的资源。
产生死锁的原因
资源竞争引起进程死锁
进程推进顺序不当引发死锁
解决死锁的基本方法
预防死锁打破互斥条件:改造独占性资源为虚拟资源,大部分资源已无法改造
打破不可抢占条件:当一进程占有一独占性资源后又申请一独占性资源而无法满足,则退出原占有的资源(可剥夺资源)
打破占有且申请条件:采用资源预先分配策略,即进程运行前申请全部资源,满足则远行,不然就等待,这样就不会占有且申请(资源一次性分配)
打破循环等待条件:实现资源有序分配策略,对所有设备实现分类编号,所有进程只能采用按序号递增的形式申请资源(资源的有序分配)
检测死锁
预防死锁的几种策略,会严重地损害系统性能。因此在避免死锁时,要施加较弱的限制,从而获得 较满意的系统性能。由于在避免死锁的策略中,允许进程动态地申请资源。因而,系统在进行资源分配之前预先计算资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程;否则,进程等待。其中最具有代表性的避免死锁算法是银行家算法。
安全状态与不安全状态:安全状态指系统能按某种进程顺序来为每个进程分配其所需资源,直 至最大需求,使每个进程都可顺利完成。若系统不存在这样一个序列, 则称系统处于不安全状态。
检测死锁
首先为每个进程和每个资源指定一个唯一的号码,
然后建立资源分配表和进程等待表。
TODO: 补充完整
从死锁中恢复
利用抢占恢复: 从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态
利用回滚恢复:从进程检测点进行恢复。
通过杀死进程恢复:可以直接撤消死锁进程或撤消代价最小的进程,直至有足够的资源可用,死锁状态.消除为止;所谓代价是指优先级、运行代价、进程的重要性和价值等。
进程检测点: 将进程的状态写入一个文件以备重新启动,该检测点不光包括存储映像,还包括资源状态。
相关文章推荐
- 出现undefined reference to 'WinMain@16'的可能情况
- 国内各大互联网公司相关技术站点2.0版 (集合腾讯、阿里、百度、搜狐、新浪、360等共49个)
- 设计模式:二
- IQ 15.X 从IQ_SYSTEM_MAIN DBSPACE 上把数据库对像迁移到用户 DBSPACE 上的办法[转]
- 设计模式:适配器模式和代理模式的区别
- MyBatis Like 拼接
- ganglia安装
- app移动接口开发需要注意什么
- SpringMVC+Spring Security+mave+mybatis整合一
- 学习linux决心书
- iOS ARC下内存泄露的几种情况和解决办法
- 为什么要需求分析
- 欢迎使用CSDN-markdown编辑器
- 蓝桥杯往届试题——蚂蚁感冒(思维题目)
- Missing Number
- python之字符串详解2
- Sitemesh3的使用及配置
- Android ACodec学习
- 初接触jquery easyui的一点认知
- kafka监控Kafka Offset Monitor