在 Linux 内核中,物理页框(Page Frame,通常为 4KB)的分配由 伙伴系统(Buddy System) 负责,而小于一页的内核对象(如 task_struct、inode、dentry)则由 Slab/Slub 分配器 管理。
一、为什么需要伙伴系统
为了抑制外部内存碎片,伙伴系统将空闲物理页组织成 11 个块链表(Order 0 到 Order 10),分别对应 $2^0$ 到 $2^{10}$ 个连续物理页。
c
struct free_area {
struct list_head free_list[MIGRATE_TYPES];
unsigned long nr_free;
};