了解好友分配器

时间:2013-06-28 06:29:20

标签: memory-management linux-kernel

我对理解Linux内核管理Free块的方式存在概念上的疑问。这是我到目前为止通过阅读解释的内容。 Buddy Allocator实现是分配方案,其结合了正常的2次幂分配。 当我们需要一个不可用的块大小时,它会将大块分成两块。这两个街区都是好友,可能因此被称为Buddy Allocator。 通过源我了解到,为每个订单维护了一个free_area_t结构数组,指向一个免费页面的链接列表。 这是我在<linux/mm.h>

中找到的
typedef struct free_area_struct {  
  struct list_head free_list;  
  unsigned long *map;  
} free_area_t;  

free_list似乎是页面块的链接列表?我的问题是,它是一个免费页面列表还是二手页面?

map似乎是一个代表一对好友状态的位图。

我的问题是如何保持一对好友的状态位?因为如果,我使用 Buddy-pair 中的一个块来分配,而另一个是空闲的,那么状态是什么,以及如何将其存储在一个位中?它是否代表了2的幂大小的整个块,当我们需要一个不可用的块大小时,它可以分成两部分,所以分配的一半是另一半的 Buddy 一半是免费的?如果是这种情况,一半被分配,一半仍然是免费的,那么map的状态是什么?如果两者都免费怎么办?如果两者都被分配怎么办?如何能够表示块的3个状态的二进制值?

编辑:进一步阅读后,第一个疑问将被清除。其中说:如果找不到所请求订单的空闲块,则更高的订单块 被分成两个哥们。一个被分配,另一个被放在免费列表中 较低的顺序。所以它是免费页面的链接列表。

1 个答案:

答案 0 :(得分:0)

map表示最低级别的单个内存块的状态。