银行家算法
银行家算法的实现
一、设计目的:
熟悉银行家算法,理解系统产生死锁的原因及避免死锁的方法,加深记忆。
二、设计内容
设计一个n 个并发进程共享m 个系统资源的系统。进程可动态申请资源和释放资源,系统按各进程的申请动态的分配资源。要求采用银行家算法实现。
三、开发环境
windows环境,。
四、分析设计
<一>实验原理
银行家算法是从当前状态出发,逐个按安全序列检查各客户中谁能完成其工作,然后假定其完成工作且归还全部贷款,再进而检查下一个能完成工作的客户。如果所有客户都能完成工作,则找到一个安全序列,银行家才是安全的。
与预防死锁的几种方法相比较,限制条件少,资源利用程度提高了。
缺点:该算法要求客户数保持固定不变,这在多道程序系统中是难以做到的;该算法保证所有客户在有限的时间内得到满足,但实时客户要求快速响应,所以要考虑这个因素;由于要寻找一个安全序列,实际上增加了系统的开销.
若系统新状态是安全的,则分配完成若系统新状态是不安全的,则恢复原状态,进程等待
:
第一部分:银行家算法(扫描)
1.如果Request<=Need,则转向2;否则,出错
2.如果Request<=Available,则转向3,否则等待
3.系统试探分配请求的资源给进程
4.系统执行安全性算法
第二部分:安全性算法
(1).工作向量:Work=Available(表示系统可提供给进程继续运行所需要的各类资源数目)
(2).Finish:表示系统是否有足够资源分配给进程(True:有;False:没有).初始化为False
[i]=False&&Need<=Work,则执行3;否则执行4(I为资源类别)
,则顺利执行直至完成!并释放资源:
Work=Work+Allocation; Finish[i]=true;转2
4. 若所有进程的Finish[i]=true,则表示系统安全;否则,不安全!
<三>数据结构:
假设有M个进程N类资源,则有如下数据结构:
MAX[M*N] M个进程对N类资源的最大需求量
AVAILABLE[N] 系统可用资源数
ALLOCATION[M*N] M个进程已经得到N类资源的资源量
NEED[M*N] M个进程还需要N类资源的资源量
<
四>程序流程图:
五. 运行示例及结果分析
T0 时刻 可用资源(Available) A:3, B:3, C:2
请求分配时间: 14:07:29
经测试,可为该进程分配资源。以下为资源分配表
资源 Work Need Allocation Work+Alloc Finish
ID A B C A B C A B C A B C
P01 03 03 02 01 02 02 02 00 00 05 03 02 TRUE
P03 05 03 02 00 01 01 02 01 01 07 04 03 TRUE
P00 07 04 03 07 04 03 00 01 00 07 05 03 TRUE
P02 07 05 03 06 00 00 03 00 02 10 05 05 TRUE
P04 10 05 05 04 03 01 00 00 02 10 05 07 TRUE
进程 1 申请资源 A:2, B:1, C:1 时的安全性检查
请求分配时间: 14:07:39
进程请求的资源比Need多!!不能为该进程分配资源!
系统在 T0(Request) 时刻是不安全的!!
—-尝试进行另外一个分配—-
进程 1 申请资源 A:1, B:0, C:2 时的安全性检查
请求分配时间: 14:07:55
经测试,可为该进程分配资源。以下为资源分配表
资源 Work Need Allocation Work+Alloc Finish
ID A B C A B C A B C A B C
P01 02 03 00 00 02 00 03
银行家算法(00001) 来自淘豆网m.daumloan.com转载请标明出处.