《银行家算法报告.docx》由会员分享,可在线阅读,更多相关《银行家算法报告.docx(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、银行家算法报告银行家算法流程图图4. 2银行家算法流程图4.2系统的设计方法根据设计任务书的要求,画出程序设计流程图,确定程序的功能,把整个 程序根据功能要求分解为各个子程序,利用TC语言分编写程序代码,然后进行 上机调试、修改、进行连接,测试,写出设计总结报告。主要函数的核心代码:1 .进行初始化输入的函数2 .打印输出的函数3 .利用安全性算法进行检测的函数4 .进行资源分配的函数5 .利用行家算法进行判定的函数void mainenter ()主要的输入部分代码printf(请输入系统总共有的资源数:); scanf (%d, &n);printf (请输入总共有多少个进程:); sca
2、nf(%d”, &m);for (i=l;i=n;i+)printf (第%d类资源有的资源实例:,i): scanf(%d”, &Availablei);for (i=l; i=m; i+)for(j=l;j=n;j+)printf (进程P%d对第%d类资源的最大需 求量:,i,j);scanf (z/%dz,, &Max i j);Needi j=Maxi j;5、模块划分第一部分:银行家算法(扫描)1 .如果Request=Need,则转向2;否则,出错2 .如果Request=Available,则转向3,否则等待3 .系统试探分配请求的资源给进程4 .系统执行安全性算法第二部分:安
3、全性算法1 .设置两个向量(1) .工作向量:Work=Available(表示系统可提供给进程继续运行所需要的 各类资源数目)(2) . Finish:表示系统是否有足够资源分配给进程(True:有;False:没有). 初始化为False2 .若Finishi=False&Need 和 mainenter()本身 void main() int k,h=l; while(h) system(cls); ( printfCW欢迎使用本程序/);printf (nn 1:输入系统的资源数、申请进程数、每个类资源的实例数);printffXn 2:输入进程的资源申请);printf Cn 3:输
4、出系统状态)printf Cn 4:退出程序“);printf(nn please choose );scanf&k);) switch(k) (case 1:mainenter();break;case 2:mainrequest(); break;case 3:mainprint();break;case 4:h=0;break;)system(pause);)system(cls)printf (nn谢谢使用 n);printf(nn See you next time!nnn);5. 2安全性算法流程图图5.1安全性算法流程图6运行与测试结果6.1运行程序成功之后的欢迎界面c *C:P
5、rogra Fileslicrosoft Visual StudiolyProjects44Debug44.exe*但X欢迎使用本程序1:输入系统的资源数、申请进程数、2:3:4:数迂黑序 例出 的退 寓出 个人二 一 一please choose图6. 1欢迎界面6. 2初始化程序申请进程数、U输入系统的资源数、2:3:4:欢迎使用本程序c *C:Progra Fileslicrosoft Visual StudiolyProjects44Debug44. exe图6. 2初始化界面350数157数罢序例出的豪退寓出个人二篇二量求需大sZ内向工黑隰馨sewmclap.*50图6. 3输入数据
6、-l*量量量量量量量量量量量量量量量市里里里WWW里W里里里里里里两猾PLlplplp2p2p2p3p3p3p4p4p4p5p5p5以聚联摩濮雪皆皆皆皆皆皆皆皆皆皆皆好皆P请请进进进进进进进进进进进进进进c、 *C:Progra FilesMicrosoft Visual StudioMyProjects44Debug44. exe数仝罢序例出的退寓出SS-个人二S-欢迎使用本程序1:输入系统的资源数、申请进程数、2:3:4:010量量量请用请tninin的的的1源源源:ws社J芯工23s知?.fiHrTS.源1113菇plplpl抬e等进进as入入入入lelfe按P请请请请$Sa请图6. 4
7、申请进程1欢迎使用本程序数也罢序 例出 的纂退 寓出 正入二 I-U输入系统的资源数、2:3:4:please choose 22 0 0 量.*. 请请请 廿WB靖施入里道资源的嘤:2 请输入避野对工委资源的 请%入进程P2龙一2佥出八 请输入进程P 2对3 $ 1 $ 2 $ 3 $ 4 $5 5 safe static请按任意键继续.图6. 5申请进程2c( *C:Progra FilesMicrosoft Visual StudioMyProjects44Debug44. exe申请进程数、Wii退出欢迎使用本程序U输入系统的资源数、2:3:4:302量量量请请请的的的13H5123$
8、2的笄一源313OO资ppe等进进aslAJAJAJA4$3$2P青青青青淳图6. 6申请进程3欢迎使用本程序数M更心序出的豪退需出正入二I-工:输入系统的资源数、申请进程数、2:3:4:002量量量请请wain5H5井123$2的eJ5S洸555oO资PLPLP$e9进进Sas入入人入$P青青青青冶图6. 7申请进程56. 3界面显示每个类泊厚的 端入进毒的雪 输出系申请进程数、工:输入系统的资源数、2:3:4:!进程申请的资源数多于它自己申报的最大量!进程申请的资源数多于它自己申报的最大量欢迎使用本程序图6. 8界面显7Fc *C:Progra Fileslicrosoft Visual
9、StudiolyProjects44Debug44. exe* X色数重心序例出2一源111OO资pp进as入入入P青青青量量的的1源蜴-l7-a.Ta,-的unsafe static申请进程数、数也罢序 例出 的退 寓出 个人二 篝二量量 M电请 的的 3原原 氟 a.-a. 1 2 2的 e泉J J3 3 OO资pp as入入入 p请请请6.4出错界面图c *C:Progra Fileslicrosoft Visual StudiolyProjects44Debug44. exe欢迎使用本程序广输入系统的资源数、2:3:4:出错!进程申请的资源数多于它自己申报的最大量unsafe stat
10、ic请按任意键继续.图6. 9出错界面6. 5程序运行结束c、 *C:Progra FilesMicrosoft Visual StudiolyProjects44Debug44. exe*谢谢使用See you next time?Press any key to cont inue图6.10程序结束画面金陵科我学院锦福毂计想告题 目银行家算法程序设计课 程名称操作系统课程设计院 专 班 学 学部名称信息技术学院业计算机科学与技术OOOOOOOOOOOOOOOOOOOOOOO生姓名 。号OOOOOOOOOO课程设计地点。课程设计学时20指导教师金陵科技学院教务处制7、总结在本程序代码中,银行
11、家算法用数组函数来实现。首先,输入欲申请资源 的进程以及其所申请的资源数,存放在Request数组中。然后,判断进程请求 的资源数是否大于其所需的资源数,若大于则报错并返回,若不大于则继续判 断它是否大于系统在此时刻可利用的资源数,同样,如果大于则报错并反回, 如果不大于则调用函数来进行预分配,之后再调用安全型算法safty检查。最后,无论此次分配是否成功,我们都可以选择继续分配或者退出系统。在银行家算法这个系统之中,所采用的数据结构应是最基本的部分。银行 家算法的数据结构我们采用了一维数组与二维数组来存储,比如最大需求量Max口口、已分配资源数Allocation口口、仍需求资源数Need口
12、口、以及系统可利用的资源数、申请各类资源等数组。数据结构虽然重要但却只是基础,而 最主要的用以实现系统功能的应该有两个部分,一是用银行家算法来判断,二 是用安全性算法来检测系统的安全性。除此之外,在程序当中,我们也得强调 一下对输入的合法性的判断。比如,我们输入的欲申请资源的进程号没有在系 统已存在的进程当中,或者进程号定义为整型,但是却错输成字母等情况,我 们需要对这些情况进行判断,让程序报错返回而并非因错误而中断。这样的情况处理起来比较麻烦,相当于对每次输入针对各种不同的情况都 得做判断。我也没有涵盖全部的输入,仅仅只是对输入的进程号不在已存在进 程当中、以及输入的操作选择不存在两种情况分
13、别作了判断,并且针对第二种 情况设定了五次输入错误的话系统关闭的功能。而因为对于某些一一比如进程 号一一本来设定就是整型,因此对输入的是字母的判别因比较复杂而未能加上。通过对本次银行家算法的程序进行修改对其结构更加明确。课程设计的心得体会操作系统的基本特征就是并发和共享,系统允许多个进程并发执行,并且共享 系统的软、硬件资源。为了最大限度的利用计算机资源,操作系统应采用动态 分配的策略,但是这样就容易因资源不足、分配不当而引起“死锁”。本次课 程设计就是用银行家算法来避免“死锁”。该算法就是一在程序进行编写之前,先对程序的要求进行分析,弄清楚程序所需 要的功能,然后将每个功能分成一个功能模块即
14、调用函数来实现,无需过多的画蛇添 足。编写这个简易的银行家算法让我知道了在资源一定的条件下为了让多个进程都能 使用资源完成任务,避免死锁的产生可以从一开始就对系统进行安全性检查来判断是否将资源分配 给正在请求的进程。但是银行家算法会加大系统的开销。在资源分配过程,使分配序 列不会产生死锁。此算法的中心思想就是,每次分配后总存在着一个进程,如果让它 单独的运行下去,一周的操作系统课程设计,我学到了很多课本上没有的知识。想要 完成模拟银行家算法的c语言程序,首先就是要彻底熟悉算法,了解算法的基本原理, 才能开始着手程序设计在程序设计设计过程中,遇到了一些困难,通过向同学询问, 翻阅资料等问题被一一
15、解决了。首先就是在知识层面上了解了银行家算法这种进程调 度和避免死锁的算法,并用C语言程序真正模拟出安全性检查和银行家算法过程,复 习了之前所学c语言和数据结构的知识;在编程过程中虽然遇到很多困难,解决问题 的过程中,同时也锻炼了我不怕困难,勇于迎接挑战的精神,为以后的工作打下了坚 实的基础。9、参考文献1汤小丹等,计算机操作系统第三版,西安电子科技大学出版社,2007年 2塔嫩鲍姆等,操作系统设计与实现,电子工业出版社,2007 3罗宇等,操作系统课程设计,机械工业出版社,20054郑扣根著,操作系统概念,高等教育出版社,20105严蔚敏,吴伟明著,数据结构,北京清华大学出版社,20066斯
16、托林肯著,操作系统:精髓与设计原理,机械工业出版社,2010附录#include#include#includeint Available10;int Max1010;int Allocation1010=0;int Need1010=0;int Work10;int Finish10;int Request1010;量int Pause10;int List10;int i,j;int n;int m;int a;可使用资源向量最大需求矩阵分配矩阵需求矩阵工作向量状态标志进程申请资源向系统资源总数 总的进程数 当前申请的进程号int b=O,c=O,f=O9g;计数器计数器int l,e;v
17、oid mainenter()主要的输入部分代码 prints请输入系统总共有的资源数:); scanf(n%d,&n);prints请输入总共有多少个进程:); scanf(n%d,&m);for(i=l ;i=n;i+)(priIltfC第d类资源有的资源实例:二i);scanf(n %dn,&Availablei);)for(i=l;i=m;i+)(for(j=l;j=n;j+)(prints进程P%d对第d类资源的最大需 求量M);scanf(H%dn,&Maxij);Needij=Maxij;void mainrequest() 进程提出新申请的代码部printf请输入申请资源的进程
18、: scanf(n%d,&a);for(i=l ;iNeeda i)printf(-n出错!进程申请的资源数多于它自己申报的最大量n”);if(RequestaiAvailablei) printf(“nP%d必须等待 na);以下是试探性分配Availablei=Availablei-Requestai;Allocationai=Allocationai+Requestai;Needai=Needai-Requestai;Worki=Availablei;for(i=l ;i=m;i+)(Pausei=Availablei;/Pausei只是一个暂时 寄存的中间变量,为防止在下面安全性检查时
19、修改 到Availablei而代替的一维数组Finishi=false;)for(g=l;g=m;g+)(for(i=l ;i=m;i+)(b=0;计数器初始化for(j=l;j=n;j+)(if(Needij=Pausej)(b=b+l;)if(Finishi=false&b=n)for(l=l ;l=n;l+)Pausel=Pausel+Allocationil;Finishi=true;printf(n$ %d二i);依次输出进程安全序列之一中每个元素printf(nnn);for(i=l ;i=m;i+)(if(Finishi=true) f=f+1;统计 Finishi= true的
20、个数 if (f=m)(printf(Hsafe static);f=0;将计数器f重新初始化,为下一次提出新的进程申请做准备elseprintf(n unsafe static );以下代码为当系统被 判定为不安全状态时返回提出申请前的状态for(i=l ;i=n;i+)(Availablei=Availablei+Requestai;Allocationa i=Allocationa i -Requesta i;Needai=Needai+Requestai;void mainprint()(printf当前的系统状态n ”);printf(M目前占有量 最大需求量尚需要量n进程);for
21、(i=l;i=n;i+)for(j=l;j=n;j+)printf(n %d 类”,j);)for(i=l;i=m;i+)(printf(nnP%dn3);for(j=l;j=n;j+)(printf(M %d H,Allocationij);)for(j=l;j=n;j+)(printf(n %d fMaxij);)for(j=l;j=n;j+)(printf(n %d ,Needij);)printf(nnii系统剩余资源量:n);for(i=l;i=n;i+)目录摘要弓I言11、课程设计的目的和要求22、课程设计的环境23、课程设计的主要内容23.1、 项目名称23.2、 项目的主要内容
22、24、系统的组成及工作原理34. 1、系统主要过程的流程图34. 2、系统的设计方法45、模块划分54.1 各模块间的调用关系65. 2安全性算法流程图76、运行与测试结果86. 1欢迎界面87. 2初始化界面86. 3界面显示116.4 出错界面图126.5 程 序 运 行结束127、总结138、课程设计的心得体会149、参考文献15附录16printf(M %d n,Availablei);) printf(nnH);void main() int k9h=l;while(h) system。ds);printf(nnn 序、口);欢迎使用本程printf(nnn 1:输入系统的资源数、申
23、请进程数、每个类资源的实例数”);printf(nn2: 输入进程的资源申请”);printf(nn3: 输出系统状态”);printf(nnprmtf(nnn please choose scanf(n%dn9&k);switch(k)case l:mainenter();break;case 2:mainrequest(); break;case 3:mainprint();break;case 4:h=0;break;printf(nnn);system。pause);system。ds);priiitf(niin谢谢使用 nH);printf(nnn See you next time
24、!nniin);随着时代的发展,对生活的追求越来越高,生活品质也越来越好。在学习方 面的研究也越来越有成效。Dijkstra提出的银行家算法,是最具代表性的避免 死锁的算法。加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避 免死锁的具体实施方法。死锁的产生,必须同时满足四个条件,即一个资源每次 只能由一个进程占用:第二个为等待条件,即一个进程请求资源不能满足时,它 必须等待,但它仍继续保持已得到的所有其他资源:第四个为循环等待条件,系 统中存在若干个循环等待的进程,即其中每一个进程分别等待它前一个进程所持 有的资源。防止死锁的机构只能确保上述四个条件之一不出现,则系统就不会 产生死锁
25、。通过这个算法可用解决生活中的实际问题,如银行贷款等。本文对如何用银行家算法来处理操作系统给进程分配资源做了详细的说明,首先括需求分析.概要设计,详细设计.测试与分析,总结,源程序清单。做了需求分析,解释了什么是银行家算法,并指出它在斐源分配中的重要作用。然后给出了银行家算法的概要设计,包括算法思路,步骤,以及要用到的主要数 据结构、函数模块及其之间的调用关系等。在概要设计的基础上,又给出了详细 的算法设计,实现概要设计中定义的所有函数,对每个函数写出核心算法,并画出了流程o接着对编码进行了测试与分析。最后对整个设计过程进行了总结。关键字:死锁安全序列银行家算法进程Dijkstra (1965
26、)提出了一种能够避免死锁的调度算法,称为银行家算法。 它的模型基于一个小城镇的银行家,他向一群客户分别承诺了一定的贷款额度, 每个客户都有一个贷款额度,银行家知道不可能所有客户同时都需要最大贷款 额,所以他只保留一定单位的资金来为客户服务,而不是满足所有客户贷款需 求的最大单位。这里将客户比作进程,贷款比作设备,银行家比作系统。客户 们各自做自己的生意,在某些时刻需要贷款。在某一时刻,客户已获得的贷款 和可用的最大数额贷款称为与资源分配相关的系统状态。一个状态被称为是安 全的,其条件是存在一个状态序列能够使所有的客户均得到其所需的贷款。如 果忽然所有的客户都申请,希望得到最大贷款额,而银行家无
27、法满足其中任何 一个的要求,则发生死锁。不安全状态并不一定导致死锁,因为客户未必需要 其最大贷款额度,但银行家不敢抱这种侥幸心理。银行家算法就是对每一个请 求进行检查,检查如果满足它是否会导致不安全状态。若是,则不满足该请求;否则便满足。检查状态是否安全的方法是看他是否有足够的资源满足一个距最 大需求最近的客户。如果可以,则这笔投资认为是能够收回的,然后接着检查 下一个距最大需求最近的客户,如此反复下去。如果所有投资最终都被收回, 则该状态是安全的,最初的请求可以批准。在预防死锁的几种方法之中,都施加了较强的限制条件;而在避免死锁的 方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。
28、在该方法 中把系统状态分为安全状态和不安全状态,便可避免死锁的发生。而最具代表 性的避免死锁的算法,便是Dijkstra的银行家算法。利用银行家算法,我们可以来检测CPU为进程分配资源的情况,决定CPU 是否响应某进程的的请求并为其分配资源,从而很好避免了死锁1、课程设计的目的和要求目的:银行家算法是避免死锁的一种重要方法,本设计要求用C语言(或高级语 言)编写和调试一个简单的银行家算法程序。加深了解有关资源申请、避免死 锁等概念,并体会和了解死锁和避免死锁的具体实施方法。通过对这个算法的 设计,让学生能够对书本知识有更深的理解,在操作和其它方面有更高的提升, 同时对程序设计的水平也有所提高。
29、要求:设计一个n个并发进程共享m个系统资源的程序实现银行家算法。要求包 含:1)、简单的选择界面。2)、前系统资源的占用和剩余情况。3)、为进程分配资源,如果进程要求的资源大于系统剩余的资源,不 与分配并且提示分配不成功。4)、撤销作业,释放资源。2、课程设计的环境奔腾以上计算机,装有Turbo C 2.0软件3、课程设计的主要内容3.1项目名称银行家算法程序设计3. 2项目的主要内容(1)设计银行家算法,能够检测系统某一时刻是否安全,输出安全序列。(2)实现安全性检测算法。即在某一进程在某时刻提出Request时,检测 系统是否能够满足该进程的请求,并得到一个安全序列,若能够得到一个安全 序列,则系统能够满足它的请求,同意分配资源。若不能够满足,则回到请求 前状态。(3)对于此次课程设计通过需求分析、概要设计、详细设计、测试与分析、 总结、源程序清单等模块进行全面分析,以加深对死锁概念的理解,以及银行 家算法避免死锁的过程。能够利用银行家算法,有效避免死锁的发生,或检测 死锁的存在。4、系统的组成及工作原理4.1 系统主要过程流程图4.1.1 初始化算法流程图图4.1初始化算法流程图
限制150内