Linux 内核 内存管理伙伴分配器 ① ( 伙伴分配器引入 | 页块阶 | 伙伴 )

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 内核 内存管理伙伴分配器 ① ( 伙伴分配器引入 | 页块阶 | 伙伴 )相关的知识,希望对你有一定的参考价值。

文章目录





一、伙伴分配器引入



Linux 内核 初始化 完成之后 , 就会 丢弃 引导内存分配器 , 如 : bootmem 分配器 , memblock 分配器 ;

此时 , 使用 " 页分配器 “ 管理 ” 物理页 " ,

" 伙伴分配器 “ 就是 ” 页分配器 " , 其特点是 算法简单 , 性能高效 ;





二、页块、阶



伙伴分配器 有如下概念 :

页块 ( Page Block ) : 英文名称 Page Block , 指的是 连续的 " 物理页 " ;

阶 ( Order ) : 物理页 的 数量单位 , n n n 阶页块 指的是 2 n 2^n 2n连续的 " 物理页 " ;

如 :

0 0 0 阶页块是 2 0 = 1 2^0 = 1 20=1连续的 " 物理页 " ;

1 1 1 阶页块是 2 1 = 2 2^1 = 2 21=2连续的 " 物理页 " ;

2 2 2 阶页块是 2 2 = 4 2^2 = 4 22=4连续的 " 物理页 " ;

⋮ \\vdots

n n n 阶页块是 2 n 2^n 2n连续的 " 物理页 " ;





三、伙伴



2 2 2 n n n 阶 " 页块 ( Page Block ) " 在满足 如下 3 3 3 个条件的前提下 , 可以 称为 " 伙伴 " :

① 页块相邻 : 2 2 2 个 页块 ( Page Block ) 必须相邻 , 其物理地址是连续的 ;

② 页块页号 : 1 1 1 个物理页 页号 2 n 2^n 2n 的整数倍 ;

③ 合并页块 : 如果需要合并这两个 n n n 阶页块为 n + 1 n + 1 n+1 阶页块 , 则第 1 1 1 页的 物理页 页号必须是 2 n + 1 2^n + 1 2n+1 整数倍 ;


0 0 0 页 与 1 1 1 页是伙伴 ;

2 2 2 页 与 3 3 3 页是伙伴 ;


1 1 1 页 与 2 2 2 页不是伙伴 , 这两页如果合并成页块 , 其第一页的页号不是 2 n + 1 2^n + 1 2n+1 整数倍 ;

以上是关于Linux 内核 内存管理伙伴分配器 ① ( 伙伴分配器引入 | 页块阶 | 伙伴 )的主要内容,如果未能解决你的问题,请参考以下文章

Linux 内核 内存管理伙伴分配器 ② ( 伙伴分配器分配内存流程 )

Linux 内核 内存管理伙伴分配器 ② ( 伙伴分配器分配内存流程 )

Linux 内核 内存管理物理分配页 ① ( 分区伙伴分配器物理分配页核心函数 __alloc_pages_nodemask | __alloc_pages_nodemask 函数完整源码 )

Linux 内核 内存管理分区伙伴分配器 ② ( free_area 空闲区域结构体源码 | 分配标志位 | GFP_ZONE_TABLE 标志位区域类型映射表 |分配标志位对应的内存区域类型 )

Linux 内核 内存管理分区伙伴分配器 ⑤ ( 区域水线 | 区域水线数据结构 zone_watermarks 枚举 | 内存区域 zone 中的区域水线 watermark 成员 )

Linux 内核 内存管理分区伙伴分配器 ⑤ ( 区域水线 | 区域水线数据结构 zone_watermarks 枚举 | 内存区域 zone 中的区域水线 watermark 成员 )