银行家算法所用到的数据结构:
以各类资源为矩阵的首行,以各类进程为矩阵的首列。i表示i行,j表示j列,
进程需要的最大资源数目为矩阵 MAX[i,j];
分配给各进程的资源数 目为矩阵 Allocation[i,j];
各类进程需要的资源数目为矩阵 Need[i,j];
可用的资源数 Available[j] ;
首先执行银行家算法,假设进程REQUESTi[j] 表示进程i请求j类资源。
将REQUESTi[j]<Need[i,j] and REQUESTi[j]<Available[j];
如果满足就试探的将资源分配给进程i.
此时 Available[j]=Available[j]-REQUESTi[j]
Allocation[i,j]=Available[i,j]+REQUEST[j];
第二步,执行安全性算法。
设置一个工作向量Work[j]=Avaliable[j]; 设置一个标识Finsh[i]=false;
寻找一个进程满足如下条件。
Need[i,j]<Work[j] 否则,执行第四部
满足执行第三步:
第三步: 将Finsh[i]=true; Work[j]=Work[j]+Availbale[i,j];
第四步: 没有合适的安全性序列,系统不进行分配。
先预分配资源,再执行安全性算法,若能找到一个安全性序列,则予以分配,否则系统不安全,易产生死锁,不进行分配。