预览加载中,请您耐心等待几秒...
1/8
2/8
3/8
4/8
5/8
6/8
7/8
8/8

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

操作系统实验报告二 一:实验标题: 实现死锁避免算法:银行家算法。 二:实验环境: 操作系统:windows7 编译器:VisualStudio2010 三:设计方案: 1.实验目的 通过程序模拟银行家算法,理解如何应用银行家算法避免死锁。 2.实验手段 直接在C源程序定义整形进程数量、资源种类;用2维数组表示最大需求、已分配的资源。从文件获取相关数量。 3.验证方式 检验当前资源是否有安全序列,是的话输出安全序列。 四:实验代码: #include<stdio.h> #include<stdlib.h> #defineP_num5 #defineR_num3 intAllocation[P_num][R_num],Avaliable[R_num],Max[P_num][R_num]; intNeed[P_num][R_num]; intcompare(int*a,int*b,intn){ inti; for(i=0;i<n;i++) if(a[i]<b[i]) return0; return1; } voidadd(int*a,int*b,intn){ inti; for(i=0;i<n;i++) a[i]+=b[i]; } voidsubstract(int*a,int*b,intn){ inti; for(i=0;i<n;i++) a[i]-=b[i]; } voidassign(int*a,int*b,intn){ inti; for(i=0;i<n;i++) a[i]=b[i]; } voidinput(){ FILE*fp; inti,j; if((fp=fopen("banker.txt","r"))==0){ printf("cannotopenthefile"); exit(0); } for(i=0;i<P_num;++i) for(j=0;j<R_num;++j){ fscanf(fp,"%d",&Allocation[i][j]); } for(i=0;i<P_num;++i) for(j=0;j<R_num;++j){ fscanf(fp,"%d",&Max[i][j]); } for(j=0;j<R_num;++j){ fscanf(fp,"%d",&Avaliable[j]); } fclose(fp); for(i=0;i<P_num;++i) for(j=0;j<R_num;++j){ Need[i][j]=Max[i][j]-Allocation[i][j]; } } intissafe(int*sp){ inti;intcount=0;intn=0; intwork[R_num],finish[P_num]; assign(work,Avaliable,R_num); for(i=0;i<P_num;i++) finish[i]=0; n=P_num; while(n--){ for(i=0;i<P_num;i++) if((finish[i]==0)&&compare(work,Need[i],R_num)){ add(work,Allocation[i],R_num); finish[i]=1; sp[count]=i; count++; } if(count>=P_num) return1; } return0; } intrequest(intpid,int*r,intn){ inti; intsp[P_num]; if(compare(Need[pid],r,n)==1&&compare(Avaliable,r,n)==1){ substract(Avaliable,r,n); add(Allocation[pid],r,n); substract(Need[pid],r,n); if(issafe(sp)){ printf("SecurityPath:\n\t"); for(i=0;i<P_num;i++) printf("p[%d]",sp[i]); printf("\n"); return1; } else{ add(Avaliable,r,n); substract(Allocation[pid],r,n); add(Need[pid],r,n); printf("noSecurityParhonthisrequest\n"); return0; } } else{ printf("noSec