您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 操作系统-实验四动态分区分配算法源代码最新最全
实验四操作系统-动态分区分配算法萨斯的发生的v设计程序模拟四种动态分区分配算法:首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的工作过程。假设内存中空闲分区个数为n,空闲分区大小分别为P1,…,Pn,在动态分区分配过程中需要分配的进程个数为m(m≤n),它们需要的分区大小分别为S1,…,Sm,分别利用四种动态分区分配算法将m个进程放入n个空闲分区,给出进程在空闲分区中的分配情况。程序要求如下:1)利用首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法四种动态分区分配算法模拟分区分配过程。2)模拟四种算法的分区分配过程,给出每种算法进程在空闲分区中的分配情况。3)输入:空闲分区个数n,空闲分区大小P1,…,Pn,进程个数m,进程需要的分区大小S1,…,Sm,算法选择1-首次适应算法,2-循环首次适应算法,3-最佳适应算法,4-最坏适应算法。4)输出:最终内存空闲分区的分配情况。代码实现:#includeiostream#includefstream#includeiomanipusingnamespacestd;constintMaxNumber=100;intFreePartition[MaxNumber];//空闲分区大小intFirstPartition[MaxNumber];//1-首次适应算法intCycleFirstPartition[MaxNumber];//2-循环首次适应算法intBestPartition[MaxNumber];//3-最佳适应算法intWorstPartition[MaxNumber];//4-最坏适应算法intProcessNeed[MaxNumber];//进程需要的分区大小intPartitionNum,ProcessNum;charProcessName[MaxNumber];//进程名charProcessPartition[MaxNumber];//进程分配的序列intPartition[MaxNumber];charstr[MaxNumber][MaxNumber];voidFirstFit(intn,intm);voidNextFit(intn,intm);voidBestFit(intn,intm);voidWorstFit(intn,intm);voidPrint(intn,intm);voidPrint2(intn,intm);//========================================================voidFirstFit(intn,intm){cout选择了首次适应算法!endl;coutendl;inti,j,k=0;for(i=0;in;i++){FirstPartition[i]=FreePartition[i];}for(j=0;jm;j++){for(i=0;in;i++){if(ProcessNeed[j]=FirstPartition[i]){ProcessPartition[j]=i;//str[i][k]=ProcessName[j];FirstPartition[i]=FirstPartition[i]-ProcessNeed[j];break;}}}Print(n,m);cout空间序号:;for(i=0;in;i++){cout|setw(m-1)空间(i+1);}coutendl;cout分区大小:;for(i=0;in;i++){cout|setw(m)setiosflags(ios::left)FreePartition[i];}coutendl;cout剩余分区大小:;for(i=0;in;i++){cout|setw(m)setiosflags(ios::left)FirstPartition[i];}coutendl;Print2(n,m);}voidNextFit(intn,intm){cout选择了循环首次适应算法!endl;coutendl;inti,j,flag=0;for(i=0;in;i++){CycleFirstPartition[i]=FreePartition[i];}for(j=0;jm;j++){for(i=flag;in;i++){if(ProcessNeed[j]=CycleFirstPartition[i]){ProcessPartition[j]=i;CycleFirstPartition[i]=CycleFirstPartition[i]-ProcessNeed[j];flag=i+1;if(i==n-1){flag=0;}break;}}}Print(n,m);cout空间序号:;for(i=0;in;i++){cout|setw(m-1)空间(i+1);}coutendl;cout分区大小:;for(i=0;in;i++){cout|setw(m)setiosflags(ios::left)FreePartition[i];}coutendl;cout剩余分区大小:;for(i=0;in;i++){cout|setw(m)setiosflags(ios::left)CycleFirstPartition[i];}coutendl;Print2(n,m);}voidBestFit(intn,intm){cout选择了最佳适应算法!endl;coutendl;inti,j,flag=0,temp,id=0,flag1=0;for(i=0;in;i++){BestPartition[i]=FreePartition[i];}while(flag1m){flag=0;for(i=0;in;i++){Partition[i]=0;}for(i=0;in;i++){if(ProcessNeed[flag1]=BestPartition[i]){Partition[flag]=i;flag+=1;}}temp=BestPartition[Partition[0]];id=Partition[0];for(i=1;iflag;i++){if(tempBestPartition[Partition[i]]){temp=BestPartition[Partition[i]];id=Partition[i];}}BestPartition[id]=BestPartition[id]-ProcessNeed[flag1];ProcessPartition[flag1]=id;flag1+=1;}Print(n,m);cout空间序号:;for(i=0;in;i++){cout|setw(m-1)空间(i+1);}coutendl;cout分区大小:;for(i=0;in;i++){cout|setw(m)setiosflags(ios::left)FreePartition[i];}coutendl;cout剩余分区大小:;for(i=0;in;i++){cout|setw(m)setiosflags(ios::left)BestPartition[i];}coutendl;Print2(n,m);}voidWorstFit(intn,intm){cout选择了最坏适应算法!endl;coutendl;inti,j,flag=0,temp,id=0,flag1=0;for(i=0;in;i++){WorstPartition[i]=FreePartition[i];}while(flag1m){flag=0;for(i=0;in;i++){Partition[i]=0;}for(i=0;in;i++){if(ProcessNeed[flag1]=WorstPartition[i]){Partition[flag]=i;flag+=1;}}temp=WorstPartition[Partition[0]];id=Partition[0];for(i=1;iflag;i++){if(WorstPartition[Partition[i]]temp){temp=WorstPartition[Partition[i]];id=Partition[i];}}WorstPartition[id]=WorstPartition[id]-ProcessNeed[flag1];ProcessPartition[flag1]=id;flag1+=1;}Print(n,m);cout空间序号:;for(i=0;in;i++){cout|setw(m-1)空间(i+1);}coutendl;cout分区大小:;for(i=0;in;i++){cout|setw(m)setiosflags(ios::left)FreePartition[i];}coutendl;cout剩余分区大小:;for(i=0;in;i++){cout|setw(m)setiosflags(ios::left)WorstPartition[i];}coutendl;Print2(n,m);}voidchoice(intn,intm){intintput;cout\n请选择:1.首次适应算法2.循环首次适应算法3.最佳适应算法4.最坏适应算法:endl;cinintput;coutendl;switch(intput){case1:FirstFit(n,m);choice(n,m);break;case2:NextFit(n,m);choice(n,m);break;case3:BestFit(n,m);choice(n,m);break;case4:WorstFit(n,m);choice(n,m);break;}coutendl;}voidPrint(intn,intm){intj;cout进程名:;for(j=0;jm;j++){cout|setw(m)setiosflags(ios::left)ProcessName[j];}coutendl;cout进程分区大小:;for(j=0;jm;j++){cout|setw(m)setiosflags(ios::left)ProcessNeed[j];}coutendl;cout分配结果:endl;}voidPrint2(intn,intm){inti,j;for(i=0;in;i++){for(j=0;jm;j++){str[i][j]=0;}}cout进程分配分区:;for(i=0;in;i++){intk=0;for(j=0;jm;j++){if(ProcessPartition[j]==i){str[i][k]=ProcessName[j];k+=1;}}}for(i=0;in;i++){cout|;for(j=0;jm;j++){coutsetw(1)str[i][j];}}coutendl;}//===============================================================voidmain(){ifstreamin(yin.txt);intn,m;inti,j;inn;for(i=0;in;i++){inFreePartition[i];}inm;for(j=0;jm;j++){inProcessName[j];}
本文标题:操作系统-实验四动态分区分配算法源代码最新最全
链接地址:https://www.777doc.com/doc-6448097 .html