避免死锁-银行家算法

                                     避免死锁-银行家算法

       了解了什么是死锁,以及死锁产生的原因,懂得如何去避免死锁。在前面 操作系统之【死锁问题】 已经提到。在死锁的避免上有现今有两种比较著名的方案,一是有序资源分配法,二是银行家算法。这里讲述一下银行家算法。

避免死锁-银行家算法_第1张图片

一、什么是银行家算法?

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

二、银行家算法和死锁之间的联系是什么?

在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。在这样的描述中,银行家就好比操作系统,资金就是资源,客户就相当于要申请资源的进程。

银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源。系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。

三、银行家算法:分配资源的原则

先举一个例子:

一个银行家共有20亿财产
第一个开发商:已贷款15亿,资金紧张还需3亿。
第二个开发商:已贷款5亿,运转良好能收回。
第三个开发商:欲贷款18亿

在这种情况下,如果你是银行家,你怎么处理这种情况?一个常规的想法就是先等着第二个开发商把钱收回来,然后手里有了5个亿,再把3个亿贷款给第一个开发商,等第一个开发商收回来18个亿,然后再把钱贷款给第三个开发商。
这里面什么值得学习呢?最重要的就是眼光放长一点,不要只看着手里有多少钱,同时要注意到别人欠自己的钱怎么能收回来。

银行家是资源,开发商是进程。在操作系统中,有内存,硬盘等等资源被众多进程渴求着,那么这些资源怎么分配给他们才能避免“银行家破产”的风险?

(1)当一个进程对资源的最大需求量不超过系统的资源数时,可以接纳该进程。

(2)进程可以分期请求资源,但请求的总数不能超过最大需求量

(3)当系统现有的资源不能满足系统尚需资源数时,对进程的需求可以推迟分配。但总能使进程在有限时间里得到资源。


四、实际解析银行家算法

假设系统中有三类互斥资源R1、R2、R3,可用资源数分别是9、8、5。在T0时刻系统中有P1、P2、P3、P4和P5五个进程,这些进程对资源的最大需求量和已分配资源数如下所示。进程应当如何序列执行,系统才是安全的?

                避免死锁-银行家算法_第2张图片

稍作分析:对于P1进程而言,它的最大需求量R1、R2、R3分别是6、5、2,并且系统已经给他分配R1、R2、R3分别是1、2、1。如此,对于P1进程而言还需要的R1、R2、R3资源数为5、3、1。依次类推。计算还需要的资源数。

                        避免死锁-银行家算法_第3张图片

对于R1资源来说,系统中一共是9个,而P1-->P5一共占据了1+2+2+1+1 = 7个资源,说明系统中还剩余R1资源为9 - 7 =2 个。

如此我们可以计算出 剩余的系统资源数R1、R2、R3来。

R1 = 9 -(1+2+2+1+1) = 2 
R2 = 8 - (2+1+1+2+1) = 1 
R3 = 5 - (1+1+3) = 0

这样我们就可以用系统所剩余资源与P1-->P5进程所需要的资源进行比较,保证一点就是进程所需资源不得超过系统所剩余资源。第一次判断,为P2先进行执行。当P2进程执行完毕后,P2进程中之前所占有的资源数会归给系统资源,所以此时P2资源执行完毕后系统资源所剩余的资源数为现有+已经分配R1、R2、R3分别是4、2、1。

依次类推,得出结论为:

避免死锁-银行家算法_第4张图片

P2 --> P4 --> P5 --> P1 --> P3

欢迎订阅关注公众号(JAVA和人工智能)

                                                           获取更多免费书籍、资源、视频资料 

           

文章超级链接:

 1,分布式系统详解--基础知识(概论)

 2,分布式系统详解--基础知识(线程)

 3,IDEA和Eclipse的比较

 4,IntelliJ IDEA(最新)安装-破解详解--亲测可用

 5,操作系统之【死锁问题】

 6,【由浅入深】爬虫技术,值得收藏,来了解一下~

 7,Akka 简介及简单原理

 8,Spark-集群安装、部署、启动、测试(1.6.3)稳定版

 9,Spark-RDD简介以及算子实例

10,分布式系统详解(Apache Hive 入门-简介)

你可能感兴趣的:(计算机基础,银行家算法)