银行家算法实例(转)

  在网上找了一篇不可多的的讲银行家算法的例题的博文,mark下来。作者写的还是不错,简单易懂,比单纯讲含义要实用的多。

转自:

木轩琰的博客

最近开始备考计算机四级,基本没有遇到什么问题,感觉计算机四级就是考理解型记忆力,银行家算法的题算是在计算机四级里少有的计算题。

例1.设系统中有三种类型的资源(A,B,C)和五个进程(P1,P2,P3,P4,P5),A资源的数量是17,B资源的数量是6,C资源的数量为19。在T0时刻系统的状态如下表:


 


最大资源需求量


已分配资源量


 


A,B,C


A,B,C


P1


4,0,11


4,0,5


P2


5,3,6


4,0,2


P3


4,2,5


2,1,4


P4


5,5,9


2,1,2


P5


4,2,4


3,1,3

系统采用银行家算法实施死锁避免策略,若当前系统剩余资源(A,B,C)分别为(2,3,3),下列哪一个序列是安全序列?

A.P3,P1,P4,P2,P5

B.P1,P3,P5,P2,P4

C.P4,P2,P3,P5,P1

D.P2,P3,P1,P4,P5

几乎所有关于银行家算法的单选题的数据都差不多,在解这道题之前先来解释一下什么是安全序列。安全序列是指一个进程序列{P1,…,Pn}是安全的,即对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和。这句话说得比较抽象,在解析过程中我们进行理解。

解析:我们首先算出各个进程尚需要的资源量,尚需要的资源量=最大资源需求量-已分配资源量,由此可得各进程尚需要的资源量为

  P1 P2 P3 P4 P5
A,B,C 0,0,6 1,3,4 2,1,1 3,4,7 1,1,1

接下来,我们分析选项A,P3需要的资源量为(2,1,1),而系统剩余资源为(2,3,3),因此进程P3进程得以完成,并且释放它占有的资源量,即已分配资源量,此时系统剩余资源量为(2+2,3+1,3+4)=(4,4,7),(4,4,7)大于(或等于)其它所有进程(即P1,P1,P2,P4,P5)尚需要的资源量(注意,这里的“大于”指的是A,B,C三类分别大于),因此选项A的序列是安全序列

选项B:P1需要的资源为(0,0,6),显然系统剩余资源不满足条件,B为不安全序列。

选项C:P4需要的资源为(3,4,7),显然系统剩余资源不满足条件,C为不安全序列。

选项D:P2需要的资源为(1,3,4),显然系统剩余资源部满足条件,D为不安全序列。

几乎所有银行家算法的单选题都可以用上述方法一眼秒杀,当然这只是计算机四级的前奏,在单选题中,我们可以通过排除法轻松地选出答案,但是计算机四级是有多选题的,多选题的银行家算法可能就得花上一分多钟去判断出正确选项,一定要仔细再仔细,脑袋转不过来极有可能出错。以下是一道关于银行家算法的多选题,自己感受一下吧,也是so easy的。

例2.某操作系统的当前资源分配如下表所示。


进程


最大资源需求


已分配资源数量


 


R1 R2 R3


R1 R2 R3


P1


7 5 3


0 1 0


P2


3 2 2


2 0 0


P3


9 0 2


3 0 2


P4


2 2 2


2 1 1


P5


4 3 3


0 0 2

假设当前系统可用资源R1、R2和R3的数量为(3,3,2),且该系统目前处于安全状态,那么下列哪些是安全序列?

A.P2P4P5P1P3

B.P2P4P5P3P1

C.P4P1P2P3P5

D.P3P2P5P4P1

E.P4P2P3P5P1

解析:方法参见例1.

答案:ABE

关于银行家算法的拓展说明:(以下内容为《全国计算机等级考试四级教程——操作系统原理》原文)

银行家算法是通过动态地检测系统中资源分配情况和进程对资源的需求情况来决定如何分配资源的,在能确保系统处于安全状态时才把资源分配给申请者,从而避免系统发生死锁。由于银行家算法是在系统运行期间实施的,要花费相当多的时间,该算法需要m×n2操作。银行家算法要求每类资源的数量是固定不变的,而且必须事先知道资源的最大需求量,这难以做到。不安全状态并非一定是死锁状态,如果一个进程申请的资源当前是可用的,但该进程必须等待,这样资源利用率会下降。

时间: 2024-10-08 03:54:15

银行家算法实例(转)的相关文章

银行家算法学习笔记

     上周操作系统的实验,就是模拟实现银行家算法,首先我们还是应该对银行家算法熟悉一下. 银行家算法是最具代表性的避免死锁的算法.因为该算法原本是为银行系统设计的,以确保银行在发放现金贷款时,不会发生不满足所有客户需求的情况.在OS中也可它来实现避免死锁. 算法概述: 为实现银行家算法,每一个进程在进入系统时,它必须申明在运行过程中,可能需要每种资源类型的最大单元数目,其数目不应超过系统所拥有的资源总量,当进程请求一组资源时,系统必须首先确定是否有足够的资源分配给该进程.若有,再进一步计算在

银行家算法避免死锁

系统安全状态的定义 1.安全状态 在避免死锁的方法中,允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次资源分配的安全性.若此次分配不会导致系统进入不安全状态,则将资源分配给进程:否则,令进程等待. 虽然并非所有的不安全状态都必然会转为死锁状态,但当系统进入不安全状态后,便有可能进而进入死锁状态:反之,只要系统处于安全状态,系统便可避免进入死锁状态. 因此,避免死锁的实质在于:系统在进行资源分配时,如何使系统不进入不安全状态. 利用银行家算法避免死锁 1.银行家算法中的数据结构 (1

《操作系统、预防进程死锁的银行家算法》

预防进程死锁的银行家算法 原文:https://blog.csdn.net/houchaoqun_xmu/article/details/55540792 一.概念介绍和案例解析 银行家算法中的数据结构 可利用资源向量Available:   这是一个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变.如果Available[j]=K,则表示系统中现有Rj类资源K个. 最大需求矩阵Max:   

死锁银行家算法

死锁银行家算法 死锁 死锁的定义 如果一个线程集合中的每个线程都在等待这个集合中另一个线程的执行结果才能继续执行下去,若无其他外力,它们都无法推进,这就形成了死锁. 死锁的4个必要条件 1.互斥条件:一个资源在某时刻内只能允许一个线程进行访问: 2.占有且等待:一个线程A占有一部分资源,此时去申请另外的资源,但申请的资源被线程B占有,此时线程A的请求阻塞,但是也不对自己本来的资源进行释放. 3. 不可剥夺条件:线程对已获得的资源,在未完成使用之前,不可剥夺,只能使用完成后才释放. 4. 循环等待

[OS] 死锁相关知识点以及银行家算法详解

因此我们先来介绍一下死锁: 死锁特征 当出现死锁时,进程永远不能完成,并且系统资源被阻碍使用,阻止了其他作业开始执行.在讨论处理死锁问题的各种方法之前,先深入讨论一下死锁的特征. ·必要条件 (1)互斥:至少有一个资源必须处于非共享模式,即一次只有一个进程使用.如果另一进程申请该资源,那么申请进程必须等到该资源被释放为止. (2)占有并等待:一个进程必须占有至少一个资源,并等待另一资源,而该资源为其他进程所占有. (3)非抢占:资源不能被抢占,即资源只能在进程完成任务后自动释放. (4)循环等待

预防死锁之银行家算法

如果转载请注明出处:http://blog.csdn.net/gophers 银行家算法是一种可以用来预防死锁的检测算法,正像这种算法的名字一样,系统在分配资源情况就和银行家管理银行资金的情况是相似的.银行家要在贷款的时候协调各个客户之间的业务,最好的情况就是就是把当前的资金合理的分配出去,让余下来的资金依然足够应付近期的其他业务,而且能够确保在有新客户要贷款时之前贷出去的资金已经被收回.操作系统在协调各个进程之间的资源占用关系时也可以套用这种方法. 银行家算法主要由两个部分构成,一个是Safe

银行家算法 C++实现

操作系统中预防死锁的银行家算法,测试用例来自<计算机操作系统(第四版)>113页例题. #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #define Process_Max 100 //进程数量最大值 #define Resource_Max 100 //资源种类最大值 using namespace std; int Available[Resou

操作系统—银行家算法

参考http://blog.csdn.net/yaopeng_2005/article/details/6935235 对小鹏_加油的代码进行了部分修改,并加入了自己的文档注释 定义全局变量,以及主函数main 1 #include <iostream> 2 using namespace std; 3 #define MAXPROCESS 50 //最大进程数 4 #define MAXRESOURCE 100 //最大资源数 5 int AVAILABLE[MAXRESOURCE]; //

银行家算法

我们可以把操作系统作为一个银行家.操作系统管理的资金相当于银行家的资源.过程向操作系统请求分配相当于用户资源,银行贷款. 为了保证资金的安全性,银行规定: (1) 当资金客户最大需求不超过可用资金的银行家可以接受客户; (2) 贷款,但贷款的总数不能超过最大需求量; (3) 当银行家现有的资金不能满足顾客尚需的贷款数额时,对顾客的贷款可推迟支付,但总能使顾客在有限的时间里得到贷款; (4) 当顾客得到所需的所有资金后,一定能在有限的时间里归还所有的资金. 银行家算法数据结构 1)可利用资源向量A