Linux kernel 内存管理

buddy 算法、Slab分配器

Posted by Yunlongs on August 4, 2021

Linux kernel 内存管理

一. Buddy 算法(伙伴系统)

为了高效的处理频繁申请和释放不同大小的连续页框,Linux内核中引入了伙伴系统算法(buddy system)。

主要思想: 把所有的空闲页框分组为11个块链表,每个块链表分别包含大小为1,2,4,8,16,32,64,128,256,512和1024个连续页框的页框块。每个页框4kb,最大可以申请1024个连续页框,对应4MB大小的连续内存。每个页框块的第一个页框的物理地址是该块大小的整数倍。

具体实现(分配): 假如系统需要4($2^2$)个页面大小的内存块,该算法就到free_area[2]中查找,如果链表中有空闲块,就直接从中摘下并分配出去。如果没有,算法将顺着数组向上查找free_area[3]…

定义:伙伴块 1)两个块大小相同;

2)两个块地址连续;

3)两个块必须是同一个大块中分离出来的;

具体实现(释放): 当释放一个块时,先在其对应的链表中考查是否有伙伴存在,如果没有伙伴块,就直接把要释放的块挂入链表头;如果有,则从链表中摘下伙伴,合并成一个大块,然后继续考察合并后的块在更大一级链表中是否有伙伴存在,直到不能合并或者已经合并到了最大的块($2^{11}$个页面)。

https://www.cnblogs.com/linhaostudy/p/12445163.html

二. Slab机制

waiting…