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

2023-03-30 14:58:39 浏览数 (1)

文章目录

  • 一、伙伴分配器分配内存流程
    • 1、查询 n 阶页块
    • 2、查询 n 1 阶页块
    • 3、查询 n 2 阶页块

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


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

阶 ( Order ) : 物理页 的 数量单位 ,

n

阶页块 指的是

2^n

个 连续的 " 物理页 " ;

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

" 伙伴分配器 " 分配内存流程 : 假设要 分配

n

阶页块 ;

1、查询 n 阶页块

查询当前是否有 空闲的

n

阶页块 ,

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

阶页块 ;

2、查询 n 1 阶页块

查询当前是否有 空闲的

n 1

阶页块 ,

  • 如果有 , 将
n 1

阶页块 分成

2

n

阶页块 ,

  • 一块插入 空闲
n

阶页块链表 ;

  • 一块 直接分配 ,

  • 如果没有 , 则进入下一步 , 查询
n 2

阶页块 ;

3、查询 n 2 阶页块

查询当前是否有 空闲的

n 2

阶页块 ,

  • 如果有 , 将
n 2

阶页块 分成

2

n 1

阶页块 ,

  • 一块插入 空闲
n 1

阶页块链表 ;

  • 一块将
n 1

阶页块 分成

2

n

阶页块 ,

  • 一块插入 空闲
n

阶页块链表 ;

  • 一块 直接分配 ,

  • 如果没有 , 则进入下一步 , 查询
n 3

阶页块 ;

0 人点赞