先决条件 – 资源分配图 (RAG)、银行家算法、银行家算法程序
银行家算法是一种资源分配和避免死锁的算法。该算法测试安全性,模拟所有资源的预定最大可能数量的分配,然后进行“s 状态”检查以测试可能的活动,然后决定是否允许继续分配。
简单来说,它检查任何资源的分配是否会导致死锁,或者将资源分配给进程是否安全,如果不是,则不将资源分配给该进程。确定一个安全序列(即使只有 1 个)将确保系统不会陷入死锁。
银行家算法通常用于确定安全序列是否存在。但在这里我们将确定安全序列的总数并打印所有安全序列。
使用的数据结构是:
- 可用向量
- 最大矩阵
- 分配矩阵
- 需求矩阵
例子:
输入:
Output: Safe sequences are:
P2--> P4--> P1--> P3
P2--> P4--> P3--> P1
P4--> P2--> P1--> P3
P4--> P2--> P3--> P1
There are total 4 safe-sequences
解释:
总资源为 R1 = 10, R2 = 5, R3 = 7 分配的资源为 R1 = (0+2+3+2 =) 7, R2 = (1+0+0+1 =) 2, R3 = (0 +0+2+1 =) 3. 因此,剩余资源为 R1 = (10 – 7 =) 3, R2 = (5 – 2 =) 3, R3 = (7 – 3 =) 4。
剩余可用资源 = 总资源 – 已分配资源
和
剩余需求 = 最大 – 已分配
所以,我们可以从 P2 或 P4 开始。在银行家算法的第一次或第二次尝试步骤中,我们无法从 P1 或 P3 的可用资源中满足剩余需求。只有四种可能的安全序列。这些是 :
P2–> P4–> P1–> P3
P2–> P4–> P3–> P1
P4–> P2–> P1–> P3
P4–> P2–> P3–> P1
执行:
.
输出:
Safe sequences are:
P2--> P4--> P1--> P3
P2--> P4--> P3--> P1
P4--> P2--> P1--> P3
P4--> P2--> P3--> P1
There are total 4 safe-sequences