Linux如何知道它的最大物理地址范围,尤其是在构建分页表层次结构时?如何知道不将虚拟地址映射到超出最大可用硬件RAM的物理地址?是否有一些CPU指令,或者它在其他地方获取信息?
答案 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以获取与物理地址映射相关的中断的详细说明。