版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统教程 银行家算法院 系计算机与软件学院班 级08软件工程2班学 号20081344066姓 名何丽茗一、实验目的银行家算法是避免死锁的一种重要方法。通过编写一个模拟动态资源分配的银行家算法程序,进一步深入理解死锁、产生死锁的必要条件、安全状态等重要概念,并掌握避免死锁的具体实施方法。二、实验内容根据银行家算法的基本思想,编写和调试一个实现动态资源分配的模拟程序,并能够有效地防止和避免死锁的发生。三、实验方法开 始输入资源数m, 及各类资源总数,初始化Available向量输入进程数n,i=1输入进程i的最大需求向量max。inmax资源总数提示错误重新输入i加1任选一个进程作为当前进程
2、输入该进程的资源请求量Request 调用银行家算法,及安全性算法,完成分配,或并给出提示Need向量为0该进程已运行结束Need矩阵为0所有进程运行都结束结 束NYYNNY初始化need 矩阵NY1. 算法流程图 2. 算法数据结构1) 可利用资源向量Available ,它是一个最多含有100个元素的数组,其中的每一个元素代表一类可利用的资源的数目,其初始值是系统中所配置的该类全部可用资源数目。其数值随该类资源的分配和回收而动态地改变。如果Available(j)=k,标是系统中现有j类资源k个。2) 最大需求矩阵Max,这是一个nm的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的
3、最大需求。如果Max(i,j)=k,表示进程i需要j类资源的最大数目为k。3) 分配矩阵Allocation,这也是一个nm的矩阵,它定义了系统中的每类资源当前一分配到每一个进程的资源数。如果Allocation(i,j)=k,表示进程i当前已经分到j类资源的数目为k。Allocation i表示进程i的分配向量,有矩阵Allocation的第i行构成。4) 需求矩阵Need,这还是一个nm的矩阵,用以表示每个进程还需要的各类资源的数目。如果Need(i,j)=k,表示进程i还需要j类资源k个,才能完成其任务。Need i表示进程i的需求向量,由矩阵Need的第i行构成。5) 上述三个矩阵间存
4、在关系:Need(i,j)=Max(i,j)-Allocation(i,j);3. 银行家算法设Requesti 是进程i的请求向量,如果Requesti,j=K,表示进程i需要K个j类型的资源。当i发出资源请求后,系统按下述步骤进行检查:1) 如果Request i Need,则转向步骤2;否则,认为出错,因为它所请求的资源数已超过它当前的最大需求量。2) 如果Request i Available,则转向步骤3;否则,表示系统中尚无足够的资源满足i的申请,i必须等待。3) 系统试探性地把资源分配给进程i,并修改下面数据结构中的数值:Available = Available - Reque
5、st iAllocation i= Allocation i+ Request iNeed i= Need i - Request i4) 系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。如果安全才正式将资源分配给进程i,以完成本次分配;否则,将试探分配作废,恢复原来的资源分配状态,让进程i等待。四、实验代码以及运行示例1. 源代码:#include#include#include#define False 0#define True 1using namespace std;int Max100100=0;/各进程所需各类资源的最大需求int Avaliable100=0;/系
6、统可用资源char name100=0;/资源的名称int Allocation100100=0;/系统已分配资源int Need100100=0;/还需要资源int Request100=0;/请求资源向量int temp100=0;/存放安全序列int Work100=0;/存放系统可提供资源int M=100;/进程的最大数为int N=100;/资源的最大数为void showdata()/显示资源矩阵int i,j;cout系统目前可用的资源Avaliable:endl;for(i=0;iN;i+) coutnamei ;coutendl;for (j=0;jN;j+) coutAv
7、aliablej ;/输出分配资源coutendl;cout Max Allocation Needendl;cout进程名 ;for(j=0;j3;j+)for(i=0;iN;i+)coutnamei ;cout ;coutendl;for(i=0;iM;i+)cout i ;for(j=0;jN;j+)coutMaxij ;cout ;for(j=0;jN;j+)coutAllocationij ;cout ;for(j=0;jN;j+)coutNeedij ;coutendl;int changdata(int i)/进行资源分配 int j;for (j=0;jM;j+) Avalia
8、blej=Avaliablej-Requestj;Allocationij=Allocationij+Requestj;Needij=Needij-Requestj;return 1;int safe()/安全性算法int i,k=0,m,apply,Finish100=0;int j;int flag=0;Work0=Avaliable0;Work1=Avaliable1;Work2=Avaliable2;for(i=0;iM;i+) apply=0;for(j=0;jN;j+)if (Finishi=False&Needij=Workj) apply+;if(apply=N)for(m=0
9、;mN;m+)Workm=Workm+Allocationim;/变分配数Finishi=True;tempk=i;i=-1; k+;flag+;for(i=0;iM;i+)if(Finishi=False)cout系统不安全endl;/不成功系统不安全return -1; cout系统是安全的!endl;/如果安全,输出成功 cout分配的序列:;for(i=0;iM;i+)/输出运行进程数组couttempi;if(iM-1) cout;coutendl;return 0;void share()/利用银行家算法对申请资源对进行判定char ch;int i=0,j=0;ch=y;cout
10、请输入要求分配的资源进程号(0-M-1i;/输入须申请的资源号cout请输入进程i 申请的资源:endl;for(j=0;jN;j+)coutnamejRequestj;/输入需要申请的资源 for (j=0;jNeedij)/判断申请是否大于需求,若大于则出错 cout进程i申请的资源大于它需要的资源;cout 分配不合理,不予分配!Avaliablej)/判断申请是否大于当前资源,若大于则 /出错cout进程i申请的资源大于系统现在可利用的资源;cout 分配出错,不予分配!endl;ch=n;break; if(ch=y) changdata(i);/根据进程需求量变换资源showdat
11、a();/根据进程需求量显示变换后的资源safe();/根据进程需求量进行银行家算法判断 void addresources()/添加资源 int n,flag;coutn;flag=N;N=N+n;for(int i=0;in;i+)coutnameflag;coutAvaliableflag+;showdata();safe();void delresources()/删除资源char ming;int i,flag=1;coutming;for(i=0;iN;i+)if(ming=namei)flag=0;break;if(i=N)cout该资源名称不存在,请重新输入:;while(fl
12、ag);for(int j=i;jN-1;j+)namej=namej+1;Avaliablej=Avaliablej+1;N=N-1;showdata();safe();void changeresources()/修改资源函数cout系统目前可用的资源Avaliable:endl; for(int i=0;iN;i+) coutnamei:Avaliableiendl;cout输入系统可用资源Avaliable:Avaliable0Avaliable1Avaliable2;cout经修改后的系统可用资源为endl;for (int k=0;kN;k+)coutnamek:Avaliable
13、kendl;showdata();safe();void addprocess()/添加作业 int flag=M;M=M+1;cout请输入该作业的最大需求量Maxendl;for(int i=0;iN;i+)coutnameiMaxflagi;Needflagi=Maxflagi-Allocationflagi;showdata();safe();int main()/主函数 int i,j,number,choice,m,n,flag; char ming;coutt-endl;coutt| |endl;coutt| 银行家算法的实现 |endl;coutt| |endl;coutt|
14、08软工何丽茗 |endl;coutt| |endl;coutt| 20081344066 |endl;coutt-endl;coutn;N=n;for(i=0;in;i+)cout资源i+1ming;namei=ming;coutnumber;Avaliablei=number;coutendl;coutm;M=m;cout请输入各进程的最大需求量(m*n矩阵)Max:endl;for(i=0;im;i+)for(j=0;jMaxij;doflag=0;cout请输入各进程已经申请的资源量(m*n矩阵)Allocation:endl;for(i=0;im;i+)for(j=0;jAlloca
15、tionij;if(AllocationijMaxij) flag=1;Needij=Maxij-Allocationij;if(flag)cout申请的资源大于最大需求量,请重新输入!n;while(flag); showdata();/显示各种资源 safe();/用银行家算法判定系统是否安全 while(choice)coutt-银行家算法演示-endl;cout 1:增加资源 endl;cout 2:删除资源 endl;cout 3:修改资源 endl;cout 4:分配资源 endl;cout 5:增加作业 endl;cout 0:离开 endl;coutt-endl;coutchoice;switch(choice)case 1: addresources();break;case 2: delresources();break;case 3: changeresources();break;case 4: share();break;case 5: addprocess();break;case 0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园应急预案解读
- 食品安全伴我行
- 认识销售课件教学课件
- 假如课件教学课件
- 高三化学一轮复习 第一章 离子反应 离子方程式 课件
- 稻田餐厅课件教学课件
- 3.1.1铁及铁的氧化物 课件 高一上学期化学人教版(2019)必修第一册
- 2.2化学平衡 课件高二上学期化学人教版(2019)选择性必修1
- 成人夏季食品安全教育
- 企业宿舍管理培训
- 井底的四只小青蛙
- FZ/T 52021-2012牛奶蛋白改性聚丙烯腈短纤维
- 运动控制系统-上海大学-全部章节内容
- 打“两卡”共同防范电信网络诈骗 课件 - 高中安全主题班会
- 公司组织结构图Word模板
- 云上智农APP推广使用课件-参考
- 机器人-abb操作手册简易
- 菜品出品质量管理规定(3篇)
- 医疗质量管理与持续改进记录表
- 最新《辅酶q10》课件
- 二 年级上册美术课件-《雪花飘飘》|北京课改版 (共25张PPT)
评论
0/150
提交评论