ネットワークスペシャリスト 2011年 午前2 問22
問題文
ECCメモリで,2ビットの誤りを検出し、1ビットの誤りを訂正するために用いるものはどれか。
選択肢
ア:偶数パリティ
イ:垂直パリティ
ウ:チェックサム
エ:ハミング符号(正解)
🔒 解説は解答すると表示されます
拡張ハミング符号【午前2解説】
正解の理由
選択肢のうち、誤り訂正で「1ビットを訂正し、2ビットを検出する」要件を満たすものはハミング符号の拡張版、すなわち拡張ハミング符号(SECDED)です。標準ハミング符号は符号ビットにより任意の1ビット誤りを訂正(single‑error correction)できますが、2ビット誤りを確実に検出する保証はありません。拡張ハミング符号では全体パリティビットを追加することで、1ビット訂正(SEC)に加え2ビット誤りの検出(DED: double‑error detection)が可能になります。したがって正解は エ です。
解法ステップ
- 問題の要件を整理:1ビット訂正(correct)かつ2ビット検出(detect)を同時に満たすこと。
- 各方式の能力を思い出す:
- 単一のパリティ(偶数/奇数パリティ)は誤り検出(主に奇数個)だが訂正不可。
- チェックサムはブロック誤り検出向けで訂正は不可。
- ハミング符号は1ビット訂正機能を持つ。
- 「1ビット訂正+2ビット検出」を満たすためには、ハミング符号に全体パリティを付けた拡張版(SECDED)であることを確認して選択する。
選択肢別の誤答解説
-
ア: 偶数パリティ
- 単一のパリティビットはブロック内のビット反転が奇数個か偶数個かを判定するだけで、エラー位置を特定できず訂正できません。さらに2ビット誤り(偶数個)は検出できない場合があります。
-
イ: 垂直パリティ
- 「垂直パリティ」は列ごとのパリティを指すことが多く、単独では訂正能力を持ちません(行/列の組合せによる二次元パリティで特定の1ビット訂正は可能)。しかし問題文の要件を満たすことが保証される一般的な手法ではなく、メモリ用ECCとして標準的に使われるのはハミング系です。
-
ウ: チェックサム
- チェックサムはデータブロックの整合性検査に使われますが、ハミングのようにビット単位で誤り位置を特定して訂正する能力はありません。複数ビットの誤り検出性能もアルゴリズムによって異なり、必ずしも「2ビット検出+1ビット訂正」を満たしません。
-
エ: ハミング符号(正)
- ハミング符号は冗長ビットにより誤り位置を特定して1ビット訂正が可能です。さらに全体パリティを追加した拡張ハミング符号(SECDED)にすることで、2ビット誤りを検出できるため、設問の要件に合致します。
よくある誤解
- 標準ハミング符号は自動的に2ビット誤りも検出できる、という誤解。標準版は必ずしも2ビット誤りを検出できないため、2ビット検出が必要なら全体パリティを付加した拡張ハミング(SECDED)が必要です。
- パリティビット=誤り訂正ができる、という誤解。単一のパリティでは検出(しかも奇数個のみ)までで、訂正はできません。
- チェックサムはメモリのビット単位訂正に適している、という誤解。チェックサムは主に伝送やファイル整合性で使われ、位置特定/訂正はできません。
補足コラム
- ハミング符号の冗長ビット数はデータビット数に対して次の不等式を満たす必要があります: 。
例:64ビットのデータに対してはで を満たします。拡張ハミング(SECDED)ではここにさらに全体パリティビットを加え、計8ビットのECCビットを用いる設計がサーバー向けに一般的です(64データビット+8ECCビット)。 - ECCの強化版には、複数ビットの訂正を可能にするBCH符号やリード・ソロモン符号、チップ単位の不良を吸収するChipkillといった方式があります。用途や期待される故障モードに応じて選択されます。
FAQ
Q: 標準ハミング符号と拡張ハミング符号の違いは何ですか?
A: 標準ハミング符号は1ビット誤りを訂正できますが、2ビット誤りの検出は保証しません。拡張ハミング符号は全体パリティビットを追加し、1ビット訂正(SEC)+2ビット検出(DED)を実現します(SECDED)。
A: 標準ハミング符号は1ビット誤りを訂正できますが、2ビット誤りの検出は保証しません。拡張ハミング符号は全体パリティビットを追加し、1ビット訂正(SEC)+2ビット検出(DED)を実現します(SECDED)。
Q: SECDEDで2ビット誤りを訂正できますか?
A: いいえ。SECDEDは2ビット誤りを検出することはできますが訂正はできません。2ビット以上の訂正が必要なら、BCHやリード・ソロモン、Chipkill等のより強力な符号が必要です。
A: いいえ。SECDEDは2ビット誤りを検出することはできますが訂正はできません。2ビット以上の訂正が必要なら、BCHやリード・ソロモン、Chipkill等のより強力な符号が必要です。
Q: なぜサーバーでは8ビットのECCが使われることが多いのですか?
A: 64ビットデータに対して7ビットのハミング冗長で1ビット訂正は可能ですが、全体パリティを追加して2ビット検出したいので1ビットを増やし合計8ビット(SECDED)とする実装が広く採用されています。
A: 64ビットデータに対して7ビットのハミング冗長で1ビット訂正は可能ですが、全体パリティを追加して2ビット検出したいので1ビットを増やし合計8ビット(SECDED)とする実装が広く採用されています。
関連キーワード: ハミング符号、拡張ハミング符号、SECDED、ECCメモリ、パリティビット、誤り訂正、ビット誤り検出、チェックサム、チップキル

\ せっかくなら /
ネットワークスペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

