实验4主存储器空间分配实验Word格式.docx
- 文档编号:17287780
- 上传时间:2022-11-30
- 格式:DOCX
- 页数:18
- 大小:186.87KB
实验4主存储器空间分配实验Word格式.docx
《实验4主存储器空间分配实验Word格式.docx》由会员分享,可在线阅读,更多相关《实验4主存储器空间分配实验Word格式.docx(18页珍藏版)》请在冰豆网上搜索。
//长度
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>
iostream.h>
windows.h>
#defineFree0//空闲状态
#defineBusy1//已用状态
#defineOK1//完成
#defineERROR0//出错
#defineStatusint;
intn=0;
//判断是否要开创空间表
longMAX_length;
//最大内存空间
typedefstructFreeArea//定义一个空闲区说明表结构
intnumber;
//分区号
longsize;
//分区大小
longaddress;
//分区地址
intstate;
//状态
}ElemType;
//线性表的双向链表存储结构
typedefstructDuLNode
ElemTypedata;
structDuLNode*prior;
//前趋指针
structDuLNode*next;
//后继指针
}DuLNode,*DuLinkList;
DuLinkListfirst;
//头结点
DuLinkListlast;
//尾结点
Statusallocation(int);
//内存分配
Statusfree(int);
//内存回收
StatusFirstFit(int,int);
//首次适应算法
StatusBestFit(int,int);
//最佳适应算法
voidshow();
//查看分配
StatusInitList();
//开创空间表
StatusInitList()//开创带头结点的内存空间链表
first=(DuLinkList)malloc(sizeof(DuLNode));
last=(DuLinkList)malloc(sizeof(DuLNode));
first->
prior=NULL;
next=last;
last->
prior=first;
next=NULL;
data.address=0;
data.size=MAX_length;
data.number=0;
data.state=Free;
returnOK;
}
//分配主存
Statusallocation(intch)
intnumber,request;
printf("
请输入作业(分区号):
"
);
scanf("
%d"
&
number);
请输入需要分配的主存大小(单位:
KB):
request);
if(request<
0||request==0)
{
printf("
分配大小不合适,请重试!
\n"
returnERROR;
}
if(ch==2)//选择最佳适应算法
if(BestFit(number,request)==OK)printf("
分配成功!
elseprintf("
内存不足,分配失败!
returnOK;
else//默认首次适应算法
if(FirstFit(number,request)==OK)printf("
//首次适应算法
StatusFirstFit(intnumber,intrequest)//传入作业名及申请量
DuLinkListDLL=(DuLinkList)malloc(sizeof(DuLNode));
//为申请作业开辟新空间且初始化
DLL->
data.number=number;
data.size=request;
data.state=Busy;
DuLNode*p=first->
next;
while(p)
if(p->
data.state==Free&
&
p->
data.size==request)//有大小恰好合适的空闲块
{
p->
break;
}
if(p->
data.size>
request)//有空闲块能满足需求且有剩余"
{
DLL->
prior=p->
prior;
next=p;
data.address=p->
data.address;
prior->
next=DLL;
p->
prior=DLL;
data.address=DLL->
data.address+DLL->
data.size;
data.size-=request;
p=p->
returnERROR;
//最佳适应算法
StatusBestFit(intnumber,intrequest)
intch;
//记录最小剩余空间
DuLNode*q=NULL;
//记录最佳插入位置
while(p)//初始化最小空间和最佳位置
(p->
request||p->
data.size==request))
q=p;
ch=p->
data.size-request;
break;
p=p->
data.size==request)//空闲块大小恰好合适
request)//空闲块大于分配需求
data.size-request<
ch)//剩余空间比初值还小
{
ch=p->
//更新剩余最小值
q=p;
//更新最佳位置指向
}
if(q==NULL)returnERROR;
//没有找到空闲块
else
{//找到了最佳位置并实现分配
prior=q->
DLL->
next=q;
data.address=q->
q->
data.address+=request;
data.size=ch;
//释放内存
Statusfree(intnumber)
DuLNode*p=first;
data.number==number)
data.number=Free;
data.state==Free)//与前面的空闲块相连
p->
data.size+=p->
next=p->
next->
if(p->
data.state==Free)//与后面的空闲块相连
p->
prior=p;
//显示内存存分配情况
voidshow()
********内存分配情况********\n"
分区号:
data.number==Free)printf("
Free\n"
elseprintf("
%d\n"
p->
data.number);
起始地址:
%ld\n"
data.address);
分区大小:
%ldKB\n"
data.size);
状态:
if(p->
data.state==Free)printf("
空闲\n"
已分配!
---------------------------------------\n"
p=p->
//主函数
voidmain()
//system("
color1D"
-----------动态内存分配管理-----------\n"
intch,d=0;
//算法选择标记
--1.首次适应算法--\n"
--2.最佳适应算法--\n"
--0.退出--\n"
-----------------------------------------------------------\n"
请选择分配算法:
ch);
请输入内存空间的大小(单位:
%ld"
MAX_length);
if(ch==0||ch==1||ch==2)d++;
while(d==0)
printf("
数字不正确,请选择0--2之间的数字\n"
scanf("
if(ch==0||ch==1||ch==2)d++;
if(ch==0)exit(0);
if(n==0)InitList();
//开创空间表
intselection;
//操作选择标记
while
(1)
-----------1:
分配内存2:
释放内存-----------\n"
-----------3:
查看分配0:
返回-----------\n"
请输入您的操作:
selection);
if(selection==1)
allocation(ch);
//分配内存
n++;
elseif(selection==2)//释放内存
intnumber;
请输入您要释放的分区号:
scanf("
free(number);
elseif(selection==3)
show();
//显示主存
elseif(selection==0)
main();
//退出
n++;
else//输入操作有误
printf("
输入有误,请重试!
continue;
5、实验结果及分析
实验结果如下:
1、首次适应算法
分配内存:
回收内存:
2、最佳适应算法
释放内存:
六、成绩评定
优
良
中
及格
不及格
出勤
内容
格式
创新
效果
总评
指导教师:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 主存储器 空间 分配
![提示](https://static.bdocx.com/images/bang_tan.gif)