Memtest86如何在内存不良的情况下运行?


17

我正在阅读关于Memtest的另一个问题,并开始想知道:Memtest86如何在内存不良的情况下运行?

想想看:Memtest86需要存储有关RAM有多大的信息,它放在RAM中的内容以便稍后进行比较,更新屏幕的位置以及更多信息。使用变量的行为要求RAM正常运行。但是,当您在可能有缺陷的RAM上运行程序时,如何获得可靠的结果?

与此相似的是从您检查的硬盘驱动器运行硬盘驱动器检查程序。你永远不会这样做,一个坏块可能会以许多意想不到的方式影响程序

Memtest86如何在内存不良的情况下运行?


2
仅供参考,CPU完成的所有工作都在RAM中完成。当程序执行时,它在RAM中完成,它与变量无关。您可以编写一个绝对没有任何内容的程序,并且永远不会使用任何变量,但该程序驻留在内存中。虽然非常有趣的问题。
Keltari

2
由于所有(非平凡)程序都使用变量,因此内存测试人员/锻炼者的技巧是将他们的变量存储在寄存器中,而不是存储器中。这也意味着没有堆叠!一些存储器程序执行ROM(例如哈佛架构),或者,如果驻留在被测RAM中,则在每次传递后重新定位代码。在各个RAM位置执行或未执行测试程序是锻炼者的一部分。当然,可能写得很糟糕的内存测试器像普通程序一样使用被测RAM
sawdust

@Keltari技术上,部分BIOS直接运行NOR闪存....
rackandboneman

Answers:


9

主要是因为加载memtest所需的内存量非常小。如果程序运行,则可能是这一区域的内存正常。

有机会 -

  1. 内存memtest的小部分被加载是坏的。
  2. 它仍然足够好,它能够成功完成所有测试而没有明显的问题。

是 - 非常不可能。


7

Memtest非常耐用,因为它并不真正依赖于它正在测试的RAM。

例如,测试0使用a 走路的 算法,并且该测试所需要的只是一个指针(可能是缓存的),因为它只比较两个连续的内存地址。

因此,如果我们有一个3位RAM棒,memtest加载它:

<pointer location> 00000001 00000010 00000100 00001000 00010000 00100000 01000000

如果第一个地址已损坏,它将比较两个随机位置:

00000001 00100000

即使memtest的变量被破坏,它仍然会失败。


3

Memtest绝对必须做出至少一个假设,至少它本身被加载到的内存是好的。之后,它能够完整地扫描和测试剩余的内存。

它可能仍然能够读取和检测其自身内存中的错误,因为作为唯一加载的程序,它应该可以访问系统上的几乎所有内存,因此能够读取并比较该内存到“已知好”的样本。


我主要考虑的是内存不良RAM的变化。例如,如果坏的ram改变了逻辑,那么所有测试总是显示为真。
TheLQ

我会说,单个位翻转可能会在测试时将错误读取视为真,但更有可能的是翻转的位将更加重要,在Memtest中我会期望实际运行的大小代码要大于“测试用例”,所以我希望有点错误会导致程序在检测到传递代替失败之前崩溃。我承认这是一种可能性。
Mokubai

1

小。如果某些RAM不好,程序越小,程序的某些部分就越不可能出现在其中一个坏点中。考虑到启动足够远以加载内存测试将涉及一些使用RAM的固件代码,可能的是,如果你可以做到这一点,RAM的低区域运行良好,memtest将能够从它们运行。


1

想一想:Memtest86需要存储有多大的信息   RAM是什么,它放在RAM中以便以后比较,在哪里更新   屏幕,以及更多信息。使用变量的行为   要求RAM正常运行。但是你怎么能变得可靠   在可能有缺陷的RAM上运行程序时的结果?

好吧,这就是Memtest的作用 - 它将各种(已知)模式写入RAM,读取并进行比较。如果不匹配,则必须损坏RAM。

与此类似的是运行硬盘驱动器检查程序   硬盘你的检查。你永远不会这样做,一个坏块   可能会以许多意想不到的方式影响程序

虽然这是事实,但在某些情况下你别无选择。只要您可以成功加载程序,它就应该能够执行它的诊断任务(即使它在某种错误的介质上运行)。

Memtest86如何在内存不良的情况下运行?

好吧,它必须先将自己加载到内存中。在大多数情况下,这种记忆仍然很好。如果它是 ,Memtest很可能通过比较一些就地变量和校验和来确定程序本身是否已损坏。如果它们不匹配,您会立即知道您的RAM是坏的,或者您下载的副本是否已损坏(确定后者是否是原因将是一项微不足道的任务)。


TL,DR:Memtest86 +仅在您的RAM的第一兆字节仍然正常(最有可能加载的位置)时才起作用。假设这个区域已损坏,Memtest86 +本身就不会起作用(这是一个非常快速的指示,即使你没有运行测试,你的RAM也很糟糕)。


0

如果应用程序保存变量的RAM不好,那么大多数测试都会失败。

该算法会写入所有类型的不同模式,然后通过再次读取它们来检查它们是否写得很好,如果写入或读取没有正确,则会使测试失败。通过运行大多数测试并让它运行几个小时,您可以看到RAM的稳定性......

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.