【用C语言写一个内存管理程序】
2006-11-16 21:58
393 查看
【用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);
这个程序有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);
相关文章推荐
- 通过一个小例子来简单理解C语言中的内存空间管理
- 用C语言写的一个小的银行管理程序
- 一个大学C语言试题的简单实现--员工信息管理程序
- 一个简单的内存管理程序
- 关于C语言多个源文件编译成一个程序
- C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)
- C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)
- C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
- C语言编程程序的内存如何布局
- 【C语言】代码规范 内存管理
- socket编程之C语言一个简单监听程序
- 模拟器与程序分析-4-一个简单的周期精确模拟器(CAS)的C语言实现
- 用C语言开发一个BT下载软件 (四) ------ 代码实现-2-位图管理模块的代码实现
- 运用JAVA面向对象思想写一个区域管理程序
- 通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统
- C语言构建WEB管理系统(三):CGI程序解析GET数据
- C语言实现的一个简单的HTTP程序
- 用C语言编写一个Linux下的简单shell程序
- 【C语言】【面试题】使用main函数的参数,实现一个整数计算机,程序可以接受三个参数
- 一个关于继承的程序,求高人解释程序执行过程中内存的数据存储情况