源码基于:Linux5.4
在上一文 buddy 系统 中,简单介绍了 buddy 系统的初始化过程以及其原理。我们知道 buddy 系统是操作系统中常用的一种动态存储管理方法,在用户提出申请时,分配一个大小合适的内存块给用户,并在用户释放内存块时回收。在buddy 系统中,内存块(page block)的大小是2 的 order 次幂个pages。Linux 内核中 order 的最大值用MAX_ORDER来表示,通常是11,也就是最大的物理内存块可以达到 pages(4MB)。
zone 中的 free_area 数组分别管理 至 的内存块,而每个内存块又根据迁移属性,存放在对应属性的链表中。
我们知道 buddy 系统是Linux 内核中基本的内存分配系统。buddy 系统的概念不难理解,但是长期以来,分配物理页面是内存管理中最复杂的部分,它涉及页面回收、内存规整、直接回收内存等相当错综复杂的机制。后面我们会分成单独的小模块进行逐步