Windows 以哪种“顺序”管理 RAM?

use*_*722 16 memory windows memory-management

我问这个问题是因为我遇到了内存问题(BSOD、MemTest 错误),在我将故障棒从 SLOT3 切换到 SLOT4(如我的主板上所标记)后,这些问题似乎已经停止。

Windows 是否倾向于根据主板如何决定映射内存,先使用 SLOT1,然后使用 SLOT2、SLOT3、SLOT4 等?例如,如果我有 4 个 2GB 的记忆棒,并且我在特定时刻使用的 RAM 不超过 2GB(比如我只是盯着我的桌面或听音乐),其他 3 个记忆棒是否保留Windows 仅使用第一根棒 (SLOT1) 时处于非活动状态?

Ton*_*nny 26

它不会那样工作。操作系统甚至不知道这些数字。

主板 (bios) 将条带组织成 1 个或多个内存块,然后移交给操作系统。顺序不一定按插槽编号的顺序排列。RAM 的 SLOT4 条带可能实际保存地址 0,并且最高地址位于 SLOT2 条带的末尾。
此外(多通道 RAM),插槽可能成对使用(或什至三元组),它们的内存交错使用:来自 SLOT1 的奇数内存行和来自 SLOT2 的偶数行。

并且让它变得更加复杂。任何现代操作系统都使用虚拟内存。如何在物理内存之上分配虚拟内存空间主要由 MMU(内存管理单元)处理,它是硬件(CPU 和/或北桥芯片,取决于我们正在谈论的特定 CPU)的一部分。MMU 如何混洗内存以将其呈现给操作系统可能会有很大差异。

更复杂的是,Windows 会将其使用范围扩展到整个 RAM 空间。将最低部分用于操作系统和中断,但驱动程序和其他硬件相关的东西(如视频缓冲区)通常在 RAM 空间的末尾分配,程序在中间的某个地方。

TL:DR:没有确定操作系统最终如何使用 RAM 插槽的一般规则。主板上的数字只是告诉用户必须按什么顺序填充 SLOTS。它们对操作系统没有任何意义。

在任何现代操作系统(不仅仅是 Windows)上,您都不能让操作系统避免使用部分物理 RAM 来解决问题。(就像物理硬盘通过映射坏块来做的那样。)您必须物理移除坏内存条或避免将好内存条放入坏插槽中。
并且找出哪个杆或插槽是坏的可能是一个主要问题,因为您无法从外部真正分辨出您的杆或插槽是坏的。
测试它的唯一方法是在已知良好的主板上一次一个地尝试棒。

  • *在任何现代操作系统(不仅仅是 Windows)上,您都不能让操作系统避免使用部分物理 RAM 以解决坏处* 不正确;如果您知道坏位的物理地址(例如来自 memtest86+),您可以使用包含坏地址列表的选项或类似的选项启动 Linux。([如何根据 MemTest86+ 错误指示将正确的坏 RAM 扇区列入黑名单?](//unix.stackexchange.com/q/75059))。较旧的文档记录了 `badram=` 内核命令行(又名 boo)选项:[Automatically memtest and then boot](//unix.stackexchange.com/q/120778) (11认同)
  • 虚拟内存完全由操作系统控制:它设置页表,在需要时对它们进行任何更改,并且通常可以将虚拟地址和物理地址精确地映射到另一个。所以 MMU 对内存空间的洗牌在这里是无关紧要的。 (2认同)

Eug*_*eck 13

最有可能的是,移除和重新插入 DIMM 的行为解决了问题,而不是交换位置。

DIMM 触点携带的频率在 GHz 范围内,在这种情况下会发生非常奇怪的事情。触点通常镀金并不是随机的。“重新安装”DIMM 会将接触点移动几分之一毫米,并且可以轻松地将接触质量从“不够好”变为“刚刚好”

  • 测试很容易——将 DIMM 移回原来的位置,看看问题是否再次出现。如果不是,则表明重新插入是修复,而不是交换。 (2认同)