BIOS提供的内存e820表信息如何解读?

荒城ideal 2019-04-19 10:42:49
我在Linux主机上使用“dmesg | grep e820”打印出了e820表的信息:

aaa@aaa:~$ dmesg | grep e820
[ 0.000000] e820: BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x00000000000903ff] usable
[ 0.000000] BIOS-e820: [mem 0x0000000000090400-0x000000000009ffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000c9f98fff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000c9f99000-0x00000000c9f99fff] ACPI NVS
[ 0.000000] BIOS-e820: [mem 0x00000000c9f9a000-0x00000000c9f9afff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000c9f9b000-0x00000000d987cfff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000d987d000-0x00000000daeb3fff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000daeb4000-0x00000000daef7fff] ACPI data
[ 0.000000] BIOS-e820: [mem 0x00000000daef8000-0x00000000db818fff] ACPI NVS
[ 0.000000] BIOS-e820: [mem 0x00000000db819000-0x00000000dbdfefff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000dbdff000-0x00000000dbdfffff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000dbe00000-0x00000000dfffffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000f8000000-0x00000000fbffffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000fe000000-0x00000000fe010fff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fec00fff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000ff000000-0x00000000ffffffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000021dffffff] usable
[ 0.000000] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
[ 0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
[ 0.000000] e820: last_pfn = 0x21e000 max_arch_pfn = 0x400000000
[ 0.000000] e820: last_pfn = 0xdbe00 max_arch_pfn = 0x400000000
[ 0.000000] e820: [mem 0xe0000000-0xf7ffffff] available for PCI devices
[ 0.135637] e820: reserve RAM buffer [mem 0x00090400-0x0009ffff]
[ 0.135638] e820: reserve RAM buffer [mem 0xc9f99000-0xcbffffff]
[ 0.135638] e820: reserve RAM buffer [mem 0xd987d000-0xdbffffff]
[ 0.135639] e820: reserve RAM buffer [mem 0xdbe00000-0xdbffffff]
[ 0.135640] e820: reserve RAM buffer [mem 0x21e000000-0x21fffffff]
aaa@aaa:~$

可以看到BIOS-e820提供的最大物理地址为0x000000021dffffff,但是我这台主机内存条的大小只有8G,也就是最大物理地址应该是0x00000001ffffffff。
为什么物理地址范围超过了内存条8G的地址空间? 这个e820表应该如何详细解读?
...全文
1772 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
养乌龟的hx 2019-07-10
  • 打赏
  • 举报
回复
你应该理解地址空间和内存这两个概念是有区别的,你的最大物理地址0x000000021dffffff,并不代表就是从0到0x000000021dffffff,中间有很多空洞,例如
[ 0.000000] BIOS-e820: [mem 0x0000000000090400-0x000000000009ffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
这两个都不连续,你把这些不连续的空洞减去,总量应该就是8G了

1,025

社区成员

发帖
与我相关
我的任务
社区描述
Linux /Unix kernel支持不同的硬件体系,X86, ARM, MIPS, 等等
社区管理员
  • CPU和硬件区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧