科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网服务器频道我的内存谁也没动:4GB内存终极解迷

我的内存谁也没动:4GB内存终极解迷

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

为了让广大网友都能够了解事实究竟,今天笔者就为操作系统客串一次辩护律师,为其平反这个内存贪墨案,找寻那失落的内存。真相永远只有一个!

来源:OCER论坛 2009年1月5日

关键字: 4GB内存 PCI 内存

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共6页)

内存地址“侵蚀者”:PCI Memory Address Range

我的内存谁也没动:4GB内存终极解迷

  PCI Memory Address Range这一部分包含了各种I/O设备,系统总线等部分所需的地址,上面的图中我们可以看到ICH10的磁盘控制器、PCIE(显卡)等该系统现有设备所占据的地址范围。这些I/O设备地址被通过一种叫做MMIO的技术使得CPU可以高速便捷的访问它们。根据设备状况的不同,PCI Memory Address Range的大小也会发生变化,这都一切取决于硬件本身,例如芯片组、显卡等等。

  小贴士:MMIO全称是Memory-mapped I/O,是一种在CPU和外围设备之间执行输入输出功能的途径。MMIO与内存使用相同的地址总线,CPU用于访问内存的指令也可以直接用于访问I/O设备。CPU会将自己的地址空间预留一块用于I/O设备,而不是物理内存。

  PCI Memory Address Range的地址范围定义为4GB至TOLUD(即FFFFFFFFh减去TOLUD地址),由高地址位(FFFFFFFFh)向低地址位延伸。TOLUD全称是Top of Low Usable Dram,这个16bit寄存器由BIOS赋予一个适当的数值,其含义是4GB地址内的物理内存地址顶端。在我们使用4GB内存的时候,这个数值通常会是D0000000h,即3.25GB。而之前图中的系统用的是2GB内存,那么物理内存地址顶端自然就只到7FFFFFFFh(2GB),PCI Memory Address Range也就自动占据了80000000h至FFFFFFFFh这剩下2GB的地址空间。

我的内存谁也没动:4GB内存终极解迷

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

  现在是时候讲一讲主板BIOS中的Memory Remapping(也有的叫Memory Hole Remapping)了。实际上Memory Remapping就是在定义TOLUD的地址(华硕P5Q主板为例),这个功能并不会让任务管理器中显示4GB内存。在使用4GB内存(准确说应该是3.25GB以上内存)并将该功能开启时,TOLUD会被赋值D0000000h,这样MMIO就会被固定在3.25GB至4GB这个范围内,所以我们就能够看到3.25GB的物理内存显示了。

  注:每款主板BIOS中的Memory Remapping项含义可能有所不同,其也可能是Memory Reclaim功能的开关。关于Memory Reclaim后文将详细讲述。

我的内存谁也没动:4GB内存终极解迷

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

  若PCI Memory Address Range小于驱动程序的需求,那么会导致驱动程序安装失败,这是DFI提供这个选项的原因。关于这个问题应该有两种可能:一是这些高阶GeForce显卡本身确实需求更多的物理地址空间才能正常运作;二是NVIDIA的显卡驱动设计上对高位内存地址考虑不周。不过这两种可能似乎都存在,而NVIDIA也已经正在驱动上慢慢改进这个问题。由于笔者并没有GTX295这样的怪兽显卡可以做尝试,所以无法了解DFI以外的主板是如何解决这个问题的,不过似乎多数主板BIOS都能够应对这个问题。但有一点可以肯定的是,在这种情况下一定要关闭Memory Remapping,因为0.75GB的PCI Memory Address Range基本是不够的。

我的内存谁也没动:4GB内存终极解迷

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

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章