银行家算法 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) 需要
- 资源请求算法使您能够表示特定进程提出资源请求时的系统行为。
- 银行家算法保留许多资源,以满足至少一个客户的要求
- 银行家算法的最大缺点是它不允许流程在处理时改变其最大需求。