linux内核中的Buddy系统分配器

时间:2017-12-17 13:06:04

标签: linux memory-management linux-kernel

我对Linux内核中的伙伴系统分配器有疑问。

考虑这个例子:

enter image description here

假设伙伴系统正在分配128KB RAM。 如果我使用kmalloc分配32KB,我的理解是,

在步骤1中将128KB分成两个64KB,将第一个64KB分成两个32KB。 然后将第一个32KB分配给我。

显然仍有96KB的连续内存可供使用。

现在如果我在这个阶段分配90KB,会发生什么? 将kmalloc失败或伙伴(甚至slab)分配器处理这个并成功分配请求的内存?

1 个答案:

答案 0 :(得分:0)

在第一次32KB之后,您无法分配大于64KB的任何内容。在这种情况下,kmalloc()会返回nullptr

伙伴分配器也是如此。 Slab分配器的工作方式不同,但有一些主题。