计算机操作系统课程设计报告《存储管理动态分区分配算法的模拟》Word下载.docx
- 文档编号:17386925
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:24
- 大小:81.34KB
计算机操作系统课程设计报告《存储管理动态分区分配算法的模拟》Word下载.docx
《计算机操作系统课程设计报告《存储管理动态分区分配算法的模拟》Word下载.docx》由会员分享,可在线阅读,更多相关《计算机操作系统课程设计报告《存储管理动态分区分配算法的模拟》Word下载.docx(24页珍藏版)》请在冰豆网上搜索。
1)首先由系统生成当前的内存状态,要求未分配的分区数量不少于3个,
且空间大小随机,然后随机生成一个数,表示等待分配进程的大小。
2)然后显示上述算法由用户选择,结果显示分配后的状态。
2.3课程设计任务安排
日期
A
B
星期三下午
研究算法
星期四早上
设计算法
参与设计
星期四下午
设计算法,编写界面
星期五早上
编写算法
完成部分文档
星期五下午
程序测试并优化
程序测试,完成文档
3.算法及数据结构
3.1算法的总体思想(流程)
设计程序模拟四种动态分区分配算法:
首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的工作过程。
假设内存中空闲分区个数为n,空闲分区大小分别为P1,…,Pn,在动态分区分配过程中需要分配的进程个数为m(m≤n),它们需要的分区大小分别为S1,…,Sm,分别利用四种动态分区分配算法将m个进程放入n个空闲分区,进程在空闲分区中的分配情况。
3.2首次适应算法
3.2.1功能
在首次适应算法中,是从已建立好的数组中顺序查找,直至找到第一个大小能满足要求的空闲分区为止,然后再按照作业大小,从该分区中划出一块内存空间分配给请求者,余下的空间令开辟一块新的地址,大小为原来的大小减去作业大小,若查找结束都不能找到一个满足要求的分区,则此次内存分配失败。
3.2.2数据结构(包括变量的定义,要注释!
)
privatestaticintMaxNum=100;
//空闲分区个数
privatestaticintn;
//作业个数
privatestaticintm;
//空闲分区大小
privatestaticintFreePartition[]=newint[MaxNum];
//作业名称
privatestaticcharProcessName[]=newchar[MaxNum];
//作业需求空间大小
privatestaticintProcessNeed[]=newint[MaxNum];
//作业分配标志
privatestaticbooleanstate[]=newboolean[MaxNum];
privatestaticintPartitionNum;
privatestaticintProcessNum;
//记录作业分配
privatestaticcharorder[][]=newchar[MaxNum][MaxNum];
3.2.3算法(流程图表示,或伪C表示)
publicstaticvoidFirst()
{
for(i=0;
i<
m;
i++)
{
for(j=0;
j<
n;
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;
}
}
}
}
3.3循环首次适应算法
3.3.1功能
该算法是由首次适应算法演变而成,在为进程分配内存空间时,不再是每次都从第一个空间开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找,直至找到第一个能满足要求的空闲分区,从中划出一块与请求大小相等的内存空间分配给作业,为实现本算法,设置一个全局变量f,来控制循环查找,当f%N==0时,f=0;
若查找结束都不能找到一个满足要求的分区,则此次内存分配失败。
3.3.2数据结构
3.3.3算法
publicstaticvoidCycleFirst()
i=0;
j=0;
while((i<
n)&
(j<
m))
if((ProcessNeed[i]<
state[i]))
{
for(k=0;
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.4最佳适应算法
3.4.1功能
最佳适应分配算法是每次为作业分配内存时,扫描整个数组,总是把能满足条件的,又是最小的空闲分区分配给作业,避免“大材小用”。
该算法要求将所有的空闲分区按其容量以从小到大的顺序形成一空闲分区链。
这样,第一次找到的能满足要求的空闲区必然是最佳的。
3.4.2数据结构
3.4.3算法
publicstaticvoidBest()
temp=FreePartition[0];
k=0;
//找到第一个合适的空闲分区
while(ProcessNeed[i]>
temp)
k++;
temp=FreePartition[k];
//按最佳适应算法找到符合的空闲区
(temp>
FreePartition[j])&
temp=FreePartition[j];
k=j;
else
continue;
for(d=0;
d<
d++)//记录作业分配
if(order[k][d]==0)
order[k][d]=ProcessName[i];
break;
FreePartition[k]=FreePartition[k]-ProcessNeed[i];
state[i]=true;
3.5最坏适应算法
3.5.1功能
最坏适应分配算法选择空闲分区的策略正好与最佳适应算法相反。
是每次为作业分配内存时,扫描整个数组,总是把能满足条件的,又是最大的空闲分区分配给作业。
对中小作业
有利,同时查找效率很高。
3.5.2数据结构
3.5.3算法
publicstaticvoidWorst()
//按最坏适应算法找到合适的空闲分区
(temp<
4.程序设计与实现
4.1程序流程图
4.2程序代码(要注释)
D_ProcessPartition.java
importjava.io.BufferedInputStream;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.util.Random;
importjava.util.Scanner;
publicclassD_ProcessPartition{
privatestaticintMaxNum=100;
//?
?
privatestaticcharch[]=newchar[MaxNum];
//临时变量
privatestaticinttemp;
//算法选择
//1-首次适应算法
//2-循环首次适应算法
//3-最佳适应算法
//4-最坏适应算法
privatestaticintoption=0;
//for循环中使用
privatestaticinti;
privatestaticintj;
privatestaticintk;
privatestaticintd;
privatestaticScannerstdin;
publicStringD_ProcessPartition(intoption,intn)throwsFileNotFoundException{
Stringxinxi="
"
;
Stringzuoyexinxi="
StringsuanfaString="
//输入数据
xinxi=input(n);
//选择算法
//1-首次适应算法
//2-循环首次适应算法
//3-最佳适应算法
//4-最坏适应算法
switch(option)
case1:
suanfaString="
首次适应算法"
First(n);
zuoyexinxi="
对作业用首次适应算法进行空间分配:
\n"
+output(n);
break;
case2:
循环首次适应算法"
CycleFirst(n);
对作业用循环首次适应算法进行空间分配:
case3:
最佳适应算法"
Best(n);
对作业用最佳适应算法进行空间分配:
case4:
最坏适应算法"
Worst(n);
对作业用最坏适应算法进行空间分配:
//返回数据在JTA上显示出来
Stringall="
你选择了"
+suanfaString+"
\n\n"
+xinxi+"
+zuoyexinxi;
returnall;
//输入数据
publicstaticStringinput(intn)throwsFileNotFoundException
//算法选择
Stringresult="
//请依次输入空闲分区大小(KB)
for(i=0;
i<
n;
i++){
FreePartition[i]=RandomTest();
result=result+FreePartition[i]+"
"
result="
随机的"
+n+"
个空闲分区大小为:
+result+"
+"
随机的作业大小为:
//请输入作业个数,按题目要求默认为1可设置
m=1;
//固定的作业名称
ProcessName[i]="
Process"
.charAt(0);
ch[i]=ProcessName[i];
//按题目要求随机作业大小(KB)
ProcessNeed[i]=RandomTest();
state[i]=false;
result=result+ProcessNeed[i];
returnresult;
publicstaticintRandomTest(){
intmin=1;
Randomrandom=newRandom();
ints=random.nextInt(MaxNum)%(MaxNum-min+1)+min;
System.out.println(s);
returns;
//1——首次适应算法
publicstaticvoidFirst(intn)
{
//2——循环首次适应算法
publicstaticvoidCycleFirst(intn)
}}
//3——最佳适应算法
publicstaticvoidBest(intn)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 存储管理动态分区分配算法的模拟 计算机 操作系统 课程设计 报告 存储 管理 动态 分区 分配 算法 模拟