Memtest86はどのように悪いRAMで機能しますか?


17

Memtestについての別の質問を読んでいて、Memtest86はどのように悪いRAMで機能しますか?

考えてみてください:Memtest86は、RAMの大きさ、後で比較するためにRAMに入れるもの、画面を更新する場所、およびその他の多くの情報に関する情報を保存する必要があります。変数を使用するには、RAMが適切に機能している必要があります。しかし、欠陥のある可能性のあるRAMでプログラムを実行するときに、どのようにして信頼できる結果を得ることができますか?

これに例えると、チェックするハードドライブからハードドライブチェックプログラムを実行しています。あなたはそれを決してしないだろう、悪いブロックは多くの予期しない方法でプログラムに影響を与える可能性がある

Memtest86はどのように悪いRAMで機能しますか?


2
参考までに、CPUによって行われるすべての作業はRAMで行われます。RAMで実行されるプログラムは、変数とは関係ありません。絶対に何もせず、変数を一切使用しないプログラムを作成できますが、そのプログラムはメモリに常駐します。しかし、非常に興味深い質問です。
ケルタリ

2
すべての(重要な)プログラムは変数を使用するため、メモリテスター/エクササイザーのトリックは、変数をメモリではなくレジスタに格納することです。それはスタックがないことも意味します!一部のメモリプログラムはROMから実行されます(ハーバードアーキテクチャなど)。または、テスト中のRAMに常駐している場合は、各パスの後にコードを再配置します。さまざまなRAMの場所でのテストプログラムの実行の成功または失敗は、エクササイザーの一部でした。もちろん、通常のプログラムのようにテスト対象のRAMを使用する、不適切に書き込まれたメモリテスターがおそらくあります。
おがくず

@Keltari技術的には、BIOSの一部はNORフラッシュから直接実行されます
。...– rackandboneman

回答:


9

主に、memtestのロードに必要なRAMの量が非常に少ないためです。プログラムが実行される場合、この1つの領域のメモリは大丈夫である可能性があります。

そのチャンス

  1. memtestがロードされたメモリの小さなセクションが不良です。
  2. 目立った問題なくすべてのテストを正常に完了することができたのはまだ十分でした。

ありそうもない。


7

Memtestは、テストするRAMに依存しないという点で非常に耐久性があります。

たとえば、テスト0はウォーキング1アルゴリズムを使用し、2つの連続したメモリアドレスを比較するだけなので、そのテストに必要なのは単一のポインター(おそらくキャッシュされた)だけです。

したがって、3ビットのRAMスティックがある場合、memtestはこれを次のようにロードします。

<pointer location> 00000001 00000010 00000100 00001000 00010000 00100000 01000000

最初のアドレスが破損している場合、2つのランダムな場所を比較します。

00000001 00100000

また、memtestの変数が破損していても、失敗します。


3

Memtestは、少なくともそれ自体がロードされるメモリが適切であるという、少なくとも1つの仮定を絶対に行わなければなりません。その後、メモリ全体をスキャンしてテストできます。

ロードされた唯一のプログラムであり、システム上の実質的にすべてのメモリにアクセスできる必要があるため、独自のメモリでエラーを読み取り、検出できるため、そのメモリを読み取り、比較することができます「既知の良い」サンプル。


私は主に、不良RAMの動作の変化について考えていました。たとえば、すべてのテストが常に真になるように、不良ラムがロジックを変更した場合。
TheLQ

私は、テスト中にシングルビットフリップが偽として真の読み取りを行う可能性があると言いますが、フリップするビットはもっと重要なものになる可能性が高く、Memtestでは実際のランニングのサイズを期待しますコードが「テストケース」よりも大きいため、エラーの代わりにパスを検出する前に、少しエラーが発生するとプログラムがひどくクラッシュします。私はそれが可能性であることを認めます。
モクバイ

1

小さいことによって。RAMの一部が不良である場合、プログラムが小さいほど、プログラムの一部が不良箇所の1つにある可能性は低くなります。メモリテストをロードするのに十分な距離までブートするとRAMを使用するファームウェアコードが必要になることを考えると、そこまで到達できれば、RAMの低い領域はmemtestが実行できるほど十分に機能しているということです。


1

考えてみてください:Memtest86は、RAMの大きさ、後で比較するためにRAMに入れるもの、画面を更新する場所、およびその他の多くの情報に関する情報を保存する必要があります。変数を使用するには、RAMが適切に機能している必要があります。しかし、欠陥のある可能性のあるRAMでプログラムを実行するときに、どのようにして信頼できる結果を得ることができますか?

まあ、これはMemtestが行うことです-さまざまな(既知の)パターンをRAMに書き込み、それを読み戻し、比較します。不一致がある場合、RAMを破損する必要があります。

これに例えると、チェックするハードドライブからハードドライブチェックプログラムを実行しています。あなたはそれを決してしないだろう、悪いブロックは多くの予期しない方法でプログラムに影響を与える可能性がある

これは事実ですが、選択の余地がない場合もあります。プログラムを正常にロードできる限り、(何らかの種類の障害のあるメディアで実行されている場合でも)診断タスクを実行できる必要があります。

Memtest86はどのように悪いRAMで機能しますか?

まあ、それは最初にメモリに自分自身をロードする必要があります。ほとんどの場合、このメモリは依然として良好です。それがある場合ではない、MEMTESTは、最も可能性の高いプログラム自体は、チェックサムといくつかのインプレース変数を比較することにより、破損していることを決定します。それらが一致しない場合は、RAMが不良であるか、ダウンロードしたコピーが破損していることがすぐにわかります(後者が原因かどうかを判断するのは簡単な作業です)。


TL、DR:Memtest86 +は、RAMの最初のメガバイトがまだ問題ない(ロードされる可能性が最も高い場所)と仮定してのみ機能します。この領域が破損していると仮定すると、Memtest86 +自体は単純に機能しません(これは、テストを実行していなくてもRAMが不良であることを示す非常に迅速な指標です)。


0

アプリケーションが変数を保存しているRAMが不良である場合、ほとんどのテストは失敗します。

アルゴリズムはすべての種類の異なるパターンを書き込み、次にそれらを再度読み取ることで適切に書き込まれているかどうかをチェックします。書き込みまたは読み取りが正しく行われなかった場合、問題のテストは失敗します。ほとんどのテストを実行して数時間実行すると、RAMの安定性を確認できます...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.