


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计报告课程设计名称:银行家算法模拟实现系 :学生姓名:班 级:学 号:成 绩:指导教师:开课时间:学年学期题目要求:一. 设计题目银行家算法模拟实现二. 主要内容设计目的1、了解多道程序系统中,多个进程并发执行的资源分配。2、掌握思索的产生原因、产生死锁的必要条件和处理死锁的基本方法。3、掌握预防死锁的方法,系统安全状态的基本概念。4、掌握银行家算法,了解资源在进程并发执行中的资源分配策略。5、理解死锁避免在当前计算机系统不常使用的原因。三. 具体要求设计一个n个并发进程共享 m个系统资源的系统,进程可动态申请资源和释放资源,系统按各进程的申请动态的分配资源。要求采用银行家算法实现。四.
2、 进度安排五. 成绩评定考核方法:根据学生平时表现、测试检查、课程设计报告、运行演示和学生回答问题相 结合的形式作为考核依据,考察学生的动手能力,独立分析解决问题的能力和创新精神, 并根据学生的学习态度综合考评。平时表现(占30%,课程设计报告(占 40%,课程答辩(占 30%。成绩评定:成绩分“优秀”、“良好”、“中等”、“及格”、“不及格”五个级别。“优秀”为100分到90分,“良好”为89分到80分,“中等”为79分到70分,“及格” 为69分到60分,“不及格”为 60分以下。目录1. 需求分析序号内容时间(天)1熟悉课题、分析课题0.52对系统进行模块分解,问题分析和确定解决方案13
3、编程调试34测试和差错15书写课程设计报告16考核1合计7.52.概要设计 32. 概要设计 33详细设计 64. 调试分析 125. 总结 161需求分析1、始化这组进程的最大资源请求和一次申请的资源序列。把各进程已占用和需求资源 情况记录在进程控制块中。假定进程控制块的内容包括:进程名,状态,当前申请量,资源 需求总量,已占资源量,能执行完标志。其中,进程的状态有:就绪,等待和完成。当系统不能满足进程的资源请求时,进程出于等待状态。资源需求总量表示进程运行过程中对资源 的总的需求量。已占资源量表示进程目前已经得到但还为归还的资源量。因此,进程在以后还需要的剩余资源量等于资源需要总量减去已占
4、资源量。陷入每个进程的资源需求总量不应超过系统拥有的资源总量。2、 银行家算法分配资源的原则是:当某个进程提出资源请求时,假定先分配资源给它,然后查找各进程的剩余请求,检查系统的剩余资源量是否由于进程的分配而导致系统死锁。若能,则让进程等待,否则,让进程的假分配变为真分配。A)查找各进程的剩余请求,检查系统的剩余资源量是否能满足其中一进程,如果能, 则转B )。B)将资源分配给所选的进程,这样,该进程已获得资源最大请求,最终能运行完成。 标记这个进程为终止进程,并将其占有的全部资源归还给系统。重复第A步和B)步,直到所有进程都标记为终止进程,或知道一个死锁发生。若所有 进程都标记为终止进程,则
5、系统的初始状态是安全的,否则为不安全的。若安全,则正式将资源分配给它,否则,假定的分配作废,让其等待。2概要设计2.1设计思想当某个进程提出资源请求时,假定先分配资源给它, 然后查找各进程的剩余请求,检查系统的剩余资源量是否由于进程的分配而导致系统死锁。若能,则让进程等待,否则, 让进程的假分配变为真分配。2.2数据结构假设有m个进程,则有如下数据结构:#define w 50 / 宏定义 #defi ne r 50 / 宏定义 int m; /总进程数 int allw;各种资源的数目总和 int maxwr; m 个进程最大资源需求量 int availabler; /系统可用资源数 in
6、t allocatio nwr; m个进程已经得到资源的资源量int needwr; m 个进程还需要资源的资源量 int requestr; /请求资源个数2.3 程序流程图开始i=1Yi<=mNNYi+YNY结束错 误max<=资源总数Need矩阵为初始化need输入该进程的资源请求量Request调用银行家算法,及安全性算 法,完成分配,或并给出提示输入进程i的最大需求向量max输入进程数 m,各资源总数,初始化 Available向量任选一个进程作为当前进程(0到m-1)该进程的Need向量为0该进程已运行结 束3. 详细设计3.1算法思想银行家算法的基本思想是分配资源之前
7、,判断系统是否是安全的;若是,才分 配。否则拒绝分配。3.2银行家算法设Requestn,是进程的请求向量,如果Requestn=m,则表示该进程需要 m个资源。当该进程发出资源请求后,系统按下述步骤进行检查:(1) 如果Requestn=Needi,n,便转向步骤(2);否则认为出错,因为它所需要的资源数 已经超过它所宣布的最大值。如果Requestn'Available,则进程i进入等待资源状态,返回。(3)假设进程i的申请已获批准,于是修改下面数据结构中的数值:Available=Available-RequestAllocati on=Allocati on+RequestNe
8、ed=Need-Request(4)系统执行安全性检查,如安全,则分配成立;否则恢复原来的资源分配状态,系统恢复 原状,进程等待。程序void ban k()/银行家算法int i=0,j=0;char flag='Y'while(flag='Y'|flag='y')i=-1;while(i<O|i>=m)cout<<"请输入需申请资源的进程号(从 0到"<<m-1<<"):"cin> >i;if(i<0|i>=m)cout<&l
9、t;"该进程号不存在,请重新输入!"<<e ndl;cout<<"请输入进程"<<i<<"申请的资源数:"for (j=0;j<1;j+)cout<<""cin>> requestj;if(requestj>needij)/若请求的资源数大于进程还需要i类资源的资源量jcout<<"进程"<<i<<"申请的资源数大于进程"<<i<<&
10、quot;还需要资源的资源量!" cout<<"申请不合理,请重新选择!"<<endl<<endl;flag='1:break;elseif(requestj>available|j) /若请求的资源数大于可用资源数cout<<"进程"<<i<<"申请的资源数大于系统可用资源的资源量!";cout<<"申请不合理!请重新选择!"<<endl<<endl;flag='1'
11、break;if(flag='Y'|flag='y')change(i); /调用change(i)函数,改变资源数if(chkerr(i) /若系统安全rstore(i); /调用rstore(i)函数,恢复资源数show();/输出资源分配情况else/若系统不安全show(); /输出资源分配情况else 若 flag=N|flag=nshow();cout<<e ndl;cout<<"是否继续(Y/N):"cin> >flag;3.3安全性检查算法(1) 设置两个工作向量Work=Available
12、 ; FinishM=False(2) 从进程集合中找到一个满足下述条件的进程,Finish i=FalseNeed<=Work如找到,执行(3);否则,执行(4)(3) 设进程获得资源,可顺利执行,直至完成,从而释放资源。Work=Work+Allocati onFini sh=TrueGO TO 2如所有的进程 FinishM=true,则表示安全;否则系统不安全。程序int chkerr(int s) / 检查安全性 int work,FI nlSHw;int i,j,k=O;for(i=0;i<m;i+)FI nlSHi=false;for(j=0;j<1;j+)wo
13、rk=availablej;i=s;doif(FI nlSHi=false&&n eedij<=work)work=work+allocatio nij;Fin ISHi=true;i=0;else i+;while(i<m);for(i=0;i<m;i+)if(FI nlSHi=false)cout<<e ndl;cout<<"系统不安全!!!本次资源申请不成功!!"<<endl;cout<<e ndl;return 1;cout<<e ndl;cout<<"
14、;系统安全,分配成功。"<<endl;cout<<e ndl;return 0;3.4 修改数据结构中的数值改变可用资源和已经拿到资源和还需要的资源的值void cha nge(i nt k) int j;for (j=0;j<1;j+)availablej=availablej-requestj; allocationkj=allocationkj+requestj; needkj=needkj-requestj;3.5 如果分配失败,则恢复原来的资源分配状态 恢复可用资源和已经拿到资源和还需要的资源的值 void rstore(int k)int j
15、;availablej=availablej+requestj; allocationkj=allocationkj-requestj; needkj=needkj+requestj;3.6 输出显示实现人机交互的各类资源输出显示情况。void show() / 输出资源分配情况int i,j;cout<<" 资源总量 :"<<" "for (j=0;j<1;j+)cout<<" "<<allj;cout<<endl<<endl;cout<<&q
16、uot; 系统目前资源可用数 :"<<" "for (j=0;j<1;j+)cout<<" "<<availablej;cout<<endl<<endl;cout<<" 进程名 各进程还需要的资源量 "<<endl;for (i=0;i<m;i+)for (i=0;i<m;i+)cout<<" 进程 "<<i<<":"for (j=0;j<1;
17、j+)cout<<needij<<""cout<<endl;cout<<endl;cout<<" 进程名 各进程已经得到的资源量 "<<endl;for (i=0;i<m;i+)cout<<" 进程 "<<i<<":"for (j=0;j<1;j+)cout<<allocationij<<"cout<<endl;cout<<endl;voi
18、d change(int k) / 改变可用资源和已经拿到资源和还需要的资源的值int j;for (j=0;j<1;j+) availablej=availablej-requestj; allocationkj=allocationkj+requestj; needkj=needkj-requestj;3.7 主函数void main() / 主函数int i=0,j=0,p;cout<<" 银行家算法模拟 "<<endl;cout<<" 请输入总进程数 :"cin>>m;cout<<
19、" 请输入总资源数 :"for(i=0;i<1;i+)cin>>alli;cout<<" 依次输入各进程所需要的最大资源数量 :"<<endl;for (i=0;i<m;i+)for (j=0;j<1;j+)do cin>>maxij; if (maxij>allj) cout<<endl<<" 占有资源超过了声明的该资源总数 ,请重新输入 "<<endl; while (maxij>allj);cout<<&
20、quot; 依次输入各进程已经占据的资源数量 :"<<endl;for (i=0;i<m;i+)for (j=0;j<1;j+)docin>>allocationij;if (allocationij>maxij)cout<<endl<<" 占有资源超过了声明的最大资源 ,请重新输入 "<<endl; while (allocationij>maxij);/初始化资源数量for (j=0;j<1;j+) p=allj;for (i=0;i<m;i+) p=p-alloc
21、ationij;/ 减去已经被占据的资源 availablej=p;if(availablej<0) availablej=0;for (i=0;i<m;i+) for(j=0;j<1;j+)needij=maxij-allocationij;show();bank();3.8 定义全局变量#include "string.h" #include "iostream" using namespace std;#define false 0#define true 1#define w 50 / 宏定义#define r 50 / 宏定义
22、int m; / 总进程数int allw;/ 各种资源的数目总和int maxwr; /m 个进程最大资源需求量int availabler; / 系统可用资源数int allocationwr; /m 个进程已经得到资源的资源量int needwr; /m 个进程还需要资源的资源量int requestr; / 请求资源个数4.调试分析TJ :0 S123 Debug123.exe 匸忑W匚7匚浪行家算袪模拟髄梯世程針亲邊歆詈蠶黑要的最趣源数量3耘输几各进程已经占据的资源数量:12矗源总量:価名0 1 2 口王口王口王口王 二.1二.1二.1二.1各进程还需要的资源量221名0 1 2 口
23、王口王口王口王 -b-. L-.l k-.I L-. -UI- - - A - - UI- - - A各进程已经得到的资源量1負从0到2)询1系统安全,:分配戒功。廣源总量:佃系统目前资源可用数,4名0 1 2 呈口王口王口王 -kl- - - A - - kl- - - A各进程还需要的资源量121名0 1 2 口王口王口王口王 二.-1一.1二.1二.1各进程已经得到的资源量2图4-1图4-1这里为3个进程(进程)共用10个资源,分别需要的最大资源数为3,4,3.已经占有的资源数为:1,2,2.分配给0号进程1个资源,系统安全,分配成功3从0到2);12各进程已经得到的资源量322各进程还
24、需要的资源量 曲21餐源总量:1S系统安全,为配戒功。备迸程已经得到的資源屢系统目前资源可用数,3资源总量:佃系绒安全,为配戒功。奮氟蹇耀靜的进程号从0到2)旳请鎰入透程睥请的资源数:1名0 1 2 H鸵令虽12名0:1:2:系统目前资源可用数,1进进进进各进程还需要的资源量1进程名 各进程已经得到的资源量图4-24-2再分配给0号进程1个资源,系统安全,分配成功zy 0灼申程续專继入入不S曰SIR请(1至0从2)H:12承De bug'各进程还需要的资源量121各进程已经得到的资源量2系统安全,分配成功。10系统目前资源可用数:3各进程还需要的资源量Q21各进程已经得到的资源量3否继续¥/N: y申请不合理,请重新选择?i招嚮鶉艇舉储还需要资源的资源量?10系统目前资源可用数:3图4-34-3分配给1号进程3个资源,因为1号资源还需要2个即达到最大需要资源数,故申 请不合理,分配不成功'主系统目前资源可用数:1名0:1:I®各进程还需要的资源量1名0:1:I
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国内外致密气藏储层特征比较及定量表征技术
- 危重病患护理与监护
- 肯德基的消费体验优化
- 建筑工地噪音控制技术
- 2022-2023学年山东省临沂市罗庄区人教PEP版六年级下册期末质量检测英语试卷(解析版)
- 德克士的品牌延续传承
- 德克士的社群运营模式
- 涂膜防水干燥时间间隔研究与应用
- 保险公司月度活动方案
- 保险公司续保活动方案
- 基本公共卫生服务项目村级考核用表
- 数据化转型对营销职业的影响
- 全屋定制板材直播话术脚本范文模版新手直播带货
- 莎士比亚戏剧赏析智慧树知到期末考试答案章节答案2024年北京师范大学
- 2023年南平市高校毕业生服务社区计划招募考试真题
- HG-T 4062-2023 波形挡边输送带
- 解码国家安全-知到答案、智慧树答案
- 广东省课程思政示范高职院校申报书
- 提水试验过程及数据处理
- (正式版)SHT 3046-2024 石油化工立式圆筒形钢制焊接储罐设计规范
- 2023年山东济南市初中学业水平考试地理试卷真题(答案详解)
评论
0/150
提交评论