《2022年操作系统动态分区分配算法java版》由会员分享,可在线阅读,更多相关《2022年操作系统动态分区分配算法java版(11页珍藏版)》请在金锄头文库上搜索。
1、实验四动态分区分配算法1、 实验目的通过这次实验,加深对动态分区分配算法的理解,进一步掌握首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的实现方法。2、 试验内容问题描述:设计程序模拟四种动态分区分配算法:首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的工作过程。假设内存中空闲分区个数为n,空闲分区大小分别为P1, ,Pn,在动态分区分配过程中需要分配的进程个数为m (m n ) ,它们需要的分区大小分别为 S1, ,Sm, 分别利用四种动态分区分配算法将m 个进程放入 n 个空闲分区,给出进程在空闲分区中的分配情况。3、 程序要求 :1)利用首次适应算法、 循环首次适
2、应算法、 最佳适应算法和最坏适应算法四种动态分区分配算法模拟分区分配过程。2)模拟四种算法的分区分配过程, 给出每种算法进程在空闲分区中的分配情况。3)输入:空闲分区个数 n,空闲分区大小 P1, ,Pn,进程个数 m,进程需要的分区大小S1, ,Sm,算法选择 1-首次适应算法, 2-循环首次适应算法, 3-最佳适应算法, 4-最坏适应算法4、 需求分析名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 11 页 - - - - - - - - - (1) 输入的形式和输入
3、值的范围算法选择空闲分区个数空闲分区大小 (KB) 作业个数作业名称作业大小 (KB) (2) 输出的形式最终内存空闲分区的分配情况5、 调试分析通过这次课程设计我练习了用JAVA 写系统软件,对 OS 中可变分区存储管理有了更深刻的了解。 在写程序的时候也遇到了一些困难。比如在设计数据结构时特别犹豫,总想找一个很合适的。但是,后来才知道,关键要多尝试,而空想是没有用的。最后我证实了自己的设计的合理性。还有为了使程序更健壮, 我尝试着将程序中的输入部分全部改为字符(串)。很遗憾的是因为时间问题,没有把这个模拟程序写成动画形式, 还可以加几句代码后实现动态的增加作业。通过本次实验, 深入理解了动
4、态分区分配算法的思想,培养了自己的动手能力,通过实践加深了记忆。6、 测试结果(1) 首次适应算法名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 11 页 - - - - - - - - - (2) 循环首次适应算法(3) 最佳适应算法名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 11 页 - - - - - - - - - (4) 最坏适应算法
5、: 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; / 空闲分区大小pri
6、vate static int FreePartition = new intMaxNum; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 11 页 - - - - - - - - - / 作业名称private static char ProcessName = new charMaxNum; / 作业需求空间大小private static int ProcessNeed = new intMaxNum; / 作业分配标志private static boolean
7、 state = new booleanMaxNum; / 空闲分区个数private static int PartitionNum; / 作业个数private static int ProcessNum; /? private static char order = new charMaxNumMaxNum; /? private static char ch = new charMaxNum; / 临时变量private static int temp; / 算法选择/1-首次适应算法/2-循环首次适应算法/3-最佳适应算法/4-最坏适应算法private static int opt
8、ion=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.pri
9、ntln(对作业用首次适应算法进行空间分配:); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 11 页 - - - - - - - - - First(); output(); break; case 2: System.out.println(对作业用循环首次适应算法进行空间分配:); CycleFirst(); output(); break; case 3: System.out.println(对作业用最佳适应算法进行空间分配:); Best(); outpu
10、t(); 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 Sc
11、anner(System.in); / 算法选择/1- 首次适应算法/2- 循环首次适应算法/3- 最佳适应算法/4- 最坏适应算法option = stdin.nextInt(); / 请输入空闲分区个数n = stdin.nextInt(); / 请依次输入空闲分区大小(KB) for(i=0 ; in ; i+) FreePartitioni = stdin.nextInt(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 11 页 - - - - - - -
12、- - / 请输入作业个数m = stdin.nextInt(); / 请依次输入作业名称for(i=0 ; im ; i+) ProcessNamei = stdin.next().charAt(0); chi = ProcessNamei; / 请依次输入作业大小(KB) for(i=0;im;i+) ProcessNeedi = stdin.nextInt(); statei=false; for(i=0;in;i+) System.out.print(|+FreePartitioni); System.out.print(|n); System.out.println(作业信息如下 :
13、); for(i=0;im;i+) System.out.print(ProcessNamei+t); System.out.print(n); for(i=0;im;i+) System.out.print(ProcessNeedi+t); System.out.println(n); /1 首次适应算法public static void First() for(i=0;im;i+) for(j=0;jn;j+) / 找到第一个合适的空闲分区if(ProcessNeedi = FreePartitionj) & (!statei) for(k=0;k3;k+) /记录作业分配 名师资料总结
14、 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 11 页 - - - - - - - - - if(orderjk = 0) /为空 orderjk=ProcessNamei; break; else continue; FreePartitionj=FreePartitionj-ProcessNeedi; statei=true; /2 循环首次适应算法public static void CycleFirst() i=0; j=0; while(in) & (jm) if(Pro
15、cessNeedi = FreePartitionj) & (!statei) for(k=0;k3;k+) /记录作业分配 if(orderjk=0) orderjk=ProcessNamei; break; else continue; FreePartitionj=FreePartitionj-ProcessNeedi; statei=true; i+; else j+; /3 最佳适应算法名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 11 页 - - - - -
16、 - - - - public static void Best() for(i=0;i temp) k+; temp=FreePartitionk; for(j=0;jn;j+) / 按最佳适应算法找到符合的空闲区if(ProcessNeedi FreePartitionj) & (!statei) temp=FreePartitionj; k=j; else continue; for(d=0;d3;d+) /记录作业分配 if(orderkd=0) orderkd=ProcessNamei; break; else continue; FreePartitionk=FreePartiti
17、onk-ProcessNeedi; statei=true; /4 最坏适应算法public static void Worst() for(i=0;im;i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 11 页 - - - - - - - - - temp=FreePartition0; k=0; for(j=0;jn;j+) / 按最坏适应算法找到合适的空闲分区if(ProcessNeedi = FreePartitionj) & (temp FreePart
18、itionj) & (!statei) temp=FreePartitionj; k=j; else continue; for(d=0;d3;d+) /记录作业分配 if(orderkd=0) orderkd=ProcessNamei; break; else continue; FreePartitionk=FreePartitionk-ProcessNeedi; statei=true; / 结果输出public static void output() for(i=0;in;i+) System.out.print(|); for(j=0;j3;j+) if(orderij=0) System.out.print( ); else System.out.print(orderij); System.out.print(|n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 11 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 11 页 - - - - - - - - -