实验-存储器管理(二)_第1页
实验-存储器管理(二)_第2页
实验-存储器管理(二)_第3页
实验-存储器管理(二)_第4页
实验-存储器管理(二)_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业 存储器管理(二)一、目的本课题实验的目的是,使学生实验存储器管理系统的设计方法;加深对所学各种存储器管理方案的了解;要求采用一些常用的存储器分配算法,设计一个存储器管理模拟系统并调试运行。题目存储器管理三、要求及提示1、要求采用一种常用的存储器分配算法,设计一个存储器管理模拟系统。允许进行多次的分配和释放,并可向用户反馈分配和释放情况及当前内存的情况;采用“命令菜单”选择和键盘命令输入的会话方式,根据输入请求调用分配模块,或回收模块,或内存查询模块,或最终退出系统。2

2、、编程实现。3、工具:C语言或其它高级语言4、实验时间:3学时四、实验报告1、写出存储器管理的思想。2、画出算法流程图和设置的数据结构。3、写出调试程序出现的问题及解决的方法。4、打印实验报告及程序清单。5、报告给出测试的结果。五、范例采用可变分区存储器管理方案的模拟系统。1、问题描述该模拟系统的外部特性与真实系统基本一样。存储分配算法采用首次适应法。用“拼,接”和“紧凑”技术来处理存储器碎片。2、算法存储分配算法采用首次适应(FF)法。根据指针freep查找自由链,当找到第一块可满足分配请求的空闲区时便分配之。当某空闲区被分配后的剩余空闲区空间大于规定的碎片最小容量min时,则形成一个较小的

3、空闲区留在自由链中。回收时,根据MAT将指定分区链入自由链。若该分区有前邻或后邻空闲分区,则将他们拼接成一块加大的空闲区。当某个分配请求不能被满足,但此时系统中所有碎片总量满足分配请求的容量时,系统立即进入内存“紧凑”以消除碎片。即将各作业占用区集中下移到用户内存区的下部(高地址部分),形成一片连接的作业区,而在用户内存区的上部形成一块较大的空闲区。然后再进行分配。本系统的主要程序模块包括:分配模块ffallocation,回收模块ffcolection,紧凑模块coalesce及命令处理模块menu。Menu用以模拟系统的输入,采用“命令菜单”选择和键盘命令输入的会话方式,根据输入请求调用分

4、配模块,或回收模块,或内存查询模块,或最终退出系统。系统的主流程如图3所示。3、数据结构自由链与区头。内存空闲区采用自由链结构。链首由freep指向,链中各个空闲区按地址递增次序排列。初启时整个用户内存区为一个空闲区。在每个空闲区首部设置一个区头(freearca)结构。区头信息包括: size 空闲区大小(以字节计),包括区头所占空间; next 前向链指针,指向下一个空闲区; back 反向链指针,指向上一个空闲区; address 本空闲区首地址。内存分配表MAT。系统设置一个MAT,每个运行作业都在MAT中占有一个表目,回收分区时清除相应表目。表目信息包括:name 用户作业名;len

5、gth 作业区大小;addr 作业区首地址;4、程序清单#include#include#define TOTAL 5000#define SETADDRESS 2000#define MIN 100#define MAX 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

6、;char string10;long totalfree;char jobnumber;freeptr freep;jobptr jobp;/*初始化*/init()freep=(freeptr)malloc(sizeof(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

7、 jp,jp1,jp2;jp2=(jobptr)malloc(sizeof(struct mat);if(totalfreesizenext;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-addressaddress)jp1=jp;jp=jp-next;jp2-next=jp;i

8、f(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)next!=NULL)fp-next-back=fp-back;if(fp-back!=NULL)fp-back-next=fp-next;elsefreep=fp-next;/*return();*/elsefp-size=fp-size-jl;fp-address=fp-address+jl;return(2);if(totalfree=

9、jl) return(0);/*显示模块*/xianshi()jobptr jp;/*清屏*/if(jobnumbername,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-1;totalfree=tot

10、alfree+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-addressaddress)fp1=fp;fp=fp-next;if(fp!=NULL)if(fp-next!=NULL)&(fp-next-address=jp-address+jp-length)f=f+1;if(f

11、p-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);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=

12、fp2;elsefp2-back=fp1;fp1-next=fp2; case 1:fp-size=fp-size+jp-length;fp-address=jp-address;case 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-ba

13、ck!=NULL)jp-back-next=jp-next;free(jp);/*搬家*/banjia()freeptr fp,fp1;jobptr jp;long bottom;if(jobnumber0)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)malloc(sizeof(freep

14、tr);freep-size=totalfree;freep-address=SETADDRESS;freep-next=NULL;freep-back=NULL;mingling()char name,anykey,jobname;int length,select;int address;a1:printf(you can select one of the following:n);printf( (1)require to be allocaten);printf( (2)require to collexte the sizen);printf( (3)check the memor

15、yn);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(enter you job namen);scanf(%s,&name);printf(enter your job lengthn);scanf(%10d,&length);address=fengpei(length,name);switch(address)case 1:printf(the m

16、emory 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();jobname=getchar();huishou(jobname);xianshi();break;case 3:xianshi();break;case 4:goto a2;print

17、f(npress enter to return menun);anykey=getchar();anykey=getchar();/* scanf(%c,anykey); */goto a1;a2: printf(you have exit the system!); main()init();mingling();5、程序运行结果本程序用TurboC语言编写,运行结果如下:you can select one of the following:require to be allocate。require to collecte the size。check the memory。quit。

18、you select:1 enter your job name:job1 enter your job length:1000 name legth (b)addressjob1 1000 2000the total left is:4000bytespress any key to return menu. . . .you select:1enter your job name: job4enter your job length:900 name legth(b)address job4 900 5900job3 700 5200job2 2200 3000job1 1000 2000 the total left is:200bytes . . .you select:2 enter the name of the job: job2name legth (b)addressjob4 900 5900job3 700 5200job1 1000 2000the tota1 left is:2400bytesyou select:1enter your job name: job5enter your job length: 2300name length (b)addressjob4 900 6100job3 700

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论