Wie funktioniert Memtest86 mit schlechtem RAM?

2603
TheLQ

Ich las eine andere Frage über Memtest und begann mich zu fragen: Wie funktioniert Memtest86 mit schlechtem RAM?

Denken Sie darüber nach: Memtest86 muss Informationen darüber speichern, wie groß der Arbeitsspeicher ist, was er im Arbeitsspeicher ablegt, um ihn später zu vergleichen, wo der Bildschirm aktualisiert werden soll, und viele weitere Informationen. Die Verwendung einer Variablen erfordert, dass der RAM 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 überprüfen. Sie würden das niemals tun, ein fehlerhafter Block könnte das Programm auf unerwartete Weise beeinflussen

Wie funktioniert Memtest86 mit schlechtem RAM?

17
Zu Ihrer Information, alle von der CPU ausgeführten Arbeiten werden im RAM erledigt. Wenn ein Programm ausgeführt wird (RAM), hat es nichts mit Variablen zu tun. Sie könnten ein Programm schreiben, das absolut nichts tut und niemals irgendwelche Variablen verwendet, aber dieses Programm befindet sich im Speicher. Sehr interessante Frage. Keltari vor 13 Jahren 2
Da alle (nicht trivialen) Programme Variablen verwenden, besteht der Trick für Speichertester / Übende darin, ihre Variablen in Registern und nicht im Speicher zu speichern. Das heißt auch kein Stack! Einige Speicherprogramme werden aus dem ROM heraus ausgeführt (z. B. Harvard-Architektur) oder, falls sie sich im getesteten RAM befinden, den Code nach jedem Durchlauf verschieben. Erfolg oder Misserfolg beim Ausführen des Testprogramms an verschiedenen RAM-Speicherplätzen waren Teil des Trainingsgeräts. Natürlich gibt es wahrscheinlich schlecht geschriebene Speichertester, die den zu testenden Arbeitsspeicher wie ein normales Programm verwenden sawdust vor 13 Jahren 2
@Keltari technisch laufen Teile des BIOS direkt aus NOR-Flash .... rackandboneman vor 7 Jahren 0

6 Antworten auf die Frage

9
user606723

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 schlecht.
  2. Es war immer noch gut genug, dass es alle Tests ohne erkennbare Probleme erfolgreich abschließen konnte.

Ist höchst unwahrscheinlich.

7
digitxp

Memtest ist ziemlich langlebig, da es nicht wirklich von dem RAM abhängt, den es testet.

Zum Beispiel verwendet Test 0 einen Walking-Ones- Algorithmus, und für diesen Test wird nur ein einzelner Zeiger (wahrscheinlich zwischengespeichert) benötigt, da er nur zwei aufeinanderfolgende Speicheradressen vergleicht.

Wenn wir also einen 3-Bit-RAM-Stick haben, lädt memtest ihn mit folgendem Befehl:

<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 fehlschlagen, auch wenn die Variablen von memtest beschädigt sind.

3
Mokubai

Memtest muss unbedingt mindestens eine Annahme machen, dass zumindest der Speicher, in den er selbst geladen wird, gut ist. Danach kann der restliche Speicher vollständig gescannt und getestet werden.

Es kann sein, dass es immer noch in der Lage ist, Fehler in seinem eigenen Speicher zu lesen und zu erkennen, da es als einziges geladenes Programm Zugriff auf praktisch den gesamten Speicher des Systems haben sollte und diesen Speicher daher lesen und vergleichen kann "bekannte gute" Probe.

Ich dachte hauptsächlich über die Verhaltensänderungen nach, die durch den Arbeitsspeicher verursacht werden konnten. ZB wenn der schlechte RAM die Logik geändert hat, so dass alle Tests immer wahr waren. TheLQ vor 13 Jahren 0
Ich würde sagen, dass es möglich ist, dass ein einzelner Bit-Flip während des Testens eine falsche Lesung als wahr auslöst, aber es ist wahrscheinlicher, dass das Bit, das gekippt wird, in etwas sehr viel kritischerer Form vorliegt Code, der größer als die "Testfälle" ist, und daher würde ich erwarten, dass ein kleiner Fehler das Programm zum Absturz bringt, bevor ein Pass anstelle eines Fehlers erkannt wird. Ich gebe zu, es ist aber eine Möglichkeit. Mokubai vor 13 Jahren 0
1
Breakthrough

Denken Sie darüber nach: Memtest86 muss Informationen darüber speichern, wie groß der Arbeitsspeicher ist, was er im Arbeitsspeicher ablegt, um ihn später zu vergleichen, wo der Bildschirm aktualisiert werden soll, und viele weitere Informationen. Die Verwendung einer Variablen erfordert, dass der RAM 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 tut Memtest - es schreibt verschiedene (bekannte) Muster in Ihren Arbeitsspeicher, liest es zurück und vergleicht. Wenn es eine falsche Übereinstimmung gibt, muss Ihr RAM beschädigt sein.

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

Während dies wahr ist, gibt es einige Fälle, in denen Sie keine Wahl haben. Solange Sie das Programm erfolgreich laden können, sollte es in der Lage sein, seine Diagnoseaufgaben auszuführen (auch wenn es auf einem fehlerhaften Medium läuft).

Wie funktioniert Memtest86 mit schlechtem RAM?

Nun, es muss sich zuerst in den Speicher laden. In den meisten Fällen ist dieser Speicher noch gut. Falls dies nicht der Fall ist, wird Memtest höchstwahrscheinlich feststellen, dass das Programm selbst beschädigt ist, indem einige In-Place-Variablen mit einer Prüfsumme verglichen werden. Für den Fall, dass sie nicht übereinstimmen, wissen Sie sofort, dass entweder Ihr RAM schlecht ist oder die heruntergeladene Kopie beschädigt ist (und es wäre eine triviale Aufgabe, herauszufinden, ob letzteres die Ursache ist oder nicht).


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

1
wrosecrans

Indem du klein bist. Wenn ein Teil des Arbeitsspeichers schlecht ist, ist es unwahrscheinlicher, dass ein Teil des Programms in einer der schlechten Stellen ist, je kleiner das Programm ist. In Anbetracht dessen, dass das Booten zum Laden des Speichertests weit genug ist, um Firmware-Code mit RAM zu laden, ist die Wahrscheinlichkeit groß, dass, wenn Sie so weit kommen, die niedrigen RAM-Bereiche gut genug funktionieren, dass Memtest aus ihnen laufen kann.

0
Thomas Hunter

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

Der Algorithmus schreibt alle möglichen Muster und prüft dann, ob sie gut geschrieben sind, indem er sie erneut liest. Wenn ein Schreibvorgang oder ein 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 sehen, wie stabil Ihr RAM ist.