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



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

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

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

  2. 这个突出显示的语句意味着什么:"高内存页帧的分配仅通过alloc_page()完成作用这些函数不返回线性地址,因为它们不存在相反,函数返回第一个分配的页面帧的页面描述符的线性地址。这些线性地址始终存在,因为在内核初始化期间,所有页面描述符都会在低内存中一次性分配。"

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

  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。并考虑到CCD_ 2的大小。是,所有这些都可以存储在ZONE_NORMAL 中

最新更新