银行家算法实验报告材料70984

若请求合法,则进行试分配,最后对试分配状态调用安全性算法进行安全性检查。若安全,则分配,否则,不分配,恢复原来状态,拒绝申请。

五、详细设计

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)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。

(5)对于某一进程i,若对所有的j,有NEED[i][j]=0,则表此进程资源分配完毕,应将占用资源释放。 3、安全性检查算法

(1)设置两个工作向量Work=AVAILABLE;FINISH (2)从进程集合中找到一个满足下述条件的进程,

FINISH==false; NEED<=Work;

如找到,执行(3);否则,执行(4)

(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。

Work+=ALLOCATION; Finish=true;

GOTO 2

(4)如所有的进程Finish= true,则表示安全;否则系统不安全。

4、流程图 1、整体流程图

2、判断系统的安全性Safe()

Safe()开始初始化i,j,t,tempnFihish[i]=falseTempn==0?Fi=Need[i][0]) && (Work[1]>=Need[i][1]) && (Work[2]>=Need[i][2])tp==1?YFi++Finish[i]=true;Work[j]+=Allocation[i][j];Tempn--i=0i

六、运行结果

1、系统不安全的输入

(1)、本程序按下图建立.txt源文件,作为程序的初始化输入

(2)执行程序,读取源文件,并判断T0时刻所得结果:

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4