欠陥のある RAM で Windows を実行する

欠陥のある RAM で Windows を実行する

欠陥のある RAM モジュールで Windows (7、x64) を実行することは可能ですか? より正確に言うと、既知の不良アドレスまたはアドレス ブロックを割り当てないように Windows に指示する方法はありますか?

Linuxの場合、不良RAMWindows 用の既存の実装はありますか? Windows のカーネル (NT 6.1) でも可能ですか? カーネル モード ドライバーでしょうか?

答え1

ボブさん、あなたの質問には 3 つの部分があります。1 つずつお答えします。

不良メモリでWindowsを実行する

確かに、欠陥のあるモジュールでも Windows 7 を実行することは可能です。不良セクターの位置とモジュールが DIMM バンクのどこに配置されているかによって、メモリの不良部分にアクセスしない限り、Windows 7 は何もなかったかのように動作します。したがって、理想的には、欠陥のあるモジュールをバンク 0 からできるだけ遠くに移動します。当然、これが唯一のモジュールである場合は、運が悪いことになります。

Windows で不良メモリ セクターをブロックする

x86 (32 ビットおよび 64 ビット) オペレーティング システムでは、メモリはカーネルによって管理されます。おっしゃるとおり、BadMem は Linux で不良メモリ セクターをブロックできます。これは、指定したメモリ アドレスをロックするようにカーネルに指示することで機能します。これにより、Linux がメモリを割り当てる (および割り当てを解除する) ときに、それらのアドレスをアドレス指定することが事実上なくなります。ただし、これを行うには、BadMem がカーネルにパッチを適用する必要があります。BadMem は、適用する前に構成するカーネル パッチにすぎません。

現在、Windows ではその機能はありません。カーネルにパッチを当てることはできません。カーネル モード ドライバーを開発しても何の役にも立ちません。Windows カーネルでは、ドライバーがメモリ管理アーキテクチャよりも優先されることは決してないからです (当然のことですが)。

このため、Windows に特定のメモリ アドレスを使用しないように指示することはできません。唯一の方法は、Microsoft があなたのケースに合わせてカーネルにパッチを適用することです。おそらく無理でしょう。

不良メモリアドレスの拡散

メモリ モジュールに不良アドレスが含まれる理由は多くありません。結局のところ、コンピュータに挿入される前に損傷を受けていないと仮定すると、すべては製造ラインでのエラーに帰着します。ご存知のとおり、ハード ドライブとは異なり、メモリ モジュールには可動部品がありません。そのため、不良セクターはハード ドライブ セクターの場合のように広がる傾向はありません。

ただし、メモリ テスト ソフトウェアは絶対確実ではありません。実際には不良である特定のアドレスを通過させることは可能であり (よくあることです)、そのため、不良なアドレスが明らかになるにつれて、不良メモリが「広がっている」という印象を与える場合があります。このため、BadMem などのツールは、当然ながら指示されたアドレスしか処理できないため、その弱点が明らかになります。

メモリ モジュールの徹底的なテストを実施して、不良なメモリ アドレスをすべて特定し、それらをロックして「良好な」メモリ モジュールに仕上げることは、おそらく不可能です。最も簡単な方法は、不良アドレスを持つモジュールを全体的に欠陥のあるモジュールと見なし、信頼できないものにすることです。

つまり、BadMem は魅力的な提案ではあるものの、実際には不良メモリの問題に対する解決策ではないということです。おそらく、オペレーティング システムが不良セクターを読み取ろうとし、停止エラーでクラッシュすることになります。不良モジュールは不良モジュールです。

答え2

Windows BCD (ブート構成データ) には実際に{badmemory}オブジェクトがあります。ECC メモリによって「障害が予測される」メモリ アドレスがここにリストされ、オペレーティング システムでは使用されないようです。

オブジェクトは(BCD 型) 要素{badmemory}を受け入れます。これは、スペースで区切られた 16 進数として入力できる整数のリストです。memtest86 によって検出された不正なメモリ アドレスをこの要素に手動で挿入することは可能だと思いますが、これはテストしていません。BadMemoryList0x1700000aどうやら、実際のアドレスを 4096 で割った「ページ フレーム番号」を受け入れるようです。残念ながら、これらのアドレス/PFNはメモリ診断で報告されたものと一致しない可能性があります。手動で編集するには、ビジュアル BCD エディター

いずれにせよ、他の回答に示されているように、不良メモリスティックは交換する必要があります。これは、問題を(一時的に?)回避する可能性のある方法に関する単なるメモです。


memtest86 Pro (無料ではない)正しいブラックリストコマンドを生成できますレポートでは、手動で行う手順について説明しています。他の回答では、手動で行う手順について説明しています。

答え3

SoC 搭載タブレットの RAM に問題がありました。メモリは SoC に溶接または統合されており、交換できません。

私はアルゼンチンにいますが、販売者は中国にいます。送料と時間がかかるので、保証付きで送るのは意味がありません。

いくつかヒットできました。

破損したメモリ パラメータを渡すための鍵は次のとおりです。

  1. memtest86 のアドレスは Windows で使用されるアドレスと一致します。
  2. 4KBytes のページ全体をマークする必要があります。
  3. memtestでは0x10000000Windowsの0x10000に相当します
  4. memtestでは0x00001000Windowsの0x1に相当する
  5. 意味: Windows のページ番号から、最後の 3 つの memtest 16 進数が削除されます。
  6. つまり、Windows は左側のゼロを削除します。
  7. ページ番号の誤りを避けるために、5 と 6 を考慮してください。
  8. 正しい記述は、bcdedit /set {badmemory} badmemorylist 0xB7 0xB8 0xB9 0xBA0x000B7000から0x000BAFFFまでのmemtestのエラーです。メモリの範囲ではなく、すべてのページを1つずつ指定できることに注意してください。
  9. ページを追加できません。すべてのページを同じコマンドでマークする必要があります。新しいページを追加すると、古いページが上書きされます。1 つのコマンドで 4096 ページを追加できました。それ以上は試していません。
  10. bcdedit /enum {badmemory}マークされたページのリストが表示されます。
  11. bcdedit /set badmemoryaccess no マークされたページが使用されないようにする
  12. ページをマークしてアクセスを削除した後は再起動する必要があります。

答え4

このユーティリティを見てください:https://github.com/prsyahmi/BadMemory

使い方は非常に簡単で、アドレス範囲のブロックをサポートしています。また、最後の 3 桁を削除せずに、MemTest86 から受信した完全なアドレスを使用できます。

関連情報