【用C语言写一个内存管理程序】

【用C语言写一个内存管理程序】

这个程序有2个系统调用和3种内存分配策略。并计算性能(平均内存利用率,寻找孔(hole)次数)

【1】系统调用(System Calls)
(1)void *mm_request(int n)
这个系统调用是请求一个连续的n字节的内存块(Block).如果请求成功,返回一个指针到分配的块的
第一个字节。如果内存没有足够的孔(hole)或参数n错误,返回NULL.
(2)void mm_release(void *p)
这个系统调用可以释放已经分配的指针p指到的内存。如果释放的内存块相邻有空的内存(hole),就
要把他们合并。

【2】内存分配策略
内存管理提供三种选择(1)首次适配(first fit),(2)最佳适配(best fit),(3)最差适配(worst
fit). 使用不同内存分配策略要显示相应的性能(A.计算平均内存利用率,B.计算每次执行mm_request,寻找孔(hole)的次数)

【提示】

『提示1』
我们可以模拟一段内存来管理。声明一个数组mm[mem_size]来表示物理内存。(此题并不是用真正得内存,用数组代表会简单很多)

两种方式都可以获得一个mem_size连续字节的序列,就是我们要模拟管理的内存。

『提示2』
假设“释放”和“请求”放在两个在不同的队列里。“释放”总是立刻执行,“请求”要等到有
足够大小的内存孔(hole)才分配。“请求”是先进先出(FIFO)的

『提示3』
程序从一个空的内存开始分配,直到没有足够的空间,这个时候“请求”就开始等待。如果有“释
放”执行,“请求”就去检查这时有没有足够的空间。

『提示4』
假设“请求”永远不为空。

『提示5』
假设“释放”的时候,有几个块(Block),就随机释放一个。

『提示6』
程序框架:
for (i=0; i<sim_steps; i++) {
do {
得到下一个请求的大小;
mm_request(n)
                记录寻找孔(hole)的次数;
     }
while (请求成功);
记录内存利用率(内存利用率=已经分配的空间/总内存空间);
随机选择一个block 去释放;
mm_release(p)
}

注意:最后要算出平均的内存利用率。

『提示7』
产生“请求”字节大小
int uniform(int max)
{
   return (int)(max*drand48());
}
n = uniform(max);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章