银行家算法计算器(安全序列与死锁检测)
运行银行家算法:生成 Need 矩阵,分步进行安全性检查并给出安全序列,判断某进程的资源请求能否满足,还可进行死锁检测。
一个状态可能有多个安全序列;这里的结果遵循所选的查找顺序。
安全是指存在某种顺序,让每个进程都能获得其最大需求并完成。不安全并不表示已经死锁,只是不再能排除死锁的可能。
| 进程 | Allocation(已分配) A B C | Max(最大需求) A B C | Need(尚需) A B C |
|---|---|---|---|
| P0 | 0 1 0 | 7 5 3 | 7 4 3 |
| P1 | 2 0 0 | 3 2 2 | 1 2 2 |
| P2 | 3 0 2 | 9 0 2 | 6 0 0 |
| P3 | 2 1 1 | 2 2 2 | 0 1 1 |
| P4 | 0 0 2 | 4 3 3 | 4 3 1 |
| 步骤 | 进程 | Need(尚需) | 之前的 Work | 之后的 Work | 原因 |
|---|---|---|---|---|---|
| 1 | P1 | 1 2 2 | 3 3 2 | 5 3 2 | Need(尚需) ≤ Work,所以它可以完成并释放已分配的资源 |
| 2 | P3 | 0 1 1 | 5 3 2 | 7 4 3 | Need(尚需) ≤ Work,所以它可以完成并释放已分配的资源 |
| 3 | P4 | 4 3 1 | 7 4 3 | 7 4 5 | Need(尚需) ≤ Work,所以它可以完成并释放已分配的资源 |
| 4 | P0 | 7 4 3 | 7 4 5 | 7 5 5 | Need(尚需) ≤ Work,所以它可以完成并释放已分配的资源 |
| 5 | P2 | 6 0 0 | 7 5 5 | 10 5 7 | Need(尚需) ≤ Work,所以它可以完成并释放已分配的资源 |
银行家算法用来判断拥有多种资源的系统是否处于安全状态(是否存在一种顺序,使每个进程都能拿到它还可能需要的资源并完成),以及一个新的请求能否在不失去安全性的前提下被满足。这个计算器会构造 Need 矩阵,借助 Work 向量分步运行安全性算法,检查资源请求,还能对 Request 矩阵运行相关的死锁检测算法。
使用方法
- 输入 Allocation 矩阵,每行一个进程(P0: 0 1 0)。
- 按相同顺序输入 Max 矩阵(死锁检测时输入 Request 矩阵)。
- 输入 Available 向量,或各资源的实例总数。
- 可选:输入形如 P1 1 0 2 的请求,查看能否被批准。
计算公式
Need = Max − Allocation · Work = Available;重复:找到 Need ≤ Work 的 Pᵢ,然后 Work = Work + Allocationᵢ · 所有进程都能完成则为安全
Pᵢ 的请求若超过 Need 则为错误,若超过 Available 则必须等待,否则只有在假装分配后状态仍然安全时才会被批准。死锁检测使用当前的 Request 而不是 Need,并把不占有任何资源的进程一开始就标记为已完成;始终无法完成的进程就是死锁的进程。安全序列可能有多个——“查找顺序”选项可重现两种常见的推演方式。
示例
示例是 Silberschatz《Operating System Concepts》中的教材例题:5 个进程,资源 A、B、C,Available (3, 3, 2)。Need 为 P0 (7,4,3)、P1 (1,2,2)、P2 (6,0,0)、P3 (0,1,1)、P4 (4,3,1)。P1 可以先完成(Work 变为 5 3 2),然后依次是 P3 (7 4 3)、P4 (7 4 5)、P0 (7 5 5) 和 P2 (10 5 7),所以状态安全,序列为 <P1, P3, P4, P0, P2>。P1 的请求 (1, 0, 2) 会被批准。
常见问题
不安全状态就是死锁吗?
不是。不安全表示系统不再能保证所有进程都能完成,可能死锁,也可能不死锁。死锁是指某些进程实际上在永远互相等待的状态。
为什么我得到的安全序列和教材不一样?
一个安全状态往往有多个安全序列。不同教材推演查找过程的方式略有差异,请切换“查找顺序”选项使之与你的课程一致。算法找到的任何序列都是有效的。
Max 和 Request 有什么区别?
Max 是进程将来最多可能要求的资源量(用于提前避免死锁)。Request 是进程此刻正在等待的资源量(用于检测已经发生的死锁)。
资料来源
最后更新:
包含这些输入的页面地址: https://kakao.mobile/zh/tools/banker-s-algorithm-tool/
引用此工具
kakaoCalc. (2026, November 8). 银行家算法计算器(安全序列与死锁检测). https://kakao.mobile/zh/tools/banker-s-algorithm-tool/
“银行家算法计算器(安全序列与死锁检测).” kakaoCalc, 8 Nov. 2026, kakao.mobile/zh/tools/banker-s-algorithm-tool/.