死锁的概念、处理方法
来源:互联网 发布:2016淘宝小号都死完了 编辑:程序博客网 时间:2024/05/30 23:30
1 产生死锁的原因
(1)竞争资源。进程竞争数量不足的资源。
(2)进程间推进顺序非法。进程请求和释放资源的顺序不当。
2 产生死锁的必要条件
(1)互斥条件
进程对分配到的资源进行排他性使用,即在一段时间内某资源只由一个进程占用。
(2)请求和保持条件
进程在保持了至少一个资源的时候提出了新的资源请求,但该资源已被其它进程占有,而自己又对已经获得的资源不释放。
(3)不剥夺条件
进程已获得的资源,在未使用完之前,不能被剥夺。
(4)环路等待条件
发生死锁时存在一个进程—资源的环形链。进程集合{P0 , P1 , ... , Pn}中,P0等待P1占用的资源,P1等待P2占用的资源,......,Pn等待P0占用的资源。
3 处理死锁的方法
3.1 预防死锁
设置某些限制条件,破坏产生死锁的四个必要条件中的一个或几个条件。
(1)摒弃“请求和保持条件”条件
系统规定所有进程在开始运行之前,都必须一次性地申请其在整个运行过程所需的全部资源。
缺点:严重浪费资源,使进程延迟运行。
(2)摒弃“不剥夺”条件
当一个已经保持了某些资源的进程,再提出新的资源请求而不能立即得到满足时,必须释放它保持了的所有资源,待以后需要时再重新申请。
缺点:实现复杂,要付出很大代价。资源的释放会造成前段工作实效。
(3)摒弃“环路等待”条件
系统将所有资源按类型进行线性排队,并赋予不同的序号。如:输入机1,打印机2,磁带机3,磁盘4。所有进程对资源的请求必须严格按照资源序号递增的次序提出。
缺点:系统中资源的序号必须相对稳定,这就限制了新类型设备的增加。另外,进程使用各类资源的顺序可能和系统规定的申请顺序不同,造成对资源的浪费。
3.2 避免死锁
防止系统进入不安全状态,从而避免发生死锁。
安全状态:
存在一种进程顺序 ,系统能按照此顺序(安全序列)来为每个进程Pi分配其所需要的资源,直至满足每个进程对资源的最大需求,使每个进程都可以顺利完成。
不安全状态:
不存在这样的安全序列。
银行家算法:
当进程Pi发出资源请求后,系统试探着把资源分配给Pi,并判断分配后的状态是否为安全状态。如果安全,才正式将资源分配给Pi,如果不安全,则恢复原来的资源分配状态,让进程Pi等待。
判断安全状态的方法:
从进程集合中找到一个能满足其资源需求的进程,给它分配资源,等其完成后可回收其拥有的资源。然后再不断循环。若最后所有进程都可以顺利执行完成,则当前状态为安全状态,否则为不安全状态。
3.3 检测死锁
允许系统发生死锁,但可以检测出死锁的发生。
资源分配图
e={pi, rj}是资源请求边,由进程pi指向资源rj,它表示进程pi请求一个单位的资源rj。e={rj , pi }是资源占有边,由资源rj指向进程pi,它表示进程pi占有一个单位的资源rj。
每次找出在占有和请求的约束下,能顺利完成的进程Pi,消去其所有的请求和占有资源的边。若最后所有的进程都成为孤立点,则当前状态为安全状态;否则为不安全状态。
3.4 解除死锁
当检测到系统发生死锁时,撤销或挂起一些进程,以便回收一些资源,再将这些资源分配给处于阻塞状态的进程,使之转为就绪状态,继续运行。
阅读全文
0 0
- 死锁的概念、处理方法
- 处理死锁和预防死锁的方法
- 【操作系统】处理死锁的方法
- 产生死锁的必要条件和处理死锁的基本方法
- 死锁产生的条件和处理死锁的方法
- 死锁的原因及处理方法
- 死锁的相关概念
- 死锁的相关概念
- 9.死锁的概念、导致死锁的原因,导致死锁的四个必要条件,预防死锁的方法、避免死锁的方法
- 死锁及其处理方法
- Java线程死锁的概念
- 操作系统的死锁概念,临界区概念
- 死锁的产生原因&&产生的必要条件&&处理方法
- ORACLE 死锁的处理
- 死锁的处理
- Postgresql死锁的处理
- Postgresql死锁的处理
- Oracle死锁的处理
- 禁止遮罩层以下屏幕滑动
- 读jar包路径
- CC2640R2F BLE5.0 CC2640R2F硬件架构
- jar包和war包的介绍和区别
- 内存
- 死锁的概念、处理方法
- 51nod 1265 四点共面(计算几何)
- tomcat启动闪退
- HDU6048-Puzzle
- UVa816 bfs
- 正三角形的外接圆面积
- 使用浏览器自带定位功能初始化百度地图
- 最简单的底部导航栏,仿微信的滑动切换效果
- C++-智能指针——简单实现分析