内存管理(五):memblock

linux版本:4.14.74
硬件:ARMV8 A53
完成DTB的映射之后,内核可以访问这一段的内存了, Dtb通过choosen node/memory node/reserved-memory node等节点勾勒出整个内存布局的情况,为后续内存管理初始化奠定基础。Dtb中有了内存布局的信息之后,如何管理这些模块呢,这就是引导内存分配器memblock

1.	struct memblock {  
2.	    bool bottom_up;  /* is bottom up direction? */  
3.	    phys_addr_t current_limit;  
4.	    struct memblock_type memory;  
5.	    struct memblock_type reserved;  
6.	#ifdef CONFIG_HAVE_MEMBLOCK_PHYS_MAP  
7.	    struct memblock_type physmem;  
8.	#endif  
9.	};  
  • Memory:内存类型,包括已分配和未分配内存
  • Reserved:已分配内存
  • Physmem:物理内存类型
    内存类型memory是物理内存类型的子集,在引导内核时可以使用内核参数指定可用内存的大小,导致内核不能看见所有内存。
    在这里插入图片描述
    内核在收集了若干和memory相关的信息后,会调用memblock模块的接口API(例如:memblock_add、memblock_reserve、memblock_remove等)来管理这些内存布局的信息。内核需要动态管理起来的内存资源被保存在memblock的memory type的数组中(下图中的绿色block,按照地址的大小顺序排列),而那些需要预留的,不需要内核管理的内存被保存在memblock的reserved type的数组中(下图中的青色block,也是按照地址的大小顺序排列)。除了这些信息以外,memblock还具备了分配内存的功能,但要注意的是,memblock分配得到仍是物理地址,页表映射还没完成,无法得到虚拟地址
    在这里插入图片描述
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值