1、银行家算法中的数据结构
-
可利用资源向量Available
含有m个元素,每个元素代表一类可利用的资源数目,初值是该类全部可用资源的数目。数值随该类资源的分配和回收而动态改变。 -
最大需求矩阵Max
最大需求矩阵Max定义了每一个进程对各类资源的最大需求。 -
分配矩阵Allocation
分配矩阵Allocation定义了系统中各类资源当前已分配给每一进程的资源数。 -
需求矩阵Need
表示每一个进程尚需的各类资源数目
2、安全性算法
步骤一:初始化
Work向量:供进程继续运行的各类资源数,Work = Available
Finish向量:表示系统是否有足够资源分配给进程,Finish[i]=Flase,如果系统有足够资源分配给进程,另Finish[i] = True
步骤二:找满足下列条件的进程
Finish[I] = false
Need[I,j] <= Work[j]
若满足条件,执行步骤三,否则执行步骤四
步骤三:进程Pi释放资源,重新计算Work,并修改Finish
Work[j] = Work[I]+Allocation[I,j]
Finish[I] = True
继续执行步骤二
步骤四:判断Finish
若所有进程的Finish[I] = True,表示系统处于安全状态,否则系统处于不安全状态
3、银行家算法
设Requesti是进程Pi的请求向量。如果requesti[j]=k,表示进程Pi只需要k个Rj类型的资源。
Pi发出资源请求后,按下述步骤检查:
步骤一:判断请求资源的个数是否超过需求个数
如果Requesti[j] <= Need[I,j],则继续步骤二,否则出错
步骤二:判断请求的资源个数是否小于等于系统能够提供的有效资源个数
如果Requesti[j] <= Avaliable[j],则继续步骤三,否则,进程Pi等待
步骤三: 系统尝试把资源分配给进程
Available[j] = Available[j] - Requesti[j]
Allocation[I,j] = Allocation[I,j]+Requesti[j]
Need[I,j] = Need[I,j] - Requesti[j]
步骤四:执行安全行算法
分配完资源后,系统执行安全行算法,检查此次资源分配后,系统是否处于安全状态。若安全,才正式将资源分配后进程,否则,将试探分配作废,恢复原来的资源分配状态,让进程Pi等待。