银行家算法的通俗理解

tech2022-08-30  89

文章目录

概念背景及相关概念介绍数据结构模拟过程

概念

银行家算法(Banker’s Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。

背景及相关概念介绍

在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。在这样的描述中,银行家就好比操作系统,资金就是资源,客户就相当于要申请资源的进程。 银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。

安全状态:如果存在一个由系统中所有进程构成的安全序列P1,…,Pn,则系统处于安全状态。安全状态一定是没有死锁发生。安全序列:是指一个进程序列{P1,…,Pn}是安全的,即对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和。

比如:有进程{p1, p2, p3, p4},当前占有的资源量为{w1, w2, w3, w4},对应还需要的资源量{n1, n2, n3, n4},系统还剩资源 {v}。若{v>=n1; v+w1>=n2; v+w1+w2>=n3; v+w1+w2+w3>=n4},则{p1, p2, p3, p4}就是一个安全序列,因为v大于n1,进程p1可以执行;进程p1归还资源后,v+w1>=n2,进程p2也可以执行,以此类推,那么所有的进程都可以执行完。

不安全状态:不存在一个安全序列。不安全状态不一定导致死锁。

数据结构

可利用资源向量Available:是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目。如果Available[j]=K,则表示系统中现有Rj类资源K个。最大需求矩阵Max:这是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为K。分配矩阵Allocation:这也是一个n×m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i,j]=K,则表示进程i当前已分得Rj类资源的 数目为K。需求矩阵Need。:这也是一个n×m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j]=K,则表示进程i还需要Rj类资源K个,方能完成其任务。Need[i,j]=Max[i,j]-Allocation[i,j]

模拟过程

如果系统中有4中类型的资源(A,B,C,D)和5个进程(P1,P2,P3,P4,P5),4种资源的数量分别为(3,12,14,14). 若现在某时刻系统状态如下: 现在判断是否存在一种安全序列,使得每个进程都能先后成功执行完毕。 通过计算可得:此时系统资源还剩余(1,6,2,2).(剩余 = 总资源 - 已分配资源之和) (下次可利用资源 = 该进程已分配资源 + 当前可利用资源) 若当前可利用资源 >= 进程还需要资源量,则进程可以执行,为安全状态;反之不安全 通过上述表格可以看出,可以找到一个安全序列使程序执行完毕(注:安全队列不唯一,只要能找到一个就算是安全队列)

最新回复(0)