📅  最后修改于: 2020-12-15 09:35:19             🧑  作者: Mango
它是一种银行家算法,用于避免死锁并安全地将资源分配给计算机系统中的每个进程。 “ S状态”检查所有可能的测试或活动,然后再决定是否应允许对每个过程进行分配。它还有助于操作系统在所有进程之间成功共享资源。之所以命名银行家的算法,是因为该算法检查是否应批准某人贷款额度,以帮助银行系统安全地模拟分配资源。在本节中,我们将详细学习银行家算法。同样,我们将基于Banker算法解决问题。首先,要了解银行家算法,我们将看到一个真实的例子。
假设特定银行的帐户持有者数量为“ n”,而银行中的总金额为“ T”。如果账户持有人申请贷款;首先,银行从全额现金中减去贷款额,然后估计现金差额大于T以批准贷款额。之所以采取这些步骤,是因为如果另一个人申请贷款或从银行提取一些款项,则可以帮助银行管理和操作所有事物,而对银行系统的功能没有任何限制。
同样,它可以在操作系统提供所有类型的信息,例如即将到来的进程,对它们的资源的请求,对它们的计数以及延迟。基于这些标准,操作系统决定应执行或等待哪个处理序列,以便在系统中不发生死锁。因此,在操作系统中也称为死锁避免算法或死锁检测。
以下是Banker算法的基本特征:
使用银行家的算法时,它要求了解三件事:
以下是在银行家算法中应用的重要数据结构术语,如下所示:
假设n是进程数,m是计算机系统中使用的每种类型的资源数。
银行家算法是安全算法和资源请求算法的组合,用于控制流程并避免系统死锁:
它是一种安全算法,用于检查系统是否处于安全状态或遵循银行家算法中的安全顺序:
1.在安全算法中,向量Wok和Finish的长度分别为m和n。
初始化:工作=可用
finish 0、1、2、3、4…n-1。<="" =="" [i]="假;对于I" p="">
2.检查每种资源[i]的可用性状态,例如:
Need [i] <=工作
finish [i]="否
如果i不存在,请转到步骤4。
3. Work = Work + Allocation(i)//获得新的资源分配
完成[i] = true
转到步骤2,检查下一个过程的资源可用性状态。
4.如果Finish [i] == true;这意味着该系统对于所有过程都是安全的。
资源请求算法检查当进程在系统中将每种类型的资源请求作为请求矩阵时系统的行为。
让我们为每个进程P [i]创建一个资源请求数组R [i]。如果资源请求i [j]等于'K',则意味着进程P [i]在系统中需要资源类型R [j]的'k'个实例。
1.当每种类型的请求资源的数量小于需求资源时,请转到步骤2,如果条件失败,则意味着过程P [i]超出了其对资源的最大主张。如表达式所示:
如果Request(i)<=需要
进行步骤2;< p="">
2.当每种类型的请求资源数量少于每个进程的可用资源数量时,请转到步骤(3)。如表达式所示:
如果Request(i)<=可用
其他进程p [i]必须等待资源,因为它不可用。<="" p="">
3.通过更改状态将请求的资源分配给流程时:
可用=可用-请求
分配(i)=分配(i)+请求(i)
需要我=需要我-请求我
当资源分配状态为安全时,将其资源分配给进程P(i)。并且如果新状态不安全,则进程P(i)必须等待每种请求R(i)并恢复旧的资源分配状态。
示例:考虑一个包含五个进程P1,P2,P3,P4,P5以及三个资源类型A,B和C的系统。以下是资源类型:A有10个,B有5个,C类型有7个实例。
Process | Allocation A B C |
Max A B C |
Available A B C |
---|---|---|---|
P1 | 0 1 0 | 7 5 3 | 3 3 2 |
P2 | 2 0 0 | 3 2 2 | |
P3 | 3 0 2 | 9 0 2 | |
P4 | 2 1 1 | 2 2 2 | |
P5 | 0 0 2 | 4 3 3 |
使用银行家的算法回答以下问题:
Ans。 2:需求矩阵的上下文如下:
需求[i] =最大值[i]-分配[i]
需要p1:(7,5,3)-(0,1,0)= 4,3,1<="" 6,0,0
需要p4:(2,2,2)-(2,1,1)="0,1,1
需要P5:(4,3,3)-(0,0,2)=" 7,4,3
需要p2:(3,2,2)-(2,0,0)="1,2,2
需要P3:(9,0,2)-(3,0,2)=" p="">
Process | Need A B C |
---|---|
P1 | 7 4 3 |
P2 | 1 2 2 |
P3 | 6 0 0 |
P4 | 0 1 1 |
P5 | 4 3 1 |
因此,我们创建了需求矩阵的上下文。
Ans。 2:应用银行家算法:
A,B和C的可用资源分别是3、3和2。
现在,我们检查每种类型的资源请求是否可用于每个进程。
步骤1:对于流程P1:
需要<=可用
7,4,3 <= 3,3,2条件为假。
因此,我们研究了另一个过程P2。
步骤2:对于流程P2:
需要<=可用
1,2,2 <= 3,3,2条件成立
新的可用=可用+分配
(3,3,2)+(2,0,0)=> 5,3,2
同样,我们检查另一个过程P3。
步骤3:对于流程P3:
P3需求<=可用
6,0,0 <= 5,3,2条件为假。
同样,我们检查另一个过程P4。
步骤4:对于流程P4:
P4需求<=可用
0,1,1 <= 5,3,2条件为真
新的可用资源=可用+分配
5,3,2 + 2,1,1 => 7,4,3
同样,我们检查另一个过程P5。
步骤5:对于流程P5:
P5需要<=可用
4,3,1 <= 7,4,3条件为真
新的可用资源=可用+分配
7,4,3 + 0,0,2 => 7,4,5
现在,我们再次检查进程P1和P3的每种类型的资源请求。
步骤6:对于流程P1:
P1需求<=可用
7,4,3 <= 7,4,5条件为真
新的可用资源=可用+分配
7,4,5 + 0,1,0 => 7,5,5
因此,我们检查另一个过程P2。
步骤7:对于流程P3:
P3需求<=可用
6,0,0 <= 7,5,5条件为真
新的可用资源=可用+分配
7,5,5 + 3,0,2 => 10,5,7
因此,我们执行银行家算法以找到安全状态和安全序列,例如P2,P4,P5,P1和P3。
Ans。 3:为了授予请求(1、0、2),首先必须检查Request <= Available ,即(1、0、2)<=(3、3、2),因为条件为真。因此,进程P1立即获得请求。
需要p1:(7,5,3)-(0,1,0)=>其他进程p>进行步骤2;<>finish>finish>