我需要一些帮助来理解 Linux 内核虚拟空间(特别是 LOWMEM 区域)与内核所见的可用 RAM 大小之间的确切关系。
阅读本文后:https://lwn.net/Articles/75174/ 和一些其他用户的帖子我得到了以下连接:
众所周知,32位虚拟地址空间(4GB)通常按照3GB/1GB或2GB/2GB的比例划分为用户空间地址和内核空间地址。
在内核空间地址中,我们可以找到内核映像本身,vmalloc 区域和一些其他工作人员......让我感兴趣的是 LOWMEM 区域。
3.LOWMEM 是内核虚拟地址的一个区域,为了提高效率,它直接映射到物理 RAM 中,而不使用“中级”转换。
对于这个问题,我忽略了 HIGHMEM 区域,因为它在我的系统中不存在(通过 menuconfig 将其关闭)。
系统有 1.5GB RAM。当虚拟地址空间按 3/1 的比例在用户和内核之间分配时,内核只能识别出 TotalMem 的 768MB(或接近这个数字)。
据称对此的解释是内核具有 1 GB 的虚拟地址空间,我们需要从中减去内核映像本身、vmalloc 区域和一些其他组件,然后剩下 768 MB 的 LOWMEM,显然由于某种原因,这也是我系统中的总内存量。
当我将比例改为 2GB/2GB 时,LOWMEM 区域增加了,然后我看到 TotalMem 为 1.5GB(同样,由于同样的原因,几乎是 1.5GB)
所以中间的结论是内核的LOWMEM区域的大小就是我在系统中拥有的TotalMem的大小。
我知道我在这里忽略了一些东西,因为这不可能是真的。
为什么我需要增加 LOWMEM 区域来获得更明显的 RAM 大小?用于管理内存的数据结构并没有那么大。
这会如何影响用户空间中的应用程序?为什么增加 LOWMEM 区域会对其他 3GB/2GB 用户空间地址产生任何影响?
谢谢!