版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统实验三:银行家算法时间:2013-12-13地点:计算机实验机房2实验人:朱蓉蓉学号:E01114336本次实验主要针对银行家算法的实现和安全序列的检测银行家算法实验代码:#include<iostream>#include<string.h>#include<stdio.h>#defineFalse0#defineTrue1usingnamespacestd;intMax[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;//进程的最大数为intN=100;//资源的最大数为voidshowdata()//显示资源矩阵{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<<"请输入进程"ai*"申请的资源:"<<endl;for(j=0;j<N;j++){cout<<name[j]<<":";cin>>Requestj];//输入需要申请的资源}for(j=0;j<N;j++){if(Request[j]>Need[i]j])//判断申请是否大于需求,若大于则出错{cout<<"进程"<<i<<"申请的资源大于它需要的资源";cout<<"分配不合理,不予分配!"<<endl;ch='n';break;}else{if(Requestj]>Avaliablej])/判断申请是否大于当前资源,若大于则{出//错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<<"\t"<<endl;cout<<"\t||||"<<endl;cout<<"\t||银行家算法的实现||"<<endl;cout<<"\t||E01114336||"<<endl;cout<<"\t||朱蓉蓉||"<<endl;cout<<"\t||||"<<endl;cout<<"\t||||"<<endl;cout<<"\t"<<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<<"\t银行家算法演示"<<endl;cout<<,增1:加资源,<<endl;cout<<,删2:除资源,<<endl;cout<<,修3:改资源,<<endl;cout<<,分4:配资源,<<endl;MlMlcout<<"cout<<"增5:加作业cout<<"cout<<"离0:开"<<endl;<<endl;cout<<"\t<<endl;COUt<<"请选择功能号:";Cin>>ChOiCe;switCh(ChOiCe){Case1:addresOUrCes();break;Case2:delresOUrCes();break;Case3:ChangeresOUrCes();break;Case4:share();break;Case5:addprOCess();break;Case0:ChOiCe=0;break;default:cout<<"请正确选择功能号(0-5)!"<<endl;break;}return1;实验程序截图:银行家算法的实现E01114336朱蓉蓉3<:数的类种源资供可统A0ECh-K:1:5:7BWWBi...-1.B-2.B-3.&首惊嘛煤嘛源嘛r?533229Q2433情输入各进程已经申请的资源量<5*3矩阵〉[AllocationJ:0i*0B0*100際统目前可用的资源EAualiable1:ABC1057进程名01AllocationA0B1001
0A71604NeedC32011,不予分配!123450源行suff的一加除改配加开要一蛊修八RW进源一卽除改配卽开-蛊修八-1234504的请:配申051能霍功霽择入入选薯412^请请请wB:IC:进□lx□lx□lx□lx银行家算法的实现E01114336朱蓉蓉BCD糸:1:5:2:0、璧®®豐翹数朋数朋数號数Jj-J-dzx-T7>-dzx-T7>-dzx-T7>-dziJ7^H71frH2frH3frH4&Mini送麗资资资资资资資汚大量最数的的程业逬J21AJA1请请05716532256065600001233610D
c
BAABCD00000?50100200200642ABCD00121000135406320014M<IXABCD00121?50235606520656•・一勺0AP••全列安序是的统配4系分MlMaxNeed041031A0104ABCD1520012750B0700024进程名01一卽除改配卽开-蛊修八-123450幘选择功能号:1、nf^A需要添办资源种类的数量:1際统目前可用的资源[Available1:A1A00000AllocationA01100B00360A00000A00100DA0000200020随机算法实现:#include<iostream>#include<time.h>#include<vector>#include<windows.h>usingnamespacestd;intr[3]={3,3,2};//系统拥有的资源intr0=0,r1=0,r2=0;//记录申请资源classpcb{public:intid;boolstate;intmax[3];intalc[3];intneed[3];pcb(){}voidinit(){state=false;cout<<"请输入进程的id,各个资源总需求量和已占用资源"<<endl;cin>>id;cout<<"a,b,c三种资源的最大使用量"<<endl;cin>>max[0]>>max[1]>>max[2];cout<<"a,b,c三种资源的已占有量"<<endl;cin>>alc[0]>>alc[1]>>alc[2];}intrd(intn){returnrand()%(n+1);}intrequest(){//Sleep(1000);r0=rd(max[0]-alc[0]);r1=rd(max[1]-alc[1]);r2=rd(max[2]-alc[2]);cout<<"进程"<<id<<"申请资源a"<<""<<r0<<"申请资源b"<<""<<r1<<"申请资源c"<<""<<r2<<endl;if(r0>r[0]||r1>r[1]||r2>r[2]){cout<<"没有那么多资源!!!"<<endl;return0;}if((r0==(max[0]-alc[0]))&&r1==(max[1]-alc[1])&&r2==(max[2]-alc[2])){r[0]=r[0]+alc[0];r[1]=r[1]+alc[1];r[2]=r[2]+alc[2];return1;}return2;}};boolsafe(vector<pcb>temp,inti){intu=r[0]-r0,k=r[1]-r1,l=r[2]-r2;for(intj=i;j<temp.size()-1;j++)temp[j]=temp[j+1];temp.pop_back();intsize=temp.size();//记录下容器内还有多少个进程//intrange[size];//记录下队列Iintx=0;//计数器while(!temp.empty()){staticintj=0;if((temp[j].max[0]-temp[j].alc[0])<=u&&(temp[j].max[1]-temp[j].alc[1])<=k&&(temp[j].max[2]-temp[j].alc[2])<=l)//判断是否能运行完{cout<<"运行"<<temp[j].id<<endl;u=u+temp[j].alc[0];k=k+temp[j].alc[1];l=l+temp[j].alc[2];for(inte=j;e<temp.size()-1;e++)temp[e]=temp[e+1];temp.pop_back();if(j>=temp.size())j=0;}else{j++;if(j>=temp.size())j=0;}x++;if(x==(size*size)){cout<<"没有安全队列,以上情况不成立"<<endl;cout<<endl;returnfalse;}}returntrue;}intmain(){srand(time(0));pcbp[5];vector<pcb>vp;for(inti=0;i<5;i++){p[i].init();vp.push_back(p[i]);}intx=0;//计算器intc;cout<<"请选择分配资源方法:1.银行家算法2.随机算法"<<endl;cin>>c;switch(c){case1:while(!vp.empty()){{{{inta;staticinti=0;if((a=vp[i].request())!=0){if(a==1){cout<<"进程"<<vp[i].id<<"已经结束"<<endl;for(intj=i;j<vp.size()-1;j++){vp[j]=vp[j+1];}vp.pop_back();if(i>=vp.size())i=0;cout<<"a资源还剩"<<r[0]<<"b资源还剩"<<r[1]<<"c资源还剩"<<r[2]<<endl;cout<<endl;}else{if(safe(vp,i)){cout<<"存在安全队列"<<endl;cout<<endl;vp[i].alc[0]=vp[i].alc[0]+r0;vp[i].alc[1]=vp[i].alc[1]+r1;vp[i].alc[2]=vp[i].alc[2]+r2;r[0]=r[0]-r0;r[1]=r[1]-r1;r[2]=r[2]-r2;cout<<"a资源还剩"<<r[0]<<"b资源还剩"<<r[1]<<"c资源还剩"<<r[2]<<endl;cout<<endl;}i++;if(i>=vp.size())i=0;elsei++;if(i>=vp.size())i=0;x++;if(x>=200){cout<<"初始化的表不安全"<<endl;return0;}}cout<<"进程已经全部结束"<<endl;break;case2:while(!vp.empty()){inta2;staticinti2=0;if((a2=vp[i2].request())!=0){if(a2==1){cout<<"进程"<<vp[i2].id<<"已经结束"<<endl;for(intj=i2;j<vp.size()-1;j++){vp[j]=vp[j+1];}vp.pop_back();if(i2>=vp.size())i2=0;cout<<"a资源还剩"<<r[0]<<"b资源还剩"<<r[1]<<"c资源还剩"<<r[2]<<endl;cout<<endl;}else{vp[i2].alc[0]=vp[i2].alc[0]+r0;vp[i2].alc[1]=vp[i2].alc[1]+r1;vp[i2].alc[2]=vp[i2].alc[2]+r2;r[0]=r[0]-r0;r[1]=r[1]-r1;r[2]=r[2]-r2;cout<<"a资源还剩"<<r[0]<<"b资源还剩"<<r[1]<<"c资源还剩"<<r[2]<<endl;cout<<endl;i2++;if(i2>=vp.size())i2=0;}}elsei2++;if(i2>=vp.size())i2=0;x++;if(x>=200){cout<<"产生死锁"<<endl;return0;}}cout<<"进程已经全部结束"<<endl;break;default:cout<<"选择错误"<<endl;break;}return1;n|x|曲"D:件系统实?&\l\Debug\l.ezen|x|0010申请资源h0申请资源c申请资源h1申请资源c申请资源h3申请资源c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025~2026学年山东省潍坊市临朐一中高一下学期贯通班6月月考生物试卷
- 2026 江苏 综合管理岗事业编考前模拟训练卷含答案
- 2026 河南 退役军人岗事业编结构化面试易错点巩固训练卷含答案解析
- 2026年江苏省职业院校技能大赛-中职组(工业机器人安装与编程赛项)考试题库(带答案)
- 2026年广东省职业院校技能大赛-中职组(智能财税基本技能赛项)考试题库(带答案)
- (2026年)小学语文下学期教研工作计划
- 2026年ICU 小儿创伤重症监护试卷及答案
- 2026年ICU 护理质量控制考核试卷及答案
- 2026年ICU 导尿管重症护理试卷及答案
- 2026年HIV 相关肿瘤感染关联考试试卷及答案
- 2026北京市朝阳区卫生健康委员会所属事业单位第二批招聘241人笔试备考题库及答案解析
- T/CATCM 033-2025中成药临床应用规范
- 2026年艺术史考试指南:中外艺术史重难点及全题型预测试题
- 2026粉末冶金开发高速钢刀片脱模剂适用性分析报告
- 水泥毯的施工方案(3篇)
- 中医执业医师考试《针灸学》巩固题及答案
- 2026年辽宁省公安厅招聘警务辅助人员笔试试题(含答案)
- 24J113-1 内隔墙-轻质条板(一)
- 2025年国家烟草专卖局、中国烟草总公司招录笔试题库附答案解析
- 医院收款室安全生产制度
- 金波童话阅读试题及答案
评论
0/150
提交评论