银行家算法
一、银行家算法
银行家算法(Bankers Algorithm)是一个避免死锁(Deadlock)的著名算法。以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。
1、要解释银行家算法,必须先解释操作系统安全状态和不安全状态
(1)安全状态:指一个进程序列{P1,....,Pn}是安全的,即对于每一个进程Pi(1<=i<=n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj(j<i)当前所占有资源之和。如果存在一个由系统中所有进程构成的安全序列P1,…,Pn,则系统处于安全状态。安全状态一定是没有死锁发生。
(2)不安全状态:是指不存在一个安全序列(具体含义后续仔细讲解)。另外,不安全状态不一定导致死锁。
2、数据结构
(1)可利用资源向量Available
是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目。
(2)最大需求矩阵Max
这是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。
(3)分配矩阵Allocation
这是一个n×m的矩阵,它定义了系统中每一类资源当前已分配给每一进程资源数。
(4)需求矩阵
这是一个n×m的矩阵,用以表示每一个进程尚需的各类资源数。
如下表:
3,算法原理
3.1银行家算法执行过程
操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程本次申请的资源数是否超过了该资源所剩余的总量。若超过则拒绝分配资源,若能满足则按当前的申请量分配资源,否则也要推迟分配。
当Pi发出资源请求,分配一个Request向量(若Requesti [ j ] = K,表示进程i需要K个Rj类型的资源),系统按照以下流程进行执行:
3.2 安全性算法
两个向量:
(1)work,表示系统可提供给进程继续运行所需的各类资源数目(即在分配过程中,系统的可用资源数)
初始值 Work : =Available;
(2)Finish,表示系统是否有足够的资源分配给进程i,使之运行完成。
初始值 Finish[i] :=false ;
当有足够资源分配给进程是 Finish[i] :=true
二、举例说明
假定系统中有五个进程{P0,P1,P2,P3,P4}和三类资源{A,B,C},各种资源的数量分别是10、5、7,在T0时刻的资源分配情况如下:
初始时,Work :=Available=(3,3,2);Finish[i ] :=false; (i=0,1...4)。
(1)找到进程P1,假设进程P1顺利执行完成,从而有:
Work :=Work +Allocation1=(3,3,2)+(2,0,0)=(5,3,2) > Need1=(1,2,2) ; Finish[1] =true;
(2)找到进程P3,
Work :=Work +Allocation3 =(5,3,2)+(2,1,1)=(7,4,3) >Need3=(0,1,1); Finish[3]=true;
(3)找到进程P0
Work :=Work +Allocation0=(7,4,3)+(0,1,0)=(7,5,3) >Need0=(7,4,3); Finish[0] =true
(4)找到进程P2
Work :=Work +Allocation2=(7,5,3)+(3,0,2)=(10,5,5) >Need2=(6,0,0); Finish[2]=true;
(5)找到进程P4
Work :=Work +Allocation4=(10,5,5)+(0,0,2)=(10,5,7) >Need4=(4,3,1) ;Finish[4] =true;
最后,找到安全序列{1->3->0->2->4},所以此时刻,系统为安全状态。
注意,安全序列不唯一。存在即可。
Ref:
https://wenku.baidu.com/view/6b38a85355270722192ef787.html
http://blog.csdn.net/only06/article/details/53381153