操作系统实验报告c语言实现银行家算法最新资料.docx
- 文档编号:29567698
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:45
- 大小:248.72KB
操作系统实验报告c语言实现银行家算法最新资料.docx
《操作系统实验报告c语言实现银行家算法最新资料.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告c语言实现银行家算法最新资料.docx(45页珍藏版)》请在冰豆网上搜索。
操作系统实验报告c语言实现银行家算法最新资料
实验报告
题目
名称
C语言实现银行家算法
院系
信息科学与工程学院
班级
完成时间
指导老师
本次实验
成绩
组长
联系电话
邮件地址
@qq/com
组员(姓名,
学号)
主要任务
程序算法的编写、实现、运行调试
组员(姓名,
学号)
主要任务
实验报告的完成
组员(姓名,
学号)
主要任务
实验报告的完成
组员(姓名,
学号)
主
要
原
理
及
所
参
考
的
资
料
(
包
括
实
验
内
容
及
条
件
)
银行家算法原理:
我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。
为保证资金的安全,银行家规定:
(1)当一个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客;
(2)顾客可以分期贷款,但贷款的总数不能超过最大需求量;
(3)当银行家现有的资金不能满足顾客尚需的贷款数额时,对顾客的贷款可推迟支付,但总能使顾客在有限的时间里得到贷款;
(4)当顾客得到所需的全部资金后,一定能在有限的时间里归还所有的资金.
操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。
当进程在执行中继续申请资源时,先测试该进程本次申请的资源数是否超过了该资源所剩余的总量。
若超过则拒绝分配资源,若能满足则按当前的申请量分配资源,否则也要推迟分配。
主要参考书:
计算机操作系统第三版西安电子科技大学出版社汤子瀛主编
主
要
算
法
流
程
图
和
具
体
实
验
步
骤
主
要
算
法
流
程
图
和
具
体
实
验
步
骤
算法流程图:
附录1--银行家算法流程图
附录2--安全性算法流程图
实验步骤:
一.银行家算法
进程i发出请求资源申请,
(1)如果Request[j]<=need[i,j],转向步骤
(2),否则认为出错,因为他所需要的资源数已经超过它所宣布的最大值。
(2)如果:
Requesti[j]<=available[i,j],转向步骤(3),否则表示尚无足够资源,进程i需等待。
(3)若以上两个条件都满足,则系统试探着将资源分配给申请的进程,并修改下面数据结构中的数值:
Available[i,j]=Available[i,j]-Request[j];
Allocation[i][j]=Allocation[i][j]+Request[j];
need[i][j]=need[i][j]-Request[j];
(4)试分配后,执行安全性检查,调用check()函数检查此次资源分配后系统是否处于安全状态。
若安全,才正式将资源分配给进程;否则本次试探分配作废,恢复原来的资源分配状态,让该进程等待。
(5)用do{…}while循环语句实现输入字符y/n判断是否继续进行资源申请。
二.安全性检查算法(check()函数)
(1)设置两个向量:
工作向量Work,它表示系统可提供给进程继续运行所需的各类资源数目,在执行安全性算法开始时,Work=Available。
工作向量Finish,它表示系统是否有足够的资源分配给进程,使之运行完成。
开始时先做Finish[i]=false;当有足够的资源分配给进程时,再令Finish[i]=true。
(2)在进程中查找符合以下条件的进程:
条件1:
Finish[i]=false;
条件2:
need[i][j]<=Work[j]
若找到,则执行步骤(3)否则,执行步骤(4)
(3)当进程获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:
Work[j]=Work[j]+Allocation[i][j];
Finish[i]=true;
gotostep
(2);
(4)如果所有的Finish[i]=true都满足,则表示系统处于安全状态,否则,处于不安全状态。
程序源代码及调试结果
附录3--程序源代码
附录4--程序运行调试结果
实验心得
本次实验我负责程序的编写方面,虽然基础一般,但是我仍然坚持花了三天的时间终于把程序拿下,这是让自己很欣慰的事,本次实验不仅让我对银行家算法有了更深入的理解,并且还让我的编程能力得到了较大提高,希望能有更多这样的机会,借此较好的锻炼自己,从而更好的掌握和运用自己的专业知识,提高能力水平。
本次实验相对于c基础并不好的我有一定的难度,所以我在程序方面所做的较少。
而对银行家算法了解的比较透彻,在程序设计的原理和流程图方面做的工作较多,本次实验我学到的东西好多,也知道自己在很多方面的不足,虽然我给自己的发展方向定位为硬件方向,但是对C语言还是要进一步的学习。
附录2
安全性算法流程图
附录3
程序源代码:
#include
#include
#include
#definem50
intno1;//进程数
intno2;//资源数
intr;
intallocation[m][m],need[m][m],available[m],max[m][m];
charname1[m],name2[m];//定义全局变量
voidmain()
{
voidcheck();
voidprint();
inti,j,p=0,q=0;
charc;
intrequest[m],allocation1[m][m],need1[m][m],available1[m];
printf("**********************************************\n");
printf("*银行家算法的设计与实现*\n");
printf("**********************************************\n");
printf("请输入进程总数:
\n");
scanf("%d",&no1);
printf("请输入资源种类数:
\n");
scanf("%d",&no2);
printf("请输入Max矩阵:
\n");
for(i=0;i for(j=0;j scanf("%d",&max[i][j]);//输入已知进程最大资源需求量 printf("请输入Allocation矩阵: \n"); for(i=0;i for(j=0;j scanf("%d",&allocation[i][j]);//输入已知的进程已分配的资源数 for(i=0;i for(j=0;j need[i][j]=max[i][j]-allocation[i][j];//根据输入的两个数组计算出need矩阵的值 printf("请输入Available矩阵\n"); for(i=0;i scanf("%d",&available[i]);//输入已知的可用资源数 print();//输出已知条件 check();//检测T0时刻已知条件的安全状态 if(r==1)//如果安全则执行以下代码 { do{ q=0; p=0; printf("\n请输入请求资源的进程号(0~4): \n"); for(j=0;j<=10;j++) { scanf("%d",&i); if(i>=no1) { printf("输入错误,请重新输入: \n"); continue; } elsebreak; } printf("\n请输入该进程所请求的资源数request[j]: \n"); for(j=0;j scanf("%d",&request[j]); for(j=0;j if(request[j]>need[i][j])p=1; //判断请求是否超过该进程所需要的资源数 if(p) printf("请求资源超过该进程资源需求量,请求失败! \n"); else { for(j=0;j if(request[j]>available[j])q=1; //判断请求是否超过可用资源数 if(q) printf("没有做够的资源分配,请求失败! \n"); else//请求满足条件 { for(j=0;j { available1[j]=available[j]; allocation1[i][j]=allocation[i][j]; need1[i][j]=need[i][j]; //保存原已分配的资源数,仍需要的资源数和可用的资源数 available[j]=available[j]-request[j]; allocation[i][j]+=request[j]; need[i][j]=need[i][j]-request[j]; //系统尝试把资源分配给请求的进程 } print(); check();//检测分配后的安全性 if(r==0)//如果分配后系统不安全 { for(j=0;j { available[j]=available1[j]; allocation[i][j]=allocation1[i][j]; need[i][j]=need1[i][j]; //还原已分配的资源数,仍需要的资源数和可用的资源数 } printf("返回分配前资源数\n"); print(); } } }printf("\n你还要继续分配吗? YorN? \n"); //判断是否继续进行资源分配 c=getche(); }while(c=='y'||c=='Y'); } } voidcheck()//安全算法函数 { intk,f,v=0,i,j; intwork[m],a[m]; boolfinish[m]; r=1; for(i=0;i finish[i]=false;//初始化进程均没得到足够资源数并完成 for(i=0;i work[i]=available[i];//work[i]表示可提供进程继续运行的各类资源数 k=no1; do{ for(i=0;i { if(finish[i]==false) { f=1; for(j=0;j if(need[i][j]>work[j]) f=0; if(f==1)//找到还没有完成且需求数小于可提供进程继续运行的资源数的进程 { finish[i]=true; a[v++]=i;//记录安全序列号 for(j=0;j work[j]+=allocation[i][j];//释放该进程已分配的资源 } } } k--;//每完成一个进程分配,未完成的进程数就减1 }while(k>0); f=1; for(i=0;i { if(finish[i]==false) { f=0; break; } } if(f==0)//若有进程没完成,则为不安全状态 { printf("系统处在不安全状态! "); r=0; } else { printf("\n系统当前为安全状态,安全序列为: \n"); for(i=0;i printf("p%d",a[i]);//输出安全序列 } } voidprint()//输出函数 { inti,j; printf("\n"); printf("*************此时刻资源分配情况*********************\n"); printf("进程名/号|Max|Allocation|Need|\n"); for(i=0;i { printf("p%d/%d",i,i); for(j=0;j {printf("%d",max[i][j]);} for(j=0;j {printf("%d",allocation[i][j]);} for(j=0;j {printf("%d",need[i][j]);} printf("\n"); } printf("\n"); printf("各类资源可利用的资源数为: "); for(j=0;j {printf("%d",available[j]);} printf("\n"); } (程序结束) 附录4 程序运行调试结果: 1、程序初始化 2、检测系统资源分配是否安全结果 以下是附加文档,不需要 的朋友下载后删除,谢谢 顶岗实习总结专题13篇 第一篇: 顶岗实习总结 为了进一步巩固理论知识,将理论与实践有机地结合起来,按照学校的计划要求,本人进行了为期个月的顶岗实习。 这个月里的时间里,经过我个人的实践和努力学习,在同事们的指导和帮助下,对村的概况和村委会有了一定的了解,对村村委会的日常工作及内部制度有了初步的认识,同时,在与其他工作人员交谈过程中学到了许多难能可贵经验和知识。 通过这次实践,使我对村委会实务有所了解,也为我今后的顺利工作打下了良好的基础。 一、实习工作情况 村是一个(此处可添加一些你实习的那个村和村委会的介绍)我到村村委会后,先了解了村的发展史以及村委会各个机构的设置情况,村委会的规模、人员数量等,做一些力所能及的工作,帮忙清理卫生,做一些后勤工作;再了解村的文化历史,认识了一些同事,村委会给我安排了一个特定的指导人;然后在村委会学习了解其他人员工作情况,实习期间我努力将自己在学校所学的理论知识向实践方面转化,尽量做到理论与实践相结合。 在实习期间我遵守了工作纪律,不迟到、不早退,认真完成领导交办的工作。 我在村委会主要是负责管理日常信件的工作,这个工作看似轻松,却是责任重大,来不得办点马虎。 一封信件没有及时收发,很有可能造成工作的失误、严重的甚至会造成巨大的经济损失。 很感谢村委会对我这个实习生的信任,委派了如此重要的工作给我。 在实习过程中,在信件收发管理上,我一直亲力亲为,片刻都不敢马虎。 为了做好信件的管理工作,我请教村委会的老同事、上网查阅相关资料,整理出了一套信函管理的具体方法。 每次邮递员送来的信件,我都要亲自检查有无开封、损坏的函件,如果发现有损坏的函件,我马上联络接收人亲自来查收。 需要到邮局领取的函件,我都亲自到邮局领取,并把信函分别发放到每个收件人的手里。 对于收到的所有信函,我都分门别类的登记,标注好收发人的单位、姓名还有来函日期等等。 我对工作的认真负责,受到了村委会领导和同事们的一致好评,在他们的鼓励下,我的工作干劲更足了。 在工作之余,我还经常去村民家里,帮助他们做一些我力所能及的事情,也让我收获了很多知识,学会了许多技能。 我学会了一些常见农作物的生长特征,也学会了怎么给农作物施肥,洒药。 这些,都将是我今后人生道路上的宝贵财富。 短短个月的实习生活很快就过去了,这次实习是我从学校踏入社会的第一步。 在这里,我感受到了村民们的纯朴,也体会到了农村生活的不易,更加深刻的认识到了作为当代大学生身上肩负的使命。 在这次实习生活中,村委会的叔叔、阿姨们对我十分的照顾,在工作中,在生活上都给予了我很多的帮助,也对我寄予了很高的期望。 通过这次实习,锻炼了我的做事能力,养成了对人对事的责任心,也坚定了我加强学习,提升自我价值的信心。 二、发现的问题和建议 在此次在村村委会顶岗实习的工作中,确实让我学到了不少书本以外的知识,同时我也发现了不少问题。 第一,该村村委会的工作人员文化水平相对偏低,在村务工作的处理上,方式方法比较粗放。 第二,村委会工作人员思想比较守旧,缺乏对新事物、新观念的学习和认识。 第三,村委会的现代化办公水平还比较低,虽然配备了电脑等现代化办公工具,但是实际的利用程度很低。 第四,村委会人员由于不是国家编制,工作人员的工作热情和工作态度不是很积极。 三、实习的心得体会 刚开始去村村委会实习的时候,我的心情充满了激动、兴奋、期盼、喜悦。 我相信,只要我认真学习,好好把握,做好每一件事,实习肯定会有成绩。 但后来很多东西看似简单,其实要做好它很不容易。 通过实践我深有感触,实习期虽然很短,却使我懂得了很多。 不仅是进行了一次良好的校外实习...... 本文来自公务员之家,查看正文请使用公务员之家站内搜索查看正文。 第二篇: 会计顶岗实习工作总结 从我踏进实习单位的那一刻起,我就知道我将经历一段特殊的不平凡的并且充满收获的人生旅程,那旅程必定在我的生命中写下浓墨重彩的一笔,必定会在我的生命中留下绚烂多彩的回忆,必定会给我带来生命中无与伦比的财富。 一、实习目的 毕业实习是我们大学期间的最后一门课程,不知不觉我们的大学时光就要结束了,在这个时候,我们非常希望通过实践来检验自己掌握的知识的正确性。 在这个时候,我来到圣鹿源生物科技股份有限公司在这里进行我的毕业实习。 二、实习内容及过程 为了达到毕业实习的预期目的。 在学校与社会这个承前启后的实习环节,我们对自己、对工作有了更具体的认识和客观的评价。 在整个的实习工程中,我总共做了以下的一些工作,同时自己的能力也得到了相应的提高。 1.工作能力。 在实习过程中,积极肯干,虚心好学、工作认真负责,胜任单位所交给我的工作,并提出一些合理化建议,多做实际工作,为企业的效益和发展做出贡献。 2.实习方式。 在实习单位,师傅指导我的日常实习,以双重身份完成学习与工作两重任务。 向单位员工一样上下班,完成单位工作;又以学生身份虚心学习,努力汲取实践知识。 3.实习收获。 主要有四个方面。 一是通过直接参与企业的运作过程,学到了实践知识,同时进一步加深了对理论知识的理解,使理论与实践知识都有所提高,圆满地完成了教学的实践任务。 二是提高了实际工作能力,为就业和将来的工作取得了一些宝贵的实践经验。 三是在实习单位受到认可并促成就业...... 本文来自公务员之家,查看正文请使用公务员之家站内搜索查看正文。 第三篇: 工厂车间顶岗实习总结 我怀着激动的心情踏上了期待已久的顶岗实习之路,当我坐上离开学校的的班车那一刻起,我就知道我将经历一段特殊的不平凡的并且收获的人生旅程,那旅程必定在我的生命中写下浓墨重彩的一笔,必定会在我的生命中留下绚烂多彩的回忆,并定会给我带来生命中无与伦比的财富。 那时候对自己的未来希,希在那里能大展拳脚,实现自己的抱负。 那时候想的是多么多么的好啊,直到此刻我才觉得我当时是那么的幼稚,不可能你刚出来什么都没有就让你做好的岗位。 是的,顶岗实习的生活是艰辛的挑战的。 当我们来到实习点面对一间间产房和一条条流水线时,很多人后悔为什么当初选择了到海信科龙顶岗实习,但是我想说,这是我所预料到的,这也是我想要的,我知道人只有在艰苦的环境中才能磨练出坚强的意志,我也知道吃得苦中苦,方为人上认得道理,我自然还不是人上人,但是我相信在这个世界上每一个人都渴成功,都渴自己有限的生命能创造出的价值,都渴为更多的人做出自己能做的一切,都渴在看来你的生命无可,我自然也比例外。 我知道我的实习之路还刚刚开始,我要经历的还有很多。 到啦海信科龙之后,尽管他们很就帮我们把食宿解决啦,但那里生活习惯和在湖南的时候相差太大,吃的很不习惯。 对我们湖南人来说菜里面没有一点辣椒是吃不下的,因此在那里的时候开始一段时间都只是吃一点点饭,很快身材就“苗条”啦。 我的实习岗位被分配在总装车间箱发组,面对一台台发好泡的冰箱从自己流过,而我的工作就是和这些冰箱打交道。 我在这里做的装冰箱的托板,是将托板固定在冰箱上,这个岗位说难也不难,就是要你记得哪种型号的冰箱用哪种托板,要不要带电容,是几微法的电容。 要分清楚,不能弄错,不然会导致以后的环节出错,冰箱制冷时有可能电容会发爆炸。 所以这个一定要很认真的做,不能粗心大意,害别人帮你善后。 带我的师傅是一个个中专生,开始时我觉得做这个很简单,不用学,一看就会,做是会做,不过不是最省力的方法,就那么做啦一天,做得很累,后来,我看师傅做看他做的很轻松很快,我就在想为什么我不行呢,难到是我不如他,我知道我不是只是我不够虚心,不想学,看不起这个岗位,是我的态度,既然找到的根本原因,那就好解决啦。 后来,仔细看师傅的动作,怎么最省力,怎么最舒服。 并且不懂的地方虚心讨叫那些老员工。 就这样到我正式独立上岗时,我也像我师傅那样独立上岗啦,并不用要人帮忙啦。 就这样一直到今年,我把我那条的岗位都学会啦,并且我自己也当师傅啦,而且是带三个徒弟,分别教他们不同的岗位该怎么做,开始当别人师傅时我觉得很好玩,终于不用自己做啦,可以徒弟来做啦,就这样想,所以当徒弟一来时,我就给他做啦,当时我是舒服啦,不过后来就不是那么的啦,我没有认真的教他们...... 本文来自公务员之家,查看正文请使用公务员之家站内搜索查看正文。 第四篇: 师范系中学顶岗实习总结 大一的时候就知道大三的上学期学校有顶岗实习活动,也知道这个机会对于我们师范生来说很难得,所以我毅然地选择了顶岗。 不知道顶岗的生活会是怎样,学校怎么样,学生好不好管,会是收获满满还是不如不曾经历过,一切都充满疑惑。 曾经问过师哥师姐,答案却是相差甚大,一切都是未知数。 可转眼间,实习已接近尾声,中学是一个小社会,是大社会的一个缩影,顶岗实习是大学步入社会的一个缩影,是大学进入社会的一个过渡。 在这为期半年的实习中,我们有最初的迷茫、紧
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 报告 语言 实现 银行家 算法 最新 资料