
RAM 模組有缺陷是否可以運行 Windows(7、x64)?更準確地說,是否有某種方法可以告訴 Windows 不要分配已知的錯誤位址或位址區塊?
對於Linux,有壞記憶體。 Windows 是否有現有的實作? Windows 核心(NT 6.1)也能做到這一點嗎?也許是內核模式驅動程式?
答案1
鮑勃,你的問題分為三個部分。我會一次講一個。
運行 Windows 時記憶體不足
確實有可能在模組有缺陷的情況下運行 Windows 7。根據壞磁區的位置以及模組在 DIMM 群組中的位置,只要 Windows 7 不嘗試觸及記憶體的壞部分,它就會像沒有任何東西一樣運作。因此,理想情況下,您應該將有缺陷的模組盡可能遠離群組 0。
在 Windows 中封鎖壞記憶體磁區
在 x86(32 和 64 位元)作業系統上,記憶體由核心管理。正如您所提到的,BadMem 能夠阻止 Linux 中的壞記憶體磁區。它的工作原理是指示內核鎖定您指定的那些記憶體位址。這有效地阻止了 Linux 在分配(和釋放)記憶體時尋址這些位址。但為了做到這一點,BadMem 需要修補核心。 BadMem 無非是您在應用之前配置的核心補丁。
現在,您在 Windows 上沒有這種能力。您無法修補內核。開發核心模式驅動程式也不會為您帶來任何好處,因為 Windows 核心永遠不會讓您的驅動程式優先於其記憶體管理架構(這是可以理解的)。
因此,您不能以任何方式指示視窗不使用某些記憶體位址。唯一的方法是微軟專門針對您的情況修補核心。不太可能。
壞記憶體位址的傳播
記憶體模組可能包含錯誤位址的原因並不多。最終,這一切都歸結為生產線中的錯誤,假設它在進入您的電腦之前沒有受到損壞。如您所知,與硬碟相反,記憶體模組中沒有可移動部件。因此,壞扇區不會像硬碟扇區那樣擴散。
然而,記憶體測試軟體並非萬無一失。它有可能(並且常見)傳遞某些實際上是錯誤的地址。因此,隨著越來越多的地址被發現是壞的,壞的記憶體可能會給人「擴散」的印象。因此,像 BadMem 這樣的工具就暴露了它們的弱點,因為它們自然只能處理您指示它們處理的位址。
任何人都不可能對記憶體模組進行徹底的測試並識別所有錯誤的記憶體位址,然後鎖定它們並最終獲得「良好」的記憶體模組。最簡單的方法是將位址錯誤的模組視為有缺陷的模組,因此不值得信任。
這意味著,儘管 BadMem 是一個有吸引力的提議,但它實際上並不是解決記憶體問題的方法。更有可能的是,您最終仍然會遇到一個嘗試讀取壞扇區並因停止錯誤而崩潰的作業系統。壞模組就是壞模組就是壞模組。
答案2
Windows BCD(啟動設定資料)實際上有一個{badmemory}
物件。看起來 ECC 記憶體「預測失敗」的記憶體位址將列在這裡,並且不會被作業系統使用。
該{badmemory}
物件接受一個BadMemoryList
(BCD 類型0x1700000a
)元素,它是可以以十六進位形式輸入的整數列表,以空格分隔。我想可以手動將 memtest86 發現的錯誤內存地址插入到該元素中 - 但我還沒有對此進行測試。顯然,它接受“頁框編號”,即實際地址除以 4096。不幸的是,這些位址/PFN 可能與記憶體診斷報告的不符。手動編輯可以透過可視化BCD編輯器。
無論如何,應按照其他答案的指示更換故障的記憶棒。這只是關於解決該問題的可能方法(暫時?)的說明。
memtest86 Pro(非免費)可以為您產生正確的黑名單命令在其報告中。其他答案描述了手動執行此操作的過程。
答案3
我在有 SoC 的平板電腦中遇到 RAM 問題。內存被焊接或整合到 SoC 中,無法更換。
我在阿根廷,賣家在中國,運費和時間,發送保固是沒有意義的。
我取得了一些成功。
傳遞損壞記憶體參數的關鍵是:
- memtest86 中的位址與 Windows 中使用的位址相符。
- 必須標記 4KB 的整頁。
- memtest中
0x10000000
對應Windows中的0x10000 - memtest中
0x00001000
對應Windows中的0x1 - 意思是:windows中的頁碼去掉最後3個memtest十六進位數。
- 意思是:windows 消除了左邊的零。
- 考慮 5 和 6,以避免頁碼錯誤。
- 正確的說法是:
bcdedit /set {badmemory} badmemorylist 0xB7 0xB8 0xB9 0xBA
memtest中的錯誤從0x000B7000到0x000BAFFF。注意,不能放一系列的記憶,而是一頁一頁地放所有頁面 - 無法新增頁面,所有頁面應在同一命令中標記。如果是新頁面,則新增會覆蓋舊頁面。我成功地在一個命令中新增了 4096 個頁面。我還沒有嘗試過更多。
bcdedit /enum {badmemory}
,顯示標記頁面的清單。bcdedit /set badmemoryaccess no
防止使用標記的頁面- 標記頁面並刪除存取權限後需要重新啟動。
答案4
看看這個實用程式:https://github.com/prsyahmi/BadMemory
它非常易於使用並且支援地址範圍的阻止。您可以使用從 MemTest86 收到的完整地址,而無需刪除最後三位數字。