项目设计报告纸
题目简介…………………………………………………………………………………
设计思路…………………………………………………………………………………
数据结构…………………………………………………………………………………
源程序与运行环境………………………………………………………………………
源程序………………………………………………………………………………
运行环境……………………………………………………………………………
测试数据…………………………………………………………………………………
图表分析………………………………………………………………………………
结论………………………………………………………………………………………
1 题目简介
银行家算法是一种最有代表性的避免死锁的算法。
共 页 第 页
装
订
线
项目设计报告纸
要解释银行家算法,必须先解释操作系统安全状态和不安全状态。
安全状态:如果存在一个由系统中所有进程构成的安全序列 ,…,,则系统处于安全
状态。安全状态一定是没有死锁发生。
不安全状态不存在一个安全序列。不安全状态一定导致死锁。
安全序列:一个进程序列,…,是安全的,如果对于每一个进程 ),它
以后尚需要的资源量不超过系统当前剩余资源量与所有进程 当前占有资源量之和。
银行家算法:我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的
资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规
则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现
存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执
行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进
程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满
足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。
2 设计思路
首先对符号进行说明
可用剩余资源
最大需求
!" 已分配资源
#$需求资源
%&'("请求资源
银行家算法
%&'("
是进程 的请求向量。%&'("
())* 表示进程 请求分配 % 类资源 * 个。当
发出资源请求后,系统按下述步骤进行检查:
. 如果 %&'("
#$,则转向步骤 ;否则,认为出错,因为它所请求的资源数已超过
它当前的最大需求量。
. 如果 %&'("
,则转向步骤 ;否则,表示系统中尚无足够的资源满足 的
申请, 必须等待。
. 系统试探性地把资源分配给进程 ,并修改下面数据结构中的数值:
)+%&'("
共 页 第 页
装
订
线
项目设计报告纸
!"
) !"
,%&'("
#$
)#$
+%&'("
. 系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。如果安全才正式将
资源分配给进程 ,以完成本次分配;否则,将试探分配作废,恢复原来的资源分配状态,
让进程 等待。
安全性算法
. 置两个向量。
- .*:它表示系统可提供给进程继续运行的各类资源数目,它包含 / 个元素,开始执行安
全性算法时,- .*)。
0(1 : 它 表 示 系 统 是 否 有 足 够 的 资 源 分 配 给 进 程 , 使 之 运 行 完 成 , 开 始
0(1(2))3(;当有足够资源分配给进程 时,令 0(1())".';
. 从进程集合中找到一个能满足下述条件的进程。
0(1()))3(;
#$
4 .*;
如找到则执行步骤 ;否则,执行步骤 ;
. 当进程 获得资源后,可顺利执行直到完成,并释放出分配给它的资源,故应执行
- .*)4 .*, !"
0(1())".';转向步骤 ;
. 若所有进程的 0(1()都为 ".',则表示系统处于安全状态;否则,系统处于不安全状
态。
3 数据结构
1. 可利用资源向量 Available ,它是一个含有 m 个元素的数组,其中的每一个元素代表一类可
利用的资源的数目,其初始值是系统中所配置的该类全部可用资源数目。其数值随该类资源
的分配和回收而动态地改变。如果 Available[j]=k,标是系统中现有 Rj 类资源 k 个。
2. 最大需求矩阵 Max,这是一个 n×m 的矩阵,它定义了系统中 n 个进程中的每一个进程对 m
类资源的最大需求。如果 Max[i,j]=k,表示进程 i 需要 Rj 类资源的最大数目为 k。
3. 分配矩阵 Allocation,这是一个 n×m 的矩阵,它定义了系统中的每类资源当前一分配到每
一个进程的资源数。如果 Allocation[i,j]=k,表示进程 i 当前已经分到 Rj 类资源的数目为
共 页 第 页
装
订
线
项目设计报告纸
k。Allocation
i
表示进程 i 的分配向量,有矩阵 Allocation 的第 i 行构成。
4. 需求矩阵 Need,这是一个 n×m 的矩阵,用以表示每个进程还需要的各类资源的数目。如果
Need[i,j]=k,表示进程 i 还需要 Rj 类资源 * 个,才能完成其任务。Need
i
表示进程 i 的需求
向量,由矩阵 Need 的第 i 行构成。
4 源程序与运行环境
源程序
566666666666666666666666666666666666666666利用银行家算法避免死锁6666666666666666666
66666666666666666666666666665
7!'$("$ 18
"955进程数
"/955资源种类数
"1955请求资源的进程
":955可利用资源向量
":955存储初始可利用资源向量
"/::955最大需求矩阵
" !" ::955分配矩阵
" !" ::955存储初始分配矩阵
"$::955需求矩阵
"$::955存储初始需求矩阵
".&'("::955进程的请求向量
"4 .*:955系统可提供给进程继续运行的各类资源数目
";(1:955是否有足够的资源分配给进程<值为 表示是,值为 : 表示否
"':955安全序列
共 页 第 页
装
订
线