银行家算法的详细描述,请自行查阅资料。
笔者只以一道简单的题目做描述。
题目:
5个进程从p0到p4
3个资源类型A(10个实例),B(5个实例),C(7个实例)
具体输入如下表:
在T0时刻有:
| Allocation | Max | Available |
| A B C | A B C | A B C |
P0 | 0 1 0 | 7 5 3 | 3 3 2 |
P1 | 2 0 0 | 3 2 2 | |
P2 | 3 0 2 | 9 0 2 | |
P3 | 2 1 1 | 2 2 2 | |
P4 | 0 0 2 | 4 3 3 |
Available表示每类资源可用的数量。
Allocation表示当前分给每个进程的资源数目。
Max表示每个进程对资源的最大需求
答案分析如下表:
初始时:
Work:= Available
Need:=Max-Allocation
即:(只看黑字)
| Work | Need | Allcation | Work=Work+Allcation | finish(Work+Allcation<(10,5,7)) |
| A B C | A B C | A B C | A B C |
|
P0 |
| 7 4 5 | 0 1 1 | ||
P1 | 3 3 2 | 1 2 2 | 2 0 0 | 5 3 2 | true |
P2 |
| 6 0 0 | 3 0 2 | ||
P3 | 5 3 2 | 0 1 1 | 2 1 1 | 7 4 3 | true |
P4 | 4 3 1 | 0 0 2 |
开始时Work=Available=(3,3,2)我们可以看到Need P1 P3 资源可以满足 Work>=Need,从算法遍历运行的顺序可知,先P1行求得(红字),work=(5,3,2)
然后看P2不满足Work>=Need,P3满足条件Work>=Need,P1行求得(蓝色)。以此类推,P4也可以求出。之后又从头开始遍历,依次完成P0,P2。
当完成后,finish都为true表示,系统处于安全状态。输出顺序就可以了,如下图:
| Work | Need | Allcation | Work+Allcation | finish |
| A B C | A B C | A B C | A B C |
|
P1 | 3 3 2 | 1 2 2 | 2 0 0 | 5 3 2 | true |
P3 | 5 3 2 | 0 1 1 | 2 1 1 | 7 4 3 | true |
P4 | 7 4 3 | 4 3 1 | 0 0 2 | 7 4 5 | true |
P0 | 7 4 5 | 7 4 3 | 0 1 0 | 7 5 5 | true |
P2 | 7 5 5 | 6 0 0 | 3 0 2 | 10 5 7 | true |
如表银行家算法的结果为 <P1,P3,P4,P0,P2>
笔者是个初学者,如有问题请联系。