- ベストアンサー
PCのメモリーエラーについて。
普通のPCのメモリーにはパリティビットがありません。 例えば、メモリー内にて1000番地のデータが2進法で正しい値「0000,0000」が「1000,0000」と2の0乗ビットで反転が起きた後に、PCが1000番地のデータを読み出したらエラーにはならないのでしょうか? また、PC内のレジスターやデータの受け渡しではパリティチェックを行っているのでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
パリティがないメモリにビット反転が起こったとして、それを読み出した場合、正しくない値が読み込まれます。 で、ご質問のエラーが起こるか、ですが、直接的にはエラーは起こりません。なぜなら、正しくないデータであることがわからないからです。間接的にはエラーになることがあります。たとえば、その1000番地がコードであるなら、本来とは違った命令になるでしょうから、プログラムの動作がおかしくなるでしょう。データであって、意味のある値をしまってあったのなら、そのデータの書き換わり方によってはプログラムが異常動作することもあるでしょうし、何の問題もなく動作して、結果だけが異常になることもあるでしょう。 PC内のレジスタやデータの受け渡し、は質問が間違っています。 PC内ではいたるところでデータの受け渡しが行われますが、その対象はレジスタとはかぎりません。よって、質問文を書き換えます。 質問1;PC内のレジスタで、パリティチェックがなされているか。 回答1;レジスタによります。一般的にいって、パリティチェックはなされていないです。理由は簡単、2番目に大きなストレージであるメモリがパリティ保護されていないからです。 質問2;PC内のデータの受け渡しで、パリティチェックがなされているか。 回答2;データの受け渡しはバスで行われます。で、バスによってパリティがあるものとないものに分かれます。代表的なところで言えば、FSBや、QPI,PCI、PCIeはパリティ(CRC,ECCを含んで)があります。 ここまで書いて、誤解を招きそうなので補足します。質問にあったように、パリティのないメモリの内容の1ビットが反転したとして、パリティのあるバスをつかって伝送した場合、パリティエラーは検出されません。バスのパリティは、伝送中のビット反転を検出するものであって、もともとのデータに誤りがあるかどうかはわからないのです。この問題を回避するには、メモリにパリティを持たせるしかありません。こうすれば、メモリコントローラがパリティエラーを検出してくれます。
お礼
ありがとうございます。
補足
ありがとうございます。 メモリーやレジスター上で「1」が「3」と変わってもそのまま気づかないで結果を出す機器だと理解しました。