死锁

死锁

死锁的定义

所谓死锁,是指多个进程因竞争资源而造成的一致僵局(互相等待),若无外力作用,这些进程都将无法向前推进。——王道论坛

如果一组进程中的每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,那么该组进程是死锁的(Deadlock)。——计算机操作系统第四版(汤)

理解:这两种类型定义都在强调一组进程的“想要而又不得”造成的等待,使得进程无法推进。

死锁的原因

(1)系统资源的竞争:对不可抢占的资源才可能造成死锁。

(2)进程推进顺序非法:例如信号量使用不当也会造成死锁,假设进程A、B都在等待接收彼此的信号,此时就可能会发生死锁。

死锁产生的必要条件

(1)互斥条件:在一段时间内只能被一个进程占用,即排他性使用。如打印机。

(2)不可抢占条件(不剥夺条件):进程使用资源期间不可被抢占,资源必须等待使用完成才能释放。

(3)请求与保持条件:吃着碗里看着锅里的,必须至少有一个资源,又申请了新的资源,此时该资源被其他进程占用,请求阻塞,但对自己的资源又不释放。

(4)循环等待条件:在发生死锁时,必然存在一个进程一个资源的循环链,即进程集合[P0,P1,P2…Pn],P0等待P1的资源,P1等待P2的资源,…Pn等待P0的资源。就像蚂蚁始终跟着前面的蚂蚁前进,当他们蚂蚁的个体首尾相连时,它们就会原地环形运动,不会前进。

处理死锁的方法

1.预防死锁

通过设置某些条件,破坏产生死锁的4个必要条件之一或多个来预防死锁。

2.避免死锁

在资源的动态分配过程中,用某种方法防止系统进入不安全状态,从而避免发生死锁。

3.检测死锁

无需事先采取任何限制性措施,运行进程在运行过程中发生死锁。但可通过检测机构及时的检测死锁的发生,然后采取适当的措施,将进程从死锁中解脱出来。

4.解除死锁

检测系统死锁发生时,采用相应的措施将死锁解除,常用的方法有:

1)抢占资源。从一个或多个进程中抢占足够的资源将其分配给死锁进程,以解除死锁。

2)终止或撤销进程。终止或撤销死锁进程,使系统摆脱死锁状态。

3)进程回退。设置中间节点,当出现死锁系统回退然后再次运行。

死锁中的重要算法和思路

鸵鸟算法:

在避免进程死锁的算法中,还有一种鸵鸟算法。它的策略就是假设出现死锁的概率很低,很久才出现一次。当死锁出现时选择忽略这个死锁。

银行家算法:

银行家算法的核心是避免系统进入不安全状态

系统安全状态指系统能按某种顺序如(P1,P2,…,Pn),来为每个进程分配所需要的资源,直至最大需求,使每个进程都可以顺序完成。若系统不存在这样一个安全序列,则称系统处于不安全状态。

死锁定理:

在这里插入图片描述

如图所示,进程P1分得两个R1资源,并请求了一个R2资源;进程P2分得了一个R1资源和一个R2资源,并请求了一个R1资源。然后利用资源分配图加以简化的方法,来检测系统处于S状态时,是否为死锁状态。

简化方法:

1、找出一个既不阻塞又非独立的进程结点Pi(即找出一条有向边与它相连,且该有向边对于资源的申请数量小于系统已有的空闲资源数量,如R1没有空闲资源,R2有一个空闲资源。若所有连接该进程的边均满足上述条件,则该进程可继续运行直至完成,然后释放它所占有的资源)。消去它所有的请求边和分配边,使其成为孤立的结点。

2、继续寻找满足条件的结点,在一系列的简化后,若能消除所有的边,使所有的结点孤立,那么改图时可以完全简化的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值