某些程序真的可以访问 32 位系统上“不可用”的 RAM 吗?

Syn*_*ech 5 windows windows-7 memory-limit 32-bit windows-xp

我见过一些程序(尤其是 RAM 驱动软件)声称能够访问 32 位系统(包括 XP)上的“不可用 RAM”。我想知道他们是否真的可以,如果可以,他们是如何做到的。

技术的

有几种不同的方式可以限制安装在 32 位 Windows 系统中的 RAM 量(此处简化):

  • 2:2 (2GB) 虚拟地址空间

    由于Windows 对地址空间进行分区的方式,程序最多只能分配大小为 2GB 的内存块。/3GB通过将比率从 2:2 更改为 3:1 ,交换机可以在一定程度上缓解这种情况。

  • 3.xGB - 4GB

    由于硬件地址映射 ( MMIO ),一些地址空间将被安装(或内置)系统的其他设备用完。在支持它的系统上,内存重新映射可能会对此有所帮助。

  • 4GB+

    因为一个32位的指针最多只能指向2个32地址,所以最多只能指向4GB的数据。使用PAE 模式可以通过使用更大的指针和“页面”来帮助解决这个问题(很像旧的 16 位 DOS 段:偏移内存方案,具有讽刺意味的是,保护模式应该比实模式更好)。

  • 微软的营销限制

    除了硬件和软件的数学限制外,Microsoft 还Windows(*包括 64 位版本)施加了人为限制,以便他们可以针对不同的目的和价格销售不同的版本。

细节和例子

我的问题不是关于 Windows 或常规程序(如记事本)如何受到这些影响。我已经熟悉这些限制及其典型的变通方法(包括使 Windows 7 内核更像 Windows Server 2003 内核俄罗斯补丁),并且我对重新调整它们不感兴趣。

我的问题是关于声称能够克服这些限制中的一个或多个的程序。

我想我已经看到其他程序做出这样的声明,但我确信某些 RAM 驱动器软件确实如此。一些示例包括RaxcoDATARamGavotte。我之前尝试过几个 RAM 驱动程序,这些程序做出了这样的声明(我认为 Gavotte 是其中之一),但无法获得任何实际访问额外内存的程序。

索赔

Raxco 提出以下声明:

RamDisk Plus 不仅可以创建 4GB 以上的隐藏 RAM 的 RAM 磁盘;它还可以使用 3.2GB 和 4GB 之间无法访问的内存。

后来他们提到:

请记住,这只能在 Windows 报告超过 4GB 的隐藏 RAM 时完成。

第一个陈述是好的,因为与大多数这些程序不同,它克服了哪些限制并不含糊。

然而,像大多数这些程序一样,它对于访问额外内存需要什么(硬件和软件方面)是模糊的,并且没有说明它是如何工作的或它有什么样的副作用(例如,如果它只是添加/3GB开关或启用 PAE 模式,那么它并没有“克服”问题,而是启用了一种特殊的 Windows 模式——这会影响操作系统和所有程序——并适应它)。

Jens 对 Gavotte RAM 驱动器的讨论似乎表明它们(至少是 Gavotte)实际上是通过使用 PAE 来工作的。它还提到了来自德国杂志c't的文章Geisterspeicher作为突破的来源。不幸的是,不仅这篇文章不是免费的,而且我的德语还不够流利,无法阅读技术文章,所以我不知道它是否提供了它的工作原理或其要求的详细信息。

概括

有谁知道这些程序的说法是否属实?有没有人真正看到它起作用?如果是这样,需要什么才能使它们工作?此外,它们究竟是如何实现的(它们是否通过启用/3GB、PAE 等影响整个系统和所有程序,或者它们是否在做一些特殊的事情,例如使用超大指针和直接访问硬件?

Syn*_*ech -1

当我重新编写问题以澄清我\xe2\x80\x99m 的要求并阻止人们尝试回答不同的问题时(尽管其他一些人提供了整个答案的一部分),我添加了一堆链接不同的页面解释了各种限制和解决方法。在这个过程中,我碰巧看到了几个不同的段落,它们以正确的顺序和正确的时机连接起来,这些段落放在一起,解释了程序如何访问额外的内存以及\xe2\x80\x99s需要什么这行得通。我\xe2\x80\x99将在这里列出我的发现。最有启发性的部分如下:

\n\n

延斯·舍夫勒(Jens Scheffler)评价加沃特

\n\n
\n

根据所使用的硬件和 BIOS 配置,3GB 到 4GB 之间的不可用内存(这是物理设备的保留地址区域)将重新映射到 4GB 以上的区域。\n Windows XP/Vista/7 32 位版本仅限于4GB RAM 地址,因此 4GB 以上的内存只是“未使用”。

\n\n

Gavotte RAMDisk 能够将 RAMDisk 设置在 4GB 内存地址以上的区域中,并可以将该区域用于其他目的。

\n
\n\n

Microsoft 在知识库文章中解释了为什么 32 位 Vista 不显示 4GB 以及如何做到这一点:

\n\n
\n

要让 Windows Vista 在安装了 4 GB 内存的计算机上使用全部 4 GB 内存,该计算机必须满足以下要求:

\n\n
    \n
  • 芯片组必须支持至少 8 GB 的地址空间。具有此功能的芯片组包括:\n \n
      \n
    • 英特尔975X
    • \n
    • 英特尔P965
    • \n
    • 插槽 775 上的英特尔 955X
    • \n
    • 支持使用插槽 F、插槽 940、插槽 939 或插槽 AM2 的 AMD 处理器的芯片组。这些芯片组包括任何 AMD 插槽和 CPU 组合,其中内存控制器驻留在 CPU 中。
    • \n
  • \n
\n\n

CPU 必须支持 x64 指令集。AMD64 CPU 和 Intel EM64T CPU 支持此指令集。\n BIOS 必须支持内存重映射功能。内存重新映射功能允许将先前被外围组件互连 (PCI) 配置空间覆盖的系统内存段重新映射到 4 GB 地址线上方。必须在计算机上的 BIOS 配置实用程序中启用此功能。查看您的计算机产品文档,获取说明如何启用此功能的说明。许多面向消费者的计算机可能不支持内存重新映射功能。此功能的文档或 BIOS 配置实用程序中没有使用标准术语。因此,您可能必须阅读各种 BIOS 配置设置的说明,以确定这些设置是否启用内存重新映射功能。\n 必须使用 x64 (64 位) 版本的 Windows Vista。\n请联系计算机供应商以确定您的计算机是否满足这些要求。

\n
\n\n

总结一下它是如何工作的:

\n\n
    \n
  • BIOS 将冲突的内存地址(由 MMIO 引起)映射到 4GB 以上的地址
  • \n
  • Windows运行在PAE模式下以支持软件中的大指针
  • \n
  • 程序使用大指针访问\xe2\x80\x9chigh\xe2\x80\x9d内存(3-4GB之间或4GB以上)
  • \n
\n\n

要使其发挥作用,有两个要求:

\n\n
    \n
  • 硬件 (BIOS) 必须支持内存重新映射。在 BIOS 中查找标记为remap或 的设置memory hole

  • \n
  • Windows 必须设置为 PAE 模式,这意味着所有程序都会受到影响。

  • \n
\n\n

有一些重要因素和问题需要注意:

\n\n
    \n
  • 如果您的系统不支持内存重新映射,那么程序将无法访问额外的内存,并且所有内容(包括 Linux)都将限制为 3.xGB RAM,因为这是在硬件级别公开的全部内容。请参阅知识库文章中提到的列表,了解支持此功能的最低芯片组(我的是 865,所以我\xe2\x80\x99m 运气不好;嘘!这解释了为什么程序无法\xe2\x80\x99t 访问我的额外 RAM )。

    \n\n
      \n
    • \xe2\x80\x99 32 位系统不支持内存重新映射的情况并不少见,因为当添加 4GB 变得大众可以负担得起时,64 位系统已经开始成为标准,因此主板制造商并不多费心去实现它(至少不在他们的中低端型号中)。
    • \n
  • \n
  • 使用 PAE 模式可能会影响系统稳定性,特别是对于某些驱动程序

    \n\n
      \n
    • 由于驱动程序兼容性问题,微软在 XP SP2 中专门删除了访问超过 4GB 内存的能力(保留了地址窗口扩展)。这对那些声称能够在 XP 上做到这一点的人产生了严重怀疑,特别是那些将 SP2、SP3 和厨房水槽作为无意义覆盖(阅读关键字垃圾邮件)而不是实际情况的心不在焉的问题的人,经过测试的平台。
    • \n
  • \n
  • Microsoft 知识库文章给出了这一令人不快的澄清:

    \n\n
    \n

    注: 当计算机上安装的物理 RAM 等于芯片组支持的地址空间时,操作系统可用的总系统内存始终小于安装的物理 RAM。例如,考虑一台具有支持 8 GB 地址空间的 Intel 975X 芯片组的计算机。如果安装 8 GB RAM,操作系统可用的系统内存将根据 PCI 配置要求而减少。在这种情况下,PCI 配置要求将操作系统可用的内存减少了大约 200 MB 到大约 1 GB 之间的量。减少量取决于配置。

    \n
    \n\n

    这意味着您永远无法真正 \xe2\x80\x9cmax out\xe2\x80\x9d 32 位系统。最接近的方法是将 4GB 放入支持内存重新映射的主板中,并使用可以利用多余空间的 RAM 驱动程序。

  • \n
\n\n

在过去十年左右的时间里,计算机确实变得更加复杂,不幸的是,许多复杂性都是错综复杂、相互交织的,并且使用令人困惑的术语来混淆事物。不过,这一问题似乎已得到解决。如果您拥有合适的硬件并且可以将 Windows 置于 PAE 模式(因此没有带有异常或过时驱动程序的外来硬件),那么程序是否实际上可以使用 32 位系统中的多余内存的答案是肯定的。否则,答案(就像对我来说)是否定的,他们可以\xe2\x80\x99t。

\n