实验四银行家算法的实现
1、实验目的通过编写和调试银行家算法的模拟程序以加深对避免死锁方案的理解。熟悉银行家算法的分配思想。2、实验要求设计一个银行家方案。并编写模拟程序实现之。已知系统总共的资源数、进程名、进程已分配的资源、进程运行完毕最大最资源的需求量,以书上例题为例,分析某一时刻系统的安全状态,如果安全,输出安全序列。3、算法描述银行家算法中数据结构如下:
:系统中的进程个数;m:系统中的资源类数。1)Available(m):现有资源向量。Available(j)k表示k个未分配的j类资源2)Max(
,m):资源最大申请量矩阵。Max(i,j)k表示第i个进程在运行过程中对第j类资源的最大申请量为k。3)Allocatio
(
,m):资源分配矩阵。Allocatio
ijk表示进程i已占有k个j类资源。4)Need(
,m):进程以后还需要的资源矩阵。Need(i,j)k表示进程i以后还需要k个第j类资源。显然有NeedijMaxijAllocatio
ij。5)Request(
,m):进程申请资源矩阵。Request(i,j)k表示进程i申请k个第j类资源。银行家算法思想如下:若进程i申请资源,申请资源向量为Request(i),则有如下资源分配过程:1)如果Request(i)〉Need(i),则报错返回。2)如果Request(i)〉Avaliable,则进程i进入等待资源状态,返回。3)假设进程进程i的申请已获批准,于是修改系统状态:AvaliableAvaliableRequest(i)Allocatio
(i)Allocatio
(i)Request(i)Need(i)Need(i)Request(i)4)调用安全状态检查算法。设Work(m)为临时工作向量。初始时WorkAvailable。令N1,2,……
。寻求j∈N使其满足:Need(j)Work,若不存在这样的j则转至3)。WorkWorkAllocatio
(j)NNj转至1)。如果N空集则返回(系统安全)。如果N≠空集则返回(系统不安全)。5)若系统处于安全状态,则将进程i申请的资源分配给进程i,返回。6)若系统处于不安全状态,则不将进程i申请的资源分配给进程i,恢复原来的资源分配状态,让进程i等待。AvaliableAvaliableRequest(i)Allocatio
(i)Allocatio
(i)Request(i)Need(i)Need(i)Request(i)4、源程序代码
fi
cludeiostreamusi
g
amespacestddefi
eFalse0defi
eTrue1i
tMax1001000i
tAllocatio
1001000i
tNeed1001000i
tAvailable1000i
tWork1000char
ame1000i
ttemp1000i
tS100P100i
tsafequeue1000i
tRequest1000voidShowdata
i
tijklcout