我正在阅读有关 Memtest 的另一个问题并开始疑惑:Memtest86 在 RAM 损坏的情况下如何运行?
想想看:Memtest86 需要存储有关 RAM 大小、RAM 中的内容以便稍后进行比较、屏幕更新位置等更多信息。使用变量需要 RAM 正常运行。但是,当您在可能有缺陷的 RAM 上运行程序时,如何获得可靠的结果?
类似的做法是从你正在检查的硬盘上运行硬盘检查程序。你永远不会这样做,坏块可能会以许多意想不到的方式影响程序
Memtest86 在 RAM 损坏的情况下如何运行?
答案1
主要是因为加载 memtest 所需的内存量非常小。如果程序运行,则很可能该区域的内存没有问题。
机会是-
- 加载 memtest 的那小段内存有问题。
- 它仍然足够好,能够成功完成所有测试而没有明显的问题。
极不可能。
答案2
Memtest 非常耐用,因为它实际上并不依赖于所测试的 RAM。
例如,测试 0 使用行走的算法,并且该测试所需的只是一个指针(可能已缓存),因为它只比较两个连续的内存地址。
因此,如果我们有一个 3 位 RAM 条,memtest 会用以下命令加载它:
<pointer location> 00000001 00000010 00000100 00001000 00010000 00100000 01000000
如果第一个地址被损坏,它会比较两个随机位置:
00000001 00100000
即使 memtest 的变量被破坏,它仍然会失败。
答案3
Memtest 必须至少做出一个假设,即至少它本身所加载的内存是好的。之后,它能够完整地扫描和测试其余内存。
它可能仍然能够读取和检测其自身内存中的错误,因为作为唯一加载的程序,它应该能够访问系统上的几乎所有内存,因此能够读取并将该内存与“已知良好”样本进行比较。
答案4
想想看:Memtest86 需要存储有关 RAM 大小、RAM 中的内容以便稍后进行比较、屏幕更新位置等更多信息。使用变量需要 RAM 正常运行。但是,当您在可能有缺陷的 RAM 上运行程序时,如何获得可靠的结果?
嗯,这就是 Memtest 所做的 - 它将各种(已知)模式写入您的 RAM,然后将其读回并进行比较。如果不匹配,则您的 RAM 一定已损坏。
类似的做法是从你正在检查的硬盘上运行硬盘检查程序。你永远不会这样做,坏块可能会以许多意想不到的方式影响程序
虽然这是事实,但有些情况下你别无选择。只要你能成功加载程序,它就应该能够执行诊断任务(即使它在某种有故障的介质上运行)。
Memtest86 在 RAM 损坏的情况下如何运行?
嗯,它必须先将自己加载到内存中。在大多数情况下,这个内存仍然是好的。如果它不是,Memtest 很可能会通过将一些就地变量与校验和进行比较来确定程序本身是否已损坏。如果它们不匹配,您会立即知道您的 RAM 有问题,或者您下载的副本已损坏(确定后者是否是原因将是一项简单的任务)。
TL,DR:Memtest86+ 仅在假设 RAM 的第一个兆字节仍然完好(最有可能加载的位置)的情况下才有效。假设此区域已损坏,Memtest86+ 本身将无法运行(这是一个非常快速的指标,即使没有运行测试,也表明 RAM 有问题)。