2008-05-03
内存管理的经典算法Buddy
关键字: buddy 内存管理 linux
Buddy算法,内存管理的经典算法,主要的目的就是减少内存碎片,增加内存的使用率,在unix和linux中都是使用该算法进行内存分配管理。
以linux为例,在linux中,系统会分配一块free_area的数组,该数组的元素为一内存页块,每向上一级,页块的大小成倍增长,既:1、2、4、8、16、32、64、128….2n,如下图:
内存分配:
当进程向系统请求空间时,内存管理系统将在free_area数组中寻找大小适合空闲块,比如需要分配一块512K的空间,系统会在free_area中寻找大小为512K的快,假设首个内存页块大小为4K,则内核会寻找大小是第一个元素128倍的元素,在free_area中既是对应第7个元素,假如该元素对应的空间已经被分配,系统则会再向上搜索,既搜索第八个元素对应的页块链表,此时如果空间足够,则使用该块进行空间分配,由于该块的大小比所申请的空间大一倍,系统会将该块分割为两半,其中一半用于分配,而另外一半则插入上一元素空间,既free_area中第7个元素。如果仍然没有找到空闲的空间,则继续向上搜索。
内存回收:
内存回收的过程与分配的过程相反,在回收的时候,内核将检测是否存在相同大小的内存块,如果存在,则将它们进行合并,合成一个大小是原来两倍的新的空闲,每次结合完之后,代码还要检查是否可以继续合并成更大的页面。最佳情况是系统的空闲页面块将和允许分配的最大内存一样大。
以linux为例,在linux中,系统会分配一块free_area的数组,该数组的元素为一内存页块,每向上一级,页块的大小成倍增长,既:1、2、4、8、16、32、64、128….2n,如下图:
内存分配:
当进程向系统请求空间时,内存管理系统将在free_area数组中寻找大小适合空闲块,比如需要分配一块512K的空间,系统会在free_area中寻找大小为512K的快,假设首个内存页块大小为4K,则内核会寻找大小是第一个元素128倍的元素,在free_area中既是对应第7个元素,假如该元素对应的空间已经被分配,系统则会再向上搜索,既搜索第八个元素对应的页块链表,此时如果空间足够,则使用该块进行空间分配,由于该块的大小比所申请的空间大一倍,系统会将该块分割为两半,其中一半用于分配,而另外一半则插入上一元素空间,既free_area中第7个元素。如果仍然没有找到空闲的空间,则继续向上搜索。
内存回收:
内存回收的过程与分配的过程相反,在回收的时候,内核将检测是否存在相同大小的内存块,如果存在,则将它们进行合并,合成一个大小是原来两倍的新的空闲,每次结合完之后,代码还要检查是否可以继续合并成更大的页面。最佳情况是系统的空闲页面块将和允许分配的最大内存一样大。
- 13:13
- 浏览 (816)
- 评论 (0)
- 分类: 数据结构与算法
- 发布在 Ubuntu For Fun 圈子
- 相关推荐
发表评论
- 浏览: 109544 次
- 性别:

- 来自: 珠海

- 详细资料
搜索本博客
我的相册
1
共 9 张
共 9 张
最新评论
-
使用wubi安装ubuntu记得绕 ...
好象也是这个问题,我今天也搞了一天了。不要用wubi.exe,去下载对应的wub ...
-- by feiyelanghai -
你的价值在哪里?
不同的心态决定着截然不同的结果。这有点像传说中的境界了吧。
-- by pubx -
你的价值在哪里?
两个字 —心态
-- by flysnail -
你的价值在哪里?
同感,就看自己怎么去看待,同样一件事情,不同的心态有着不同的结果。
-- by yuanqixun -
你的价值在哪里?
8) 不得不让我想起啊Q
-- by icefire






评论排行榜