デジタルデータのやり取りにおいて、ノイズなどの影響でビットが反転し、データが書き換わってしまうことがあります。このような通信エラーを効率的に検知するための最もシンプルな手法の一つがパリティビット(チェックビット)です。パリティビットは、バイナリデータの末尾に1ビットの情報を付け加えることで、データの整合性を確認する仕組みです。
Key Facts
- 基本機能:データ内の「1」の個数を数え、あらかじめ決めたルール(偶数か奇数か)に合わせることでエラーを検知する。
- 2つの方式:合計の「1」を偶数にする「偶数パリティ」と、奇数にする「奇数パリティ」がある。
- 限界:単一ビットのエラーは検出できるが、偶数個のビットが同時に反転した場合は検知できない。
- 修正不可:エラーの発生は分かるが、どのビットが間違っているかは特定できないため、データの再送が必要となる。
- 応用例:シリアル通信(RS-232など)や、RAIDによるディスク故障時のデータ復旧に利用されている。
パリティの基礎概念と動作原理
IT分野におけるパリティとは、あるビット列に含まれる「1」の個数が偶数であるか奇数であるかという性質を指します。この性質は、データ内のどの1ビットが変化しても反転するため、エラー検出に非常に適しています。
偶数パリティと奇数パリティ
通信を行う双方は、あらかじめ「偶数」か「奇数」のどちらのルールを採用するかを合意しておきます。
- 偶数パリティ (Even Parity):データ全体の「1」の個数が偶数になるようにパリティビットを決定します。元のデータの「1」が奇数個ならパリティビットを「1」にし、既に偶数個なら「0」にします。
- 奇数パリティ (Odd Parity):データ全体の「1」の個数が奇数になるように調整します。元のデータの「1」が偶数個ならパリティビットを「1」にし、既に奇数個なら「0」にします。
この処理は電子回路においてXOR(排他的論理和)ゲートを用いることで非常に効率的に実装でき、多くの集積回路の基本構造となっています。
例えば、7ビットのASCII文字を送信する場合、8ビット目のパリティビットを利用して整合性をチェックします。

エラー検出のメカニズムと限界
受信側は、届いたデータ全体のパリティを確認し、合意したルール(偶数または奇数)に反していれば「パリティエラー」として検知します。これにより、1ビットの反転などの単純なミスを即座に判別でき、データの破棄と再送リクエストを行うことが可能です。
検知できないケース
パリティビットは非常に軽量な仕組みですが、万能ではありません。奇数個のビットエラーは確実に検知できますが、偶数個のビットが同時に反転した場合、合計の「1」の個数の偶奇が変わらないため、エラーが発生していないと誤判定されてしまいます。
| 元のデータ (7bit) | 1の数 | 偶数パリティ付与後 | 奇数パリティ付与後 |
|---|---|---|---|
| 0000000 | 0 | 0000000 0 | 0000000 1 |
| 1010001 | 3 | 1010001 1 | 1010001 0 |
| 1101001 | 4 | 1101001 0 | 1101001 1 |
| 1111111 | 7 | 1111111 1 | 1111111 0 |
実用的な活用シーン
ハードウェアと通信プロトコル
PCIバスやSCSIなどのハードウェアインターフェース、あるいはマイクロプロセッサの命令キャッシュなどでパリティ保護が採用されています。特にキャッシュデータはメインメモリから再取得が可能なため、エラー検知後の再フェッチという運用が効率的です。また、UARTなどのシリアル通信ハードウェアで自動的に生成・チェックされ、CPUへステータスビットとして通知される仕組みが一般的です。
RAIDにおけるデータ復旧(エラー訂正)
通信でのパリティは「検出」のみですが、RAID(独立ディスクの冗長配列)では「復旧(訂正)」に利用されます。複数のディスクにデータを分散させ、そのXOR演算結果をパリティディスクに保存します。これにより、1台のディスクが故障しても、残りのディスクとパリティデータを再びXOR演算することで、失われたデータを完全に再構築できます。
歴史的背景
パリティの概念は古く、1951年の初期の磁気テープストレージに既に実装されていました。また、磁気テープ以前のパンチテープ(紙テープ)システムでも、7ビットのデータに1ビットのパリティを加えた8穴構成などが利用されていました。その後、並列信号に適用する「横方向冗長チェック」や、単一信号の複数ビットに適用する「縦方向冗長チェック」へと発展していきました。
Frequently Asked Questions
パリティビットでエラーを修正することはできますか?
いいえ、標準的なパリティビットはエラーの「検出」のみを行い、「修正」はできません。どのビットが誤っているかを特定できないため、誤ったデータは破棄し、送信元に再送を求める必要があります。修正まで行いたい場合は、ハミング符号などのより高度なエラー訂正符号(ECC)が必要です。
なぜ偶数パリティと奇数パリティの2種類があるのですか?
主にエラー検知の精度を高めるためです。例えば、全ビットが0になるような故障が発生した場合、偶数パリティでは正常なデータとして通り抜けてしまいますが、奇数パリティであれば「1」が不足しているためエラーとして検知できます。通信環境で想定されるエラー傾向に合わせて選択されます。
RAIDでパリティを使ってどうやってデータを復元するのですか?
XOR演算の特性を利用します。例えば「データA XOR データB = パリティ」という関係があるとき、「データA XOR パリティ = データB」となります。この性質により、いずれか1つのデータが失われても、残りの要素を演算することで元の値を導き出せます。
パリティビットの計算にXORが使われるのはなぜですか?
XOR(排他的論理和)は、入力のうち「1」の個数が奇数個のときに「1」を出力し、偶数個のときに「0」を出力する性質を持っているためです。これはまさに偶数パリティの計算ロジックそのものであり、回路構成を非常にシンプルにできるため採用されています。
References
- Ziemer, RodgerE.; Tranter, William H. (17 March 2014). Principles of communication : systems, modulation, and noise (Seventh ed.). Hoboken, New Jersey. . 856647730.
{{}}: CS1 maint: location missing publisher ()