内核虚拟地址空间中的高内存映射

时间:2015-02-11 00:25:34

标签: linux memory-management linux-kernel virtual-memory

超过896MB的线性地址对应于高内存区域ZONE_HIGHMEM。 因此页面分配器函数不适用于此区域,因为它们在ZONE_NORMAL和ZONE_DMA中提供直接映射的页面帧的线性地址。

我对Undertanding linux Kernel中指定的这些行感到困惑:

  1. 当他们说&#34时,他们的意思是什么?在64位硬件平台上,ZONE_HIGHMEM总是空的。"

  2. 这个突出显示的语句是什么意思:"高内存页面帧的分配只能通过alloc_pages()函数完成。这些函数不返回线性地址,因为它们不存在。 而是函数返回第一个分配的页面框架的页面描述符的线性地址。这些线性地址始终存在,因为所有页面描述符都在内存初始化期间永久分配在低内存中。"

  3. 这些页面描述符是什么,896MB是否已经拥有整个RAM的所有页面描述符。

1 个答案:

答案 0 :(得分:1)

  1. 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

  2. 我认为页面描述符意味着struct page。并考虑struct page的大小。是的,所有这些都可以存储在ZONE_NORMAL