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

下载本文档

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

文档简介

银行家算法设计试验报告一.题目分析银行家算法:我们能够把操作系统看做是银行家,操作系统管理的资源相称于银行家管理的资金,进程向操作系统祈求资源相称于客户向银行家贷款。操作系统按银行家制定的规则为进程分派资源,当进程初次申请资源时,要测试该进程尚需求的资源量,若是系统现存的资源能够满足它尚需求的资源量,则按目前的申请量来分派资源,否则就推迟分派。当进程在执行中继续申请资源时,先测试该进程申请的资源量是否超出了它尚需的资源量。若超出则拒绝分派,若没有超出则再测试系统尚存的资源是否满足该进程尚需的资源量,若满足即可按目前的申请量来分派,若不满足亦推迟分派。2.基本要求:(1)能够输入某系统的资源以及T0时刻进程对资源的占用及需求情况的表项,以及T0时刻系统的可利用资源数。(2)对T0时刻的进行安全性检测,即检测在T0时刻该状态是否安全。(3)进程申请资源,用银行家算法对其进行检测,分为如下三种情况:A.所申请的资源不小于其所需资源,提示分派不合理不予分派并返回B.所申请的资源未不小于其所需资源,但不小于系统此时的可利用资源,提示分派不合理不予分派并返回。C.所申请的资源未不小于其所需资源,亦未不小于系统此时的可利用资源,预分派并进行安全性检查:a.预分派后系统是安全的,将该进程所申请的资源予以实际分派并打印后返回。b.与分派后系统进入不安全状态,提示系统不安全并返回。(4)对输入进行检查,即若输入不符合条件,应当报错并返回重新输入。3.目标:依照设计题目标要求,充足地分析和了解题目,论述系统的要求,明确程序要求实现的功效以及限制条件。明白自己需要用代码实现的功效,清楚编写每部分代码的目标,做到有的放矢,有条理不遗漏的用代码实现银行家算法。二.概要设计1.算法思绪:先对用户提出的祈求进行合法性检查,即检查祈求是否不小于需要的,是否不小于可利用的。若祈求合法,则进行预分派,对分派后的状态调用安全性算法进行检查。若安全,则分派;若不安全,则拒绝申请,恢复到本来的状态,拒绝申请。2.安全性算法步骤(1)设置两个变量①剩余资源变量盘p[]。它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时,p[N]=S[N]②标识数组C[]。它表示系统是否有足够的资源分派给进程,使之运行完成,开始时先做C[i]=’F’,当有足够资源分派给进程时,令C[i]=’T’。(2)从进程集合中找到一个能满足下述条件的进程:①C[i]=’F’②Q[][]<=p[]如找到,执行步骤(3);否则,执行步骤(4)。(3)当进程T取得资源后,可顺利执行,直至完成,并释放出分派给它的资源,故应执行:p[]=p[]+R[][];C[i]=’T’;转向步骤(2)。(4)假如所有进程的C[i]=’T’,则表示系统处在安全状态;否则,系统处在不安全状态。3.进程祈求算法步骤(1)假如Request[][]<=Q[],则转向步骤(2);否则,以为犯错,因为它所需要的资源数已超出它所宣布的最大值。(2)假如Request[][]<=p[][],则转向步骤(3);否则,表示系统中尚无足够的资源,进程必须等候。(3)系统试探把要求的资源分派给进程Tt(t从1开始),并修改下面数据结构中的数值:

p[j]=p[j]-Request[t-1][j];

R[t-1][j]=R[t-1][j]+Request[t-1][j];

Q[t-1][j]=Q[t-1][j]-Request[t-1][j];(4)系统执行安全性算法,检查本次资源分派后,系统是否处在安全状态。4.重要用到的数据结构:最大需求矩阵Max[N][N]已分派矩阵R[N][N]仍需求矩阵Q[N][N]=Max[N][N]-R[N][N]可利用资源向量p[N]申请各类资源向量Request[N]工作向量work[],C[N](7)各类资源总数S[N];5.程序模块:voidmain()系统的主函数,用来显示资源的分派情况和提示信息,同时用Main函数来调用其他子程序。intcheck();安全性检查函数,用来检查是否有安全序列,假如存在则返回一个‘1’给主函数,否则返回‘0’。intjudge();进程祈求函数,用来进行资源祈求,分为手动的和随机申请。同时对申请的资源进行判断,检查申请是否有效,假如有效则返回一个‘1’给主函数,否则返回‘0’。三.流程图1.银行家算法Main()函数流程图2.安全性检查算法check()函数流程图调用check()函调用check()函数p[]=S[]C[]=’F’Q[i][j]<=p[j]C[i]=’F’?p[j]=p[j]+R[i][j]C[i]=’T’YN所有进程的C[i]==’T’?l=m?YN输出安全序列,并打印出目前资源分派情况输出提示:系统不安全调用结束j=n?YN进程祈求算法judge()函数流程图四.运行成果及阐明输入进程总数,资源总类,每类资源总数;然后输入已分派矩阵,最大需求矩阵,系统会求出尚需矩阵并且在屏幕上输出;然后系统调用check()安全检查函数进行安全检查,会在屏幕上输出系统是否安全,若安全,则会输出安全序列;接着系统调用judge()祈求分派函数,屏幕上提示输入要申请资源的序列号和要申请的各类资源数,输入以后,系统会进行判断要申请的资源数是否小于剩余资源数,是否小于或等于最大需求数,若都小于,系统会进行安全检查,若安全,系统就会进行资源分派。运行成果如下:五、总结通过这次的课程设计,我了解掌握了银行家算法,学会模拟实现资源分派,同时通过编写和调试一个系统分派资源的简单模拟程序,观测到了死锁产生的条件,并使用适当的算法,有效的预防和防止死锁的发生。虽然操作系统是此前学的,再接触时遗忘了许多,不过通过老师的讲解,同学的协助,自己也仔细地看了这次课程设计的试验指引,捡回了许多东西,对于银行家算法的设计、编写的思绪变得清楚。通过几天重复的阅读试验指引,仔细的思考出现的问题,重复推敲、测试与修改,终于能完满的完成课程设计任务。课程设计的时间虽然不长,但带了给我知识,也带给了我战胜困难、完成任务的欢乐。希望以后有更多的机会接触此类的课程设计。附:程序清单#defineN100#include<stdio.h>intT[N];intS[N];/*各类资源总数*/intp[N];/*剩余资源数*/charC[N];intR[N][N];/*已分派矩阵*/intQ[N][N];/*尚需分派矩阵*/intMAX[N][N];/*最大需求矩阵*/intcheck();intjudge();main(){intsum,i,j,n,m;printf("请输入进程总数:");scanf("%d",&m);printf("请输入资源总类数:");scanf("%d",&n);printf("请输入每类资源总数:");for(j=0;j<n;j++){scanf("%d",&S[j]);}printf("请输入已分派资源矩阵:\n");for(i=0;i<m;i++){for(j=0;j<n;j++)scanf("%d",&R[i][j]);/*已分派矩阵*/}printf("请输入最大需求资源矩阵:\n");for(i=0;i<m;i++){for(j=0;j<n;j++)scanf("%d",&MAX[i][j]);/*最大需求矩阵*/}printf("尚需分派资源矩阵为:\n");printf("进程名");for(j=0;j<n;j++)printf("R%d\t",j+1);printf("\n");for(i=0;i<m;i++){printf("T%d\t",i+1);for(j=0;j<n;j++){Q[i][j]=MAX[i][j]-R[i][j];printf("%d\t",Q[i][j]);/*尚需分派矩阵*/}printf("\n");}check(m,n);judge(m,n);}intcheck(intm,intn)/*安全检查函数*/{inti,j,k,l=0;for(j=0;j<n;j++){p[j]=S[j];for(i=0;i<m;i++)p[j]=p[j]-R[i][j];}for(i=0;i<m;i++)C[i]='F';for(i=0;i<m;i++){if(C[i]=='T')continue;else{for(j=0;j<n;j++){if(p[j]<Q[i][j])break;}if(j==n){C[i]='T';for(k=0;k<n;k++)p[k]+=R[i][k];T[l++]=i;i-=1; }elsecontinue;if(l==m){printf("系统是安全的\n");printf("安全序列是:\n");for(i=0;i<l;i++){printf("T%d",T[i]+1);if(i!=l-1)printf("-->"); }printf("\n");return1;}}}}intjudge(intm,intn)/*进程祈求函数*/{inti,j,t;intRequest[N][N];charch;while(1){printf("输入要申请的资源的进程号(1~%d):",m);scanf("%d",&t);printf("输入进程所祈求的各资源的数量:");for(j=0;j<n;j++)scanf("%d",&Request[t-1][j]);for(j=0;j<n;j++) {if(Request[t-1][j]>Q[t-1][j]) {printf("你输入的祈求数超出进程的需求量!\n");return0; }if(Request[t-1][j]>p[j]) {printf("你输入的祈求数超出系统有的资源数!\n");return0; } }for(j=0;j<n;j++) {p[j]-=Request[t-1][j];R[t-1][j]+=Request[t-1][j];Q[t-1][j]-=Request[t-1][j]; }if(check)printf("同意分派祈求!\n");else {printf("你的祈求被拒绝!\n");for(j=0;j<n;j++) {p[j]+=Request[t-1][j];R[t-1][j]-=Request[t-1][j];Q[t-1][j]+=Request[t-1][j]; }for(i=0;i<m;i++)C[i]='F';printf("你还想再次祈求分派吗?是请按y/Y,否请按n/N,再确定\n");while(1) {ch=getch()

温馨提示

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

最新文档

评论

0/150

提交评论