超过896MB的线性地址对应于高内存区域ZONE_HIGHMEM。 因此页面分配器函数不适用于此区域,因为它们在ZONE_NORMAL和ZONE_DMA中提供直接映射的页面帧的线性地址。
我对Undertanding linux Kernel中指定的这些行感到困惑:
当他们说&#34时,他们的意思是什么?在64位硬件平台上,ZONE_HIGHMEM总是空的。"
这个突出显示的语句是什么意思:"高内存页面帧的分配只能通过alloc_pages()函数完成。这些函数不返回线性地址,因为它们不存在。 而是函数返回第一个分配的页面框架的页面描述符的线性地址。这些线性地址始终存在,因为所有页面描述符都在内存初始化期间永久分配在低内存中。"
这些页面描述符是什么,896MB是否已经拥有整个RAM的所有页面描述符。
答案 0 :(得分: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
我认为页面描述符意味着struct page
。并考虑struct page
的大小。是的,所有这些都可以存储在ZONE_NORMAL