
Ist es möglich, Windows (7, x64) mit einem defekten RAM-Modul auszuführen? Genauer gesagt, gibt es eine Möglichkeit, Windows anzuweisen, eine bekanntermaßen fehlerhafte Adresse oder einen fehlerhaften Adressblock nicht zuzuweisen?
Für Linux gibt esBadRAM. Gibt es eine bestehende Implementierung für Windows? Ist das überhaupt mit dem Windows-Kernel (NT 6.1) möglich? Vielleicht ein Kernelmodustreiber?
Antwort1
Bob, Ihre Frage besteht aus drei Teilen. Ich werde nacheinander auf einen eingehen.
Ausführen von Windows mit fehlerhaftem Arbeitsspeicher
Es ist tatsächlich möglich, Windows 7 mit einem defekten Modul auszuführen. Abhängig von der Position der fehlerhaften Sektoren und davon, wo sich das Modul in Ihren DIMM-Bänken befindet, läuft Windows 7, als ob nichts wäre, solange es nicht versucht, die fehlerhaften Teile des Speichers zu berühren. Idealerweise sollten Sie das defekte Modul also so weit wie möglich von Bank 0 weg verschieben. Wenn dies Ihr einziges Modul ist, haben Sie natürlich Pech gehabt.
Blockieren fehlerhafter Speichersektoren in Windows
Auf x86-Betriebssystemen (32 und 64 Bit) wird der Speicher vom Kernel verwaltet. Wie Sie erwähnen, kann BadMem fehlerhafte Speichersektoren in Linux blockieren. Dies funktioniert, indem der Kernel angewiesen wird, die von Ihnen angegebenen Speicheradressen zu sperren. Dies verhindert effektiv, dass Linux diese Adressen beim Zuweisen (und Freigeben) von Speicher jemals anspricht. Dazu muss BadMem jedoch den Kernel patchen. BadMem ist nichts anderes als ein Kernel-Patch, den Sie vor dem Anwenden konfigurieren.
Unter Windows ist diese Möglichkeit nicht verfügbar. Sie können den Kernel nicht patchen. Auch die Entwicklung eines Kernelmodustreibers bringt Ihnen nichts, da der Windows-Kernel Ihrem Treiber niemals Vorrang vor seiner Speicherverwaltungsarchitektur einräumen wird (verständlicherweise).
Aus diesem Grund können Sie Windows nicht anweisen, bestimmte Speicheradressen nicht zu verwenden. Die einzige Möglichkeit wäre, dass Microsoft den Kernel speziell für Ihren Fall patcht. Unwahrscheinlich.
Die Verbreitung von fehlerhaften Speicheradressen
Es gibt nicht viele Gründe, warum ein Speichermodul fehlerhafte Adressen enthalten kann. Letztendlich läuft alles auf einen Fehler in der Produktionslinie hinaus, vorausgesetzt, es wurde nicht beschädigt, bevor es in Ihren Computer gelangte. Im Gegensatz zu Festplatten gibt es in Speichermodulen, wie Sie wissen, keine beweglichen Teile. Daher neigen fehlerhafte Sektoren nicht dazu, sich auszubreiten, wie dies bei Festplattensektoren der Fall ist.
Allerdings ist Speichertestsoftware nicht narrensicher. Es ist möglich (und üblich), dass sie bestimmte Adressen durchlässt, die in Wirklichkeit fehlerhaft sind. Daher kann es den Anschein erwecken, dass sich fehlerhafter Speicher „ausbreitet“, da sich immer mehr Adressen als fehlerhaft herausstellen. Aus diesem Grund offenbaren Tools wie BadMem ihre Schwächen, da sie natürlich nur die Adressen verarbeiten können, die Sie ihnen zuweisen.
Es ist unwahrscheinlich, dass jemand einen gründlichen Test eines Speichermoduls durchführen und alle fehlerhaften Speicheradressen identifizieren, sie dann sperren und am Ende ein „gutes“ Speichermodul erhalten kann. Am einfachsten ist es, ein Modul mit fehlerhaften Adressen als durchweg defektes Modul zu betrachten und folglich nicht vertrauenswürdig.
Das bedeutet, dass BadMem zwar ein attraktives Angebot ist, aber in Wirklichkeit keine Lösung für das Problem des fehlerhaften Arbeitsspeichers darstellt. Wahrscheinlicher ist, dass Sie am Ende trotzdem ein Betriebssystem haben, das versucht, einen fehlerhaften Sektor zu lesen und mit einem Stoppfehler abstürzt. Ein fehlerhaftes Modul ist ein fehlerhaftes Modul ist ein fehlerhaftes Modul.
Antwort2
Die Windows-BCD (Boot Configuration Data) haben tatsächlich ein {badmemory}
Objekt.Es scheint, dass Speicheradressen, bei denen vom ECC-Speicher ein „Ausfall vorhergesagt“ wird, hier aufgelistet und nicht vom Betriebssystem verwendet werden.
Das {badmemory}
Objekt akzeptiert ein Element BadMemoryList
(Typ BCD 0x1700000a
), das eine Liste von Ganzzahlen ist, die als Hexadezimalwerte eingegeben werden können, getrennt durch Leerzeichen. Ich vermute, dass es möglich wäre, fehlerhafte Speicheradressen, wie sie von memtest86 gefunden wurden, manuell in dieses Element einzufügen – aber ich habe das nicht getestet.Anscheinend akzeptiert es „Seitenrahmennummern“, also die tatsächliche Adresse geteilt durch 4096.Leider stimmen diese Adressen/PFNs möglicherweise nicht mit denen überein, die von der Speicherdiagnose gemeldet werden. Eine manuelle Bearbeitung ist möglich mitVisueller BCD-Editor.
In jedem Fall sollten defekte Speichersticks ausgetauscht werden, wie in den anderen Antworten angegeben. Dies ist lediglich ein Hinweis auf eine mögliche Möglichkeit, das Problem (vorübergehend?) zu umgehen.
memtest86 Pro (nicht kostenlos)kann die richtigen Blacklist-Befehle für Sie erstellenin seinem Bericht. Andere Antworten beschreiben den Prozess, wie dies manuell durchgeführt wird.
Antwort3
Ich hatte Probleme mit dem RAM in einem Tablet mit SoC. Der Speicher ist verschweißt oder in das SoC integriert und kann nicht ausgetauscht werden.
Ich bin in Argentinien und der Verkäufer ist in China, und angesichts der Versandkosten und -dauer macht es keinen Sinn, ihn im Garantiefall einzusenden.
Mir sind ein paar Treffer gelungen.
Der Schlüssel zur Übergabe der beschädigten Speicherparameter ist:
- Adressen in Memtest86 stimmen mit den in Windows verwendeten Adressen überein.
- muss ganze Seiten mit 4 KBytes markieren.
- im Memtest
0x10000000
entspricht 0x10000 in Windows - im Memtest
0x00001000
entspricht 0x1 in Windows - bedeutet: Die Seitenzahl in Windows entfernt die letzten 3 Memtest-Hexadezimalzahlen.
- bedeutet: Windows eliminiert Nullen auf der linken Seite.
- Beachten Sie 5 und 6, um Fehler bei den Seitenzahlen zu vermeiden.
- die richtige Aussage ist:
bcdedit /set {badmemory} badmemorylist 0xB7 0xB8 0xB9 0xBA
zu Fehlern im Memtest von 0x000B7000 bis 0x000BAFFF. Beachten Sie, dass Sie nicht einen Speicherbereich angeben können, sondern alle Seiten einzeln - kann keine Seiten hinzufügen, alle Seiten müssen mit demselben Befehl markiert werden. Wenn eine neue Seite hinzugefügt wird, werden alte überschrieben. Ich habe es geschafft, mit einem einzigen Befehl 4096 Seiten hinzuzufügen. Ich habe es nicht weiter versucht.
bcdedit /enum {badmemory}
, zeigt die Liste der markierten Seiten.bcdedit /set badmemoryaccess no
verhindern, dass die markierten Seiten verwendet werden- Nach dem Markieren der Seiten ist ein Neustart und das Entfernen des Zugriffs erforderlich.
Antwort4
Schauen Sie sich dieses Dienstprogramm an:https://github.com/prsyahmi/BadMemory
Es ist sehr einfach zu verwenden und unterstützt das Blockieren von Adressbereichen. Und Sie können die vollständige Adresse verwenden, die Sie von MemTest86 erhalten haben, ohne die letzten drei Ziffern zu entfernen.