实验五 动态分区分配方式内存管理模拟
一、 实验目的
1) 掌握连续分配方式内存管理理论 2) 掌握动态分区分配方式内存管理理论
二、 实验原理
动态分区分配:根据进程的实际需要,动态地创建分区为之分配内存空间,在实现动态分区分配时,将涉及分区分配中所使用的数据结构,分区分配算法和分区的分配与回收操作等问题。 1) 分区分配中的数据结构
? 空闲分区表:一个数据表,用于记录每个空闲块的情况,如起始地址、大小、使用情况等;
? 空闲分区链表:把所有的空闲分区链接成一个链表,便于内存空间查看与分配回收。 2) 分配算法
? 首次适应法:空闲分区按首地址递增次序组织,每次查找时从链首出发,寻找满足要求的内存块。
? 循环首次适应算法:空闲分区按首地址递增次序组织,每次从上次查找的下一个空闲块开始查找,直到找到满足要求的内存块。
? 最佳适应法:空闲分区按空闲分区大小址递增次序组织,每次查找时从链首出发,寻找满足要求的最小内存块进行分配。
? 最坏适应法:空闲分区按空闲分区大小递减次序组织,每次查找时直接判断最大空闲分区是否满足要求。 3) 内存分配过程
利用分配算法找到满足要求的内存块,设请求的内存大小为size: ? 若找到的空闲分区的大小等于size,完全分配;
? 若找到的空闲分区大小大于size,且一分为二后,剩余大小小于1K,则不再分割,作为整体进行分配;否则一分为二,剩余部分仍然作为空闲分区存在;
? 若无满足要求空闲分区,则分配失败 4) 内存回收
根据释放区首址和大小,查找空闲分区表/链表,判断是否有相邻的空闲分区存在:
? 释放区与前空闲区相邻:将释放区与前空闲区合并为一个空闲区。其首址仍为前空闲区首址,大小为释放区大小与空闲区大小之和。
? 释放区与前后两个空闲区相邻:将这三个区合为一个空闲区,其首址为前空闲区首址,大小为这三个区大小之和,并取消原后空闲区表目。 ? 释放区与后空闲区相邻:则把释放区合并到后空闲,首地址为释放区首地址,大小为二者大小之和。
? 释放区不与任何空闲区相邻:将释放区作为一个空闲区,将其大小和首址插入到空闲区表的适当位置。
三、 实验内容
要求编写一个动态分区分配管理程序实现一块模拟内存空间的管理,包括内存分配与回收功能。具体要求完成功能: 1) 模拟实现64M内存空间的管理 2) 设计内存分配结构,记录内存使用情况
3) 设计内存分配算法(首次适应法、最佳适应法、最坏适应法或循环首次适应法,任选一个)
4) 设计内存回收算法(考虑相邻空间的合并) 5) 可动态显示内存分区状况
四、 实验要求
1) 实验数据可以设计要求:至少完成10次以上内存分配、5次以上内存回收(其中分配与回收需要混合进行,且回收过程中至少涉及2次以上内存合并处理)
2) 实验工具不限 3) 实验学时4学时 4) 实验报告包含:
? ? ? ? ?
实验目的、实验要求 实验数据
相关数据结构设计说明 算法思路流程
算法各数据运行结果截图