模拟内存管理设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
内存管理器
1.实验目的
设计和实现关于内存管理的内存布局初始化及内存申请分配、内存回收等基本功能操作函数,尝试对用256MB的内存空间进行动态分区方式模拟管理。内存分配的基本单位为1KB,同时要求支持至少两种分配策略,并进行测试和对不同分配策略的性能展开比较评估。2.实验设计
2.1.实验要求
1、设计一定的数据结构以描述256MB内存空间的使用状况,并设计和构建
函数void ChuShuHuaNC (DIZHI zKS_KYNC, DIZHI zJS_KYNC)实现内存布局的初始化。假定内存空间的低址部分56MB(即0~56M-1)作为系统区和不参与分配过程。
2、设计和实现内存申请分配函数DIZHI ShenQingNC(unsigned long zDX),内存
分配的基本单位为1KB,同时要求支持至少两种分配策略(如首次适应、循环首次适应、最佳适应、最坏适应等),若分配失败则返回NULL。
3、设计和实现内存回收函数void HuiShouNC(DIZHI zKSDZ) ,若回收分区与其
它空闲分区相邻接,则采取合并措施。
4、基于不同的内存分配策略形成不同版本的内存管理器,并根据内存平均利
用率(指已分配内存占总可分配内存的平均比率)和分配查找分区比较次数等指标展开测试和对不同分配策略的内存管理器性能进行评估。
5、不妨设计测试例程框架:
循环
{
①产生随机数,并根据该值确定是申请内存还是回收内存;
②若是申请内存,还需进一步产生申请内存大小(服从正态/均匀分布);若
是回收内存还需产生随机数和选择回收区;
③收集测试数据用于性能评价;
}
2.2.数据结构
2.3.性能指标计算
指标1:count
count为平均每次申请分配内存时查找符合内存大小的次数。
计算公式:
count=query_apply_count
apply_count
query_apply_count:总的查询比较次数
apply_count:总的申请分配内存次数
指标2:rate
rate为每1000次对存储设备操作后的平均内存利用率。
计算公式:
rate=all_rate
all_count
all_rate:总的对内存每次操作后的内存利用率之和
all_conut:对内存的操作次数包括回收和分配
3.程序清单
1:变量解释
/*********************************************************************
*full:空闲分区的状态为满
*empty:空闲分区的状态为空
*mix:允许产生的最大申请块
*min:允许申请的最小申请块
*memory_size:初始内存大小(256M-56M)
*memory_locate:累计内存使用量
*query_count_all:累计比较次数
*memory_empty_count:空闲分区的内存块数
*memory_apply_count:申请成功的内存块数
2:空间利用率函数
***************************************************************************** *函数名:rate
*功能:求空间利用率
*返回值 double
*参数:无
****************************************************************************** 函数实现
****************************************************************************** double rate()
{
int sizeloction=0;
for (int i = 0; i < memory_apply_count;i++)
{
sizeloction = arry_apply_block[i]->size+ sizeloction;
return double(double(sizeloction) / 204800);
}
****************************************************************************** 3:正态分布随机函数
**********************************************************************
*函数名称:radomNumber
*功能:产生服从正态分布的一组随机数
*函数参数:int average(平均数), int variance(方差)
*返回值:int
************************************************************************
函数实现:
**********************************************************************
// 根据均值和方差算正态分布随机数
double u = ((double)rand()) / (RAND_MAX) * 2 - 1;
double v = ((double)rand()) / (RAND_MAX) * 2 - 1;
double r = u * u + v * v;
if (r == 0 || r > 1) return radomNumber(average, variance);
double c = sqrt(-2 * log(r) / r);
double result = (u * v) * variance + average;
return (int)result;
************************************************************************
4:内存空间初始化函数
/***********************************************************************
*函数名:ChuShiHuaNC
*功能:内存空间初始化函数,构造空闲分区数组