操作系统中的银行家算法 [示例]
什么是银行家算法?
银行家算法主要用于银行系统以避免死锁。它有助于您确定是否会发放贷款。
该算法用于安全地模拟分配,以确定所有可用资源的最大数量。它还会在确定分配是否应继续之前检查所有可能的活动。
例如,一家特定银行有X个账户持有人,账户上的总金额为G。
当银行处理汽车贷款时,软件系统会从银行拥有的总金额(G + 定期存款 + 月收入计划 + 黄金等)中减去授予购买汽车的贷款金额。
它还检查差额是否大于G。即使所有账户持有人同时提取G金额,只要银行有足够的资金,它就会处理汽车贷款。
银行家算法符号
以下是银行家算法中使用的重要符号
- X:表示系统进程的总数。
- Y:表示系统中可用的总资源数。
可用
[I: Y]表示哪些资源可用。
Max (最大值)
[l:X,l: Y]:表达式,表示进程i对类型j资源的最多需求量
分配
[l:X,l:Y]。表示进程i已获得类型j资源的数量
需求
表示未来可以分配多少资源
银行家算法示例
假设我们有以下资源
- 5个U盘
- 2台打印机
- 4台扫描仪
- 3个硬盘
在此,我们创建了一个表示总资源的向量:Available = (5, 2, 4, 3)。
假设有四个进程。可用资源已按下面的矩阵表分配。
进程名称 | U盘 | 打印机 | 扫描仪 | 硬盘 |
---|---|---|---|---|
P | 2 | 0 | 1 | 1 |
Q | 0 | 1 | 0 | 0 |
回车符 | 1 | 0 | 1 | 1 |
AC | 1 | 1 | 0 | 1 |
总计 | 4 | 2 | 2 | 3 |
这里,分配的资源是这些列的总和
Allocated = (4, 2, 2, 3)。
我们还创建一个矩阵来显示所有进程所需的每种资源数量。此矩阵称为Need = (3,0,2,2)
进程名称 | U盘 | 打印机 | 扫描仪 | 硬盘 |
---|---|---|---|---|
P | 1 | 1 | 0 | 0 |
Q | 0 | 1 | 1 | 2 |
回车符 | 2 | 1 | 0 | 0 |
AC | 0 | 0 | 1 | 0 |
可用向量将是
Available = Available - Allocated
= (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) Available 2) Max 3) Allocation 4) Need
- 当特定进程发出资源请求时,资源请求算法可以代表系统行为。
- 银行家算法保留许多满足至少一个客户端需求的资源
- 银行家算法最大的缺点是它不允许进程在处理过程中更改其最大需求。