一、实验题目:用银行家算法实现资源分配
二、设计思路:
1、进程一开始向系统提出最大需求量
2、进程每次提出新的需求都统计是否超出它事先提出的最大需求量
3、若正常,则判断该进程所需剩余剩余量(包括本次申请)是否超出系统所掌握的剩余资源
量若不超出,则分配否则等待
三、算法的数据结构:
1、系统剩余资源量 A[n]其中 A[n]表示第 I 类资源剩余量
2、各进程最大需求量,B[m][n],其中 B[j][i]表示进程 j 对 i 类资源最大需求
3、已分配资源量 C[m][n],其中 C[j][i]表示系统 j 程已得到的第 i 资源的数量
4、剩余需求量 D[m][n],其中 D[j][i]对第 i 资源尚需的数目
四、算法的实现
1、初始化
由用户输入数据分别对可利用资源向量矩阵 AVAILABLE、最大需求矩阵 MAX、分配矩
ALLOCATION、需求矩阵 NEED 赋值。
2、银行家算法
基本思想是分配资源之前,判断系统是否是安全的;若是,才分配。它是最具有代表性的避
免死锁的算法。
设进程 cusneed 提出请求 REQUEST [i]则银行家算法按如下规则进行判断。
(1)如果 REQUEST [cusneed] [i]<= NEED[cusneed][i]则转(2);否则出错。
(2)如果 REQUEST [cusneed] [i]<= AVAILABLE[cusneed][i]则转(3);否则出错。
(3)系统试探分配资源修改相关数据:
AVAILABLE[i]-=REQUEST[cusneed][i];
ALLOCATION[cusneed][i]+=REQUEST[cusneed][i];
NEED[cusneed][i]-=REQUEST[cusneed][i];
(4)系统执行安全性检查如安全则分配成立;否则试探险性分配作废系统恢复原状进程等
待。
3、安全性检查算法
(1)设置两个工作向量 Work=AVAILABLE;FINISH
(2)从进程集合中找到一个满足下述条件的进程
FINISH==false;
NEED<=Work;
如找到执行(3);否则执行(4)
(3)设进程获得资源可顺利执行直至完成从而释放资源。
Work+=ALLOCATION;
Finish=true;
GOTO 2
(4)如所有的进程 Finish= true 则表示安全;否则系统不安全。
初始化算法流程图: