操作系统(OS)中的银行家算法2025年4月4日 | 阅读11分钟 有一种称为银行家算法的算法,用于在处理计算机系统中向进程安全分配资源时消除死锁。它将所有资源分配给每个进程,并避免资源分配冲突。 银行家算法概述
现实生活中的例子假设一家银行拥有 T 数量的资金和 n 个账户持有人。在某个时刻,当其中一个账户持有人请求贷款时
操作系统中的银行家算法同样,在操作系统中
优点以下是银行家算法的基本特征
缺点
使用银行家算法时,它需要了解三件事
银行家算法中的重要数据结构假设 n 是进程的数量,m 是计算机系统中使用的每种资源类型的数量。
银行家算法本质上是两个组成部分的组合
安全性算法安全状态是指系统可以从该状态执行某个进程序列而不会发生死锁的状态。如果一个系统的所有进程都能以某种顺序安全地执行,那么该系统就是安全的。 这是一种安全性算法,用于检查系统是否处于安全状态或在银行家算法中遵循安全序列。 1. 在安全性算法中,有两个长度分别为 m 和 n 的向量 Work 和 Finish。 初始化
2. 检查每种资源类型 [i] 的可用性状态,例如 如果 i 不存在,则转到第 4 步。 3. 如果进程 i 满足第 2 步中的条件,则通过更新 Work 向量来模拟分配 这将当前分配给进程 i 的资源加回到 Work 向量中,模拟进程完成后资源的释放。 返回第 2 步,检查下一个进程的资源可用性状态。 4. 如果 Finish[i] == true,则表示系统对所有进程都是安全的。 资源请求算法资源请求算法描述了当进程请求资源时系统的行为。该算法将检查所请求的资源是否可以在不引起死锁的情况下分配。然后,该请求可以被描述为一个请求矩阵。 资源请求算法检查当一个进程对系统中的每种资源类型提出请求时,系统将如何表现,这表现为一个请求矩阵。 为每个进程 P[i] 创建一个资源请求数组 R[i]。如果资源请求i [j] 等于 'K',这意味着进程 P[i] 需要系统中资源类型 R[j] 的 'k' 个实例。 资源请求算法的步骤1. 检查请求是否在进程的最大声明范围内 对于进程 P[i] 的每一次资源请求,算法都会检查请求的资源数量是否小于或等于该进程的需求(Need)。 如果条件成立,则继续下一步。否则,进程 P[i] 已超过其最大声明;请求被拒绝。 如果进程超过其最大声明,则违反了系统规则;该进程将不被允许继续进行。 2. 检查请求的资源是否可用 系统现在检查所请求的资源是否有足够的数量可用。这是通过将请求 [i] 与可用资源(Available)进行比较来完成的。 如果此条件满足,则继续下一步。如果不满足,则 P[i] 必须等待,直到所需资源变得可用。 这确保了系统不会分配它当前没有的资源,否则可能导致死锁或不安全状态。 3. 模拟资源分配 如果可用,系统会通过修改 Available、Allocation 和 Need 矩阵,将临时请求的资源分配给进程 P[i]。 4. 检查系统安全性
示例: 考虑一个包含五个进程 P1、P2、P3、P4、P5 和三种资源类型 A、B 和 C 的系统。资源类型如下:A 有 10 个实例,B 有 5 个实例,资源类型 C 有 7 个实例。
使用银行家算法回答以下问题
答 1:Need 矩阵的内容如下 Need [i] = Max [i] - Allocation [i]
因此,我们创建了 Need 矩阵的内容。 答 2:应用银行家算法 A、B 和 C 的可用资源分别为 3、3 和 2。 现在我们检查每个进程的每种资源请求是否可用。 步骤 1:对于进程 P1 Need <= Available 7, 4, 3 <= 3, 3, 2 条件为假。 因此,我们检查另一个进程 P2。 步骤 2:对于进程 P2 Need <= Available 1, 2, 2 <= 3, 3, 2 条件为真 新的可用资源 (New available) = 可用资源 (available) + 已分配资源 (Allocation) (3, 3, 2) + (2, 0, 0) => 5, 3, 2 同样,我们检查另一个进程 P3。 步骤 3:对于进程 P3 P3 Need <= Available 6, 0, 0 < = 5, 3, 2 条件为假。 同样,我们检查另一个进程 P4。 步骤 4:对于进程 P4 P4 Need <= Available 0, 1, 1 <= 5, 3, 2 条件为真 新的可用资源 (New Available resource) = 可用资源 (Available) + 已分配资源 (Allocation) 5, 3, 2 + 2, 1, 1 => 7, 4, 3 同样,我们检查另一个进程 P5。 步骤 5:对于进程 P5 P5 Need <= Available 4, 3, 1 <= 7, 4, 3 条件为真 新的可用资源 (New available resource) = 可用资源 (Available) + 已分配资源 (Allocation) 7, 4, 3 + 0, 0, 2 => 7, 4, 5 现在,我们再次为进程 P1 和 P3 检查每种类型的资源请求。 步骤 6:对于进程 P1 P1 Need <= Available 7, 4, 3 <= 7, 4, 5 条件为真 新的可用资源 (New Available Resource) = 可用资源 (Available) + 已分配资源 (Allocation) 7, 4, 5 + 0, 1, 0 => 7, 5, 5 因此,我们检查另一个进程 P2。 步骤 7:对于进程 P3 P3 Need <= Available 6, 0, 0 <= 7, 5, 5 条件为真 新的可用资源 (New Available Resource) = 可用资源 (Available) + 已分配资源 (Allocation) 7, 5, 5 + 3, 0, 2 => 10, 5, 7 因此,我们执行银行家算法以找到安全状态和安全序列,如 P2、P4、P5、P1 和 P3。 答 3:系统是否能满足资源请求 (1,0,0) 对于进程 P1,可以使用银行家算法进行检查,如下所示 1. 检查请求是否在 P1 的最大声明范围内 如果请求的资源:(1,0,0) 小于或等于 P1 的需求(Need),则继续;否则,拒绝。 2. 检查系统是否有足够的可用资源来处理该请求 (1,0,0)。如果资源可用,则继续;否则,P1 应该等待。 3. 模拟资源分配 将资源临时分配给 P1,并使用安全性算法检查系统是否安全。如果系统安全,则授予请求。否则,取消分配并让 P1 等待。 下一个主题P2P网络是否需要专门的网络操作系统软件 |
我们请求您订阅我们的新闻通讯以获取最新更新。