OK6410A 开发板 (八) 38 linux-5.11 OK6410A 为什么需要这么多内存管理器

最后 用 memblock 不行吗?
跳过 memblock 直接设置 buddy 不行吗
memblock 和 buddy 的区别

为什么 是 buddy 是 内存管理器 以及 其他管理器的基础


为什么 buddy 建立了还要 建立 slab 和 vmalloc ?


这几个内存管理器的特点是什么???

  • 第三阶段的消费者
第三阶段建立的是 buddy


alloc_pages 申请到的都是 物理内存 连续的 页
物理地址连续,虚拟地址肯定连续

但至少一个页及以上

问题:
	1.buddy提供的api 最少可以申请的内存大小是一个页,不能再小
	2.alloc_pages 如果申请2个及以上的页,只有 当 存在物理内存连续的2个页时,才能正确返回;否则,返回 0
	


  • 第四阶段的消费者


用于解决 buddy 第1个问题
解决方案:
	将 buddy 看成 内存批发的 大代理商(buddy内存分配器),构建一个小代理商(slab内存分配器)
	slba 从 buddy 批发内存,然后将 内存分成 更小的块(A)(小于1) ,并进行管理
	用户 从 slab  批发 A
其他:
	因为没有解决第二个问题,只要申请成功(不管多大),肯定是下面的状态:
		物理地址是连续的,虚拟地址是连续的


  • 第五阶段的消费者

用于解决 buddy 第2个问题
解决方案:
	不是在buddy基础上建立一个分配器
	而是封装一层
	这多的一层主要是 使用 页表 将 不连续的物理内存 映射到 虚拟内核地址空间 中,使之看起来是连续的.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值