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

Posted 韩曙亮

tags:

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

文章目录





一、伙伴分配器分配内存流程



伙伴分配器 以 " 阶 " 为单位 , 分配 / 释放 物理页 ;

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

页 / 阶 概念参考 【Linux 内核 内存管理】伙伴分配器 ① ( 伙伴分配器引入 | 页块、阶 | 伙伴 ) 博客 ;


" 伙伴分配器 " 分配内存流程 : 假设要 分配 n n n 阶页块 ;


1、查询 n 阶页块


查询当前是否有 空闲的 n n n 阶页块 ,

  • 如果有则 直接分配 ,
  • 如果没有 , 则进入下一步 , 查询 n + 1 n + 1 n+1 阶页块 ;

2、查询 n + 1 阶页块


查询当前是否有 空闲的 n + 1 n + 1 n+1 阶页块 ,

  • 如果有 , n + 1 n + 1 n+1 阶页块 分成 2 2 2 n n n 阶页块 ,

    • 一块插入 空闲 n n n 阶页块链表 ;
    • 一块 直接分配 ,
  • 如果没有 , 则进入下一步 , 查询 n + 2 n + 2 n+2 阶页块 ;


3、查询 n + 2 阶页块


查询当前是否有 空闲的 n + 2 n + 2 n+2 阶页块 ,

  • 如果有 , n + 2 n + 2 n+2 阶页块 分成 2 2 2 n + 1 n + 1 n+1 阶页块 ,

    • 一块插入 空闲 n + 1 n + 1 n+1 阶页块链表 ;
    • 一块将 n + 1 n + 1 n+1 阶页块 分成 2 2 2 n n n 阶页块 ,
      • 一块插入 空闲 n n n 阶页块链表 ;
      • 一块 直接分配 ,
  • 如果没有 , 则进入下一步 , 查询 n + 3 n + 3 n+3 阶页块 ;

新人创作打卡挑战赛 发博客就能抽奖!定制产品红包拿不停!

以上是关于Linux 内核 内存管理伙伴分配器 ② ( 伙伴分配器分配内存流程 )的主要内容,如果未能解决你的问题,请参考以下文章

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

Linux 内核 内存管理分区伙伴分配器 ① ( 分区伙伴分配器源码数据结构 | free_area 空闲区域数组 | MAX_ORDER 宏定义 | 空闲区域的页最大阶数 )

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

伙伴系统之伙伴系统概述--Linux内存管理(十五)

Linux 内核 内存管理分区伙伴分配器 ④ ( 备用内存区域列表排序方式 | 节点优先顺序 | 区域优先顺序 | 排序方式优缺点 | 默认排序方式 )

Linux 内核 内存管理分区伙伴分配器 ⑥ ( zone 结构体中水线控制相关成员 | 在 Ubuntu 中查看内存区域水位线 )