如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
操作系统实验报告二一:实验标题:实现死锁避免算法:银行家算法。二:实验环境:操作系统:windows7编译器:VisualStudio2010三:设计方案:1.实验目的通过程序模拟银行家算法,理解如何应用银行家算法避免死锁。2.实验手段直接在C源程序定义整形进程数量、资源种类;用2维数组表示最大需求、已分配的资源。从文件获取相关数量。3.验证方式检验当前资源是否有安全序列,是的话输出安全序列。四:实验代码:#include<stdio.h>#include<stdlib.h>#defineP_num5#defineR_num3intAllocation[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