操作系统动态分区分配算法课程设计java版资料.docx
- 文档编号:12121380
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:18
- 大小:45.97KB
操作系统动态分区分配算法课程设计java版资料.docx
《操作系统动态分区分配算法课程设计java版资料.docx》由会员分享,可在线阅读,更多相关《操作系统动态分区分配算法课程设计java版资料.docx(18页珍藏版)》请在冰豆网上搜索。
操作系统动态分区分配算法课程设计java版资料
湖南文理学院实验报告
课程名称操作系统课程设计
实验名称存储管理——动态分区分配算法的模拟
成绩
学生姓名曹乐专业计算机
班级、学号1310118
同组者姓名
实验日期12.21
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-最坏适应算法,5-快速适应算法。
4、需求分析
(1)输入的形式和输入值的范围
算法选择
空闲分区个数
空闲分区大小(KB)
作业个数
作业名称
作业大小(KB)
(2)输出的形式
最终内存空闲分区的分配情况
5、调试分析
通过这次课程设计我练习了用JAVA写系统软件,对OS中可变分区存储管理有了更深刻的了解。
在写程序的时候也遇到了一些困难。
比如在设计数据结构时特别犹豫,总想找一个很合适的。
但是,后来才知道,关键要多尝试,而空想是没有用的。
最后我证实了自己的设计的合理性。
还有为了使程序更健壮,我尝试着将程序中的输入部分全部改为字符(串)。
很遗憾的是因为时间问题,没有把这个模拟程序写成动画形式,还可以加几句代码后实现动态的增加作业。
通过本次实验,深入理解了动态分区分配算法的思想,培养了自己的动手能力,通过实践加深了记忆。
6、测试结果
(1)首次适应算法
(2)循环首次适应算法
(3)最佳适应算法
(4)最坏适应算法:
(5)快速适应算法:
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-最坏适应算法
//5-快速适应算法
privatestaticintoption=0;
//for循环中使用
privatestaticinti;
privatestaticintj;
privatestaticintk;
privatestaticintd;
privatestaticScannerstdin;
publicstaticvoidmain(String[]args)throwsFileNotFoundException{
//输入数据
input();
//选择算法
//1-首次适应算法
//2-循环首次适应算法
//4-最坏适应算法
//5-快速适应算法
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;
case5:
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-最坏适应算法
//5-快速适应算法
option=stdin.nextInt();
//请输入空闲分区个数
n=stdin.nextInt();
//请依次输入空闲分区大小(KB)
for(i=0;i FreePartition[i]=stdin.nextInt(); } //请输入作业个数 m=stdin.nextInt(); //请依次输入作业名称 for(i=0;i ProcessName[i]=stdin.next().charAt(0); ch[i]=ProcessName[i]; } //请依次输入作业大小(KB) for(i=0;i { ProcessNeed[i]=stdin.nextInt(); state[i]=false; } for(i=0;i { System.out.print("|"+FreePartition[i]); } System.out.print("|\n"); System.out.println("作业信息如下: "); for(i=0;i { System.out.print(ProcessName[i]+"\t"); } System.out.print("\n"); for(i=0;i { System.out.print(ProcessNeed[i]+"\t"); } System.out.println("\n"); } //1——首次适应算法 publicstaticvoidFirst() { for(i=0;i { for(j=0;j { //找到第一个合适的空闲分区 if((ProcessNeed[i]<=FreePartition[j])&&(! state[i])) { for(k=0;k<3;k++)//记录作业分配 { if(order[j][k]==0)//为空 { order[j][k]=ProcessName[i]; break; } else continue; } FreePartition[j]=FreePartition[j]-ProcessNeed[i]; state[i]=true; } } } } //2——循环首次适应算法 publicstaticvoidCycleFirst() { i=0; j=0; while((i { if((ProcessNeed[i]<=FreePartition[j])&&(! state[i])) { for(k=0;k<3;k++)//记录作业分配 { if(order[j][k]==0) { order[j][k]=ProcessName[i]; break; } else continue; } FreePartition[j]=FreePartition[j]-ProcessNeed[i]; state[i]=true; i++; } else j++; } } //3——最佳适应算法 publicstaticvoidBest() { for(i=0;i { temp=FreePartition[0]; k=0; //找到第一个合适的空闲分区 while(ProcessNeed[i]>temp) { k++; temp=FreePartition[k]; } for(j=0;j { //按最佳适应算法找到符合的空闲区 if((ProcessNeed[i]<=FreePartition[j])&&(temp>FreePartition[j])&&(! state[i])) { temp=FreePartition[j]; k=j; } else continue; } for(d=0;d<3;d++)//记录作业分配 { if(order[k][d]==0) { order[k][d]=ProcessName[i]; break; } else continue; } FreePartition[k]=FreePartition[k]-ProcessNeed[i]; state[i]=true; } } //4——最坏适应算法 publicstaticvoidCycleFirst() { i=0; j=0; while((i { if((ProcessNeed[i]<=FreePartition[j])&&(! state[i])) { for(k=0;k<3;k++)//记录作业分配 { if(order[j][k]==0) { order[j][k]=ProcessName[i]; break; } else continue; } FreePartition[j]=FreePartition[j]-ProcessNeed[i]; state[i]=true; i++; } else j++; } } publicstaticvoidCycleFirst() { i=0; j=0; while((i { if((ProcessNeed[i]<=FreePartition[j])&&(! state[i])) { for(k=0;k<3;k++)//记录作业分配 { if(order[j][k]==0) { order[j][k]=ProcessName[i]; break; } else continue; } FreePartition[j]=FreePartition[j]-ProcessNeed[i]; state[i]=true; i++; } else j++; } } //5——快速适应算法 publicstaticvoidWorst() { for(i=0;i { temp=FreePartition[0]; k=0; for(j=0;j { //按最坏适应算法找到合适的空闲分区 if((ProcessNeed[i]<=FreePartition[j])&&(temp state[i])) { temp=FreePartition[j]; k=j; } else continue; } for(d=0;d<3;d++)//记录作业分配 { if(order[k][d]==0) { order[k][d]=ProcessName[i]; break; } else continue; } FreePartition[k]=FreePartition[k]-ProcessNeed[i]; state[i]=true; } } //结果输出 publicstaticvoidoutput() { for(i=0;i { System.out.print("|"); for(j=0;j<3;j++) { if(order[i][j]==0) System.out.print(""); else System.out.print(order[i][j]); } } System.out.print("|\n"); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 动态 分区 分配 算法 课程设计 java 资料