银行家算法思路实现(死锁避免)

银行家算法

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时刻安全,若不能,则不安全,该例为安全的,如下图所示:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43532386/article/details/113111687
今日推荐