欢迎来到天天文库
浏览记录
ID:12345923
大小:1.40 MB
页数:35页
时间:2018-07-16
《实验五__动态分区分配方式内存管理模拟》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、2014——2015学年第一学期专业计算机科学与技术班级专升本学号姓名日期2014-12-5实验题目实验五动态分区分配方式内存管理模拟实验目的1、掌握连续分配方式内存管理理论;2、掌握动态分区分配方式内存管理理论;实验理论基础动态分区分配:根据进程的实际需要,动态地创建分区为之分配内存空间,在实现动态分区分配时,将涉及分区分配中所使用的数据结构,分区分配算法和分区的分配与回收操作等问题。1)分区分配中的数据结构空闲分区表:一个数据表,用于记录每个空闲块的情况,如起始地址、大小、使用情况等;空闲分区链表:把所有的空闲分区链接成一个链表,便于内存
2、空间查看与分配回收。2)分配算法首次适应法:空闲分区按首地址递增次序组织,每次查找时从链首出发,寻找满足要求的内存块。循环首次适应算法:空闲分区按首地址递增次序组织,每次从上次查找的下一个空闲块开始查找,直到找到满足要求的内存块。最佳适应法:空闲分区按空闲分区大小址递增次序组织,每次查找时从链首出发,寻找满足要求的最小内存块进行分配。最坏适应法:空闲分区按空闲分区大小递减次序组织,每次查找时直接判断最大空闲分区是否满足要求。2)内存分配过程利用分配算法找到满足要求的内存块,设请求的内存大小为size:若找到的空闲分区的大小等于size,完全分
3、配;若找到的空闲分区大小大于size,且一分为二后,剩余大小小于1K,则不再分割,作为整体进行分配;否则一分为二,剩余部分仍然作为空闲分区存在;若无满足要求空闲分区,则分配失败3)内存回收根据释放区首址和大小,查找空闲分区表/链表,判断是否有相邻的空闲分区存在:释放区与前空闲区相邻:将释放区与前空闲区合并为一个空闲区。其首址仍为前空闲区首址,大小为释放区大小与空闲区大小之和。释放区与前后两个空闲区相邻:将这三个区合为一个空闲区,其首址为前空闲区首址,大小为这三个区大小之和,并取消原后空闲区表目。释放区与后空闲区相邻:则把释放区合并到后空闲,首
4、地址为释放区首地址,大小为二者大小之和。释放区不与任何空闲区相邻:将释放区作为一个空闲区,将其大小和首址插入到空闲区表的适当位置。实验内容和步骤1、要求编写一个动态分区分配管理程序实现一块模拟内存空间的管理,包括内存分配与回收功能。具体要求完成功能:1)模拟实现640K内存空间的管理2)设计内存分配结构,记录内存使用情况3)设计内存分配算法(首次适应法、最佳适应法两种算法)4)设计内存回收算法(考虑相邻空间的合并)5)可动态显示内存分区状况以下提供了该实例的部分源代码,要求同学们根据理论基础部分内容分析该源代码,并将缺失的程序代码补充完整,然
5、后调试这段程序,最终按要求给出相应的结论。//***************************************************************//********动态内存分区方式的模拟*********//***************************************************************#include#include#defineFree0//空闲状态#defineBusy1//已用状态#defineOK1//完成#defi
6、neERROR0//出错#defineMAX_length640//最大内存空间为640KBtypedefintStatus;typedefstructfreearea//定义一个空闲区说明表结构{intID;//分区号longsize;//分区大小longaddress;//分区地址intstate;//状态}ElemType;//----------线性表的双向链表存储结构------------typedefstructDuLNode//doublelinkedlist{ElemTypedata;structDuLNode*prior;
7、//前趋指针structDuLNode*next;//后继指针}DuLNode,*DuLinkList;DuLinkListblock_first;//头结点DuLinkListblock_last;//尾结点Statusalloc(int);//内存分配Statusfree(int);//内存回收StatusFirst_fit(int,int);//首次适应算法StatusBest_fit(int,int);//最佳适应算法voidshow();//查看分配StatusInitblock();//开创空间表StatusInitblock()
8、//开创带头结点的内存空间链表{block_first=(DuLinkList)malloc(sizeof(DuLNode));block_last=(DuLink
此文档下载收益归作者所有