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