版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验三 存储器管理一、实验目的 1 了解内存管理的基本功能2 掌握内存管理中的几种内存分配与回收算法3 掌握可变分区算法中空闲分区的合并方法 二、实验内容与要求 设计一个存储器管理模拟系统并调试运行。要求采用一种常用的存储器分配算法(如:最佳适应算法、最坏适应算法),设计一个存储器管理模拟系统。允许进行多次的分配和释放,并可向用户反馈分配和释放情况及当前内存的情况;采用“命令菜单”选择和键盘命令输入的会话方式,根据输入请求调用分配模块,或回收模块,或内存查询模块,或最终退出系统。三、实验参考下面是采用的是首次适应分配算法的一个示例。根据指针freep查找自由链,当找到第一块可满足分配请求的空闲
2、区时便分配之。当某空闲区被分配后的剩余空闲区空间大于规定的碎片最小容量min时,则形成一个较小的空闲区留在自由链中。回收时,根据MAT将指定分区链入自由链。若该分区有前邻或后邻空闲分区,则将他们拼接成一块加大的空闲区。当某个分配请求不能被满足,但此时系统中所有碎片总量满足分配请求的容量时,系统立即进入内存“紧凑”以消除碎片。即将各作业占用区集中下移到用户内存区的下部(高地址部分),形成一片连接的作业区,而在用户内存区的上部形成一块较大的空闲区。然后再进行分配。本系统的主要程序模块包括:分配模块ffallocation,回收模块ffcolection,紧凑模块coalesce及命令处理模块men
3、u。Menu用以模拟系统的输入,采用“命令菜单”选择和键盘命令输入的会话方式,根据输入请求调用分配模块,或回收模块,或内存查询模块,或最终退出系统。用到的数据结构如下:(1) 自由链与区头。内存空闲区采用自由链结构。链首由freep指向,链中各个空闲区按地址递增次序排列。初启时整个用户内存区为一个空闲区。在每个空闲区首部设置一个区头(freearca)结构。区头信息包括: size 空闲区大小(以字节计),包括区头所占空间; next 前向链指针,指向下一个空闲区; back 反向链指针,指向上一个空闲区; address 本空闲区首地址。(2) 内存分配表MAT。系统设置一个MAT,每个运行
4、作业都在MAT中占有一个表目,回收分区时清除相应表目。表目信息包括:name 用户作业名;length 作业区大小;addr 作业区首地址;begin初始化现实命令菜单读参数读命令读参数showyouffallocationffcollection显示回收结果分配成功总空区容量够分配?显示不能分配coalesceffallocation显示分配结果读键盘end示例代码#include<stdio.h>#include<stdlib.h>#define TOTAL 5000#define SETADDRESS 2000#define MIN 100#define MAX
5、10typedef struct freeareaint address;int size;struct freearea *next;struct freearea *back;*freeptr;typedef struct matcharname;intaddress;intlength;struct mat *next;struct mat *back;*jobptr;char string10;long totalfree;char jobnumber;freeptr freep;jobptr jobp;/*初始化*/init()freep=(freeptr)malloc(sizeof
6、(struct freearea);freep->size=TOTAL;freep->address=SETADDRESS;freep->next=NULL;freep->back=NULL;totalfree=TOTAL;jobp=NULL;jobnumber=0;return(0);/*分配模块*/fengpei(int jl,char jn)freeptr fp;jobptr jp,jp1,jp2;jp2=(jobptr)malloc(sizeof(struct mat);if(totalfree<jl) return(1);fp=freep;while(f
7、p!=NULL)if(fp->size<jl)fp=fp->next;elsejobnumber=jobnumber+1;totalfree=totalfree-jl;jp2->name=jn;jp2->length=jl;jp2->address=freep->address;if(jobp=NULL)jp2->next=NULL;jp2->back=NULL;jobp=jp2;elsejp=jobp;while(jp!=NULL&&(jp2->address<jp->address)jp1=jp;jp=
8、jp->next;jp2->next=jp;if(jp=NULL)jp2->back=jp1;jp1->next=jp2;elsejp2->back=jp->back;if(jp->back!=NULL) jp1->next=jp2;else jobp=jp2;jp->back=jp2;if(fp->size-jl)<MIN)if(fp->next!=NULL)fp->next->back=fp->back;if(fp->back!=NULL)fp->back->next=fp->
9、next;elsefreep=fp->next;/*return();*/elsefp->size=fp->size-jl;fp->address=fp->address+jl;return(2);if(totalfree>=jl) return(0);/*显示模块*/xianshi()jobptr jp;/*清屏*/if(jobnumber<=0) printf("NO JOB!");elseprintf("namettlengthttaddressn");jp=jobp;while(jp!=NULL)prin
10、tf("%ctt%dtt%dn",jp->name,jp->length,jp->address);jp=jp->next;printf("nthe total left is %d bytes:",totalfree);/*回收模块*/huishou(char jn)freeptr fp,fp1,fp2;jobptr jp;int f=0;jp=jobp;while(jp!=NULL)&&(jp->name!=jn)jp=jp->next;if(jp!=NULL)jobnumber=jobnumber
11、-1;totalfree=totalfree+jp->length;if(freep=NULL)freep=(freeptr)malloc(sizeof(struct freearea);freep->address=jp->address;freep->size=jp->address;freep->next=NULL;freep->back=NULL;elsefp=freep;while(fp!=NULL)&&(fp->address<jp->address)fp1=fp;fp=fp->next;if(fp!
12、=NULL)if(fp->next!=NULL)&&(fp->next->address=jp->address+jp->length)f=f+1;if(fp->back!=NULL)&&(jp->address=fp1->address+fp1->size)f=f+2;else if(jp->address)=(fp1->address+fp1->size)f=f+2; switch(f) case 0: fp2=(freeptr)malloc(sizeof(struct freearea
13、);fp2->address=jp->address;fp2->size=jp->length;fp2->next=fp;if(fp!=NULL)fp2->back=fp->back;if(fp->back!=NULL)fp1->next=fp2;else freep=fp2;fp->back=fp2;elsefp2->back=fp1;fp1->next=fp2; case 1:fp->size=fp->size+jp->length;fp->address=jp->address;case
14、 2:fp1->size=fp1->size+jp->length;case 3:fp1->size=fp1->size+jp->length+fp->size;fp1->next=fp->next;if(fp->next!=NULL)fp->next->back=fp2;free(fp); if(jp=jobp) jobp=jp->next;if(jp->next!=NULL)jp->next->back=jp->back;if(jp->back!=NULL)jp->back-&
15、gt;next=jp->next;free(jp);/*搬家*/banjia()freeptr fp,fp1;jobptr jp;long bottom;if(jobnumber>0)jp=jobp;bottom=TOTAL+SETADDRESS;while(jp!=NULL)jp->address=bottom-jp->length;bottom=bottom-jp->length;jp=jp->next;fp=freep;while(fp!=NULL)fp1=fp;fp=fp->next;free(fp1);freep=(freeptr)mallo
16、c(sizeof(freeptr);freep->size=totalfree;freep->address=SETADDRESS;freep->next=NULL;freep->back=NULL;mingling()char name,anykey,jobname;int length,select;int address;a1:clrscr();printf("you can select one of the following:n");printf(" (1)require to be allocaten");print
17、f(" (2)require to collexte the sizen");printf(" (3)check the memoryn");printf(" (4)quit systemn");printf("you select is:");scanf("%d",&select);switch(select) case 1:if(jobnumber>=MAX) printf("the job is too many");elseprintf("en
18、ter you job namen");scanf("%s",&name);printf("enter your job lengthn");scanf("%10d",&length);address=fengpei(length,name);switch(address)case 1:printf("the memory is full");break;case 0:banjia();fengpei(length,name);xianshi();break;case 2: xianshi();break;/*else xianshi();*/break;case 2:printf("enter the name of the jobn");printf("you select is:");jobname=getchar()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五版绿化苗木种植技术培训与推广合同4篇
- 2025年辐射安全自查报告7
- 2025年弯曲机项目可行性研究报告
- 2025年中国图文电视播出系统行业市场发展前景及发展趋势与投资战略研究报告
- 2025年木质套装门项目可行性研究报告
- 二零二五年度煤炭资源勘查与评估技术服务合同4篇
- 二零二五版房产买卖合同关于附属设施移交协议4篇
- 2025年度教育器材代生产加工合同样本4篇
- 2023-2029年中国黄芩行业市场全景评估及投资战略研究报告
- 英汉小词典课程设计
- 第22单元(二次函数)-单元测试卷(2)-2024-2025学年数学人教版九年级上册(含答案解析)
- 蓝色3D风工作总结汇报模板
- 安全常识课件
- 河北省石家庄市2023-2024学年高一上学期期末联考化学试题(含答案)
- 2024年江苏省导游服务技能大赛理论考试题库(含答案)
- 2024年中考英语阅读理解表格型解题技巧讲解(含练习题及答案)
- 新版中国食物成分表
- 浙江省温州市温州中学2025届数学高二上期末综合测试试题含解析
- 2024年山东省青岛市中考生物试题(含答案)
- 保安公司市场拓展方案-保安拓展工作方案
- GB/T 15843.2-2024网络安全技术实体鉴别第2部分:采用鉴别式加密的机制
评论
0/150
提交评论