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

Linux是如何知道它的';x86-64 arch上的最大物理地址范围。?,linux,memory,x86,kernel,x86-64,Linux,Memory,X86,Kernel,X86 64,Linux如何知道它的最大物理地址范围,特别是当它构建分页表层次结构时?它如何知道不将虚拟地址映射到超出最大可用硬件RAM的物理地址?是否有一些CPU指令用于此操作,或者它从别处获取信息?请参阅: 有一些BIOS函数可以获取信息,例如这一个(引用自OSDev): 到目前为止,检测PC内存的最佳方法是使用INT 0x15,EAX=0xE820命令。此功能在所有电脑上都可用 自2002年开始构建,在此之前在大多数现有PC上构建。这是唯一的选择 BIOS功能,可检测4G以上的内存区域。这是命中注定的

Linux如何知道它的最大物理地址范围,特别是当它构建分页表层次结构时?它如何知道不将虚拟地址映射到超出最大可用硬件RAM的物理地址?是否有一些CPU指令用于此操作,或者它从别处获取信息?

请参阅:

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

到目前为止,检测PC内存的最佳方法是使用INT 0x15,EAX=0xE820命令。此功能在所有电脑上都可用 自2002年开始构建,在此之前在大多数现有PC上构建。这是唯一的选择 BIOS功能,可检测4G以上的内存区域。这是命中注定的 终极内存检测BIOS功能

另一个信息来源是(请注意上面引用的E820!)。据我所知,
detect_memory_e820()
(位于for x86体系结构中)从BIOS检索物理内存映射


有关物理地址映射相关中断的详细说明,请参见。

谢谢您的回答。但是该调用在内核代码中的确切位置是什么?@user1483597更新了答案,将其包括在内that@user1483597如果您对INT15h感兴趣,请添加另一个链接details@user1483597现在我的答案中也链接了内核源代码