logo资料库

操作系统-动态分区分配算法-JAVA版.pdf

第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
资料共11页,剩余部分请下载后查看
实验四 动态分区分配算法 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) package experiment; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.Scanner; public class D_ProcessPartition { private static int MaxNum = 100; //空闲分区个数 private static int n; //作业个数 private static int m; //空闲分区大小 private static int FreePartition[] = new int[MaxNum];
//作业名称 private static char ProcessName[] = new char[MaxNum]; //作业需求空间大小 private static int ProcessNeed[] = new int[MaxNum]; //作业分配标志 private static boolean state[] = new boolean[MaxNum]; //空闲分区个数 private static int PartitionNum; //作业个数 private static int ProcessNum; //????? private static char order[][] = new char[MaxNum][MaxNum]; //????? private static char ch[] = new char[MaxNum]; //临时变量 private static int temp; //算法选择 //1-首次适应算法 //2-循环首次适应算法 //3-最佳适应算法 //4-最坏适应算法 private static int option=0; //for循环中使用 private static int i; private static int j; private static int k; private static int d; private static Scanner stdin; public static void main(String[] args) throws FileNotFoundException { //输入数据 input(); //选择算法 //1-首次适应算法 //2-循环首次适应算法 //3-最佳适应算法 //4-最坏适应算法 switch(option) { case 1: System.out.println("对作业用首次适应算法进行空间分配:");
First(); output(); break; case 2: System.out.println("对作业用循环首次适应算法进行空间分配:"); CycleFirst(); output(); break; case 3: System.out.println("对作业用最佳适应算法进行空间分配:"); Best(); output(); break; case 4: System.out.println("对作业用最坏适应算法进行空间分配:"); Worst(); output(); break; default: System.out.println("********error!*****"); } } //输入数据 public static void input() throws FileNotFoundException { BufferedInputStream in = new BufferedInputStream(new FileInputStream( "./file/04")); System.setIn(in); stdin = new Scanner(System.in); //算法选择 //1-首次适应算法 //2-循环首次适应算法 //3-最佳适应算法 //4-最坏适应算法 option = stdin.nextInt(); //请输入空闲分区个数 n = stdin.nextInt(); //请依次输入空闲分区大小(KB) for(i=0 ; i
} //请输入作业个数 m = stdin.nextInt(); //请依次输入作业名称 for(i=0 ; i
if(order[j][k] == 0) { //为空 order[j][k]=ProcessName[i]; break; } else continue; } FreePartition[j]=FreePartition[j]-ProcessNeed[i]; state[i]=true; } } } } //2——循环首次适应算法 public static void CycleFirst() { i=0; j=0; while((i
分享到:
收藏