1. Buddy 分配器(页分配器)的 order 与伙伴合并
解释 Buddy 分配器(页分配器)的 order 概念与伙伴(buddy)合并机制?
- 理解 order 表示 2^order 页的连续块
- 理解 buddy 按 order 分桶管理空闲页
- 理解分配时的拆分与释放时的伙伴合并
Buddy(伙伴)分配器是内核页分配器,以连续物理页块为单位分配。order 表示块的大小,一个 order 的块包含 2^order 个连续页(order 0 为 1 页,order 9 为 512 页即 2MB)。Buddy 维护一系列按 order 分桶的空闲链表(free_list[order]),每桶存放大小为 2^order 页的连续块。分配时,从请求的 order 起,若该 order 桶为空则向上找更大的 order 桶,把大块"分裂"成两个伙伴(buddy)并逐级下放,直到拆出所需大小的块。释放时,若释放的块与相邻的伙伴(buddy)都空闲且可合并,则合并为更大的块,逐级向上合并,减少碎片。伙伴必须满足地址对齐规则(互为伙伴的地址只在某一位不同)。Buddy 通过"分裂分配 + 合并释放"保证大块连续内存的可用性。
Buddy 的核心是"以 2 的幂组织块 + 分裂/合并",这是 Linux 分配物理连续内存的基础。理解 order、伙伴规则与合并是掌握页分配器、THP 大页与碎片治理的起点。