41012171_银行家算法_陈德利

上传人:美*** 文档编号:157254398 上传时间:2022-09-29 格式:DOC 页数:12 大小:139.50KB
收藏 版权申诉 举报 下载
41012171_银行家算法_陈德利_第1页
第1页 / 共12页
41012171_银行家算法_陈德利_第2页
第2页 / 共12页
41012171_银行家算法_陈德利_第3页
第3页 / 共12页
资源描述:

《41012171_银行家算法_陈德利》由会员分享,可在线阅读,更多相关《41012171_银行家算法_陈德利(12页珍藏版)》请在装配图网上搜索。

1、陕西师范大学操作系统课程设计报告设计题目:银行家算法的实现姓名:韩晓宇 学号:41012168银行家算法分析、设计与实现一、 设计理论描述本设计的目的是通过编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁地发生。要求如下:(1)模拟一个银行家算法;(2)初始化时让系统拥有一定的资源;(3)用键盘输入的方式申请资源;(4)如果预分配后,系统处于安全状态,则修改系统的资源分配情况;(5)如果预分配后,系统处于不安全状态,则提示不能满足请求,设计的主要内容是模拟实现动态资源分配。同时编写和调试一个系统动态资源的简单模拟程序,观察死锁产生的条件,

2、并使用适当的算法,有效的防止和避免死锁的发生。银行家算法. 顾名思义是来源于银行的借贷业务,一定数量的本金要应多个客户的借贷周转,为了防止银行加资金无法周转而倒闭,对每一笔贷款,必须考察其是否能限期归还。在操作系统中研究资源分配策略时也有类似问题,系统中有限的资源要供多个进程使用,必须保证得到的资源的进程能在有限的时间内归还资源,以供其他进程使用资源。如果资源分配不得到就会发生进程循环等待资源,则进程都无法继续执行下去的死锁现象。把一个进程需要和已占有资源的情况记录在进程控制中,假定进程控制块PCB其中“状态”有就绪态、等待态和完成态。当进程在处于等待态时,表示系统不能满足该进程当前的资源申请

3、。“资源需求总量”表示进程在整个执行过程中总共要申请的资源量。显然,每个进程的资源需求总量不能超过系统拥有的资源总数, 银行算法进行资源分配可以避免死锁.二、算法描述及数据结构模型 1.银行家算法: 设进程i提出请求Requestn,则银行家算法按如下规则进行判断。 (1)如果RequestnNeedi,n,则报错返回。 (2)如果RequestnAvailable,则进程i进入等待资源状态,返回。 (3)假设进程i的申请已获批准,于是修改系统状态: Available=Available-Request Allocation=Allocation+Request Need=Need-Requ

4、est(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。 2.安全性检查 (1)设置两个工作向量Work=Available;FinishM=False(2)从进程集合中找到一个满足下述条件的进程, Finish i=False Need=Work 如找到,执行(3);否则,执行(4) (3)设进程获得资源,可顺利执行,直至完成,从而释放资源。 Work=Work+Allocation Finish=True GO TO 2 (4)如所有的进程FinishM=true,则表示安全;否则系统不安全。 3.数据结构#define False 0#defin

5、e True 1int Max100100=0;/各进程所需各类资源的最大需求int Avaliable100=0;/系统还可用资源string name100;/资源的名称int Allocation100100=0;/系统已分配资源int Need100100=0;/还需要资源int Request100=0;/请求资源向量int temp100=0;/存放安全序列int Work100=0;/存放系统可提供资源int M=100;/作业的最大数为100int N=100;/资源的最大数为100三、源代码#include#include#includeusing namespace std

6、;#define False 0#define True 1int Max100100=0;/各进程所需各类资源的最大需求int Avaliable100=0;/系统还可用资源string name100=0;/资源的名称int Allocation100100=0;/系统已分配资源int Need100100=0;/还需要资源int Request100=0;/请求资源向量int temp100=0;/存放安全序列int Work100=0;/存放系统可提供资源int M=100;/作业的最大数为100int N=100;/资源的最大数为100void showdata()/显示资源矩阵 i

7、nt i,j; int MM;/设定MM值,为输出对齐 if(N=1|N=2|N=4)MM=16; else if(N=3|N=5)MM=15; else if(N=6)MM=18; else MM=14; coutendl; coutsetiosflags(ios_base:right)/右对齐输出 setw(MM*2-8)Max setiosflags(ios_base:right) setw(MM)Allocation setiosflags(ios_base:right) setw(MM)Need setiosflags(ios_base:right) setw(MM)Avaliabl

8、eendl;coutsetiosflags(ios_base:right) setw(MM-8)进程名; for(j=0;j4;j+)for(i=0;iN;i+) coutsetiosflags(ios_base:right)setw(MM/N)namei; coutendl; for(i=0;iM;i+)coutsetiosflags(ios_base:right) setw(MM-9)Pi; for(j=0;jN;j+) coutsetiosflags(ios_base:right) setw(MM/N)Maxij; for(j=0;jN;j+)coutsetiosflags(ios_ba

9、se:right)setw(MM/N)Allocationij; for(j=0;jN;j+) coutsetiosflags(ios_base:right) setw(MM/N)Needij;if(i=0) for (j=0;jN;j+) coutsetiosflags(ios_base:right) setw(MM/N)Avaliablej;/输出分配资源 coutendl; int changdata(int i)/进行资源分配 int j;for (j=0;jM;j+) Avaliablej=Avaliablej-Requestj; Allocationij=Allocationij+

10、Requestj; Needij=Needij-Requestj;return 1;int ifsafe()/安全性算法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;mN;m+) Workm=Workm+Allocationim;/更新分配数 Fini

11、shi=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+)/输出运行进程数组 coutPtempi; if(iM-1) cout; coutendl; return 0;void check()/利用银行家算法对申请资源对进行判定char ch;int i=0,j=0;ch=y;cout请输入要求分配的资源进程号(0-M-1i;/输入须申请的

12、资源号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);/根据进程需求量变换资源 showdata();/根据进程需求量显示变换后的资

13、源 ifsafe();/根据进程需求量进行银行家算法判断 void add()/添加资源 int n,flag;coutn;flag=N;N=N+n;for(int i=0;in;i+) coutnameflag; coutAvaliableflag+;showdata();ifsafe();void del()/删除资源string ming;int i,flag=1;coutming;for(i=0;iN;i+) if(ming=namei) flag=0; break; if(ming=”Exit”)flag=2;break;if(i=N) cout该资源不存在,请重新输入(输入Exit

14、退出):;while(flag);if(flag=0)for(int j=i;jN-1;j+) namej=namej+1; Avaliablej=Avaliablej+1; N=N-1;showdata();ifsafe();else ;void change()/修改资源函数cout系统目前可用的资源Avaliable:endl; for(int i=0;iN;i+) coutnamei:Avaliableiendl;cout输入系统可用资源Avaliable:Avaliable0Avaliable1Avaliable2;cout经修改后的系统可用资源为endl;for (int k=0;

15、kN;k+) coutnamek:Avaliablekendl;showdata();ifsafe();void addjob()/添加作业 int flag=M;M=M+1;cout请输入该作业的最打需求量Maxendl;for(int i=0;iN;i+) coutnameiMaxflagi; Needflagi=Maxflagi-Allocationflagi;showdata();ifsafe();int main()/主函数int i,j,number,choice,m,n,flag;choice=1;string ming;cout *单处理机系统进程调度实现*endl;coutn

16、;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;do flag=0; cout请输入各进程已经申请的资源量(m*n矩阵)Allocation:endl; for(i=0;im;i+) for(j=0;jAllocationij; if(AllocationijMaxij) flag=1; Needij=Maxij-Allocati

17、onij;Avaliablej-=Allocationij; if(flag) cout申请的资源大于最大需求量,请重新输入!n;while(flag); showdata();/显示各种资源 ifsafe();/用银行家算法判定系统是否安全 while(choice)system(pause);system(cls);cout *银行家算法演示*endl; cout * 1:增加资源 *endl; cout * 2:删除资源 *endl; cout * 3:修改资源 *endl; cout * 4:分配资源 *endl; cout * 5:增加作业 *endl; cout * 0:离开 *e

18、ndl; cout *endl; coutchoice; switch(choice) case 1: add();break; case 2: del();break; case 3: change();break; case 4: check();break; case 5: addjob();break; case 0: choice=0;break; default: cout请正确选择功能号(0-5)!endl;break; return 1;四、 程序运行结果及分析T0 时刻的资源分配表(各种资源的数量分别为:10、5、7) 资源情况进程MaxA B CAllocationA B

19、CNeedA B CAvailableA B CP07 5 30 1 07 4 33 3 2P13 2 22 0 01 2 2P29 0 23 0 26 0 0P32 2 22 1 10 1 1P44 3 30 0 24 3 1运行结果:五、课程设计心得与体会银行家算法是避免死锁的一种重要方法,通过编写一个简单的银行家算法模拟程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。死锁的产生,必须同时满足四个条件,即一个资源每次只能由一个进程;第二个为等待条件,即一个进程请求资源不能满足时,它必须等待,但它仍继续保持已得到的所有其他资源;第三个为非剥夺条件,即在出现死锁的系统中一定有不可剥夺使用的资源;第四个为循环等待条件,系统中存在若干个循环等待的进程,即其中每一个进程分别等待它前一个进程所持有的资源。防止死锁的机构只能确保上述四个条件之一不出现,则系统就不会发生死锁。六.参考文献:1计算机操作系统汤子瀛等:西安电子科技大学出版社 2高级语言c+程序设计刘璟等:高等教育出版社

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!