避免死锁的一个著名算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
避免死锁
防止死锁是消除死锁的静态策略。
这使得死锁不能同时满足四个必要条件,从而限制了流程应用程序资源的活动,以确保不会发生死锁。
接下来,我们将介绍消除死锁的动态策略-避免死锁。
它不限制进程有关请求资源的命令。
相反,它动态检查每个请求是否有进程发出的资源,并根据检查结果确定是否分配资源。
换句话说,在资源分配过程中,如果可以预测出现死锁的可能性,则可以避免死锁。
该方法的关键是确定资源分配的安全性。
1.安全顺序
我们首先介绍安全性序列的定义:所谓的系统是安全的,这意味着系统中的所有进程都可以按照一定顺序分配资源并依次完成运行。
该过程序列{P1,P2,...,PN}是安全序列。
如果有这样的安全序列,则系统是安全的;如果没有这样的安全序列,则系统不安全。
安全序列{P1,P2,...,PN}的组成如下:如果对于每个流程PI,可以通过系统中当前可用资源的总和加上当前由系统占用的资源来满足其所需的其他资源。
所有进程PJ,然后{P1,P2,...,PN}是一个安全序列,系统处于安全状态,不会进入死锁状态。
尽管在有安全序列时必须没有死锁,但是当系统进入不安全状态(同时发生四个死锁的必要条件)时,可能不会发生死锁。
当然,死锁后,系统必须处于不安全状态。
2.Banker算法
一句话:
当某个流程适用于使用资源时,银行家的算法首先尝试为该流程分配资源,然后通过安全算法判断分配的系统是否处于安全状态。
如果不安全,则试用分配将作废,并且该过程将继续等待。
当流程发出资源请求时,银行算法将执行以下步骤来决定是否向其分配资源:
1)检查过程所需的资源是否已超出其声明的最大值。
2)检查系统当前是否有足够的资源来满足该过程的请求。
3)系统尝试为进程分配资源并获得新状态。
4)如果新状态是安全的,则分配完成;如果新状态不安全,则将还原原始状态并阻止该过程。