文档介绍:福州大学数学与计算机科学学院《操作系统》上机实验报告专壬绩——成——名姓号学名程称诱称名验实验目的和要求程进该匕匕厶冃出断判确准匕匕厶冃请申源资出提程进个一意任对实验内容、OC*7BA源资类肌三N法进」eeeeBNAlecaaBAPP357o1o3472331P223oo2221P22o92o3oo6222121o3342oo134实验步骤数g配药源分原配要^要断可〃矇鸠皿册仙yyb:,程源程大必全cyn进资进最NL//辽安〃晒ahh/讪〃NN;mK:10.〃〃〃切帕NL〃lelXJJJ如s<必3m;ax[ocaee[1sii1abc(kk砒e<umaaanefifVv間oo^^#i#d#dst{kstvv{sum=O;for(i=0;i<N;i++) // 假设分配请求资源{work[i]=available[i]-a[i];// 把修改的可分配资源赋予worky[x].need[i]=y[x].need[i]-a[i];// 先分配,不安全还原y[x].allocation[i]=y[x].allocation[i]+a[i];}for(i=0;i<M;i++)// 循环次数为进程数{for(j=i;j<M;j++){b=0; // 初始化赋值for(k=0;k<N;k++){if(work[k]>=y[j].need[k])// 判断资源是否满足第j进程所需continue;elseb=1;//b 为判断资源是否满足为1表示不满足}if(b==0)// 满足时交换可执行的进程{v=y[i];y[i]=y[j];y[j]=v;for(l=0;l<N;l++){work[l]=work[l]+y[i].allocation[l];// 回收可完成进程资源}y[i].finish=1;// 设置此进程完成标志break;}}}for(i=0;i<M;i++)//判断是否安全{sum=sum+y[i].finish;}if(sum==M)//安全{printf("safe\n");available[i]=available[i]-a[i];for(i=0;i<M;i++)printf("%d->",y[i].num);}else// 不安全,撤销请求资源{printf("notsafe");for(i=0;i<N;i++){y[x].need[i]=y[x].allocation[i]-a[i];// 不安全还原y[x].allocation[i]=y[x].allocation[i]-a[i];}}}voidmain(){inti,j,y;jcx[M];// 进程inta[N];for(i=0;i<M;i++)// 初始化max,allocation,need{x[i].num=i;x[i].finish=0;printf("分别输入第%c个进程所需最大资源",i);for(j=0;j<N;j++){scanf("%d",&x[i].max[j]);}printf("分别输入第%c个进程已分配资源",i);for(j=0;j<N;j++){scanf("%d",&x[i].allocation[j]);x[i].need[j]=x[i].max[j]-x[i].allocatio