动态分区存储管理Word文档格式.docx
- 文档编号:13666963
- 上传时间:2022-10-12
- 格式:DOCX
- 页数:13
- 大小:208.61KB
动态分区存储管理Word文档格式.docx
《动态分区存储管理Word文档格式.docx》由会员分享,可在线阅读,更多相关《动态分区存储管理Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
4、分区的回收:
用户输入作业号,实现分区回收,同时,分区的合并要体现出来。
(注意:
不存在的作业号要给出错误提示!
)
5、分区的显示:
任何时刻,可以查看当前内存的情况(起始地址是什么,大小多大的分区时空闲的,或者占用的,能够显示出来)
6、要求考虑:
(1)内存空间不足的情况,要有相应的显示;
(2)作业不能同名,但是删除后可以再用这个名字;
(3)作业空间回收是输入作业名,回收相应的空间,如果这个作业名不存在,也要有相应的提示。
三、实验代码
#include<
stdio.h>
stdlib.h>
#defineSIZE800//内存初始大小
#defineMINSIZE5//碎片最小值
enumSTATE{Free,Busy};
structsubAreaNode{
intaddr;
//起始地址
intsize;
//分区大小
inttaskId;
//作业号
STATEstate;
//分区状态
subAreaNode*pre;
//分区前向指针
subAreaNode*nxt;
//分区后向指针
}subHead;
//初始化空闲分区链
voidintSubArea()
{
//分配初始分区内存
subAreaNode*fir=(subAreaNode*)malloc(sizeof(subAreaNode));
//给首个分区赋值
fir->
addr=0;
size=SIZE;
state=Free;
taskId=-1;
pre=&
subHead;
nxt=NULL;
//初始化分区头部信息
subHead.pre=NULL;
subHead.nxt=fir;
}
//首次适应算法
intfirstFit(inttaskId,intsize)
subAreaNode*p=subHead.nxt;
while(p!
=NULL)
{
if(p->
state==Free&
&
p->
size>
=size){
//找到要分配的空闲分区
size-size<
=MINSIZE){
//整块分配
state=Busy;
taskId=taskId;
}else{
//分配大小为size的区间
subAreaNode*node=(subAreaNode*)malloc(sizeof(subAreaNode));
node->
addr=p->
addr+size;
size=p->
size-size;
//修改分区链节点指针
pre=p;
nxt=p->
nxt;
nxt!
=NULL){
nxt->
pre=node;
}
nxt=node;
//分配空闲区间
size=size;
printf("
内存分配成功!
\n"
);
return1;
p=p->
找不到合适的内存分区,分配失败...\n"
return0;
//最佳适应算法
intbestFit(inttaskId,intsize)
subAreaNode*tar=NULL;
inttarSize=SIZE+1;
//寻找最佳空闲区间
=size&
size<
tarSize){
tar=p;
tarSize=p->
size;
if(tar!
if(tar->
tar->
addr=tar->
size=tar->
pre=tar;
nxt=tar->
//找不到合适的空闲分区
//回收内存
intfreeSubArea(inttaskId)
intflag=0;
subAreaNode*p=subHead.nxt,*pp;
state==Busy&
taskId==taskId){
flag=1;
if((p->
pre!
=&
subHead&
pre->
state==Free)
&
(p->
=NULL&
state==Free)){
//情况1:
合并上下两个分区
//先合并上区间
pp=p;
pre;
size+=pp->
nxt=pp->
pp->
free(pp);
//后合并下区间
pp=p->
if(pp->
}elseif((p->
pre==&
subHead||p->
state==Busy)
//情况2:
只合并下面的分区
state==Free)
nxt==NULL||p->
state==Busy)){
//情况3:
只合并上面的分区
//情况4:
上下分区均不用合并
if(flag==1){
//回收成功
内存分区回收成功...\n"
//找不到目标作业,回收失败
找不到目标作业,内存分区回收失败...\n"
//显示空闲分区链情况
voidshowSubArea()
当前的内存分配情况如下:
\n"
起始地址\t空间大小\t工作状态\t作业号\n"
%dk\t"
p->
addr);
size);
%s\t"
state==Free?
"
Free"
:
Busy"
taskId>
0){
%d"
taskId);
intmain()
intoption,ope,taskId,size;
//初始化空闲分区链
intSubArea();
//选择分配算法
while
(1)
请选择要模拟的分配算法:
0表示首次适应算法,1表示最佳适应算法\n"
scanf("
%d"
&
option);
if(option==0){
你选择了首次适应算法,下面进行算法的模拟\n"
break;
}elseif(option==1){
你选择了最佳适应算法,下面进行算法的模拟\n"
错误:
请输入0/1\n\n"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 动态 分区 存储 管理