银行家算法实验报告2_第1页
银行家算法实验报告2_第2页
银行家算法实验报告2_第3页
银行家算法实验报告2_第4页
银行家算法实验报告2_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机操作系统实验报告何美西 109253030212一、实验名称: 银行家算法二、实验目的: 银行家算法是避免死锁的一种重要方法,通过编写 一个简单的银行家算法程序,加深了解有关资源申请、避免死 锁等概念,并体会和了解死锁和避免死锁的具体实施方法。三、问题分析与设计:1、算法思路 :先对用户提出的请求进行合法性检查,即检查 请求是否大于需要的,是否大于可利用的。若请求合法,则进 行预分配,对分配后的状态调用安全性算法进行检查。若安 全,则分配;若不安全,则拒绝申请,恢复到原来的状态,拒 绝申请。2、银行家算法步骤:(1)如果Requestk or二Need则转向步骤(2);否则,认为出错,因

2、为它所需要的资源数已超过它所宣布的最大值。(2) 如果Request or二Available,则转向步骤(3);否则,表示系统中尚无足够的资源,进程必须等待。(3) 系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的数值:Available=Available-Requesti;Allocation=Allocation+Request;Need=Need-Request;(4)系统执行安全性算法,检查此次资源分配后,系统是否处于 安全状态。3、安全性算法步骤:(1)设置两个向量工作向量 Work 。它表示系统可提供进程继续运行所需要的各类资 源数目,执行安全算法开始时, Work=

3、Allocation;布尔向量Finish。它表示系统是否有足够的资源分配给进程,使 之运行完成,开始时先做 Finishi=false ,当有足够资源分配给进程 时,令 Finishi=true 。(2)从进程集合中找到一个能满足下述条件的进程: Finishi=false Needor=Work如找到,执行步骤( 3);否则,执行步骤( 4)。(3)当进程 P 获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Work=Work+Allocation;Finishi=true;转向步骤(2)O(4) 如果所有进程的Finishi=true,则表示系统处于安全状态;否 则,

4、系统处于不安全状态。4、流程图:系统主要过程流程图银行家算法流程图安全性算法流程图四、实验代码:#i nclude#i ncludevstri ng.h#in clude#defi ne False 0#define True 1int Max100100=0;/ 大需求int Avaliable100=0;/char name100=0;/各进程所需各类资源的最系统可用资源资源的名称还需要资源请求资源向量存放安全序列 存放系统可提供资源int Allocation100100=0;/ 系统已分配资源int Need100100=0;/int Request100=0;/int temp100

5、=0;/int Work100=0;/int p100=0;int q100100=0;int z100100=0;int M=100;/ 作业的最大数为 100int N=100;/ 资源的最大数为 100int gg=1;void showdata()/显示资源矩阵int i,j;coutendl 此时刻的资源分配情况为: endl;cout Max Allocation Need Avaliableendl;cout 进程名for(j=0;j4;j+)for(i=0;iN;i+) coutnamei ;cout ;coutendl;for(i=0;iM;i+)cout i ;for(j=

6、0;jN;j+) coutMaxij ; cout ;for(j=0;jN;j+) coutAllocationij cout ;for(j=0;jN;j+) coutNeedij ;if(i=0)cout ;输出分配资源for (j=0;jN;j+) coutAvaliablej ;/ coutendl;int changdata(int i)/进行资源分配int j;for (j=0;jM;j+) /pj=Avaliablej;Avaliablej=Avaliablej-Requestj;/qij=Allocationij;Allocationij=Allocationij+Request

7、j;/zij=Needij; Needij=Needij-Requestj;return 1;int safe()/ 安全性算法int i,d,k=0,m,h,s,apply,Finish100=0;int j;int flag=0;for(i=0;iN;i+)Worki=Avaliablei;coutendl 安全性检查 endl;cout Work Need AllocationWork+Allocation Finishendl;cout 进程名 ;for(h=0;h4;h+)for(s=0;sN;s+)coutnames ;cout ;coutendl;for(i=0;iM;i+)ap

8、ply=0;for(j=0;jN;j+)if (Finishi=False&Needij=Workj)apply+;if(apply=N) cout i ;for(d=0;dN;d+)coutWorkd ;cout ;for(d=0;dN;d+)coutNeedid ;cout ;for(d=0;dN;d+)coutAllocationid ;cout ;for(m=0;mN;m+)Workm=Workm+Allocationim;coutWorkm / 变分配数Finishi=True;tempk=i;cout ;couttrue ;coutendl;i=-1;k+;flag+;for(i=

9、0;iM;i+)if(Finishi=False)for(j=0;jN;j+) Avaliablej=Avaliablej+Requestj;Allocationij=Allocationij-Requestj;Needij=Needij+Requestj;coutendl 系统进入不安全状态!此时系统不 分配资源! endl;/ 不成功系统不安全return 0;coutendl 此时系统是安全的 !endl;/ 如果 安全,输出成功cout 安全序列为 :;for(i=0;iM;i+)/ 输出运行进程数组couttempi;if(iM-1) cout;coutendl;return 0;v

10、oid share()/ 利用银行家算法对申请资源对进行判定char ch;int i=0,j=0;ch=y;coutendl 请输入要求分配的资源进程号 (0- M-1i;/ 输入须申请的资源号coutendl 请输入进程 i申请的资源:e ndl;for(j=0;jN;j+)coutnamejRequestj;/ 输入需要申请的资源for (j=0;jNeedij)/判断申请是否大于需求,若大于则出错coutendl 进程 i 申请的资源大于它 需要的资源 ;cout 分配不合理,不予分配! Avaliablej)/判断申请是否大于当前资源,若大于则/ 出错coutendl进程 i 申请的

11、资源大于系统现在可利用的资源 ;cout 分配出错,不予分配 !endl;ch=n;break;if(ch=y) changdata(i);/ 根据进程需求量变换资源showdata();/ 根据进程需求量显示变换后的资源safe();/ 根据进程需求量进行银行家算法判断int main()/ 主函数int t=1,i,j,number,choice,m,n,flag; char ming;cout*银行家算法的设计与实现endl;coutendln;N=n;for(i=0;in;i+)coutvv 资源i+1ming;namei=ming;coutnumber;Avaliablei=numb

12、er;coutendl;coutm;M=m;coutendl(m*n请输入各进程的最大需求量矩阵)Max:e ndl;for(i=0;im;i+)for(j=0;jMaxij;doflag=0;coutendl请输入各进程已经申请的资源量(m*n矩阵)Allocati on :e ndl;for(i=0;im;i+)for(j=0;jAllocationij; if(AllocationijMaxij) flag=1;Needij=Maxij-Allocationij;if(flag)coutendl 申请的资源大于最大需求量,请重 新输入 !nendl;while(flag);showdat

13、a();/ 显示各种资源safe();/ 用银行家算法判定系统是否安全while(1)if(t=1)coutendl 利用银行家算法预分配资源 endl;share();t=0;else break;coutendlt;cout3-0-2-4利用银行家算法预分配资源 请输入要求分配的资源进程号:1 请输入进程1申请的资源:A:1B:0C:2b匕时刻的资源分配情况为:NeedABC 7 4 3 0 2 0 6 0 0 0 11 4 3 1Available ABC2 3 0进程名01234MaxABC7 5 33 2 29 0 22 2 24 3 3Allocation ABC0 103 0 2

14、3 0 22 110 0 21安全性检杳WorkNeedAllocationWorkAllocationFinish进程名ABCABCABCABC12 3 00 2 03 0 25 3 2true35 3 20 112 117 4 3true07 4 37 4 30 107 5 3true27 5 36 0 03 0 210 5 5true410 5 54 3 10 0 210 5 ?true此时系统旱安全的?:1-3-0- 2-41是否继续银行家算法?按1键继续,按其它任意键退岀利用银行家算法预分配资源请输入要求分配的资源进程号 = 4请输入进程4申请的资源:A:3B:3C:0进程4申请的资源大于系统现在可利用的资源分配岀错,不予分配?是否继续银行家算法?按1键继续,按其它任意键退岀汽利用蒔尸家算法预分配资源 请输入要求分配的资源进程号 请输入进程0申请的资源:B:2C;9MaxAllacat ionNeedAualiable进程名ABCABCABCABC07 5 30 3 07 2 32 1313 2 23 B 2Q 2 Q29 0 23 0 26 0 032 2 22 110 1144 3 30 0 24 3 1安全性检杳UorkHeedAllocat ion Io rk +

温馨提示

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

评论

0/150

提交评论