实验银行家算法.pdf

上传人:c****3 文档编号:93395733 上传时间:2023-07-04 格式:PDF 页数:12 大小:409.38KB
返回 下载 相关 举报
实验银行家算法.pdf_第1页
第1页 / 共12页
实验银行家算法.pdf_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《实验银行家算法.pdf》由会员分享,可在线阅读,更多相关《实验银行家算法.pdf(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 实 验 银 行 家 算 法 精品好文档,推荐学习交流 仅供学习与交流,如有侵权请联系网站删除 谢谢10 实验三 银行家算法 一、实 验目的和意义 了解掌握银行家算法,学会模拟实现资源分配,同时有要求编写和调试一个系统分配资源的简单模拟程序,观察死锁产生的条件,并使用适当的算法,有效的防止和避免死锁的发生 二、方案设计及开发过程 1.实验背景 在多道程序系统中,虽可借助与多个进程的并发执行,来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险-死琐。产生死锁的原因可归结为两点:1:竞争资源。当系统中供多个进程共享的资源如打印机、公用队列等,其数目不足以满足诸进程的需要时,会引起诸进程对

2、资源的竞争而产生死锁。2:进程间推进顺序非法。进程在运行过程中,请求和释放资源的顺序不当,也同样会导致产生进程死锁。最有代表性的避免死锁的算法,是 Dijkstra 的银行家算法。这是由于该算法能用与银行系统现金贷款的发放而得名的。2.算法描述 设 Requesti 是进程 Pi 的请求向量,如果 Requestij=K,表示进程 Pi 需要K 个 Rj 类型的资源,当 Pi 发出资源请求后,系统按下面步骤进行检查:(1)如果 Requestij=Needi,j,便转向步骤 2;否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。(2)如果 Requestij=Availablej,便转

3、向步骤 3;否则,表示尚无足够资源,Pi 须等待。(3)系统试探着把资源分配给进程 Pi,并修改下面数据结构中的数值:Availablej:=Availablej-Requestij;Allocationi,j:=Allocationi,j+Requestij;Needi,j:=Needi,j-Requestij;精品好文档,推荐学习交流 仅供学习与交流,如有侵权请联系网站删除 谢谢10(4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全,才正式将资源分配给进程 Pi,以完成本次分配;否则,将本次的试探分配作废,恢复原来的资源分配状态,让进程 Pi 等待。3.数据结构 银

4、行家算法中的数据结构:(1)可利用资源向量 Available。这是一个含有 n 个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变。如果 Availablej=K,则表示系统中现有 Rj 类资源 K 个。(2)最大需求矩阵 Max。这是一个 m*n 的矩阵,它定义了系统中 n 个进程中每一个进程对 m 类资源的最大需求。如果 Maxi,j=K,则表示进程 i 需要 Rj 类资源的最大数目为 K。(3)分配矩阵 Allocation。这也是一个 m*n 的矩阵,它定义了系统中每一类资源当前已分配给每一

5、进程的资源数。如果 Allocationi,j=K,则表示进程i 当前已分得 Rj 类资源的数目为 K。(4)需求矩阵 Need。这也是一个 n*m 的矩阵,用以表示每一个进程尚需的各类资源数。如果 Needi,j=K,则表示进程 i 还需要 Rj 类资源 K 个,方能完成其任务。(5)工作数组 Work.。这是一个含有 n 个元素的数组,它代表可以提供分配的资源数,初始值是 Available 中的数值,随着资源的回收,它的值也会改变,公式是 Worki=Worki+Allocationi。4.主要函数说明 主要函数主要有四个:(1)Main()主函数:用来显示资源的分配情况和提示信息,同时

6、用 Main 函数来调用其它子程序。(2)Safe()函数:用来检查是否有安全序列,如果存在则返回一个 1给主函数,否则返回 0。(3)Disp()函数:用来显示随机生成的资源包括 Max、Need、Allocation、Available。精品好文档,推荐学习交流 仅供学习与交流,如有侵权请联系网站删除 谢谢10 程序初始化 随机分配资源 并显示在屏幕 检查安全序列 是否要申请资源 输入 Request RequestNeed RequestAvailable Needij=Needij-Requestj Availablej=Availablej-Requestj 报错 检查安全序列 保留

7、原始 Available、Request 恢复原始 Available、(4)Request()函数:用来进行资源请求,分为手动的和随机申请。同时对申请的资源进行判断,检查申请是否有效,如果有效则返回一个 1给主函数,否则返回 0。5.算法流程图 N Y Y N N Y 精品好文档,推荐学习交流 仅供学习与交流,如有侵权请联系网站删除 谢谢10 N Y Y 三、调试记录与分析 在调试过程中为了显示安全序列的检查状况,在检查 Available 是否满足 Need 时要检查 m*n遍,并存在表达有歧异,经过修改后,就不需要全部检查,而是 Available 只要有一个不满足 Need 就停止检查

8、。图 3.1 修改前 图 3.2 修改后 精品好文档,推荐学习交流 仅供学习与交流,如有侵权请联系网站删除 谢谢10 四、运行结果及说明 图 4.1.不存在安全序列 随机分配完资源后,进行安全检查,在检查过程中在屏幕上显示检查信息,上图为资源分配不安全时显示的信息。图 4.2.存在安全路径 存在安全路径后,在屏幕上显示变化过程和安全路径。提示是否申请资源 图 4.3.申请资源 精品好文档,推荐学习交流 仅供学习与交流,如有侵权请联系网站删除 谢谢10 提出申请后,询问进行随机分配资源还是手动分配 图 4.4 手动分配 图 4.5.随机分配 五、实验总结 附录#include#include#i

9、nclude#define M 3#define N 3 int NeedMN,AllocationMN,AvalibleN,MaxMN,finishN;/Need:进程需要的资源数 Allocation:进程已分配的资源;Avalible:进程可供分配的资源 void display(int*a,int n)/显示一维数组 int i;for(i=0;in;i+)printf(%3d,ai);void disp()/显示资源列表 int i,j,k,h,l;printf(Nnumbert Maxtt needtt allocationt avaliblen);for(i=0;iM;i+)pr

10、intf(p%dt,i);display(Maxi,N);printf(t);display(Needi,N);printf(t);display(Allocationi,N);printf(t);if(i=0)display(Avalible,N);printf(n);精品好文档,推荐学习交流 仅供学习与交流,如有侵权请联系网站删除 谢谢10 int grand(int*a,int*b,int n)/分配资源 int i;for(i=0;in;i+)ai=bi;int check(int*a,int*b,int n)/检查 Allocation 是否与 Max相等 int i;for(i=0

11、;in;i+)if(aibi)return 0;return 1;int compare(int*a,int*b,int n)/比较数组的大小 int i;char flag;for(i=0;in;i+)if(aibi)return 0;return 1;int comp(int*a,int*b,int n,int m)/比较数组 int i;for(i=0;ibi)if(m=1)printf(request Number%d resouce have an error request overflow avalible%dn,i+1,i);if(m=2)printf(request Numb

12、er%d resouce have an error request overflow Need%dn,i+1,i);return 0;return 1;void dec(int*a,int*b,int n)/数组相减 int i;for(i=0;in;i+)ai-=bi;char input()/输入数据 char c;c=getchar()-0 x30;return c;void add(int*a,int*b,int n,int m)/数组相加 int i;for(i=0;in;i+)ai+=bi;for(i=0;in;i+)if(m=0)printf(Avalible%d=%d,i,a

13、i);if(m=3)printf(n);if(m=1)printf(work valuese changed work%d=%dn,i,ai);printf(n);/检查安全序列 int safe()int i,count=0,n,j,r1=1;int workN,srM,flag;精品好文档,推荐学习交流 仅供学习与交流,如有侵权请联系网站删除 谢谢10 int finish1N;grand(work,Avalible,N);printf(check safe list.n);for(i=0;iN;i+)finish1i=-1;for(n=0;nM;n+)for(i=0;ineed%d,n,

14、i);break;if(finish1i=-1&flag=1&finishi=-1)printf(find a right need-process%d-need%dn,n,i);add(work,Allocationi,N,r1);finish1i=1;srcount=i;count+;/记录安全序列 if(count=M)printf(-have an safe list-n);for(i=0;i,sri);else printf(p%dn,sri);return 1;else printf(after check there no safe list.n);printf(cant app

15、ly resoucen);return 0;/随机请求资源 int ran_request()int i,flag1,flag2,r1=1,r2=2,r3=3;int requestN,pn;pn=rand()%2;printf(Process%d call for resoucen,pn);for(i=0;iN;i+)requesti=rand()%5;for(i=0;iM;i+)finishi=-1;printf(random produce request%d:,N);display(request,N);printf(n);if(finishpn=-1)/finish 记录进程是否分配

16、完成 flag1=comp(request,Avalible,N,r1);flag2=comp(request,Needpn,N,r2);if(flag1=1&flag2=1)printf(call for request avalible);dec(Avalible,request,N);dec(Needpn,request,N);add(Allocationpn,request,N,r3);disp();if(safe()=1)if(check(Allocationpn,Maxpn,N)=1)add(Avalible,Allocationpn,N,0);finishpn=1;return

17、1;else return 0;else printf(the resouce have assingnedn);精品好文档,推荐学习交流 仅供学习与交流,如有侵权请联系网站删除 谢谢10 int request()/手动申请资源 int i,j,pn,c,flag1,flag2,r1=1,r2=2,r3=3,k=0;int rtN;printf(please input the process number which you want:);scanf(%d,&pn);if(pnM-1)printf(input error!);else printf(nplease input the re

18、quest number:n);for(i=0;iN;i+)getchar();printf(The%d rquest:n,i);rti=input();printf(Your request is 锛歕 n);display(rt,N);if(finishpn=-1)flag1=comp(rt,Avalible,N,r1);flag2=comp(rt,Needpn,N,r2);if(flag1=1&flag2=1)printf(call for request avalible);dec(Avalible,rt,N);dec(Needpn,rt,N);add(Allocationpn,rt,

19、N,r3);disp();if(safe()=1)if(check(Allocationpn,Maxpn,N)=1)add(Avalible,Allocationpn,N,0);finishpn=1;k+;return 1;else return 0;else printf(The resouce have assignedn);int main()int i,j,s_flag;char c,s;int avN,s_llMN;for(i=0;iM;i+)finishi=-1;srand(time(NULL);for(i=0;iM;i+)for(j=0;jN;j+)Allocationij=ra

20、nd()%10;Needij=rand()%10;Maxij=Allocationij+Needij;for(i=0;iN;i+)Avaliblei=rand()%12;disp();s_flag=safe();if(s_flag=1)printf(是否申请资源-(Y/N)n);c=getchar();if(c=Y|c=y)N1:printf(1-random request resoucen);printf(2-request resouce by mann);grand(av,Avalible,N);/保存原始的 available 的值 for(i=0;iM;i+)精品好文档,推荐学习交

21、流 仅供学习与交流,如有侵权请联系网站删除 谢谢10 grand(s_lli,Allocationi,N);getchar();Mnu:s=getchar();switch(s)case 1:if(ran_request()=1)printf(continue request(Y/N)n);getchar();c=getchar();if(c=Y|c=y)goto N1;else grand(Avalible,av,N);for(i=0;iM;i+)grand(Allocationi,s_lli,N);break;case 2:if(request()=1)printf(continue request(Y/N)n);getchar();c=getchar();if(c=Y|c=y)goto N1;else grand(Avalible,av,N);for(i=0;iM;i+)grand(Allocationi,s_lli,N);break;default:printf(input error,please input agin.n);goto Mnu;if(c=N|c=n)printf(Thank for your use.n);return 0;精品好文档,推荐学习交流 仅供学习与交流,如有侵权请联系网站删除 谢谢10

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁