您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 操作系统-动态分区分配算法-java版
实验四动态分区分配算法1、实验目的通过这次实验,加深对动态分区分配算法的理解,进一步掌握首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的实现方法。2、试验内容问题描述:设计程序模拟四种动态分区分配算法:首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的工作过程。假设内存中空闲分区个数为n,空闲分区大小分别为P1,…,Pn,在动态分区分配过程中需要分配的进程个数为m(m≤n),它们需要的分区大小分别为S1,…,Sm,分别利用四种动态分区分配算法将m个进程放入n个空闲分区,给出进程在空闲分区中的分配情况。3、程序要求:1)利用首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法四种动态分区分配算法模拟分区分配过程。2)模拟四种算法的分区分配过程,给出每种算法进程在空闲分区中的分配情况。3)输入:空闲分区个数n,空闲分区大小P1,…,Pn,进程个数m,进程需要的分区大小S1,…,Sm,算法选择1-首次适应算法,2-循环首次适应算法,3-最佳适应算法,4-最坏适应算法4、需求分析(1)输入的形式和输入值的范围算法选择空闲分区个数空闲分区大小(KB)作业个数作业名称作业大小(KB)(2)输出的形式最终内存空闲分区的分配情况5、调试分析通过这次课程设计我练习了用JAVA写系统软件,对OS中可变分区存储管理有了更深刻的了解。在写程序的时候也遇到了一些困难。比如在设计数据结构时特别犹豫,总想找一个很合适的。但是,后来才知道,关键要多尝试,而空想是没有用的。最后我证实了自己的设计的合理性。还有为了使程序更健壮,我尝试着将程序中的输入部分全部改为字符(串)。很遗憾的是因为时间问题,没有把这个模拟程序写成动画形式,还可以加几句代码后实现动态的增加作业。通过本次实验,深入理解了动态分区分配算法的思想,培养了自己的动手能力,通过实践加深了记忆。6、测试结果(1)首次适应算法(2)循环首次适应算法(3)最佳适应算法(4)最坏适应算法:7、附录(java)packageexperiment;importjava.io.BufferedInputStream;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.util.Scanner;publicclassD_ProcessPartition{privatestaticintMaxNum=100;//空闲分区个数privatestaticintn;//作业个数privatestaticintm;//空闲分区大小privatestaticintFreePartition[]=newint[MaxNum];//作业名称privatestaticcharProcessName[]=newchar[MaxNum];//作业需求空间大小privatestaticintProcessNeed[]=newint[MaxNum];//作业分配标志privatestaticbooleanstate[]=newboolean[MaxNum];//空闲分区个数privatestaticintPartitionNum;//作业个数privatestaticintProcessNum;//?????privatestaticcharorder[][]=newchar[MaxNum][MaxNum];//?????privatestaticcharch[]=newchar[MaxNum];//临时变量privatestaticinttemp;//算法选择//1-首次适应算法//2-循环首次适应算法//3-最佳适应算法//4-最坏适应算法privatestaticintoption=0;//for循环中使用privatestaticinti;privatestaticintj;privatestaticintk;privatestaticintd;privatestaticScannerstdin;publicstaticvoidmain(String[]args)throwsFileNotFoundException{//输入数据input();//选择算法//1-首次适应算法//2-循环首次适应算法//3-最佳适应算法//4-最坏适应算法switch(option){case1:System.out.println(对作业用首次适应算法进行空间分配:);First();output();break;case2:System.out.println(对作业用循环首次适应算法进行空间分配:);CycleFirst();output();break;case3:System.out.println(对作业用最佳适应算法进行空间分配:);Best();output();break;case4:System.out.println(对作业用最坏适应算法进行空间分配:);Worst();output();break;default:System.out.println(********error!*****);}}//输入数据publicstaticvoidinput()throwsFileNotFoundException{BufferedInputStreamin=newBufferedInputStream(newFileInputStream(./file/04));System.setIn(in);stdin=newScanner(System.in);//算法选择//1-首次适应算法//2-循环首次适应算法//3-最佳适应算法//4-最坏适应算法option=stdin.nextInt();//请输入空闲分区个数n=stdin.nextInt();//请依次输入空闲分区大小(KB)for(i=0;in;i++){FreePartition[i]=stdin.nextInt();}//请输入作业个数m=stdin.nextInt();//请依次输入作业名称for(i=0;im;i++){ProcessName[i]=stdin.next().charAt(0);ch[i]=ProcessName[i];}//请依次输入作业大小(KB)for(i=0;im;i++){ProcessNeed[i]=stdin.nextInt();state[i]=false;}for(i=0;in;i++){System.out.print(|+FreePartition[i]);}System.out.print(|\n);System.out.println(作业信息如下:);for(i=0;im;i++){System.out.print(ProcessName[i]+\t);}System.out.print(\n);for(i=0;im;i++){System.out.print(ProcessNeed[i]+\t);}System.out.println(\n);}//1——首次适应算法publicstaticvoidFirst(){for(i=0;im;i++){for(j=0;jn;j++){//找到第一个合适的空闲分区if((ProcessNeed[i]=FreePartition[j])&&(!state[i])){for(k=0;k3;k++)//记录作业分配{if(order[j][k]==0)//为空{order[j][k]=ProcessName[i];break;}elsecontinue;}FreePartition[j]=FreePartition[j]-ProcessNeed[i];state[i]=true;}}}}//2——循环首次适应算法publicstaticvoidCycleFirst(){i=0;j=0;while((in)&&(jm)){if((ProcessNeed[i]=FreePartition[j])&&(!state[i])){for(k=0;k3;k++)//记录作业分配{if(order[j][k]==0){order[j][k]=ProcessName[i];break;}elsecontinue;}FreePartition[j]=FreePartition[j]-ProcessNeed[i];state[i]=true;i++;}elsej++;}}//3——最佳适应算法publicstaticvoidBest(){for(i=0;im;i++){temp=FreePartition[0];k=0;//找到第一个合适的空闲分区while(ProcessNeed[i]temp){k++;temp=FreePartition[k];}for(j=0;jn;j++){//按最佳适应算法找到符合的空闲区if((ProcessNeed[i]=FreePartition[j])&&(tempFreePartition[j])&&(!state[i])){temp=FreePartition[j];k=j;}elsecontinue;}for(d=0;d3;d++)//记录作业分配{if(order[k][d]==0){order[k][d]=ProcessName[i];break;}elsecontinue;}FreePartition[k]=FreePartition[k]-ProcessNeed[i];state[i]=true;}}//4——最坏适应算法publicstaticvoidWorst(){for(i=0;im;i++){temp=FreePartition[0];k=0;for(j=0;jn;j++){//按最坏适应算法找到合适的空闲分区if((ProcessNeed[i]=FreePartition[j])&&(tempFreePartition[j])&&(!state[i])){temp=FreePartition[j];k=j;}elsecontinue;}for(d=0;d3;d++)//记录作业分配{if(order[k][d]==0){order[k][d]=ProcessName[i];break;}elsecontinue;}FreePartition[k]=FreePartition[k]-ProcessNeed[i];state[i]=true;}}//结果输出publicstaticvoidoutput(){for(i=0;in;i++){System.out.print(|);for(j=0;j3;j++){if(order[i][j]==0)System.out.print();elseSystem.out.print(order[i][j]);}}System.out.print(|\n);}}
本文标题:操作系统-动态分区分配算法-java版
链接地址:https://www.777doc.com/doc-4060027 .html