📜  操作系统中的银行家算法

📅  最后修改于: 2020-12-15 09:35:19             🧑  作者: Mango

操作系统中的银行家算法

它是一种银行家算法,用于避免死锁安全地将资源分配给计算机系统中的每个进程。 “ S状态”检查所有可能的测试或活动,然后再决定是否应允许对每个过程进行分配。它还有助于操作系统在所有进程之间成功共享资源。之所以命名银行家的算法,是因为该算法检查是否应批准某人贷款额度,以帮助银行系统安全地模拟分配资源。在本节中,我们将详细学习银行家算法。同样,我们将基于Banker算法解决问题。首先,要了解银行家算法,我们将看到一个真实的例子。

假设特定银行的帐户持有者数量为“ n”,而银行中的总金额为“ T”。如果账户持有人申请贷款;首先,银行从全额现金中减去贷款额,然后估计现金差额大于T以批准贷款额。之所以采取这些步骤,是因为如果另一个人申请贷款或从银行提取一些款项,则可以帮助银行管理和操作所有事物,而对银行系统的功能没有任何限制。

同样,它可以在操作系统提供所有类型的信息,例如即将到来的进程,对它们的资源的请求,对它们的计数以及延迟。基于这些标准,操作系统决定应执行或等待哪个处理序列,以便在系统中不发生死锁。因此,在操作系统中也称为死锁避免算法死锁检测。

优点

以下是Banker算法的基本特征:

  • 它包含满足每个过程要求的各种资源。
  • 每个进程都应向操作系统提供有关即将到来的资源请求,资源数量以及资源将保留多长时间的信息。
  • 它有助于操作系统管理和控制对计算机系统中每种资源类型的处理请求。
  • 该算法具有最大资源属性,该属性表示表示每个进程可以容纳系统中最大数量的资源。

缺点

  • 它需要固定数量的进程,并且在执行进程时无法在系统中启动其他进程。
  • 该算法不再允许进程在处理其任务时交换其最大需求。
  • 每个进程必须事先知道并说明系统的最大资源需求。
  • 可以在有限时间内批准资源请求的数量,但是分配资源的时间限制为一年。

使用银行家的算法时,它要求了解三件事:

  • 每个进程可以为系统中的每个资源请求多少。它由[ MAX ]请求表示。
  • 当前每个进程占用系统中每个资源的数量。它由[ ALLOCATED ]资源表示。
  • 它代表系统中当前可用的每个资源的数量。它由[ AVAILABLE ]资源表示。

以下是在银行家算法中应用的重要数据结构术语,如下所示:

假设n是进程数,m是计算机系统中使用的每种类型的资源数。

  • 可用:这是一个长度为'm'的数组,用于定义系统中每种可用的资源。当Available [j] = K时,意味着资源类型R [j]的'K'个实例在系统中可用。
  • 最大值: [nxm]矩阵,指示每个进程P [i]可以存储系统中资源的最大数量R [j](每种类型)。
  • 分配:它是mxn阶的矩阵,指示当前分配给系统中每个进程的资源类型。当分配[i,j] = K时,表示当前在系统中为进程P [i]分配了资源类型R [j]的K个实例。
  • 需求:这是一个M x N矩阵序列,代表每个进程的剩余资源数量。当Need [i] [j] = k时,进程P [i]可能需要K个资源类型Rj的更多实例来完成分配的工作。 Nedd [i] [j] = Max [i] [j]-分配[i] [j]。
  • 完成:它是m阶的向量。它包含一个布尔值(true / false),指示是否已将进程分配给所请求的资源,并且在完成其任务后已释放所有资源。

银行家算法是安全算法和资源请求算法的组合,用于控制流程并避免系统死锁:

安全算法

它是一种安全算法,用于检查系统是否处于安全状态或遵循银行家算法中的安全顺序:

1.在安全算法中,向量WokFinish的长度分别为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

使用银行家的算法回答以下问题:

  • 需求矩阵的参考是什么?
  • 确定系统是否安全。
  • 如果进程P1的资源请求(1、0、0)可以立即被系统接受,将会发生什么?

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>