1 / 22
文档名称:

北交大操作系统作业-内存管理器.doc

格式:doc   大小:263KB   页数:22页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

北交大操作系统作业-内存管理器.doc

上传人:373116296 2019/4/13 文件大小:263 KB

下载得到文件列表

北交大操作系统作业-内存管理器.doc

相关文档

文档介绍

文档介绍:内存管理器 1一、实验目的 1二、实验设计 1三、源程序清单和说明 2四、算法及关键数据结构设计 14五、实验过程中间结果屏幕截图 17六、疑难解惑及经验教训 21内存管理器实验目的设计和实现关于内存管理的内存布局初始化及内存申请分配、内存回收等基本功能操作函数尝试对用256MB的内存空间进行动态分区方式模拟管理。内存分配的基本单位为1KB,同时要求支持至少两种分配策略,并进行测试和对不同分配策略的性能展开比较评估。实验设计1、设计一定的数据结构以描述256MB内存空间的使用状况,并设计和构建函数voidChuShiHuaNC(DIZHIzKS_KYNC,DIZHIzJS_KYNC)实现内存布局的初始化。假定内存空间的低址部分56MB(即0~56M-1)作为系统区和不参与分配过程。2、设计和实现内存申请分配函数DIZHIShenQingNC(unsignedlongzDX),内存分配的基本单位为1KB,同时要求支持至少两种分配策略(如首次适应、循环首次适应、最佳适应、最坏适应等),若分配失败则返回NULL。3、设计和实现内存回收函数voidHuiShouNC(DIZHIzKSDZ),若回收分区与其它空闲分区相邻接,则采取合并措施。4、基于不同的内存分配策略形成不同版本的内存管理器,并根据内存平均利用率和分配查找分区比较次数等指标展开测试和对不同分配策略的内存管理器性能进行评估。5、不妨设计测试例程框架:循环{①产生随机数,并根据该值确定是申请内存还是回收内存;②若是申请内存,还需进一步产生申请内存大小(服从正态/均匀分布);若是回收内存还需产生随机数和选择回收区;③收集测试数据用于性能评价;}性能指标计算6、分析性能测试数据,并借用图形如曲线方式来描述平均内存申请大小与平均内存利用率及平均查找步骤之间的关系。源程序清单和说明//#include<>#include<>#include<>#include<>enum{ADDR=0,TOTAL=262144,MAX=20000,MIN=100,NF=1,BF=-1,FULL=1,FREE=0,N=2000};/*空闲分区链*/structnode{ structnode*prev; structnode*next; intnumber; intaddr; intsize; intstatus;};typedefstructnodeblock;intrandom(ints,inte);doublerate();voidChuShiHuaNC();//内存初始化函数voidview();intShenQingNC();//内存申请函数intnextfit(intsize);//循环首次适应算法intbestfit(intsize);//最佳适应算法voidHuiShouNC();//内存回收函数voidconvert();voidtest();voidprompt();//#include""#include""upied,pare,algo;externblock*head,*tail,*last;/*内存空间初始化函数*/voidChuShiHuaNC(){ block*work,*temp; occupied=0;//初始化已经分配的内存大小 count=0;//pare=0; /*将空闲分区链初始化*/ if(head!=NULL) { work=head->next; while(work!=head) { temp=work; work=work->next; free(temp); } free(head); } head=(block*)malloc(sizeof(block)); tail=(block*)malloc(sizeof(block)); last=tail; head->prev=tail; head->next=tail; tail->prev=head; tail->next=head; head->addr=0; head->size=ADDR; head->status=FULL; tail->addr=ADDR; tail->size=TOTAL; tail->status=FREE;}voidview(){ block*work=head->next; printf("首地址 大小(KB)状态\n"); while(work!=head) { printf("%d %d ",work->addr,work->size); if(work->status==FULL) { printf("占用\n"); } elseif