收藏 分享(赏)

银行家算法.doc

上传人:scg750829 文档编号:6817422 上传时间:2019-04-23 格式:DOC 页数:15 大小:331.56KB
下载 相关 举报
银行家算法.doc_第1页
第1页 / 共15页
银行家算法.doc_第2页
第2页 / 共15页
银行家算法.doc_第3页
第3页 / 共15页
银行家算法.doc_第4页
第4页 / 共15页
银行家算法.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、 实 验 报 告题 目名 称死锁避免(银行家算法)院 系信息科学与工程学院班 级 1006402 完成时间 2012-4-24指导老师 肖赛男本次实验成绩组长联系电话刘建平13337377983邮件地址 组员(姓名,学号)刘建平10006402-27 主要任务算法的组织,综合调度,程序运行界面的实现组员(姓名,学号)孟文斌1006402-25 主要任务 算法的实现,测试,实验报告的完成主要原理及所参考的资料(包括实验内容及条件实验原理:我 们 可 以 把 操 作 系 统 看 作 是 银 行 家 , 操 作 系 统 管 理 的 资 源 相 当 于 银 行 家 管理 的 资 金 , 进 程 向 操

2、 作 系 统 请 求 分 配 资 源 相 当 于 用 户 向 银 行 家 贷 款 。 为 保 证 资 金 的 安 全 ,银 行 家 规 定 : ( 1) 当 一 个 顾 客 对 资 金 的 最 大 需 求 量 不 超 过 银 行 家 现 有 的 资 金 时 就 可 接 纳该 顾 客 ; ( 2) 顾 客 可 以 分 期 贷 款 ,但 贷 款 的 总 数 不 能 超 过 最 大 需 求 量 ; ( 3) 当 银 行 家 现 有 的 资 金 不 能 满 足 顾 客 尚 需 的 贷 款 数 额 时 ,对 顾 客 的 贷 款可 推 迟 支 付 ,但 总 能 使 顾 客 在 有 限 的 时 间 里 得

3、到 贷 款 ; (4) 当 顾 客 得 到 所 需 的 全 部 资 金 后 ,一 定 能 在 有 限 的 时 间 里 归 还 所 有 的 资金 . 主要参考书(1)黄干平,陈洛资,等 计算机操作系统。北京:科学出版社,1989。(2)计算机操作系统原理 西安大学出版社 汤子瀛主编(3)操作系统 电子工业出版社 William Stallings 著(4)冯耀霖,杜瞬国。操作系统。西安:西安电子科技大学出版社,1989(5)李勇,刘恩林。计算机体系结构。长沙:国防科技大学出版社。1987(6)孟庆昌。操作系统教程。北京:电子工业出版社,2004)主要算法流程图(包括实验步骤)函数调用流程图调用

4、check()函数work=availablefinish=false needNeed? 继续分配(Y)?or退出 (N)?RequestAvailable?预分配调用 check()函数进行安全性检查退出系统银行家算法流程图 实验说明操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程本次申请的资源数是否超过了该资源所剩余的总量。若超过则拒绝分配资源,若能满足则按当前的申请量分配资源,否则也要推迟分配。 本次实验的算法思路

5、来自于计算机操作系统教材中的银行家算法,算法首先用安全性算法检查输入的各项矩阵数据。如果输入数据状态不是安全的状态,则提示数据不安全,要求用户重新输入数据;如果数据时安全的,则继续要求用户输入需要发送请求的进程及其所请求的资源,然后再判断资源数是否满足分配条件,如果不满足,则提示不满足条件,请求失败;如果满足,则备份当前各进程的状态,预分配进程资源,再进行安全性检查。如果状态安全,则系统正式为发送请求的进程分配资源,若状态不安全,则提示用户为进程分配资源后系统处于不安全状态,并还原各进程状态。本实验涉及的主要算法细节说明(包括数#include#include#include#define F

6、alse 0#define True 1int Max100100=0; /各进程所需各类资源的最大需求int Available100=0; /系统可用资源char name100=0; /资源的名称int Allocation100100=0; /系统已分配资源int Need100100=0; /还需要资源int Request100=0; /请求资源向量int temp100=0; /存放安全序列int Work100=0; /存放系统可提供资源int M=100; /作业的最大数为100int N=100; /资源的最大数为100void showdata() /显示资源矩阵int

7、i,j;count“;counti; /输入须申请的资源号countRequestj; /输入需要申请的资源for (j=0;jNeedij) /判断申请是否大于需求,若大于则出错 countAvailablej) /判断申请是否大于当前资源,若大于则出错 countn;flag=N;N=N+n;for(int i=0;inameflag;countAvailableflag+;showdata();safe();void delresources() /释放资源 char ming;int i,flag=1;countming;for(i=0;iAvailable0Available1Ava

8、ilable2;countMaxflagi;Needflagi=Maxflagi-Allocationflagi;showdata();safe();int main() /主函数int i,j,number,choice,m,n,flag;char ming;countn;N=n;for(i=0;iming;namei=ming;countnumber;Availablei=number;countm;M=m;countMaxij;doflag=0;countAllocationij;if(AllocationijMaxij)flag=1;Needij=Maxij-Allocationij;

9、if(flag)countchoice;switch(choice)case 1: addresources();break;case 2: delresources();break;case 3: changeresources();break;case 4: share();break;case 5: addprocess();break;case 0: choice=0;break;default: count“请正确选择操作(0-5)!“end;break;return 1;主要算法细节说明(1)设置两个向量:工作向量 Work,它表示系统可提供给进程继续运行所需的各类资源数目,开始时

10、,Work=Available;Finish ,它表示系统是否有足够的资源分配给进程,使之运行完成。开始时 Finishi=false;当有足够资源分配给进程时,再另 Finishi=true(2 从进程集合中找到一个能满足下述条件的进程:Finishi=false;Needi,j=Workj:若找到,则执行(3),否则执行( 4)。(3)当进程 P 获得资源后,可顺利执行,直至完成,并且释放出分配给它的资源,执行 Workj=Workj+Allocationi,j;Finishi=true;Go to step 2;(4)如果所有的进程的 Finishi=true 都满足,则表示系统处于安全

11、状态;否则,系统处于不安全状态。注:Available 为可利用的资源向量;Max 为最大需求;Allocation 为当前已分配的资源数。本次实践计划、进度安排及完成情况4月10号商讨如何实现本次实验以及同学之间的分工.4月10号4月24号基本完成程序.4月22号10月24号修改完善程序.代码测试.4月24号5月2号完成实验报告.主要测试方法及测试数据,包括测试结果及测试人测试数据:537 5 33 2 29 0 22 2 24 3 30 1 02 0 03 0 22 1 10 0 23 3 2发送请求:11 0 243 3 00 0 2 000 1 0步骤:1、 运行程序进入初始化界面2、

12、 输入测试数据3、 程序对初始化的进程状态进行安全性检查4、 输入发送请求的进程及请求的资源数5、 数据测试成功,得到其安全序列,继续测试.第二次请求:进程4 请求3 3 0 失败!6、 程序运行正确,继续测试下一组数据.分配后系统处于不安全状态,还原进程状态!本次实验的心得体会(每位同学一段)刘建平经过本次实验,我深刻的认识到银行家算法在避免死锁上起到了重要的作用。在做银行家算法的课程设计时,首先给自己整理了下这次课程设计的计划,因为要编程,所以在网上、书本上查了很多与银行家算法相关的资料,比如资源分配,随机分配算法。这次的设计数据是通过一道实际的题目来体现银行家算法避免死锁的问题,了解到一

13、些书本上没有的知识,也知道要做一个课程设计,如果知识面只是停留在书本上,是不可能把课成设计完全地做好。其实如果不经常动手实学习的话,对于像这种编程类的设计是很难熟练掌握的,从每次的课程设计中虽然都能将以前的知识顺便再复习一遍,但如果平时不训练积累的话还是很容易忘的,课程设计是给了我们一个机会去复习,同时也是提醒我们应该注重平时的积累。从课程设计以后还是要多多的动手,在实践中体会理论知识,这样才不会在要做实验和设计时,觉得无从下手。在这次编程中,我得到了很多。遇到问题时,和同学一块商量,一起努力!也了解到同学的想法,大家的思想都得到了交流。本次课程设计最大的体会是动手能力有了很大的提高,希望我能

14、在今后的学习和实践中能更加熟练掌握编程能力。孟文斌在本次实现银行家算法的实验中有很大收获,首先,我在这次实验中主要负责算法的实现,测试,实验报告的完成,在写代码中也遇到了很多不懂的或是以前忽略了的知识,参考别人的代码得到了很多启示。其实我对真正的编程实现一些功能还没有什么经验,所以这次的算法实现让我感觉到对编程的认识又进了一步。在测试的过程中,还发现好多平时不注意的细节,有是代码是正确的,但就是不能执行,就是因为平时不注意这方面,这次得到警醒。还有就是在这次试验显现出了团队合作的效率,大家分工合作,相互讨论交流,是我们的实验在很短的时间内就能完成的原因之一。还是那句话:理论不如实践,只有动手才能学好。实验过程中虽然遇到很多困难,但是收获也是令人满意的,下次我想会做得更好。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报