【问题标题】:Understanding the Buddy Allocator了解好友分配器
【发布时间】:2013-06-28 06:29:19
【问题描述】:

我对理解 Linux 内核管理空闲块的方式存在概念上的疑问。这是我到目前为止通过阅读所解释的内容。 Buddy Allocator 实现是结合了正常的 2 次幂分配的分配方案。 有时,当我们需要一个大小不可用的块时,它会将大块分成两部分。这两个块是 Buddies,可能因此被称为 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种状态?

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

【问题讨论】:

    标签: memory-management linux-kernel


    【解决方案1】:

    map代表最低层的单个内存块的状态。

    【讨论】:

    • 同意。但是它是否代表了整个2的幂大小的块,当我们需要一个不可用的块大小时可以分成两部分,所以分配的一半是Buddy另一半是免费的?如果这是一半被分配一半保持空闲的情况,那么map 的状态是什么?如果两者都是免费的呢?如果两者都分配了怎么办?一个二进制值怎么能代表一个块的三种状态?
    • 在问题正文中添加了相同的内容
    猜你喜欢
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多