Wie funktioniert Memtest86 mit schlechtem RAM?

17

Ich las gerade eine andere Frage zu Memtest und fragte mich: Wie funktioniert Memtest86 mit schlechtem RAM?

Denken Sie darüber nach: Memtest86 muss Informationen darüber speichern, wie groß der Arbeitsspeicher ist, was in den Arbeitsspeicher gestellt wird, um später zu vergleichen, wo der Bildschirm aktualisiert werden soll und vieles mehr. Die Verwendung einer Variablen setzt voraus, dass der Arbeitsspeicher ordnungsgemäß funktioniert. Aber wie können Sie zuverlässige Ergebnisse erzielen, wenn Sie das Programm auf einem möglicherweise defekten RAM ausführen?

Eine Analogie dazu ist das Ausführen eines Festplattenprüfprogramms von der Festplatte, die Sie prüfen. Das würden Sie niemals tun, ein fehlerhafter Block könnte das Programm auf viele unerwartete Arten beeinflussen

Wie funktioniert Memtest86 mit schlechtem RAM?

TheLQ
quelle
2
Zu Ihrer Information, alle Arbeiten, die von der CPU ausgeführt werden, werden im RAM ausgeführt. Wenn ein Programm ausgeführt wird, das sich im RAM befindet, hat es nichts mit Variablen zu tun. Sie könnten ein Programm schreiben, das absolut nichts tut und niemals Variablen verwendet, aber das Programm befindet sich im Speicher. Sehr interessante Frage.
Keltari
2
Da alle (nicht trivialen) Programme Variablen verwenden, besteht der Trick für Gedächtnistester / -trainer darin, ihre Variablen nicht im Speicher, sondern in Registern zu speichern. Das heißt auch kein Stapel! Einige Speicherprogramme werden außerhalb des ROM ausgeführt (z. B. die Harvard-Architektur) oder, wenn sie sich im zu testenden RAM befinden, den Code nach jedem Durchlauf neu positionieren. Der Erfolg oder Misserfolg der Ausführung des Testprogramms an verschiedenen RAM-Stellen war Teil des Trainings. Natürlich gibt es wahrscheinlich schlecht geschriebene Speichertester, die den getesteten Arbeitsspeicher wie ein gewöhnliches Programm verwenden
Sägemehl vom
@ Keltari technisch gesehen, Teile des BIOS laufen direkt aus NOR-Flash ....
Rackandboneman

Antworten:

9

Meistens, weil die Menge an RAM, die zum Laden von memtest benötigt wird, extrem gering ist. Wenn das Programm ausgeführt wird, ist der Speicher in diesem Bereich wahrscheinlich in Ordnung.

Die Chance, dass-

  1. Der kleine Speicherbereich, in den memtest geladen wurde, ist fehlerhaft.
  2. Es war immer noch gut genug, dass es in der Lage war, alle Tests ohne erkennbare Probleme erfolgreich abzuschließen.

Ist -hoch- unwahrscheinlich.

user606723
quelle
7

Memtest ist insofern ziemlich langlebig, als es nicht wirklich vom RAM abhängt, den es testet.

Zum Beispiel Test 0 verwendet einen Fuß diejenigen Algorithmus und alle es für diesen Test erfordert ein einzelner Zeiger (wahrscheinlich im Cache), weil es nur ist zwei aufeinanderfolgende Speicheradressen verglichen wird .

Wenn wir also einen 3-Bit-RAM-Stick haben, lädt memtest ihn folgendermaßen:

<pointer location> 00000001 00000010 00000100 00001000 00010000 00100000 01000000

Und wenn die erste Adresse beschädigt ist, werden zwei zufällige Positionen verglichen:

00000001 00100000

Und es wird immer noch scheitern, auch wenn die Variablen von memtest beschädigt sind.

digitxp
quelle
3

Memtest muss unbedingt davon ausgehen, dass mindestens der Speicher, in den es geladen wird, gut ist. Danach kann der gesamte Rest des Speichers gescannt und getestet werden.

Es kann sein, dass es weiterhin Fehler in seinem eigenen Speicher lesen und erkennen kann, da es als einziges geladenes Programm auf praktisch den gesamten Speicher des Systems zugreifen und diesen Speicher daher mit a lesen und vergleichen kann "Bekannt gute" Probe.

Mokubai
quelle
Ich habe hauptsächlich über die Verhaltensänderungen nachgedacht, die schlechter Arbeitsspeicher bewirken kann. ZB wenn der schlechte Widder die Logik so geändert hat, dass alle Tests immer wahr sind.
TheLQ
Ich würde sagen, dass es möglich ist, dass ein einzelner Bit-Flip beim Testen einen falschen Lesewert als wahr ergibt, aber es ist wahrscheinlicher, dass der Bit-Flip in etwas viel kritischerem ist, in Memtest würde ich die Größe der tatsächlichen Ausführung erwarten Code größer als die "Testfälle" zu sein, und so würde ich erwarten, dass ein kleiner Fehler das Programm schrecklich abstürzen lässt, bevor es einen Durchlauf anstelle eines Fehlers feststellt. Ich gebe jedoch zu, dass dies eine Möglichkeit ist.
Mokubai
1

Indem ich klein bin. Wenn ein Teil des Arbeitsspeichers defekt ist, ist es weniger wahrscheinlich, dass sich ein Teil des Programms an einer der defekten Stellen befindet, je kleiner das Programm ist. In Anbetracht der Tatsache, dass das Booten weit genug entfernt ist, um den Speichertest zu laden, Firmware-Code über den RAM-Speicher benötigt. Wenn dies möglich ist, funktionieren die niedrigen RAM-Bereiche wahrscheinlich gut genug, damit memtest darauf ausgeführt werden kann.

Wrosecrans
quelle
1

Denken Sie darüber nach: Memtest86 muss Informationen darüber speichern, wie groß der Arbeitsspeicher ist, was in den Arbeitsspeicher gestellt wird, um später zu vergleichen, wo der Bildschirm aktualisiert werden soll und vieles mehr. Die Verwendung einer Variablen setzt voraus, dass der Arbeitsspeicher ordnungsgemäß funktioniert. Aber wie können Sie zuverlässige Ergebnisse erzielen, wenn Sie das Programm auf einem möglicherweise defekten RAM ausführen?

Nun, das ist, was Memtest tut - es schreibt verschiedene (bekannte) Muster in Ihren RAM, liest sie zurück und vergleicht sie. Wenn es eine Fehlanpassung gibt, muss Ihr RAM beschädigt sein.

Eine Analogie dazu ist das Ausführen eines Festplattenprüfprogramms von der Festplatte, die Sie prüfen. Das würden Sie niemals tun, ein fehlerhafter Block könnte das Programm auf viele unerwartete Arten beeinflussen

Obwohl dies zutrifft, haben Sie in einigen Fällen keine andere Wahl. Solange Sie das Programm erfolgreich laden können, sollte es in der Lage sein, Diagnoseaufgaben auszuführen (auch wenn es auf einem fehlerhaften Medium ausgeführt wird).

Wie funktioniert Memtest86 mit schlechtem RAM?

Nun, es muss sich zuerst in den Speicher laden. In den meisten Fällen ist dieses Gedächtnis noch gut. Ist dies nicht der Fall, wird Memtest höchstwahrscheinlich feststellen, dass das Programm selbst beschädigt ist, indem einige vorhandene Variablen mit einer Prüfsumme verglichen werden. Falls sie nicht übereinstimmen, werden Sie sofort feststellen, dass entweder Ihr Arbeitsspeicher fehlerhaft ist oder die heruntergeladene Kopie beschädigt ist (und es wäre eine triviale Aufgabe, festzustellen, ob letztere die Ursache ist oder nicht).


TL, DR: Memtest86 + funktioniert nur, wenn das erste Megabyte Ihres Arbeitsspeichers noch in Ordnung ist (der Ort, an dem es am wahrscheinlichsten geladen würde). Angenommen, dieser Bereich ist beschädigt, würde Memtest86 + selbst einfach nicht funktionieren (was ein ziemlich schneller Indikator dafür ist, dass Ihr RAM schlecht ist, ohne die Tests selbst ausgeführt zu haben).

Durchbruch
quelle
0

Wenn der Arbeitsspeicher, in dem die Anwendung die Variablen speichert, fehlerhaft ist, schlagen die meisten Tests fehl.

Der Algorithmus schreibt alle Arten von Mustern und prüft dann, ob sie gut geschrieben sind, indem er sie erneut liest. Wenn ein Schreib- oder Lesevorgang nicht korrekt verlief, schlägt der betreffende Test fehl. Wenn Sie die meisten Tests ausführen und mehrere Stunden laufen lassen, können Sie feststellen, wie stabil Ihr RAM ist ...

Thomas Hunter
quelle