Javatpoint标志
Javatpoint标志

C语言的Banker算法

银行家算法是一种资源分配和死锁避免算法,它在执行“s状态”检查以寻找潜在活动并确定是否应该允许分配继续之前,模拟所有资源的预定最大可能数量的资源分配。

为什么叫银行家算法?

银行家的算法之所以如此命名,是因为它在银行业被用来决定是否授权向个人贷款。假设一家银行有n个账户持有人,每个账户持有人的个人余额都是s。当有人申请贷款时,银行首先从其拥有的总金额中扣除贷款金额,只有当余额大于s时,银行才批准贷款。这样做是因为如果每个账户持有人都来取钱,银行就可以简单地这样做。

换句话说,银行绝不会以一种妨碍其满足所有客户需求的方式来安排资金。银行将在任何时候都努力保持安全。

利用以下数据结构,实现银行家算法:

假设系统中有n个进程和m种不同的资源。

可用:

  • 它是一个大小为“m”的1维数组,列出了每种类型的可访问资源的总量。
  • 如果Available[j] = k,则资源类型有'k'个实例

马克斯:

  • 系统中每个进程的最大需求由大小为“n*m”的2维数组指定。
  • Process Pi可以请求最多'k'个资源类型Rj的实例

Max[i, j] = k。

分配:

  • 当前分配给每个进程的每种类型的资源数量由大小为'n*m'的二维数组指定。
  • 进程由Allocation[i, j] = k表示。目前Pi已经获得了'k'个资源类型的实例。Rj

需要:

  • 它是一个大小为“n*m”的2维数组,显示了每个进程在资源方面需要多少。
  • Need I j] = k表示进程Pi此时需要'k'个资源类型的实例。Rj
  • 分配[i, j] -最大[i, j] =需求[i, j]

现在分配给流程Pi的资源由Allocation标识,而流程Pi为完成其工作可能需要的额外资源由need标识。

银行家算法由安全算法和资源请求算法组成。

安全算法

下面描述了确定系统是否处于安全状态的方法:

资源请求算法

让Request代表流程Pi请求数组。进程Pi请求k个资源类型Rj的实例,用Request [j] = k表示。当进程Pi请求资源时,会发生以下情况:

银行家的算法源代码

输出:

以下是安全序列P1 - > P3 - > P4 - > P0 - > P2  .......................................................进程在2.32秒内执行按任意键继续。

解释:

  • 进程在进入系统时必须预测所需的最大资源数量,这可以在合理的时间内完成。
  • 与交互式系统相比,这种方法维护固定数量的进程。
  • 为了使这项技术工作,必须分配特定数量的资源。如果一个小设备坏了,意外脱机,该算法将无法运行。
  • 当存在多个流程和资源时,必须为每个流程调用该方法,因此该方法将产生开销成本。






Youtube 观看视频请加入我们的Youtube频道:现在加入

反馈


帮助他人,请分享

脸谱网 推特 pinterest

学习最新教程


准备


热门的技术


B.Tech / MCA






Baidu
map