我正在研究一个小的x86内核。我正在访问并尝试读取GRUB在多引导标题中提供的内存映射。我有一个Intel i3 cpu和4 GiB的RAM。这台机器上运行时,我读了下面的内存映射:内存映射显示比物理内存更多的内存
--Base Address-- --Length-- --Type--
0x0000000000000000 0x000000000009d000 0x1
0x000000000009d000 0x0000000000003000 0x2
0x00000000000e0000 0x0000000000020000 0x2
0x0000000000100000 0x00000000bb53f000 0x1
0x00000000bb63f000 0x0000000000080000 0x2
0x00000000bb6bf000 0x0000000000100000 0x4
0x00000000bb7bf000 0x0000000000040000 0x3
0x00000000bb7ff000 0x0000000000001000 0x1
0x00000000bb800000 0x0000000004800000 0x2
0x00000000e0000000 0x0000000010000000 0x2
0x00000000feb00000 0x0000000000004000 0x2
0x00000000fec00000 0x0000000000001000 0x2
0x00000000fed10000 0x0000000000004000 0x2
0x00000000fed18000 0x0000000000002000 0x2
0x00000000fed1b000 0x0000000000005000 0x2
0x00000000fee00000 0x0000000000001000 0x2
0x00000000ffe80000 0x0000000000180000 0x2
0x0000000100000000 0x0000000038000000 0x1
当我起来总可用内存方面,我得到...
为0x1(可选) - 3893.8 MIB
这似乎是正确的,留下最后200ish MiB为其他设备保留。 唯一的问题是总的其他存储器类型:
0X2,0x3,为0x4 - 331.5 MIB
把我的内存总量为4225.3 MIB或略高于4.1吉布,这引导我到我的问题:
为什么我总共超过4GiB的RAM,当我只有4GiB安装?
为什么内存映射0x0000000100000000中的最后一个基地址?只有4GiB的RAM,32位应该是解决所有问题所需的最大地址大小。我在这里误解了什么吗?
许多地址范围不一定是真实的存储器,它们可映射到DMA /显示/等。 –
确实如此,但这是否会造成对.875 GB的需求超出32位范围? – Joel