[操作系统系列]进程的死锁

进程的死锁

死锁:
一组竞争系统资源或相互通信的进程相互的“永久”阻塞。若无外力作用,这组进程将永远不能继续执行。
死锁问题没有一种有效的通用解决方案
死锁的原因:资源数 < 要求该种资源的进程数(资源竞争,资源不足),进程的推进顺序不恰当
在这里插入图片描述
【产生死锁的4个条件】:
[必要条件]
1)互斥条件:进程所竞争的资源必须被互斥使用(互斥是资源的固有属性,无法禁止。)
2)请求保持:当前已拥有资源的进程仍能申请新的资源,当被阻塞时,对已获得的资源保持不放。
3)不可剥夺:进程已获得的资源只能在使用完时自行释放,而不能被抢占。
[充分条件]
4)环路条件:存在一个至少包含两个进程的循环等待链,链中的每个进程都正在等待下一个进程占有的资源。
2,3,4条件中破坏其中任意条件就可以预防或避免死锁。

【处理死锁的方法】
1)预防死锁:通过事先采取措施破坏产生死锁的某个或几个必要条件来防止死锁的发生。属当然如果是高可靠系统,实 时控制系统就绝对不允许死锁。花费再大的代价也要确保系统的可靠性。属于运行前预防。
2)避免死锁:在资源的动态分配过程中,用某种方法防止系统进入不安全状态,避免发生死锁。属于运行中避免(如 银行家算法)
3)检测死锁:允许发生死锁,通过检测机构及时地检测出死锁的发生
4)解除死锁:把进程从死锁中解脱出来的措施。常用方法是撤销一些进程,回收他们的资源。属于运行后解除。

【银行家算法】
银行家算法(Banker’s Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行

算法背景:在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。在这样的描述中,银行家就好比操作系统,资金就是资源,客户就相当于要申请资源的进程,进程向操作系统请求分配资源相当于用户向银行家贷款。
为保证资金的安全,银行家规定:
(1) 当一个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客;
(2) 顾客贷款的总数不能超过最大需求量(要多少拿多少不能多拿);
(3) 当银行家现有的资金不能满足顾客尚需的贷款数额时,不予贷款,但对顾客的贷款可推迟支付,但总能使顾客在有限的时间里得到贷款;
(4) 当顾客得到所需的全部资金后,一定能在有限的时间里归还所有的资金.
操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就一点都不予以分配。

总之在操作系统中当一个进程申请使用资源的时候,银行家算法通过先 试探性地 分配给该进程资源,然后通过安全性算法判断分配后的系统是否处于安全状态,若不安全则试探分配作废,让该进程继续等待。

首先是了解银行家算法中的进程
包含进程Pi的需求资源数量(也是最大需求资源数量,MAX)
已分配给该进程的资源A(Allocation)
还需要的资源数量N(Need=M-A)
Available为空闲资源数量,即资源池(注意:资源池的剩余资源数量+已分配给所有进程的资源数量=系统中的资源总量)
在这里插入图片描述
假设资源P1申请资源,银行家算法先试探的分配给它(当然必须满足剩余资源足够分配给该进程),若申请的资源数量小于等于Available,然后接着判断分配给P1后剩余的资源,能不能使进程队列的某个进程执行完毕,若没有进程可执行完毕,则系统处于不安全状态(即此时没有一个进程能够完成并释放资源,随时间推移,系统终将可能进入死锁状态)。

若有进程可执行完毕,则回收已分配给它的资源(剩余资源数量增加),把这个进程标记为可完成,并继续判断队列中的其它进程,若所有进程都可执行完毕,则系统处于安全状态,并根据可完成进程的分配顺序生成安全序列(如{P0,P3,P2,P1}表示将申请后的剩余资源Work先分配给P0–>回收(Work+已分配给P0的A0=Work)–>分配给P3–>回收(Work+A3=Work)–>分配给P2–>······满足所有进程)。
(满足银行家算法后系统一定不会处于死锁状态,但不满足银行家算法仅仅是可能有死锁的危险,并不代表一定死锁)

【鸵鸟算法】
研究商业操作系统的人不认为死锁是什么大问题,分析发现死锁发生的概率不太高,而死锁防止的代价太大(银行家算法的复杂度为n^2),防治死锁比 重启100次代价还高,因此如果死锁发生的话,直接重启即可。
现代商业操作系统采用不予理睬和静态防止两种策略的组合对死锁进行了一定的应对。例如通过对CPU、内存实施可抢 占的静态防止策略,对磁盘、打印机等实施假脱机的共享,对一些软件资源比如锁,则用虚拟存储管理实施按照顺序请求,从而防止在这些资源上发生死锁,而剩下的其他资源竞争造成的死锁就不予理睬。
当然如果是高可靠系统,实时控制系统就绝对不允许死锁。花费再大的代价也要确保系统的可靠性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值