Ist es möglich, Windows (7, x64) mit einem defekten RAM-Modul auszuführen? Gibt es eine Möglichkeit, Windows anzuweisen, keine bekanntermaßen fehlerhaften Adressen oder Adressblöcke zuzuweisen?
Für Linux gibt es BadRAM . Gibt es eine vorhandene Implementierung für Windows? Ist das überhaupt mit dem Windows-Kernel (NT 6.1) möglich? Vielleicht ein Kernelmodustreiber?
Antworten:
Bob, deine Frage besteht aus drei Teilen. Ich werde nacheinander ansprechen.
Ausführen von Windows mit schlechtem Speicher
Es ist in der Tat möglich, Windows 7 mit einem defekten Modul auszuführen. Abhängig von der Position der fehlerhaften Sektoren und der Position des Moduls in Ihren DIMM-Bänken wird Windows 7 so ausgeführt, als gäbe es nichts, solange nicht versucht wird, die fehlerhaften Teile des Speichers zu berühren. Idealerweise sollten Sie das defekte Modul so weit wie möglich von Bank 0 entfernen. Wenn dies Ihr einziges Modul ist, haben Sie natürlich Pech.
Blockieren fehlerhafter Speichersektoren in Windows
Auf x86-Betriebssystemen (32 und 64 Bit) wird der Speicher vom Kernel verwaltet. Wie Sie bereits erwähnt haben, kann BadMem fehlerhafte Speichersektoren in Linux blockieren. Dies funktioniert, indem der Kernel angewiesen wird, die von Ihnen angegebenen Speicheradressen zu sperren. Dadurch wird Linux effektiv daran gehindert, diese Adressen beim Zuweisen (und Freigeben) von Speicher zu adressieren. Dafür muss BadMem den Kernel patchen. BadMem ist nichts anderes als ein Kernel-Patch, den Sie vor der Anwendung konfigurieren.
Jetzt haben Sie diese Fähigkeit nicht mehr unter Windows. Sie können den Kernel nicht patchen. Die Entwicklung eines Kernelmodustreibers wird Ihnen auch nichts nützen, da der Windows-Kernel Ihren Treiber (verständlicherweise) niemals vor seiner Speicherverwaltungsarchitektur Vorrang einräumen lässt.
Aus diesem Grund können Sie Windows in keiner Weise anweisen, bestimmte Speicheradressen nicht zu verwenden. Die einzige Möglichkeit für Microsoft wäre, den Kernel für Ihren Fall speziell zu patchen. Unwahrscheinlich.
Die Verbreitung von schlechten Speicheradressen
Es gibt nicht viele Gründe, warum ein Speichermodul fehlerhafte Adressen enthält. Letztendlich läuft alles auf einen Fehler in der Produktionslinie hinaus, vorausgesetzt, es wurde kein Schaden angerichtet, bevor Sie in Ihren Computer eingestiegen sind. Im Gegensatz zu Festplatten befinden sich in Speichermodulen bekanntlich keine beweglichen Teile. Schlechte Sektoren verbreiten sich also nicht, wie dies bei Festplattensektoren der Fall ist.
Speichertestsoftware ist jedoch nicht kinderleicht. Es ist möglich (und üblich), dass bestimmte Adressen übergeben werden, die tatsächlich schlecht sind. So kann ein schlechtes Gedächtnis den Eindruck einer "Ausbreitung" erwecken, da sich immer mehr Adressen als schlecht herausstellen. Aus diesem Grund offenbaren Tools wie BadMem ihre Schwäche, da sie natürlich nur mit den Adressen umgehen können, an die Sie sie weisen.
Es ist unwahrscheinlich, dass jemand einen gründlichen Test eines Speichermoduls durchführen und alle fehlerhaften Speicheradressen identifizieren kann, diese dann sperren und ein "gutes" Speichermodul erhalten kann. Am einfachsten ist es, ein Modul mit schlechten Adressen durchgehend als defekt zu betrachten und demzufolge nicht vertrauenswürdig zu sein.
Was dies bedeutet, ist, dass BadMem, so attraktiv es auch ist, in der Tat keine Lösung für das Problem des schlechten Gedächtnisses darstellt. Wahrscheinlicher ist es, dass Sie immer noch ein Betriebssystem haben, das versucht, einen fehlerhaften Sektor zu lesen, und mit einem Stoppfehler abstürzt. Ein schlechtes Modul ist ein schlechtes Modul ist ein schlechtes Modul.
quelle
Die Windows-BCD (Boot Configuration Data) hat tatsächlich ein
{badmemory}
Objekt. Es scheint, dass Speicheradressen, die vom ECC-Speicher als "voraussichtlich fehlerhaft" eingestuft werden, hier aufgelistet und vom Betriebssystem nicht verwendet werden.Das
{badmemory}
Objekt akzeptiert ein ElementBadMemoryList
(vom Typ BCD0x1700000a
), bei dem es sich um eine Liste von Ganzzahlen handelt, die durch Leerzeichen getrennt als Hex eingegeben werden können. Ich denke, es wäre möglich, fehlerhafte Speicheradressen, wie sie von memtest86 gefunden wurden, manuell in dieses Element einzufügen - aber ich habe dies nicht getestet. Anscheinend akzeptiert es Seitenrahmennummern, die die tatsächliche durch 4096 geteilte Adresse sind. Leider stimmen diese Adressen / PFNs möglicherweise nicht mit denen überein, die von der Speicherdiagnose gemeldet wurden. Die manuelle Bearbeitung kann mit Visual BCD Editor erfolgen .In jedem Fall sollten fehlerhafte Speichersticks ersetzt werden, wie in den anderen Antworten angegeben. Dies ist lediglich ein Hinweis auf eine mögliche Lösung des Problems (vorübergehend?).
quelle
Windows BCD hat
{badmemorylist}
und{badmemoryaccess}
Objekte. Sie sollten die erste auf fehlerhafte Speicherseiten setzen, die durch Leerzeichen (z. B.bcdedit /set badmemorylist 1499543 1434007
) und die zweite aufNo
(bcdedit /set badmemoryaccess No
) getrennt sind.Denken Sie daran, dass die Speicherseitengröße in Windows normalerweise
4KB
Getestet in Windows 7 und es funktioniert gut
Sie können Ihre Einstellungen mit Rammap by Sysinternals testen
PS: Ich habe diese Informationen von
"Windows Internals Book" chapter 10
quelle
Ich hatte Probleme mit dem RAM eines Tablets mit SoC. Der Speicher ist geschweißt oder in den SoC integriert und kann nicht ersetzt werden.
Ich bin in Argentinien und der Verkäufer ist in China, und die Versandkosten und die Zeit, macht es keinen Sinn, Garantie einzusenden.
Ich habe ein paar Treffer geschafft.
Der Schlüssel zur Übergabe der beschädigten Speicherparameter sind:
0x10000000
entspricht 0x10000 in Windows0x00001000
entspricht 0x1 in Windowsbcdedit /set {badmemory} badmemorylist 0xB7 0xB8 0xB9 0xBA
zu Fehlern in memtest von 0x000B7000 bis 0x000BAFFF. Beachten Sie, dass Sie nicht eine Reihe von Erinnerungen speichern können, sondern alle Seiten nacheinanderbcdedit /enum {badmemory}
, zeigt die Liste der markierten Seiten.bcdedit /set badmemoryaccess no
verhindern, dass die markierten Seiten verwendet werdenquelle
/
und dem Befehl entfernen , damit es funktioniert, damitbcdedit / enum {badmemory}
esbcdedit /enum {badmemory}
für die anderen gleich istSoweit mir bekannt ist, besteht die einzige Möglichkeit darin, den Befehl BurnMem zu verwenden, mit dem die Menge der verwendeten RAM-Fenster künstlich begrenzt werden kann.
quelle
maxmem
, da anscheinendburnmem
die maximale physikalische Adresse dabeimaxmem
nicht begrenzt wird. Das Vista und 7 Äquivalent wäretruncatememory
. Dies ist eine mögliche Lösung. Gibt es jedoch eine genauere Methode für Fälle, in denen sich der defekte Speicher in der Mitte oder am Anfang des Adressraums befindet und alles blockiert, nachdem dies nicht erwünscht ist?Schauen Sie sich dieses Util an: https://github.com/prsyahmi/BadMemory
Es ist sehr einfach zu bedienen und unterstützt das Blockieren von Adressbereichen. Und Sie können die von MemTest86 empfangene vollständige Adresse verwenden, ohne die letzten drei Ziffern zu entfernen.
quelle
VORSICHT!!! Windows kann möglicherweise nicht gestartet werden und ist bereit, den BCD neu zu erstellen. Verwenden Sie in diesem Fall die Eingabeaufforderung unter Erweiterte Startoptionen. Ich weiß nicht, warum es nicht mehr bootet, zufällig passiert oder ob du zu viele Adressen in badmemorylist eingibst.
Hier ist ein C ++ - Eingabeaufforderungsprogramm, das eine Liste mit fortlaufenden Speicheradressen in einer TXT-Datei abruft, die für
bcdedit /set badmemorylist
oder bereit istbcdedit /set {badmemory} badmemorylist
(unter Win7 hat das bei mir nicht funktioniert).Verwenden Sie
bcdedit /set badmemoryaccess 0
diese Option, um den Zugriff zu verweigern.Sie können dies mit EasyBCD unter Ansichtseinstellungen -> Detailliert überprüfen. Überprüfen Sie nach einem Neustart mit Rammap, ob der physische Adressraum verschwunden ist.
quelle
Ja. Es gibt Boot-Parameter, um die Größe des Arbeitsspeichers zu steuern, den Windows verwenden kann. Sie können jedoch nur vom Ende des Speicherbereichs entfernen. Weitere Informationen zum Steuern der Startparameter finden Sie in diesem MSDN- Artikel. Die interessierenden Parameter sind
truncatememory
undremovememory
.quelle
Sie könnten diese Funktion in Windows 7 ausprobieren , aber ich bin mir nicht sicher, welchen Chip er beeinflussen wird oder ob er von jedem den gleichen Betrag abschöpft. Ich muss mich umsehen, um das herauszufinden.
quelle