
上图展示了P45芯片组(Intel芯片组)的典型MMIO分配,里面包含了大量系统所必须的内容:High BIOS、DMI总线、FSB中断、APIC、PCIE等多方面的设备地址。这些都是一款Intel芯片组正常运行所必须的东东,尤其是DMI总线(连接Intel芯片组南北桥)管理着主板上的大多数IO设备,它们自然必须在任何时候都享受着MMIO所分配的地址,而这个地址范围通常就是0.75GB。

DFI的X58主板给出了一个很有意思的选项,名叫Memory LowGap。这个选项可以让用户自定义选择TOLUD的地址,或者说自定义选择MMIO区域的大小。该选项的范围为1024M至3072M,即MMIO区域的大小为1024MB-3072MB。可能是因为需要映射到物理地址的寄存器数量很大,一些顶级显卡的驱动程序会要求比较大的MMIO区域支持,例如NVIDIA的GTX280、GTX295之类。4GB内存用户甚至可以发现,当更换显卡后,设备管理器显示的物理内存大小竟然也会发生变化,甚至会降低到3GB以下的数值,这就是因为某些高阶显卡申请了更大的MMIO,使得内存在4GB以下的地址空间被进一步压缩,我们可以在Windows的设备管理器内看到地址分布的变化。

当我们把DFI X58主板BIOS中的Memory LowGap调至一个巨额的数值之后,上图中的景象就出现了。由于MMIO的进一步扩张,我们发现连2GB的内存竟然也被侵蚀了好大一块,50000000h(1280MB)之后的地址就已经开始被MMIO占据。4GB地址就像是一辆拥挤的公共汽车,空间总共就那么大,PCI Memory Address Range挤上去了、满载了,内存自然就上不去了。难道内存就这么白费了?先不用着急,继续向下看,我们会把内存找回来的。