银行家算法报告和代码(共20页)_第1页
银行家算法报告和代码(共20页)_第2页
银行家算法报告和代码(共20页)_第3页
银行家算法报告和代码(共20页)_第4页
银行家算法报告和代码(共20页)_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上课程设计(论文)题 目: 银行家算法 院 (系): 信息与控制工程系 专业班级: 姓 名: 学 号: 指导教师: 2016年 1 月 15日专心-专注-专业西安建筑科技大学华清学院课程设计(论文)任务书专业班级: 学生姓名: 指导教师(签名): 一、课程设计(论文)题目银行家算法:设计一个n个并发进程共享m个系统资源的程序以实现银行家算法。二、本次课程设计(论文)应达到的目的操作系统课程实践性比较强。课程设计是加强学生实践能力的一个强有力手段。课程设计要求学生在完成程序设计的同时能够写出比较规范的设计报告。严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件

2、工作者工作作风的训练,将起到显著的促进作用。本题目要达到目的:了解多道程序系统中,多个进程并发执行的资源分配。掌握银行家算法,了解资源在进程并发执行中的资源分配情况。掌握预防死锁的方法,系统安全状态的基本概念。三、本次课程设计(论文)任务的主要内容和要求(包括原始数据、技术参数、设计要求等) 要求:1)能显示当前系统资源的占用和剩余情况。2)为进程分配资源,如果进程要求的资源大于系统剩余的资源,不与分配并且提示分配不成功;3)撤销作业,释放资源。编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁的发生。银行家算法分配资源的原则是:系统掌握每

3、个进程对资源的最大需求量,当进程要求申请资源时,系统就测试该进程尚需资源的最大量,如果系统中现存的资源数大于或等于该进程尚需求资源最大量时,就满足进程的当前申请。这样就可以保证至少有一个进程可能得到全部资源而执行到结束,然后归还它所占有的全部资源供其它进程使用。四、应收集的资料及主要参考文献: 操作系统经典算法的编程实现资料非常丰富,可以在图书馆找书籍或在因特网上找资料,都很容易找到,但是大部分代码是不全的,不能直接运行,希望大家只是把它当参考,编码还是自己做。 参考文献:【1】汤小丹、梁红兵、哲凤屏、汤子瀛 编著.计算机操作系统(第三版).西安:西安电子科技大学出版社,2007.5【2】史美

4、林编.计算机操作系统教程.北京:清华大学出版社,1999.11【3】徐甲同编著.操作系统教程.西安:西安电子科技大学出版社,1996.8【4】Clifford,A.Shaffer编著.数决结构与算法分析(C+版).北京:电子工业出版社,2005.7【5】蒋立翔编著.C+程序设计技能百练.北京:中国铁道出版社,2004.1五、审核批准意见教研室主任(签字) 设计总说明我们可以把操作系统看成是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时要测试该进程对资源的最大需求量,如果系统现存

5、的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配,若没超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配,否则也要推迟。关键字:死锁,安全序列,银行家算法进程目录操作系统课程设计银行家算法1.设计目的“操作系统”是计算机专业的核心专业课,“操作系统课程设计”是理解和巩固操作系统基本理论、原理和方法的重要的实践环节。 操作系统课程主要讲述的内容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算

6、机网络、程序设计等专业课程关系十分密切。本课程设计的目的综合应用学生所学知识,建立系统和完整的计算机系统概念,理解和巩固操作系统基本理论、原理和方法,掌握操作系统基本理论与管理方式。在算法基础上,解决实际的管理功能的问题,提高学生实际应用、编程的能力。课程设计要求学生在完成程序设计的同时能够撰写比较规范的设计报告。严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。2.问题描述在死锁的皮免责,银行家算法把系统状态分为安全状态和不安全状态,只要能使系统始终处于安全状态便可以避免发生死锁。所谓安全状态,是指系统能按某种顺序为每个进程分配所需资源

7、,直到最大需求,是每个进程都可以顺利完成,即可找到一个安全资源分配序列。模拟视线这个过程。3.需求分析3.1 数据需求 系统可分配资源量,进程已申请到的资源量,进程所需最大资源量,进程还需要的资源量3.2 基本功能需求 此系统主要通过银行家算法为进程进行资源的分配。3.3 非功能性需求用户界面需求:简洁、易用、易懂、友好的用户界面。硬件要求:装有Visual C+6.0的计算机。可靠性需求:保证用户在正常使用本系统时,用户的操作或误操作不会产生数据的丢失。4.概要设计4.1 数据结构数组:可利用资源向量Available 最大需求矩阵Max分配矩阵Allocation 需求矩阵Need4.2

8、系统包含的函数void showdata(); /显示主界面函数 int safe(); /安全性算法函数void share(); /银行家算法int main(); /主函数4.3 函数间的关系此系统各个函数之间相互是有联系的,比如在主函数中会调用其他的函数,在share函数中也对前面两个函数进行了调用。4.4 系统功能模块图图4-4-1 系统功能模块图5.详细设计5.1 结构体的详细定义int Available50=0;int Max5050=0;int Allocation5050=0;int Need5050=0;int Request50=0;int Work50=0;char

9、name100=0;int temp50=0;int Finish50=0;5.2 系统函数详细介绍void showdata()此函数主要是在确定好资源和进程以及各进程的最大需求量和已分配的资源后,显示的此刻资源的分配情况。void share()此函数对申请的资源进行判定,如果合法,则予以分配;如果出错,则不给分配。int safe()此函数当为进程分配资源以后,检查这个状态是不是安全的,如安全,则确认分配;否则不予分配。5.3 系统功能模块介绍显示模块:此模块主要是显示某时刻的资源分配情况。银行家算法模块:由银行家算法对资源进行分配,算法如下:(1)如果Requestij<or=N

10、eedi,j,便转向步骤2;否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。(2)如果Requestij<or=Availablej, 便转向步骤3,否则,表示尚无足够资源,Pi需等待。(3)系统试探着把资源分配给进程Pi,并修改下面数据结构中的数值:Availablej:= AvailablejRequestij;Allocationi,j:=Allocationi,j+Requestij;Needi,j:= Needi,jRequestij;(4)系统执行安全性算法,检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程Pi,以完成本次分配;否则,将本次的试

11、探分配作废,恢复原来的资源分配状态,让进程Pi等待。安全性检查模块:检查资源分配后系统是否处于安全状态,算法如下:(1)设置两个向量: 工作向量Work,他表示系统可提供给进程继续运行所需的各类资源数目,它含有m个元素,在执行安全算法开始时,Work:=Available. Finish,他表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finishi:=flase;当有足够资源分配给进程后,再令Finishi:=True.(2)从进程集合中找到一个能满足下述条件的进程: Finishi=flase; Needi,j<or=Workj;若找到,执行步骤(3),否则,执行步骤(

12、4)。(3)当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Workj:= Workj+ Allocationi,j;Finishi:=true;go to step 2;(4)如果所有进程的Finishi=true都满足,则表示系统处于安全状态;否则,系统处于不安全状态。5.4 具体模块设计图5-4-! 安全性算法流程图6.调试分析(1) 测试数据:根据主界面提示,输入资源的名称数量和进程的数量以及进程所需的最大需求量和已分配的资源,然后进行观察。(2) 算法改进设想:在程序设计前期,代码运行语法部分没有出现问题,但是在运行时,在输入已分配资源那块出现问题,经过

13、不断地修改和请教,终于成功运行出来。7.使用说明图7-1 系统界面图图7-2资源分配图图7-3 安全性检查图图7-4 预分配资源图图7-5预分配资源安全检查图图7-6 预分配资源出错图8.设计总结此次操作系统课程设计,实现了银行家算法,他是避免死锁的重要方法。其中,我学到了很多的东西。首先,接到设计题目之后,在对本题目进行分析的时候,我懂得了一个很重要的道理,那就是说一个程序的产生需要一个对题目要求有一个正确全面的分析。其次,就该考虑程序算法的问题了,一个好的算法是一个好程序的灵魂,也决定了一个程序的质量。通过课程设计,我加深了对操作系统这门课的认识。使自己对软件的使用能力得到提升。通过操作系

14、统这门课的课程设计,我更加知道了实践的重要性。在做课设的过程当中,遇到了很多的问题。比如,在运行程序时,输入已分配资源时出现问题,怎么调都调不正确,于是及时向郭同学请求帮助,她认真地对待并且解决了问题,使我能够及时地明白哪里不对并且改正。课程设计几天的时间下来,对操作系统这门课有了更深的了解,它是一门很重要的课程,算法比较多,需要我们很好地去掌握。而且在过程当中,我们也好地复习了c语言这门课,在计算机领域,很多课程都是相互联系的,相互交叉的,所以我们应该认真地对待每一门课程。这次的课设让我明白,以后一定要自己多动手做,这样才能印象深刻,才能更好地掌握这门课。9.参考文献【1】汤小丹、梁红兵、哲

15、凤屏、汤子瀛 编著.计算机操作系统(第三版).西安:西安电子科技大学出版社,2007.5【2】史美林编.计算机操作系统教程.北京:清华大学出版社,1999.11【3】徐甲同编著.操作系统教程.西安:西安电子科技大学出版社,1996.8【4】Clifford,A.Shaffer编著.数决结构与算法分析(C+版).北京:电子工业出版社,2005.7【5】蒋立翔编著.C+程序设计技能百练.北京:中国铁道出版社,2004.1 10程序源代码#include<stdio.h>#include<iostream.h>#include<string.h>#define f

16、alse 0#define true 1int Available50=0;int Max5050=0;int Allocation5050=0;int Need5050=0;int Request50=0;int Work50=0;char name100=0;int temp50=0;int Finish50=0;int M=50; / 作业最大数 int N=50; /资源最大数void showdata()int i,j;cout<<"此时刻的资源分配情况为:"<<endl;cout<<endl;cout<<"

17、; Max Allocation Need Available "<<endl;cout<<"进程名 "for(j=0;j<4;j+)for(i=0;i<N;i+)cout<<namei<<" "cout<<" "cout<<endl;for(i=0;i<M;i+)cout<<" "<<i<<" "for(j=0;j<N;j+)cout<<Ma

18、xij<<" "cout<<" "for(j=0;j<N;j+)cout<<Allocationij<<" "cout<<" "for(j=0;j<N;j+)cout<<Needij<<" "if(i=0)cout<<" "for(j=0;j<N;j+)cout<<Availablej<<" "cout<<e

19、ndl;int safe()/安全性算法int i,d,k=0,m,h,s,apply,Finish100=0;int j;int flag=0;for(i=0;i<N;i+)Worki=Availablei;cout<<endl<<" 安全性检查 "<<endl;cout<<" Work Need Allocation Work+Allocation Finish"<<endl;cout<<"进程名 "for(h=0;h<4;h+)for(s=0;s

20、<N;s+)cout<<names<<" "cout<<" "cout<<endl;for(i=0;i<M;i+) apply=0;for(j=0;j<N;j+)if (Finishi=false&&Needij<=Workj) apply+;if(apply=N) cout<<" "<<i<<" "for(d=0;d<N;d+)cout<<Workd<<&quo

21、t; "cout<<" "for(d=0;d<N;d+)cout<<Needid<<" "cout<<" "for(d=0;d<N;d+)cout<<Allocationid<<" "cout<<" "for(m=0;m<N;m+) Workm=Workm+Allocationim;cout<<Workm<<" "/变分配数Finishi=t

22、rue;tempk=i;cout<<" "cout<<"true"<<" "cout<<endl;i=-1; k+;flag+;for(i=0;i<M;i+)if(Finishi=false)for(j=0;j<N;j+)Availablej=Availablej+Requestj;Allocationij=Allocationij-Requestj;Needij=Needij+Requestj;cout<<endl<<"系统进入不安全状态!

23、此时系统不分配资源!"<<endl;/不成功系统不安全return 0;cout<<endl<<"此时系统是安全的!"<<endl;/如果安全,输出成功 cout<<"安全序列为:"for(i=0;i<M;i+)/输出运行进程数组cout<<tempi;if(i<M-1) cout<<"->"cout<<endl;return 0;void share()/利用银行家算法对申请资源对进行判定char ch;int

24、 i=0,j=0;ch='y'int sum=0;cout<<endl<<"请输入要求分配的资源进程号(0-"<<M-1<<"):" cin>>i;/输入须申请的资源号cout<<endl<<"请输入进程 "<<i<<" 申请的资源:"<<endl;for(j=0;j<N;j+)cout<<namej<<":"cin>>

25、Requestj;/输入需要申请的资源for (j=0;j<N;j+)if(Requestj>Needij) cout<<endl<<"进程 "<<i<<"申请的资源大于它需要的资源"cout<<" 分配不合理,不予分配!"<<endl;ch='n'break;else if(Requestj>Availablej)/判断申请是否大于当前资源,若大于则 /出错cout<<endl<<"进程&quo

26、t;<<i<<"申请的资源大于系统现在可利用的资源"cout<<" 分配出错,不予分配!"<<endl;ch='n'break; if(ch='y') int o;for(o=0;o<M;o+) Availableo=Availableo-Requesto;Allocationio=Allocationio+Requesto;Needio=Needio-Requesto;/根据进程需求量变换资源for(int p=0;p<N;p+) if(Needip=0)sum

27、+;if(sum=N) for(int u=0;u<N;u+)Availableu+=Allocationiu;Allocationiu-=Maxiu;Neediu+=Maxiu;showdata();/根据进程需求量显示变换后的资源safe();/根据进程需求量进行银行家算法判断 int main()/主函数int t=1,i,j,number,m,n,flag;char ming;cout<<"*银行家算法的设计与实现*"<<endl;cout<<endl<<"请首先输入系统可供资源种类的数量:"cin>>n;N=n;for(i=0;i<n;i+)cout<<"资源"<<i+1<<"的名称

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论