Linux如何知道它在x86-64 arch上的最大物理地址范围。

时间:2014-01-12 16:51:14

标签: linux memory x86 kernel x86-64

Linux如何知道它的最大物理地址范围,尤其是在构建分页表层次结构时?如何知道不将虚拟地址映射到超出最大可用硬件RAM的物理地址?是否有一些CPU指令,或者它在其他地方获取信息?

1 个答案:

答案 0 :(得分:2)

请参阅the related OSDev wiki page

有一些BIOS函数可以获取信息,例如这个(引自OSDev):

  

到目前为止,检测PC内存的最佳方法是使用INT   0x15,EAX = 0xE820命令。此功能适用于所有PC   自2002年以来建立,并在此之前的大多数现有PC上。这是唯一的   BIOS功能可以检测4G以上的内存区域。它应该是   最终的内存检测BIOS功能。

另一个信息来源是E820 wikipedia page(请注意上面引用的E820!)。据我所知,detect_memory_e820()位于arch/x86/boot/memory.c x86架构中,从BIOS中检索物理内存。

另请参阅http://www.uruk.org/orig-grub/mem64mb.html以获取与物理地址映射相关的中断的详细说明。