死锁的那些事儿
来源:互联网 发布:手机淘宝旺旺id是什么 编辑:程序博客网 时间:2024/05/16 08:51
关于死锁
- 死锁的定义: 如果一个进程集合中的每个进程都在等待只能由该进程集合中的其他进程才能引发的事件,那么,该进程集合就是死锁的。
- 产生死锁的四个必要条件
- 互斥条件: 每个资源要么已经分配给一个进程,要么就是可用的。
- 占用和等待条件: 已经得到某个资源的进程可以再请求新的资源。
- 不可抢占条件: 已经分配给一个进程的资源不能强制性的被抢占,它只能被占有他的进程显式地释放。
- 环路等待条件: 死锁发生时,系统中一定有由两个或两个以上的进程组成的一条环路,该环路中的每一个进程都等待着下一个进程所占有的资源。
- 产生死锁的原因
- 资源竞争引起进程死锁
- 进程推进顺序不当引发死锁
解决死锁的基本方法
预防死锁
- 打破互斥条件:改造独占性资源为虚拟资源,大部分资源已无法改造
- 打破不可抢占条件:当一进程占有一独占性资源后又申请一独占性资源而无法满足,则退出原占有的资源(可剥夺资源)
- 打破占有且申请条件:采用资源预先分配策略,即进程运行前申请全部资源,满足则远行,不然就等待,这样就不会占有且申请(资源一次性分配)
- 打破循环等待条件:实现资源有序分配策略,对所有设备实现分类编号,所有进程只能采用按序号递增的形式申请资源(资源的有序分配)
检测死锁
预防死锁的几种策略,会严重地损害系统性能。因此在避免死锁时,要施加较弱的限制,从而获得 较满意的系统性能。由于在避免死锁的策略中,允许进程动态地申请资源。因而,系统在进行资源分配之前预先计算资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程;否则,进程等待。其中最具有代表性的避免死锁算法是银行家算法。安全状态与不安全状态:安全状态指系统能按某种进程顺序来为每个进程分配其所需资源,直 至最大需求,使每个进程都可顺利完成。若系统不存在这样一个序列, 则称系统处于不安全状态。
检测死锁
首先为每个进程和每个资源指定一个唯一的号码,
然后建立资源分配表和进程等待表。
TODO: 补充完整从死锁中恢复
- 利用抢占恢复: 从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态
- 利用回滚恢复:从进程检测点进行恢复。
- 通过杀死进程恢复:可以直接撤消死锁进程或撤消代价最小的进程,直至有足够的资源可用,死锁状态.消除为止;所谓代价是指优先级、运行代价、进程的重要性和价值等。
进程检测点: 将进程的状态写入一个文件以备重新启动,该检测点不光包括存储映像,还包括资源状态。
0 0
- 死锁的那些事儿
- 数据库中死锁那些事儿
- 明朝的那些事儿
- Oracle 的那些事儿
- VC++的那些事儿
- 游戏的那些事儿
- 编译器的那些事儿
- 找工作的那些事儿
- 北爱尔兰的那些事儿
- 数组的那些事儿~
- 密码的那些事儿
- poi的那些事儿
- Format的那些事儿
- 线程的那些事儿
- platform的那些事儿
- JDBC的那些事儿~~~
- SEO的那些事儿
- OpenCV的那些事儿
- 一步一步实现一个简单的OS(进入保护模式)
- JAVA可变参数(Varargs)
- 欢迎使用CSDN-markdown编辑器
- JAVA EE架构师 需要具备的知识
- iOS ARC下内存泄露的几种情况和解决办法
- 死锁的那些事儿
- Java 三大特性
- Glassfish Request URI is too large 问题的解决
- C/CPP点滴积累—scanf,getchar之输入缓冲区
- [iOS]解决 Navigation 滑动返回手势丢失问题
- 匿名内部类 传参 java
- 在这里开始记录!从ffmpeg开始……
- 关于linux中的延时函数
- 如何复用无线网卡同时作热点用