在linux内核中,mem_map
是包含所有“结构页”描述符的数组。这些页面包含lowmem中的128MiB内存,用于动态映射highmem。为什么我们需要x86上的zone_highmem?
由于lowmem大小为1GiB,因此mem_map
阵列仅有1GiB/4KiB = 256KiB条目。如果每个条目大小是32字节,则mem_map
存储器大小= 8MiB。但是,如果我们可以使用mem_map
来映射所有4GiB物理内存(如果我们在x86-32上有很多物理内存),那么mem_map数组将占用32MiB,这不是很多内核内存(或者我错了吗?) 。
所以我的问题是:为什么我们需要使用128MiB低间接HIGHMEM映射摆在首位?换句话说,为什么不直接在内核空间中映射所有这些最大4GiB物理内存(如果可用)呢?
注:如果我的上述内核源代码的理解是错误的,请大家指正。谢谢!