buddy内存分配算法浅析

来源:互联网 发布:pc端护眼软件 编辑:程序博客网 时间:2024/05/01 03:43

因为今天遇到这个问题,所以上网搜了下,看了觉得还是很有用处,便写了这篇博文。

buddy内存分配算法技术是一种内存分配算法,将内存划分分区,试图以适当地满足内存请求。buddy内存分配算法是比较容易实行。它支持有限,高效的分裂和内存块的合并。目的是为了解决内存的外碎片


避免外碎片的方法有两种
1,利用分页单元把一组非连续的空闲页框映射到非连续的线性地址区间。
2,开发适当的技术来记录现存的空闲连续页框块的情况,以尽量避免为满足对小块的请求而把大块的空闲块进行分割。


这里给出伙伴的概念,满足以下三个条件的称为伙伴:
1)两个块大小相同;
2)两个块地址连续;
3)两个块必须是同一个大块中分离出来的



当存储请求时如下发生了什么:
如果内存要分配
1.寻找一个合适的大小(最小2的存储器插槽ķ块是大于或等于所请求的存储器的)
       1.如果它被找到,它被分配给该程序
       2.如果不是,它试图使一个合适的存储器插槽。该系统这样做尝试以下:
                 1.拆分一个免费的内存插槽比请求存储器大小成半较大
                  2.如果达到了下限值时,则分配的存储器的量
                   3.回到步骤1(找一个合适大小的内存插槽)

                    4.直到一个合适的内存插槽中发现重复此过程



如果内存被释放
1.空闲内存块
2.看相邻块 - 它是免费的吗?
3.如果是,将二者结合起来,并回到步骤2,重复这个过程既达到上限,直到(所有内存被释放),或直到遇到一个非自由相邻块


实施和效率

相较于其他更简单的技术,如动态分配,好友记忆系统几乎没有外部碎片,并允许压实与小的开销内存。释放内存的哥们方法快速,与登录所需的平等压实的最大数目2(最高等级)。通常好友存储器分配系统与使用的实施二叉树来表示使用或不使用的分割存储器块。每个区块的“哥们”,可以与发现异或块的地址和块的大小。
但是,仍然存在内部碎片的问题,因为请求的内存比小块稍大,但比一大块小了就有很多内存浪费 。因为伙伴存储器分配技术的工作方式,请求的存储器66K将被分配128K,这导致的存储器62K浪费的程序。这个问题可以通过解决板坯分配,其可以在更粗的好友分配器的顶部分层,以提供更精细的分配。

在Linux内核还使用好友系统,以进一步修改,以尽量减少外部碎片,以及其他各种分配器来管理模块中的存储器。


0 0
原创粉丝点击