版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机学院《操作系统》课程设计报告设计题目:银行家算法的实现姓名:学号:班级:06网络工程班完成日期:6月13日设计题目银行家算法的实现设计形式独立完成设计目标1.加深了解有关资源申请、防止死锁等概念。2.体会和了解死锁和防止死锁的详细实行措施。设计预备知识1.死锁的有关知识。2.银行家算法。3.系统安全性检查。设计内容1.设计进程对各类资源最大申请表示及初值确实定。2.设定系统提供资源的初始情况。3.设定每次某个进程对各类资源的申请表示。4.编制程序,依据银行家算法,决定其资源申请是否得到满足。5.显示资源申请和分派时的变化情况。小组组员分工无银行家算法分析、设计与实现设计理论描述本设计的目标是通过编写和调试一个系统动态分派资源的简单模拟程序,观测死锁产生的条件,并采取适当的算法,有效地预防和防止死锁地发生。要求如下:(1)
模拟一个银行家算法;(2)
初始化时让系统拥有一定的资源;(3)
用键盘输入的方式申请资源;(4)
假如预分派后,系统处在安全状态,则修改系统的资源分派情况;(5)
假如预分派后,系统处在不安全状态,则提示不能满足祈求,设计的重要内容是模拟实现动态资源分派。同时编写和调试一个系统动态资源的简单模拟程序,观测死锁产生的条件,并使用适当的算法,有效的预防和防止死锁的发生。银行家算法.顾名思义是起源于银行的借贷业务,一定数量的本金要应多个客户的借贷周转,为了预防银行加资金无法周转而倒闭,对每一笔贷款,必须考查其是否能限期偿还。在操作系统中研究资源分派方略时也有类似问题,系统中有限的资源要供多个进程使用,必须确保得到的资源的进程能在有限的时间内偿还资源,以供其他进程使用资源。假如资源分派不得到就会发生进程循环等候资源,则进程都无法继续执行下去的死锁现象。把一个进程需要和已占有资源的情况统计在进程控制中,假定进程控制块PCB其中“状态”有就绪态、等候态和完成态。当进程在处在等候态时,表示系统不能满足该进程目前的资源申请。“资源需求总量”表示进程在整个执行过程中总共要申请的资源量。显然,,每个进程的资源需求总量不能超出系统拥有的资源总数,银行算法进行资源分派能够防止死锁.二、算法描述及数据结构模型1.银行家算法:
设进程i提出祈求Request[n],则银行家算法按如下规则进行判断。
(1)假如Request[n]>Need[i,n],则报错返回。
(2)假如Request[n]>Available,则进程i进入等候资源状态,返回。
(3)假设进程i的申请已获同意,于是修改系统状态:
Available=Available-Request
Allocation=Allocation+Request
Need=Need-Request
(4)系统执行安全性检查,如安全,则分派成立;否则试探险性分派作废,系统恢复原状,进程等候。
2.安全性检查
(1)设置两个工作向量Work=Available;Finish[M]=False
(2)从进程集合中找到一个满足下述条件的进程,
Finish[i]=False
Need<=Work
如找到,执行(3);否则,执行(4)
(3)设进程取得资源,可顺利执行,直至完成,从而释放资源。
Work=Work+Allocation
Finish=True
GOTO2
(4)如所有的进程Finish[M]=true,则表示安全;否则系统不安全。3.数据结构#defineFalse0#defineTrue1intMax[100][100]={0};//各进程所需各类资源的最大需求intAvaliable[100]={0};//系统可用资源charname[100]={0};//资源的名称intAllocation[100][100]={0};//系统已分派资源intNeed[100][100]={0};//还需要资源intRequest[100]={0};//祈求资源向量inttemp[100]={0};//存储安全序列intWork[100]={0};//存储系统可提供资源intM=100;//作业的最大数为100intN=100;//资源的最大数为100voidshowdata()//显示资源矩阵三、源代码#include<iostream.h>#include<string.h>#include<stdio.h>#defineFalse0#defineTrue1intMax[100][100]={0};//各进程所需各类资源的最大需求intAvaliable[100]={0};//系统可用资源charname[100]={0};//资源的名称intAllocation[100][100]={0};//系统已分派资源intNeed[100][100]={0};//还需要资源intRequest[100]={0};//祈求资源向量inttemp[100]={0};//存储安全序列intWork[100]={0};//存储系统可提供资源intM=100;//作业的最大数为100intN=100;//资源的最大数为100voidshowdata()//显示资源矩阵{inti,j;cout<<"系统目前可用的资源[Avaliable]:"<<endl;for(i=0;i<N;i++)cout<<name[i]<<"";cout<<endl;for(j=0;j<N;j++)cout<<Avaliable[j]<<"";//输出分派资源cout<<endl;cout<<"MaxAllocationNeed"<<endl;cout<<"进程名";for(j=0;j<3;j++){for(i=0;i<N;i++)cout<<name[i]<<"";cout<<"";}cout<<endl;for(i=0;i<M;i++){cout<<""<<i<<"";for(j=0;j<N;j++)cout<<Max[i][j]<<"";cout<<"";for(j=0;j<N;j++)cout<<Allocation[i][j]<<"";cout<<"";for(j=0;j<N;j++)cout<<Need[i][j]<<"";cout<<endl;}}intchangdata(inti)//进行资源分派{intj;for(j=0;j<M;j++){Avaliable[j]=Avaliable[j]-Request[j];Allocation[i][j]=Allocation[i][j]+Request[j];Need[i][j]=Need[i][j]-Request[j];}return1;}intsafe()//安全性算法{inti,k=0,m,apply,Finish[100]={0};intj;intflag=0;Work[0]=Avaliable[0];Work[1]=Avaliable[1];Work[2]=Avaliable[2];for(i=0;i<M;i++){apply=0;for(j=0;j<N;j++){if(Finish[i]==False&&Need[i][j]<=Work[j]){apply++;if(apply==N){for(m=0;m<N;m++)Work[m]=Work[m]+Allocation[i][m];//变分派数Finish[i]=True;temp[k]=i;i=-1;k++;flag++;}}}}for(i=0;i<M;i++){if(Finish[i]==False){cout<<"系统不安全"<<endl;//不成功系统不安全return-1;}}cout<<"系统是安全的!"<<endl;//假如安全,输出成功cout<<"分派的序列:";for(i=0;i<M;i++){//输出运行进程数组cout<<temp[i];if(i<M-1)cout<<"->";}cout<<endl;return0;}voidshare()//利用银行家算法对申请资源对进行判定{charch;inti=0,j=0;ch='y';cout<<"请输入要求分派的资源进程号(0-"<<M-1<<"):";cin>>i;//输入须申请的资源号cout<<"请输入进程"<<i<<"申请的资源:"<<endl;for(j=0;j<N;j++){cout<<name[j]<<":";cin>>Request[j];//输入需要申请的资源}for(j=0;j<N;j++){if(Request[j]>Need[i][j])//判断申请是否不小于需求,若不小于则犯错{cout<<"进程"<<i<<"申请的资源不小于它需要的资源";cout<<"分派不合理,不予分派!"<<endl;ch='n';break;}else{if(Request[j]>Avaliable[j])//判断申请是否不小于目前资源,若不小于则{//犯错cout<<"进程"<<i<<"申请的资源不小于系统目前可利用的资源";cout<<"分派犯错,不予分派!"<<endl;ch='n';break;}}}if(ch=='y'){changdata(i);//依照进程需求量变换资源showdata();//依照进程需求量显示变换后的资源safe();//依照进程需求量进行银行家算法判断}}voidaddresources(){//添加资源intn,flag;cout<<"请输入需要添加资源种类的数量:";cin>>n;flag=N;N=N+n;for(inti=0;i<n;i++){cout<<"名称:";cin>>name[flag];cout<<"数量:";cin>>Avaliable[flag++];}showdata();safe();}voiddelresources(){//删除资源charming;inti,flag=1;cout<<"请输入需要删除的资源名称:";do{cin>>ming;for(i=0;i<N;i++)if(ming==name[i]){flag=0;break;}if(i==N)cout<<"该资源名称不存在,请重新输入:";}while(flag);for(intj=i;j<N-1;j++){name[j]=name[j+1];Avaliable[j]=Avaliable[j+1];}N=N-1;showdata();safe();}voidchangeresources(){//修改资源函数cout<<"系统目前可用的资源[Avaliable]:"<<endl;for(inti=0;i<N;i++)cout<<name[i]<<":"<<Avaliable[i]<<endl;cout<<"输入系统可用资源[Avaliable]:"<<endl;cin>>Avaliable[0]>>Avaliable[1]>>Avaliable[2];cout<<"经修改后的系统可用资源为"<<endl;for(intk=0;k<N;k++)cout<<name[k]<<":"<<Avaliable[k]<<endl;showdata();safe();}voidaddprocess(){//添加作业intflag=M;M=M+1;cout<<"请输入该作业的最打需求量[Max]"<<endl;for(inti=0;i<N;i++){cout<<name[i]<<":";cin>>Max[flag][i];Need[flag][i]=Max[flag][i]-Allocation[flag][i];}showdata();safe();}intmain()//主函数{inti,j,number,choice,m,n,flag;charming;cout<<"*****************单处理机系统进程调度实现*****************"<<endl;cout<<"请首先输入系统可供资源种类的数量:";cin>>n;N=n;for(i=0;i<n;i++){cout<<"资源"<<i+1<<"的名称:";cin>>ming;name[i]=ming;cout<<"资源的数量:";cin>>number;Avaliable[i]=number;}cout<<endl;cout<<"请输入作业的数量:";cin>>m;M=m;cout<<"请输入各进程的最大需求量("<<m<<"*"<<n<<"矩阵)[Max]:"<<endl;for(i=0;i<m;i++)for(j=0;j<n;j++)cin>>Max[i][j];do{flag=0;cout<<"请输入各进程已经申请的资源量("<<m<<"*"<<n<<"矩阵)[Allocation]:"<<endl;for(i=0;i<m;i++)for(j=0;j<n;j++){cin>>Allocation[i][j];if(Allocation[i][j]>Max[i][j])flag=1;Need[i][j]=Max[i][j]-Allocation[i][j];}if(flag)cout<<"申请的资源不小于最大需求量,请重新输入!\n";}while(flag);showdata();//显示各种资源safe();//用银行家算法判定系统是否安全while(choice){cout<<"**************银行家算法演示***************"<<endl;cout<<"1:增加资源"<<endl;cout<<"2:删除资源"<<endl;cout<<"3:修改资源"<<endl;cout<<"4:分派资源"<<endl;cout<<"5:增加作业"<<endl;cout<<"0:离开"<<endl;cout<<"*******************************************"<<endl;cout<<"请选择功效号:";cin>>choice;switch(choice){case1:addresources();break;case2:delresources();break;case3:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江中烟工业有限责任公司考试题库2025
- 难点解析-人教版八年级物理上册第5章透镜及其应用-透镜同步训练试题(解析卷)
- 2025年数控铣工(技师)职业技能鉴定精练考试题库50题(含答案)
- 服务方案及保障措施
- 2025年建筑力学与结构刚度计算方法试题及答案
- 2025年金属非金属矿山主要负责人和安管人员考试冲刺试题及答案
- 浙江省2025年煤矿企业主要负责人安全生产知识和管理能力考试冲刺模拟试题及答案
- 难点详解人教版八年级物理上册第5章透镜及其应用-透镜专项攻克试题(含详解)
- 考点解析-人教版八年级物理上册第5章透镜及其应用-生活中的透镜综合测评练习题(含答案详解)
- 考点解析人教版八年级上册物理光现象《平面镜成像》专题训练试卷(详解版)
- 会议纪要记录模板
- 早期生产遏制GP-12工作要求
- GB/T 16463-1996广播节目声音质量主观评价方法和技术指标要求
- GB/T 15972.20-2021光纤试验方法规范第20部分:尺寸参数的测量方法和试验程序光纤几何参数
- GA/T 1068-2015刑事案件命名规则
- 刘德武《如何画正方形》课件
- 政务礼仪-位次礼仪课件
- 绝缘电阻和接地电阻的测量实验
- 《食品经营许可证》申请报告书空白模板
- 生产过程质量改善计划
- 绿萝养殖幻灯片
评论
0/150
提交评论