hi Chen,
Sorry for the late reply.
你说的是:dram的内存映射方式单一,这种方式可能不能对映射所有的物理内存。那Linux下有没有更加通用并被大家普遍认可的工具,能够读取所有物理内存空间的内容呢?
我测试了下fileview程序读取e820,以下是结果(其中*BIOS-e820表示该区域有内容,+BIOS-820表示该区域全FF,-BIOS-820表示该区域全00)。此外,还有部分地址超过我虚拟机物理地址范围(3G),无法读取。
[ 0.000000] e820: BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009f3ff] usable
[ 0.000000] *BIOS-e820: [mem 0x000000000009f400-0x000000000009ffff] reserved
[ 0.000000] +BIOS-e820: [mem 0x00000000000ca000-0x00000000000cbfff] reserved
[ 0.000000] *BIOS-e820: [mem 0x00000000000dc000-0x00000000000fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000bfedffff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000bfee0000-0x00000000bfefefff] ACPI data
[ 0.000000] BIOS-e820: [mem 0x00000000bfeff000-0x00000000bfefffff] ACPI NVS
[ 0.000000] BIOS-e820: [mem 0x00000000bff00000-0x00000000bfffffff] usable
—–虚拟机分配的是物理内存为3G,以下地址超过物理地址上线,无法读取—–
[ 0.000000] BIOS-e820: [mem 0x00000000e0000000-0x00000000efffffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fec0ffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000fffe0000-0x00000000ffffffff] reserved
[ 0.000000] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
[ 0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
[ 0.000000] e820: last_pfn = 0xc0000 max_arch_pfn = 0x400000000
[ 0.000000] e820: [mem 0xc0000000-0xdfffffff] available for PCI devices
[ 0.802455] e820: reserve RAM buffer [mem 0x0009f400-0x0009ffff]
[ 0.802458] e820: reserve RAM buffer [mem 0xbfee0000-0xbfffffff]
从实验结果看来,e820 reserved区域的读取结果为非00。