银行家算法 Opera系统 [示例]

什么是银行家算法?

银行家算法 主要用于银行系统避免僵局。它可以帮助您确定是否会发放贷款。

该算法用于测试安全地模拟分配,以确定所有资源的最大可用量。它还会检查所有可能的活动,然后再确定是否应继续分配。

例如,某家银行的账户持有人有X个,他们的账户总金额为G。

银行在办理车贷时,软件系统会从银行所拥有的总资金(G+定期存款+月收入计划+黄金等)中减去发放的购车贷款金额。

它还会检查差额是否大于 G。即使所有账户持有人同时提取资金 G,它也只有在银行有足够的资金时才会处理汽车贷款。

银行家算法符号

这是银行家算法中使用的重要符号:

  • X:系统进程总数。
  • Y:表示系统中存在的资源总数。

可提供

[I: Y] 指示哪些资源可用。

max.

[l:X,l: Y]:表示类型j或进程i的最大资源数量

分配

[l:X,l:Y]。指示您已在何处收到 j 类型的资源

需求

表达未来可以分配多少资源

银行家算法示例

假设我们有以下资源:

  • 5 个 U 盘
  • 2 台打印机
  • 4 台扫描仪
  • 3 个硬盘

这里,我们创建了一个表示总资源的向量:可用 = (5, 2, 4, 3)。

假设有四个进程。可用资源已按照下面的矩阵表进行分配。

进程名称 笔式驱动器 打印机 扫描器 硬盘
P 2 0 1 1
Q 0 1 0 0
R 1 0 1 1
S 1 1 0 1
合计 4 2 2 3

这里分配的资源是这些列的总和:

已分配 = (4, 2, 2, 3)。

我们还创建一个矩阵来显示所有流程所需的每种资源的数量。这个矩阵称为 需求=(3,0,2,2)

进程名称 笔式驱动器 打印机 扫描器 硬盘
P 1 1 0 0
Q 0 1 1 2
R 2 1 0 0
S 0 0 1 0

可用的向量为:

可用=可用-已分配

= (5, 2, 4, 3) -(4, 2, 2, 3)

=(1,0,2,0)

资源请求算法

资源请求算法使您能够表示特定进程提出资源请求时的系统行为。

让我们通过以下步骤来理解这一点:

步骤1) 当所有资源的请求实例总数小于流程时,转到步骤2。

步骤2) 当每种资源类型的请求实例小于每种资源类型的可用资源时,将处理到下一步。否则,由于资源不足,该过程需要等待。

步骤3) 资源分配如下面的伪代码所示。

Available = Available – Request (y)
Allocation(x) = Allocation(x) + Request(x)
Need(x) = Need(x) - Request(x)

执行这最后一步是因为系统需要假设资源已经分配。因此分配后可用的资源会减少。

银行家算法的特点

以下是银行家算法的重要特征:

  • 保留满足至少一个客户要求的多个资源
  • 每当一个进程获得所有资源时,它需要在限定的时间内归还这些资源。
  • 当进程请求资源时,它需要等待
  • 系统资源有限
  • 最大资源分配的高级功能

银行家算法的缺点

以下是使用银行家算法的缺点

  • 不允许进程在处理过程中改变其最大需求
  • 它允许在限定的时间内批准所有请求,但一年是一个固定的期限。
  • 所有流程必须提前了解并说明其最大资源需求。

结语

  • 银行家算法主要用于银行系统,以避免 僵局. 它可以帮助您确定是否会发放贷款。
  • 银行家算法中使用的符号是 1) 可用 2) 最大 3) 分配 4) 需要
  • 资源请求算法使您能够表示特定进程提出资源请求时的系统行为。
  • 银行家算法保留许多资源,以满足至少一个客户的要求
  • 银行家算法的最大缺点是它不允许流程在处理时改变其最大需求。