我试图了解哪个 Linux 内核函数读取可用物理内存量。之后,这些信息存储在哪里?
答案1
内核仅仅知道可用物理内存的数量是不够的:它还需要知道内存位于处理器地址空间中的位置。
如何实现这一点取决于每种硬件架构。
在 x86 系统上,固件使用芯片组特定的方法计算出该值,并将该信息提供给操作系统内核:
- 在使用旧版 BIOS 的系统上,可使用 BIOS 功能获取该信息
INT 0x15, EAX = 0xE820
:请参阅这篇 osdev.org 维基文章了解详情。 - 在本机模式下使用 UEFI 固件的系统上,内存映射由固件通过以下方式提供给引导加载程序/操作系统UEFI系统表,特别是使用该
GetMemoryMap
服务UEFI 引导服务表
- 在使用旧版 BIOS 的系统上,可使用 BIOS 功能获取该信息
在许多其他体系结构上,(初始)内存映射可以由设备树数据如果系统固件没有以任何其他方式提供它,或者如果您首先需要一些特定于硬件型号的信息,然后才能有效地从固件获取信息,则附加到内核。