死锁

死锁

产生原因:资源竞争,进程间推进顺序非法

资源分类:可剥夺与否或     永久与临时性资源(如消息,信号量,中断,缓冲区等)

 

产生死锁的必要条件:(四者必备)

1.   互斥,进程对资源的排他性使用,其他需求该资源进程只能阻塞;

2.   占有并等待,拥有一些资源的进程需要其他资源,但其他资源已被占有,此进程阻塞,不释放已获得资源

3.   不可剥夺:进程获得资源不可剥夺,只能使用完自行释放

4.   循环等待,存在一个进程与资源的环形链,其中每个进程都等待一个被占用的资源


判断死锁:

资源分配图判别法:由进程(圆圈),资源(方框,内圆点数目表资源数目),请求边,分配边(有向箭头)

死锁的充要条件:若各类资源数唯一,则图中含圈

必要条件:若死锁,图必定含圈;含圈,不一定死锁


死锁处理:

一.死锁预防(设置限制条件,源头做起):

约束资源请求,破坏四条件,导致资源使用,进程进行低效

主要策略:

1.破坏互斥条件(不实际)

2.破坏占有且等待:

资源预分配策略:进程所需资源一次性分配,要么全满足,要么不分配

空手申请资源策略:申请的资源满足一次时间片,用完释放,下次再申请

导致进程延时进行(申请资源时间长),资源浪费(闲置时间长),执行前对资源需求估计难以进行

3.破坏非剥夺条件

抢占申请者资源策略:进程申请资源时,有则分配,无则剥夺进程占有的所有资源

抢占等待着资源策略:进程申请资源时,有则分配,无则剥夺占有该资源且处于等待状态的进程的该资源

代价大,资源回收,有可能前功尽弃,,延长进程时间,开销大

5.   破坏循环等待条件

有序分配资源策略:将资源编号,进程只能按由小到大的序号申请资源,同类资源一次申请完,不满足不分配

限制新设备增加,资源浪费,编程难度


二.死锁避免

系统动态决定是否满足当前进程的资源请求,采用资源分配拒绝策略,进行预测,此次分配不会导致系统不安全状态,则分配,否则拒绝分配

系统的安全状态:至少存在一个进程推进程序,为进程分配资源,满足其需求,使得所有进程都可以顺利完成;

银行家算法:对上述的算法实现;示例代码链接:

银行家算法 

相比一,限制少,但是安全性判断时需要的信息多(进程的最大资源需求量,资源数目固定且预知),且要求进程不同步,占有资源时不退出

 

三.死锁检测

1.简化资源分配图法:

简化:对资源分配图中,非孤立且未阻塞的进程,可以删去其请求,分配边(这些进程可以顺利执行,故不在考虑),成为孤立节点

若图中所有进程都为孤立节点,则该图可以完全简化

死锁的充要条件:资源分配图不可以完全简化;

 

2.死锁检测算法(1的实现):与银行家算法类似,能否在当前图下找到一条合适的进程解决方案,有则无死锁;


四.死锁解除

1.剥夺资源

资源从一个进程剥夺,交于另一进程;实现困难,影响严重

2.进程回退

进程不同时刻信息保存,死锁的参与的某一个进程回退到未占用导致死锁资源的时刻;可能前述工作丢失,开销大

3.撤销进程

撤销一到多个导致死锁的进程,或占用死锁资源的进程

应遵循最小代价原则

 

鸵鸟算法:

装作看不见,不管死锁(如果解决死锁花费很低,当然解决好了,但有时花费很大,甚至影响性能,当死锁发生率很低时候,就不管他),这其实是,满足谁的收益大的问题,是性能还是死锁

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值