1银行家算法中的数据结构
(1)可利用的资源向量可用。这是一个含有m个元素的数组,每一个元素代表一类可利用的资源数目。初始值为系统中所配置的该类全部可用资源的数目,其数值
随该类资源的分配和回收而动态地改变。如果可用[j] = K,则表示系统中现有Rj类资源K个。
(2)最大需求矩阵Max。这是一个n * m的矩阵,定义了系统中n个进程每一个进程对m类资源的最大需求。如果Max [i,j] = K,则表示进程我需要Rj类资源的最大数目为K.
(3)分配矩阵Allocation。这也是一个n * m的矩阵它定义了系统中每一类资源当前分配给每一进程的资源数。如果Allocation [i,j] = K,则表示进程i当前已分配Rj类
资源的数目为K.
(4)需求矩阵Need。这是一个n * m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need [i,j] = K,则表示进程我还需要RJ类资源ķ个,方能完成任务。
以上 个矩阵的关系:
需要[I,J] =最大[I,J] -分配[I,J];
即尚需的等于总需求减去已经分配的。
2银行家算法
设Requesti是进程Pi的请求需求量,如果Requesti [j] = K,表示进程Pi需要K个Rj型资源。当Pi发出请求后,系统按下述步骤进行检查:
(1)如果Requesti [j] <= Need [i,j],便转向步骤(2),否则认为出错。
(2)如果Requesti [j] <= Available [j],便转向步骤(3),否则表示尚无足够资源,Pi必须等待
(3)系统试探着把资源分配给进程Pi,并修改下面的数据结构中的数值:
可用[j]:=可用[j] - Requesti [j];
分配[i,j]:=分配[i,j] + Requesti [j];
需要[i,j]:=需要[i,j] - Requesti [j];
(4)系统执行安全性算法,检查此次资源分配后系统是否处于安全状态若安全则正式将资源分配给进程裨,完成本次分配;否则将本次分配作废,原来回复主资源的分配
状态,让进程裨等待。
3性安全算法
系统-执行安全性算法柯林斯描述如下:
(1)设置两个向量:
工作向量工作,表示系统可提供给进程继续运行所需的各类资源的数目,它含有m个元素,在执行安全算法开始时,工作:=可用
.Finsh:他表示系统是否有足够的资源分配给进程,使之运行完成。开始时Finish [i]:= false,当有足够资源分配的时候,结束[i]:=真。
(2)从进程集合中找到一个满足下述条件的进程:
Finish [i] = false;
需要[i,j] <=工作[j],若找到,则执行步骤(3),否则执行步骤(4)
(3)当进程Pi获得资源后,可顺利执行,直到完成,并释放出分配给他的资源,故应执行:
工作[j]:=工作[j] +分配[i,j];
完成[i]:= true;
转到第2步;
(4)如果所有进程的Finish [i]:= true都满足则表示系统处于安全状态,否则系统处于不安全状态