- 1、本文档共13页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
计算机科学与工程学院学生实验报告
专业学号
课程名称
计算机科学与技术
操作系统
班级
姓名
课程类型 专业必修课
实验名称 动态分区存储管理的模拟实现
实验目的:
熟悉动态分区存储管理方式下,主存空间的分配和回收算法。
提高C语言编程能力。
实验内容:
假设主存当前状态如右表所示:
系统采用最佳适应分配算法为作业分配主存空间,而且具有紧凑技术。请编程完成以下操作:
输出此时的已分配区表和未分配区表;
装入Job3(15K),输出主存分配后的已分配区表和未分配区表;
回收Job2所占用的主存空间,输出主存回收后的已分配区表和未分配区表;
装入Job4(130K),输出主存分配后的已分配区表和未分配区表。
实验要求
数据结构参考定义如下,也可根据需要进行改进:(1)已分配区表:
#definen10 /*假定系统允许的最大作业数量为n,n值为10*/struct
{int number;int address;int length;float flag;
/*序号*/
/*已分配分区起始地址,单位为KB*/
/*已分配分区长度,单位KB*/
/*已分配区表登记栏标志,0:空表项,否则为作业名;*/
}used_table[n];(2)未分配区表:
/*已分配区表*/
#definem10 /*假定系统允许的空闲区表最大为m,m值为10*/struct
{int number;int address;int length;int flag;
}free_table[m];
/*序号*/
/*空闲区起始地址,单位为KB*/
/*空闲区长度,单位为KB*/
/*空闲区表登记栏标志,0:空表项;1:空闲区*/
/*空闲区表*/
以allocate命名主存分配所用的过程或函数(算法参考课件),要将各种情况考虑周全。
以reclaim命名主存回收所用的过程或函数(算法参考课件),要将各种情况考虑周全。
画出算法实现的N-S流程图。
程序调试、运行成功后,请老师检查。实验步骤:
分配内存,结果如下图:
回收内存,结果如下图:
合并内存,结果如下图:
4.N-S流程图:
内存分配流程图:
从头开始查表
Y
检索完否? 返回
N
分区大小 所需大小 N 继续检索下一个表项
Y
分区大小 -所需大小 = Y不可再分割大小
N
从该分区中划出所需大小的新分区
将该分区从链中移出
将该分区分配给请求者修改有关数
据结构
返回
内存回收流程图:
开始
判断空闲区上下内存情况
上为空 下为空 上下都为空 上下都不为空
将上面的空闲区合并,并回收
将下面的空闲区合并,并回收
将上下的空闲区
合并,并回收 直接将其回收
结束
附录 程序代码:
#define_CRT_SECURE_NO_WARNINGS1#includestdio.h#includestdlib.h
enumSTATE
{
Free,Busy
};
structsubAreaNode
{
int
addr;
//
起始地址
int
size;
//
分区大小
int
taskId;
//
作业号
STATEstate; //分区状态subAreaNode*pre; //分区前向指针subAreaNode*nxt; //分区后向指针
}subHead;
//初始化空闲分区链voidintSubArea()
{
//分配初始分区内存
subAreaNode*fir=(subAreaNode*)malloc(sizeof(subAreaNode));
//给首个分区赋值fir-addr=0;
fir-size=240; //内存初始大小fir-state=Free;
fir-taskId=-1;fir-pre=subHead;fir-nxt=NULL;
//初始化分区头部信息subHead.pre=NULL;subHead.nxt=fir;
}
//最佳适应算法
intbestFit(inttaskId,intsize)
{
subAreaNode*tar=NULL;inttarSize=240+1;
subAreaNode*p=subHead.nxt;while(p!=NULL)
{
//寻找最佳空闲区间
if(p-state==Freep-size=sizep-sizetarSize)
{
tar=p;
tarSize=p-size;
}
p=p-nxt;
}
if(tar!=NULL)
{
//分配大小为s
文档评论(0)