实验4可变分区存储管理文档格式.docx
- 文档编号:19343081
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:19
- 大小:349.43KB
实验4可变分区存储管理文档格式.docx
《实验4可变分区存储管理文档格式.docx》由会员分享,可在线阅读,更多相关《实验4可变分区存储管理文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
长度
标志
120k
20k
作业1
200k
50k
空闲
这样我们可以定义一个如下的结构表示内存分区信息。
typedefstructnode
{
intstart;
//起始地址
intlength;
//长度
chartag[20];
//标志
}job;
可变分区的三种算法就就是为作业分配主存空间的方法。
●首次适应算法:
在空闲区间中查询满足作业需要的空间,并将作业装入第一个满足条件的空间中去。
●最佳适应算法:
在空闲区间中查询满足作业需要的空间,并将作业装入满足条件的空闲空间中最小的一个空间中去。
●最坏适应算法:
在空闲区间中查询满足作业需要的空间,并将作业装入满足条件的空闲空间中最大的一个空间中去。
从三种算法的说明可以瞧出,分配空间的过程主要可以分两步:
●查询所有满足作业需求的空间块。
●按照指定的算法将作业装入空间块中。
在操作的最初主存空间实际就就是一个大的空闲区,不涉及到如何分配的问题。
为直接模拟运行一段时间后主存中出现了多个空闲块的状态,题目要求从一个文件读入空闲区表。
在这里我们可以设计一个空闲区表文件的结构为如表2所示:
表2空闲区表
…
这样也可以方便地将空闲表一次读入程序中,而不必再一个个的输入。
主要变量及函数说明如表3所示。
表3变量与函数说明表
typedefstructnode
内存块结构
jobfrees
空闲区表
joboccupys
已分配区表
free_quantity
空闲区数量
occupy_quantity
已分配区数量
voidinitial()
初始化函数
intreadData()
从文件读入空闲表函数
voidsort()
排序空闲表
voidview()
显示分区信息
voidearliest()
最先适应分配算法
voidexcellent()
最优适应分配算法
voidworst()
最坏适应算法
mem、txt
空闲表文件
实验要求:
编写一段程序来模拟可变分区管理方法。
要求能通过文件形式定义空闲区表;
能随意输入作业及需要分配的空间;
能分别使用首次适应算法、最佳适应算法与最坏适应算法对输入的作业进行空间分配;
能显示系统空闲表与已分配空间表。
四、实验过程及结果分析
#include<
stdio、h>
stdlib、h>
string、h>
#definemax100
intstart;
intlength;
chartag[20];
jobfrees[max];
joboccupys[max];
intfree_quantity,occupy_quantity;
intSIZE;
voidinitial()//初始化函数
inti;
for(i=0;
i<
max;
i++)
{
frees[i]、start=-1;
frees[i]、length=0;
strcpy(frees[i]、tag,"
free"
);
occupys[i]、start=-1;
occupys[i]、length=0;
strcpy(occupys[i]、tag,"
"
}
free_quantity=0;
occupy_quantity=0;
}
voidwritedata()//把分区函数写入磁盘文件
FILE*fp;
charfname[20];
inti,j;
printf("
请输入初始空闲表文件名:
\n"
scanf("
%s"
&
fname);
现在进行初始化空闲分区!
请输入您要建立的空闲分区数:
%d"
SIZE);
SIZE;
j=i+1;
printf("
输入第%d个分区的起始地址:
j);
scanf("
frees[i]、start);
输入第%d个分区的长度:
frees[i]、length);
if((fp=fopen(fname,"
wb"
))==NULL)
错误,文件打不开,请检查文件名\n"
if(fwrite(&
frees[i],sizeof(structnode),1,fp)!
=1)
printf("
文件写入错误!
fclose(fp);
voidreaddata()//从文件读入分区表函数
请输入读入空闲表文件名:
//输入空闲表文件的文件名
rb"
exit(0);
else
for(inti=0;
{
fread(&
frees[i],sizeof(structnode),1,fp);
free_quantity++;
}
voidsort()//排序空闲表
for(inti=0;
free_quantity-1;
intt=i;
for(intj=i+1;
j<
free_quantity;
j++)
if(frees[j]、start<
=frees[t]、start)
t=j;
frees[free_quantity]、start=frees[i]、start;
frees[free_quantity]、length=frees[i]、length;
frees[i]、start=frees[t]、start;
frees[i]、length=frees[t]、length;
frees[t]、start=frees[free_quantity]、start;
frees[t]、length=frees[free_quantity]、length;
voidview()//显示分区信息
空闲分区表显示如下:
起始地址\t长度\t状态标志\n"
%6dk\t%10dk\t%s\t\n"
frees[i]、start,frees[i]、length,frees[i]、tag);
\n\n已分配分区表显示如下:
起始地址\t长度\t占用作业名\n"
for(intj=0;
occupy_quantity;
occupys[j]、start,occupys[j]、length,occupys[j]、tag);
getchar();
voidearliest()//首次适应算法
charjobname[20];
intjoblength,f=0;
请输入作业名:
jobname);
输入作业的长度:
joblength);
if(frees[i]、length>
=joblength)
f=1;
if(f==0)
\n当前没有能满足您申请长度的空闲内存,请稍候再试\n"
getchar();
{//找到了满足的空间
intt=0;
j=0;
while(t==0)
if(frees[j]、length>
=joblength)
{
t=1;
}
j++;
j--;
occupys[occupy_quantity]、start=frees[j]、start;
//分配满足条件的空间
strcpy(occupys[occupy_quantity]、tag,jobname);
occupys[occupy_quantity]、length=joblength;
occupy_quantity++;
if(frees[j]、length>
joblength)
frees[j]、start+=joblength;
frees[j]、length-=joblength;
else
for(i=j;
frees[i]、start=frees[i+1]、start;
frees[i]、length=frees[i+1]、length;
free_quantity--;
作业申请内存空间成功!
voidexcellent()//最佳适应法
printf("
else//找到了满足的空间
{
for(i=0;
if(frees[i]、length>
=joblength&
&
frees[i]、length<
frees[j]、length)
j=i;
occupys[occupy_quantity]、start=frees[j]、start;
//分配空闲空间
joblength)
}
inti,j;
frees[i]、length>
voidmain()
initial();
intn;
writedata();
system("
cls"
readdata();
for(;
;
)
sort();
************************************\n"
**可变分区存储管理系统**\n"
**1、显示空闲表与分配表**\n"
**2、首次适应算法(FF)**\n"
**3、最佳适应算法(BF)**\n"
**4、最坏适应算法(WF)**\n"
**0、退出系统**\n"
请输入您要选择的项目:
n);
for(;
if(n<
0||n>
4)
printf("
没有这个选项,请重新输入!
scanf("
else
break;
switch(n)
case0:
感谢您的使用!
再见!
exit(0);
case1:
view();
break;
case2:
earliest();
case3:
excellent();
case4:
worst();
system("
①建立文件以adc为名字的文件输入如图1所示
图1建立文件adc
②建立3个空闲分区起始地址与行实现如图2所示
图2建立起始地址
③显示空闲表与分配表实现如图3所示
图3显示空闲表与分配表
④执行首次算法后,建立的空闲表长度分别为3810,申请一个名为a长度为5的作业故首次适应算法从第二个空闲表首地址为3开始,运行实现如图4所示
图4首次适应算法
⑤最佳适应算法,执行首次算法后,建立的空闲表长度分别为3810,申请一个名为a长度为9的作业故首次适应算法从第二个空闲表首地址为11开始,运行实现如图5所示
图5最佳适应算法
⑥最坏适应算法,执行首次算法后,建立的空闲表长度分别为3810,申请一个名为a长度为3的作业故首次适应算法从第二个空闲表首地址为11开始,运行实现如图6所示
图6最坏适应算法
⑦生成文件abc如图7所示
图7生成a文件
五、成绩评定
优
良
中
及格
不及格
出勤
内容
格式
创新
效果
总评
指导教师:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 可变 分区 存储 管理