前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Linux 内核 内存管理】引导内存分配器 bootmem ③ ( bootmem 引导内存分配器算法 | 低端内存映射 | 内存记录位图 | 最先适配算法 | 内存分配记录 | 内存操作函数 )

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

作者头像
韩曙亮
发布2023-03-30 14:50:19
3.3K0
发布2023-03-30 14:50:19
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、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 架构中 , 没有使用 引导内存分配器 ;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、bootmem 引导内存分配器算法
    • 1、低端内存映射
      • 2、内存记录位图
        • 3、最先适配算法
          • 4、内存分配记录
          • 二、bootmem 引导内存分配器 内存操作 函数 ( alloc_bootmem | free_bootmem )
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档