




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统课程设计银行家算法报告操作系统-银行家算法课程设计报告姓名:学号:班级:计科班专业:计算机科学与技术指导教师:时间:二、课程设计的要求1分析设计内容,给出解决方案(要说明设计实现的原理,采用的数据结构)。2画出程序的基本结构框图和流程图。3对程序的每一部分要有详细的设计分析说明。4源代码格式要规范。5设计合适的测试用例,对得到的运行结果要有分析。7按期提交完整的程序代码、可执行程序和课程设计报告。要解释银行家算法,必须先解释操作系统安全状态和不安全状态。安全状态:如果存在一个由系统中所有进程构成的安全序列P1,,Pn,则系统处于安全状态。安全状态一定是没有死锁发生。不安全状态:不存在一
2、个安全序列。不安全状态不一定导致死锁。那么什么是安全序列呢?安全序列:一个进程序列P1,,Pn是安全的,如果对于每一个进程Pi(1<i<n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj(j<i)当前占有资源量之和。银行家算法:我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试
3、该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。四、课程设计之银行家算法原理1银行家算法的思路先对用户提出的请求进行合法性检查,即检查请求的是不大于需要的,是否不大于可利用的。若请求合法,则进行试分配。最后对试分配后的状态调用安全性检查算法进行安全性检查。若安全,则分配,否则,不分配,恢复原来状态,拒绝申请。2银行家算法中用到的主要数据结构可利用资源向量intAvailablejj为资源的种类。最大需求矩阵intMaxiji为进
4、程的数量。分配矩阵intAllocationij需求矩阵intneedij=Maxij-Allocationij申请各类资源数量intRequestiji进程申请j资源的数量工作向量intWorkxintFinishy3银行家算法bank()进程i发出请求申请k个j资源,Requestij=k(1)检查申请量是否不大于需求量:Requestij<=needi,j,若条件不符重新输入,不允许申请大于需求量。(2) 检查申请量是否小于系统中的可利用资源数量:Requestij<=availablei,j,若条件不符就申请失败,阻塞该进程,用goto语句跳转到重新申请资源。(3) 若以上
5、两个条件都满足,则系统试探着将资源分配给申请的进程,并修改下面数据结构中的数值:Availablei,j=Availablei,j-Requestij;Allocationij=Allocationij+Requestij;needij=needij-Requestij;(4) 试分配后,执行安全性检查,调用safe()函数检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程;否则本次试探分配作废,恢复原来的资源分配状态,让该进程等待。(5)用dowhile循环语句实现输入字符y/n判断是否继续进行资源申请。4安全性检查算法(safe()函数)(1) 设置两个向量:工作向量W
6、ork它表示系统可提供给进程继续运行所需的各类资源数目,在执行安全性算法开始时,Work=Available。Finish,它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finishi=0;当有足够的资源分配给进程时,再令Finishi=1。(2) 在进程中查找符合以下条件的进程:条件1:Finishi=0;条件2:needij<=Workj若找到,则执行步骤(3)否则,执行步骤(4)(3)当进程获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Workj=Workj+Allocationij;Finishi=1;gotostep2;(4) 如果所有的F
7、inishi=1都满足,则表示系统处于安全状态,否则,处于不安全状态。五、源程序结构分析及代码实现1程序结构程序共有以下五个部分:(1) .初始化chushihua():用于程序开始进行初始化输入数据:进程数量、资源种类、各种资源可利用数量、各进程的各种资源已分配数量、各进程对各类资源最大需求数等。(2) .当前安全性检查safe():用于判断当前状态安全性,根据不同地方的调用提示处理不同。(3) .银行家算法bank():进行银行家算法模拟实现的模块,调用其他各个模块进行银行家算法模拟过程。(4) .显示当前状态show():显示当前资源分配详细情况,包括:各种资源的总数量(all)、系统目
8、前各种资源可用的数量、各进程已经得到的资源数量、各进程还需要的资源量。(5) .主程序main()逐个调用初始化、显示状态、安全性检查、银行家算法函数,使程序有序的进行。2数据结构程序使用的全局变量:constintx=10,y=10;/定义常量intAvailablex;/各种资源可利用的数量intAllocationyy;/各进程当前已分配的资源数量intMaxyy;/各进程对各类资源的最大需求数intNeedyy;/还需求矩阵intRequestx;/申请各类资源的数量intWorkx;/工作向量,表系统可提供给进程运行所需各类资源数量intFinishy;/表系统是否有足够的资源分配给
9、进程,0为否,1为是intpy;/存储安全序列inti,j;/全局变量,主要用于循环语句中intn,m;/n为进程的数量,m为资源种类数intl=0,counter=0;3函数声明voidchushihua();/系统初始化函数voidsafe();/安全性算法函数voidbank();/银行家算法函数voidshow();/输出当前资源分配情况4.主函数main()intmain()cout<<显示程序开始提示信息chushihua();/初始化函数调用cout<>“<<“进程“<<“(“<初始化函数chushihua()开始AVAILA
10、BLEi-=REQUESTi;ALLOCATIONi+=REQUESTi;NEEDi-=REQUESTi;输入进程的数量输入资源种类数输入个资源当前可用资源数输入各进程当前已分配的资源数输入各进程对各类资源的最大需求输出提示:输入有误,请重新输入初始化函数chushihua()结束,银行家函数Bank()提出请求REQUESTiError;REQUESTi<=NEEDiREQUESTi<=AVAILABLEiError;Safe();输出提示:你的请求被拒!AVAILABLEi-=REQUESTi;ALLOCATIONi-=REQUESTi;NEEDi+=REQUESTi;输出提示
11、:同意分配请求是否进行再次分配退出程序,银行家算法Bank()结束;安全性算法Safe()开始Work=AVAILABLE;FINISH=false;NEEDi<=Work&&FINISHi=false;Work+=ALLOCATIONi;FINISHi=ture;所有进程的FINISH=ture;输出提示:系统是不安全的安全,输出安全序列Returnture;安全算法safe()结束2.源程序代码:#include#include#include#include/定义全局变量constintx=10,y=10;/常量,便于修改intAvailablex;/各资源可利用的
12、数量intAllocationyy;/各进程当前已分配的资源数量intMaxyy;/各进程对各类资源的最大需求数intNeedyy;/尚需多少资源intRequestx;/申请多少资源intWorkx;/工作向量,表示系统可提供给进程继续运行所需的各类资源数量intFinishy;/表示系统是否有足够的资源分配给进程,1为是intpy;/存储安全序列inti,j;/i表示进程,j表示资源intn,m;/n为进程i的数量,m为资源j种类数intl=0;/l用来记录有几个进程是Finishi=1的,当l=n是说明系统状态是安全的intcounter=0;/函数声明voidchushihua();/
13、初始化函数voidsafe();安全性算法voidshow();/函数show,输出当前状态voidbank();/银行家算法voidjieshu();/结束函数voidchushihua()cout<<“输入进程的数量:“;/从此开始输入有关数据cin>>n;cout<<“输入资源种类数:“;cin>>m;cout<>Availablej;/输入数字的过程.Workj=Availablej;/初始化Workj,它的初始值就是当前可用的资源数cout<>Allocationij;cout<>Maxij;if(M
14、axij>=Allocationij)/若最大需求大于已分配,则计算需求量Needij=Maxij-Allocationij;elseNeedij=0;/Max小于已分配的时候,此类资源已足够不需再申请cout<=Needij)counter=counter+1;可用大于需求,记数if(counter=m)/i进程的每类资源都符合Workj>=Needij条件二pl=i;/存储安全序列Finishi=1;/i进程标志为可分配for(j=0;j>k;cout<n-1)/输入错误处理cout<>k;cout<>Requestj;cout<
15、Needkj)/申请大于需求量时出错,提示重新输入(贷款数目不允许超过需求数目)cout<<“申请大于需要量!“<Availablej)/申请大于可利用量,应该阻塞等待?cout<<"n没有那么多资源,目前可利用资源“<Needkj);/Requestj>Availablej|/改变Avilable、Allocation、Need的值for(j=0;j>“<<“进程“<<“(“<>b;cout<>“<<“进程“<<“(“<1.初始化结果2.检测系统资源分配是否
16、安全结果:六、课程设计的总结操作系统的基本特征是并发与共享。系统允许多个进程并发执行,并且共享系统的软、硬件资源。为了最大限度的利用计算机系统的资源,操作系统应采用动态分配的策略,但是这样就容易因资源不足,分配不当而引起“死锁”。而我本次课程设计就是得用银行家算法来避免“死锁”。银行家算法就是一个分配资源的过程,使分配的序列不会产生死锁。此算法的中心思想是:按该法分配资源时,每次分配后总存在着一个进程,如果让它单独运行下去,必然可以获得它所需要的全部资源,也就是说,它能结束,而它结束后可以归还这类资源以满足其他申请者的需要。本次程序就是按照上面的思路展开的。但是因为时间上的仓促,本课程设计的存在着以下不足:一、不能实现并发操作,即当总资源同时满足几个进程所需要的资源数时,这些进程不能同时进行,只能一一按进程顺序执行。二、扫描进程顺序单一,只能按进程到来的顺序(即编号)来扫描,从而产生的安全顺序只能是在这个顺序的基础上产生的,而其实安全顺序是有多个的。三、对进程数和资
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 秸秆饲料加工机械行业深度调研及发展战略咨询报告
- 考古发掘体验馆行业深度调研及发展战略咨询报告
- 化工原料仓储行业深度调研及发展战略咨询报告
- 废气余热回收热泵系统行业跨境出海战略研究报告
- 燃料油脱硫脱硝技术行业跨境出海战略研究报告
- 编程教育课程游戏化设计行业深度调研及发展战略咨询报告
- 精细动作协调性训练器行业深度调研及发展战略咨询报告
- 2025年学生会部门工作计划范文(30篇)
- 2025年回转窑式垃圾焚烧炉项目发展计划
- 一年级看图写话技能训练与范文
- 2025-2030中国集装箱化和模块化数据中心行业市场发展趋势与前景展望战略分析研究报告
- 2025-2030中国防腐新材料行业市场深度调研及发展策略与投资前景预测研究报告
- 2025年护工考试试题及答案
- 2025届成都市2022级高中毕业班第二次诊断性检测语文试题及答案
- 2025届北京市第四中学顺义分校高三零模英语试题(原卷版+解析版)
- 全国第9个近视防控月活动总结
- 智能传感器研发-第1篇-深度研究
- 2025至2030年中国快速换模系统数据监测研究报告
- 2025年举办科普月的活动总结(3篇)
- 2025年高三语文上学期期末考试作文题目解析及范文:关于鸿沟的思考
- 2025年春新人教版化学九年级下册课件 第十一单元 化学与社会 课题1 化学与人体健康
评论
0/150
提交评论