银行家算法
1、介绍
银行家算法是一种具有代表性的避免死锁的方法,为Dijkstra原为银行系统设计,保证银行在发放现金贷款时,不会发生不能满足所有客户需要的情况。
2、数据结构
- 可利用资源向量Available:现在可以利用的各种资源的量,可以进行分配的资源的量
- 最大需求矩阵Max:该进程一共需要的各个资源的量
- 分配矩阵Allocation:给每一个进程已经分配的各种资源的量
- 需求矩阵Need:进行目前还需要的各种资源的量
3、具体实现
3.1、前提
现有五个进程{P0,P1,P2,P3,P4}和三类资源{A,B,C},各个资源的总的数量为10、5、7,在T0时刻的资源分配情况如下:
3.2、问题:判断T0时刻的安全性?
3.3、分析
1、分配P1资源
- T0时刻现在剩下的资源为(3、3、2)<P0进程所需要的资源(7、4、3),所以P0进程不能分配,
- 找P1进程,(3、3、2)>P1进程所需要的资源(2、0、0),因而首先把这些资源分配给P1进程
2、P1释放资源
- 把这些资源给P1进程后,P1进程结束后,将释放自己所占的所有资源,
此时的可分配的资源=T0时刻P1已分配的资源(2、0、0)+T0时刻可分配的资源(3、3、2)=(5、3、2)
3、分配P3资源
- 再去比较当前可分配资源 与 P0进程所需要资源的大小,(5、3、2)<P0进程所需要的资源(7、4、3),所以P0进程依旧不能分配,
- P1进程已经执行完毕,
- 找P2进程(5、3、2)<P2进程所需要的资源(6、0、0)。所以P2进程不能分配
- 找P3进程(5、3、2)>P3进程所需要的资源(0、1、1),所以分配给P3进程
4、释放P3资源
-把这些资源给P3进程后,P3进程结束后,将释放自己所占的所有资源,
此时的可分配的资源=T0时刻P3已分配的资源(2、1、1)+T0时刻可分配的资源(5、3、2)=(7、4、3)
…
…
…
直到所有资源分配完为止,如果能分配完,则T0时刻安全,若不能,则不安全,该例为安全的,如下图所示: