超过896MB的线性地址对应High memory region ZONE_HIGHMEM。 因此页面分配器函数不会在这个区域上工作,因为它们给出了 ZONE_NORMAL 和 ZONE_DMA 中直接映射的页面框架的线性地址。
我对 Undertanding linux Kernel 中指定的这些行感到困惑:
当他们说“在 64 位硬件平台中 ZONE_HIGHMEM 总是空的”时,他们是什么意思。
这条突出显示的语句是什么意思:“高内存页框的分配仅通过 alloc_pages() 函数完成。这些函数不返回线性地址,因为它们不存在。而是函数返回第一个分配的页框的页描述符的线性地址。这些线性地址始终存在,因为所有页描述符在内核初始化期间都在低内存中分配一次并永远存在。”
这些页面描述符是什么?896MB是否已经拥有整个RAM的所有页面描述符。
最佳答案
x86-32 内核需要高内存才能访问超过 1G 的物理内存,因为不可能在 32 位地址空间和内核/用户中永久映射超过 2^{32} 个地址拆分为1G/3G。 x86-64 内核没有这样的限制,因为物理可寻址内存的数量(当前为 256T)适合其 64 位地址空间,因此可以始终被永久映射。 高内存是一个黑客。理想情况下你不需要它。实际上,x86-64 的重点是能够直接寻址您可能需要的所有内存。采取 来自 https://www.quora.com/Linux-Kernel/What-is-the-difference-between-high-memory-and-normal-memory
我认为页面描述符的意思是
struct page
。并考虑struct page
的大小。是的,所有这些都可以存储在 ZONE_NORMAL
关于linux - 内核虚拟地址空间中的高内存映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28444440/