虚拟地址空间布局[mem_map/memmap]

VMEMMAP_SIZE

 内核使用page结构体描述一个物理页,内存的所有物理页对应一个page结构体数组。如果内存的物理地址空间不连续,存在很多空洞,称为稀疏内存。vmemmap区域是稀疏内存的page结构体数组的虚拟地址空间。

 根据注释:这个区域的大小可以存放所有的 struct page 对象数组,这个数组可以覆盖 整个 线性映射区域。 
#define VMEMMAP_SIZE \

(UL(1) << (VA_BITS - PAGE_SHIFT - 1 + STRUCT_PAGE_MAX_SHIFT))

(内核虚拟空间大小/4096/2=内核线性映射地址空间的page数量(P),对应page 结构体占用的总虚拟内存=P*BITS(STRUCT_PAGE_MAX_SHIFT)=2^6*P.)


举例:sizeof struct page 为44个字节。 2^5 = 32 < 44 ;   2^6 = 64 > 44; 则 STRUCT_PAGE_MAX_SHIFT 为 6 。 shift 是移位, max 是最大。这么大的空间中,肯定可以存放的下一个 struct page 对象。

2 modules

如果定义了CONFIG_MODULES功能,则需要在用户空间开辟一段空间给insmod插入的模块。

这部分空间是动态映射的,在定义CONFIG_HIGHMEM情况下为16MB-2MB=14MB,从0xbf00000 - 0xbfe00000。

在 AARCH64 里是128M


                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值