在linux内核中,mem_map
是包含所有"struct page"描述符的数组.这些页面包含lowmem中的128MiB内存,用于动态映射highmem.
由于lowmem大小为1GiB,因此mem_map
阵列只有1GiB/4KiB = 256KiB条目.如果每个条目大小为32字节,则mem_map
内存大小= 8MiB.但是如果我们可以使用mem_map
映射所有4GiB物理内存(如果我们在x86-32上有这么多物理内存可用),那么mem_map数组将占用32MiB,这不是很多内核内存(或者我错了?).
所以我的问题是:为什么我们首先需要将低128MiB用于间接高精度映射?换句话说,为什么不直接在内核空间中映射所有那些最大4GiB物理内存(如果可用)?
注意:如果我对上面的内核源代码的理解有误,请更正.谢谢!