实验项目五-存储管理.doc

实验项目五-存储管理.doc

ID:55579778

大小:216.50 KB

页数:7页

时间:2020-05-18

实验项目五-存储管理.doc_第1页
实验项目五-存储管理.doc_第2页
实验项目五-存储管理.doc_第3页
实验项目五-存储管理.doc_第4页
实验项目五-存储管理.doc_第5页
资源描述:

《实验项目五-存储管理.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实验项目五存储管理一、实验目的1.熟悉内存空闲分区的分配方式;2.理解动态分区存储管理方式;3.掌握动态分区的分配与回收的过程。二、实验内容使用一个链表来模拟内存存储空间,建立内存块来记录内存分配使用情况,通过随机产生进程及其所需要的内存来模拟真实的进程。通过给进程分配内存及回收来实现对动态分区存储管理方法。编制程序完成上述内容,内存空间大小为100,进程数为5,每个进程所需空间为随机产生,大小为1~20,首先对5个进程进行内存分配,然后回收指定的进程空间,并进行适当的空闲分区合并操作,要求每次操作结束后都能显示当前的内存分配情况。三、源程序及运行结果源程序:#incl

2、udetypedefstructMEMORY_BLOCK{intname;//进程名intaddress;//起始地址intlength;//长度intflag;//标志,表示该块是否被分配。structMEMORY_BLOCK*next;//指向下一个进程}MEMORY_BLOCK;#defineNUM5#defineLENsizeof(MEMORY_BLOCK)voidallocation(MEMORY_BLOCK*Header,intname,intlength_p){MEMORY_BLOCK*temp,*t,*tt;intminsize=2;/

3、/不可切割的分区阈值t=Header;while(t!=0){if(t->length>length_p&&t->flag==0)break;t=t->next;}if(t->length-length_p>minsize)//分割{temp=(MEMORY_BLOCK*)malloc(LEN);temp->name=-1;temp->flag=0;temp->length=t->length-length_p;temp->address=t->address+length_p;t->name=name;t->flag=1;t->length=length_p;temp

4、->next=t->next;t->next=temp;}else//直接分配{t->name=name;t->flag=1;}}voidreclaim(intprocessname,MEMORY_BLOCK*Header){MEMORY_BLOCK*temp,*t,*tt;t=Header;temp=t;while(t->name!=processname){temp=t;t=t->next;}if(t->next!=NULL)//t非尾结点if(temp->flag==0&&t->next->flag==0)//左右为空{temp->name=-1;temp->le

5、ngth=temp->length+t->length+t->next->length;tt=t->next;temp->next=tt->next;}elseif(temp->flag==0)//左为空{temp->name=-1;temp->length=temp->length+t->length;temp->next=t->next;}elseif(t->next->flag==0)//右为空{t->name=-1;t->length=t->length+t->next->length;t->flag=0;tt=t->next;t->next=tt->next;

6、}else//左右不为空{t->name=-1;t->flag=0;}else//t是尾结点{if(temp->flag==0)//左为空{temp->name=-1;temp->length=temp->length+t->length;temp=t->next;}else//左不为空{t->name=-1;t->flag=0;}}}voidmain()//主函数{intlength_p,i,processname;MEMORY_BLOCK*Header,*t;Header=(MEMORY_BLOCK*)malloc(LEN);//初始化存储空间Header->nam

7、e=-1;Header->address=0;Header->length=100;Header->flag=0;Header->next=NULL;srand((int)time(0));for(i=1;i<=NUM;i++){length_p=rand()%20+1;//随机产生进程所需存储空间,至少为1;allocation(Header,i,length_p);}printf("当前内存分配情况:");t=Header;while(t!=0){printf("processname%d,address=%d,length=%d

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。