操作系统 动态分区分配算法 java版Word文件下载.docx
《操作系统 动态分区分配算法 java版Word文件下载.docx》由会员分享,可在线阅读,更多相关《操作系统 动态分区分配算法 java版Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。
适应算法四种动态分区分配算法模拟分区分配过程。
2)模拟四种算法的分区分配过程,给出每种算法进程在空闲分区
中的分配情况。
3)输入:
空闲分区个数n,空闲分区大小P,…,P,进程个数m,1n
进程需要的分区大小S,…,S,算法选择1-首次适应算法,2-循1m
环首次适应算法,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();
//选择算法
switch(option)
{
case1:
System.out.println("
对作业用首次适应算法进行空间分配:
"
);
First();
output();
break;
case2:
对作业用循环首次适应算法进行空间分配:
CycleFirst();
case3:
对作业用最佳适应算法进行空间分配:
Best();
case4:
对作业用最坏适应算法进行空间分配:
Worst();
default:
********error!
*****"
}
publicstaticvoidinput()throwsFileNotFoundException
BufferedInputStreamin=newBufferedInputStream(newFileInputStream(
./file/04"
));
System.setIn(in);
stdin=newScanner(System.in);
option=stdin.nextInt();
//请输入空闲分区个数
n=stdin.nextInt();
//请依次输入空闲分区大小(KB)
for(i=0;
i<
n;
i++){
FreePartition[i]=stdin.nextInt();
//请输入作业个数
m=stdin.nextInt();
//请依次输入作业名称
m;
ProcessName[i]=stdin.next().charAt(0);
ch[i]=ProcessName[i];
//请依次输入作业大小(KB)
for(i=0;
i<
m;
i++)
ProcessNeed[i]=stdin.nextInt();
state[i]=false;
n;
System.out.print("
|"
+FreePartition[i]);
|\n"
作业信息如下:
System.out.print(ProcessName[i]+"
\t"
\n"
System.out.print(ProcessNeed[i]+"
//1——首次适应算法
publicstaticvoidFirst()
for(j=0;
j<
j++)
//找到第一个合适的空闲分区
if((ProcessNeed[i]<
=FreePartition[j])&
&
(!
state[i]))
for(k=0;
k<
3;
k++)//记录作业分配
if(order[j][k]==0)//为空
order[j][k]=ProcessName[i];
else
continue;
FreePartition[j]=FreePartition[j]-ProcessNeed[i];
state[i]=true;
//2——循环首次适应算法
publicstaticvoidCycleFirst()
i=0;
j=0;
while((i<
n)&
(j<
m))
if(order[j][k]==0)
i++;
j++;
//3——最佳适应算法
publicstaticvoidBest()
temp=FreePartition[0];
k=0;
while(ProcessNeed[i]>
temp)
k++;
temp=FreePartition[k];
//按最佳适应算法找到符合的空闲区
(temp>
FreePartition[j])&
temp=FreePartition[j];
k=j;
}
for(d=0;
d<
d++)//记录作业分配
if(order[k][d]==0)
order[k][d]=ProcessName[i];
FreePartition[k]=FreePartition[k]-ProcessNeed[i];
//4——最