银行家算法的实现需要三个矩阵:
- Max矩阵:用于存储每个进程完成所需要的全部资源量
- Allocation矩阵:用于存储每个进程每个资源已分配的情况
- Need矩阵:存储每个进程还需要的各个资源数
如下以一个实例来说明银行家算法:
假设一组进程,有P1,P2,P3,P4四个进程,有A,B,C,D四种资源:
要求使用银行家算法找出能够避免死锁的资源分配序列(如果存在避免死锁的序列)。
需求如下:
每一行分别表示对应的进程Pi的完成需要多少对应资源。
每个进程当前得到资源的情况如下:
还没有被使用的资源量为:
Available:A:1,B:5,C:2,D:0。
在现在这个情况下,需要完成所有进程,需要的资源量Need的计算方式为Max-Allocation得到:
表示现在还需要这么多资源才能完成,现在开始对P1到P4尝试为其分配资源,检查是否会导致死锁:
一、方案1——如果将资源优先分配给P1:
- Available:A:1,B:5,C:2,D:0
- P1需要:A:0,B:6,C:4,D:2
不安全。
二、方案2——优先分配给P2:
- Available:A:1,B:5,C:2,D:0
- P2需要:A:0,B:0,C:0,D:0
能够满足,安全,
P2进程完成后释放资源C:1,D:2。
现在的可用资源:Available:A:1,B:5,C:3,D:2
对于剩下的三个进程,能满足条件的只有P4,则分配给P4完成进程,后P4释放资源A:1,B:3,C:5,D:4,可用资源更新为:Available:A:2,B:8,C:8,D:6
对于剩下两个进程,都能满足......完成....释放....
....重复过程....
最终得到两个序列P2,P4,P1,P3和序列P2,P4,P3,P1
三、方案三——优先分配给P3
重复上述过程。
四、方案四——优先分配给P4
重复上述过程。
最终能够得到几个不会导致死锁且能安全完成这几个进程的操作序列,这个过程即银行家算法。