【Linux 内核 内存管理】引导内存分配器 bootmem ③ ( bootmem 引导内存分配器算法 | 低端内存映射 | 内存记录位图 | 最先适配算法 | 内存分配记录 | 内存操作函数 )

2023-03-30 14:50:19 浏览数 (1)

文章目录

  • 一、bootmem 引导内存分配器算法
    • 1、低端内存映射
    • 2、内存记录位图
    • 3、最先适配算法
    • 4、内存分配记录
  • 二、bootmem 引导内存分配器 内存操作 函数 ( alloc_bootmem | free_bootmem )

一、bootmem 引导内存分配器算法


bootmem 引导内存分配器算法 ;

1、低端内存映射

低端内存映射 : 内核启动过程中 , 将 " 低端内存 " 交给 " 引导内存分配器 " 管理 ,

低端内存 可以 直接映射到 内核虚拟地址空间 对应的 物理内存 ;

2、内存记录位图

内存记录位图 : 引导内存分配器 中 , 使用 " 位图 " 记录 物理页 的分配情况 ,

如果物理页 分配 , 在 位图中物理页对应的为 置

1

;

如果物理页 回收 , 在 位图中物理页对应的为 置

0

;

3、最先适配算法

最先适配算法 : 分配内存时 , 扫描 " 位图 " , 找到 满足 内存需求大小 的 第一块 空闲的内存块 ;

4、内存分配记录

内存分配记录 : 为了有效利用内存 , " 引导内存分配器 " 支持小于

1

页的内存块分配 ,

bootmem_data 结构体中

  • last_end_off 成员 记录 上一次分配 内存块 的结束位置 1 地址 , 也就是 分配内存块 结束位置 后面一个字节 , 下一个将要开始分配内存的位置 ;
  • hint_idx 成员 表示 上一次分配 内存块 的结束位置 后面的 物理页位置 索引 , 下次分配优先分配该索引 物理页 ;

在下一次分配内存时 , 如果 上次内存分配的物理页 的剩余空间 小于等于 要分配的内存 , 那么 直接在该 物理页 上分配内存 ;

二、bootmem 引导内存分配器 内存操作 函数 ( alloc_bootmem | free_bootmem )


" bootmem 引导内存分配器 " 对外提供的 内存操作 函数如下 :

内存分配函数 : alloc_bootmem

内存释放函数 : free_bootmem

注意 : 在 ARM64 架构中 , 没有使用 引导内存分配器 ;

0 人点赞