目次
はじめに
偶数パリティや奇数パリティといった種類があることは知っていましたが、具体的にどう計算するのか、なぜエラー検出に役立つのかがよく分かっていませんでした。今回はパリティビットについて、備忘録としてまとめます。
パリティビットとは
パリティビットは、データ通信やメモリでデータが正しく伝わったかを確認するために使われる追加の1ビットです。
データは通信中や保存中にノイズ(電気的な雑音)や物理的な障害によってビットが反転してしまうことがあります。例えば、送信側が1010というデータを送ったのに、受信側では1110になってしまうような状況です。このような誤りを検出するために、パリティビットが追加されます。
パリティビットの役割は、データ全体の中で1がいくつあるかを数え、その合計が偶数または奇数になるように調整することです。これにより、受信側でも同じ計算をして、データが正しく届いたかを確認できます。
偶数パリティと奇数パリティ
パリティビットには「偶数パリティ」と「奇数パリティ」の2つの方式があります。どちらの方式を使うかは、通信システムやメモリの設計によって決められています。
【偶数パリティ】
偶数パリティは、データ全体(元のデータ + パリティビット)の中で1の個数が偶数になるようにパリティビットを設定する方式です。
- 元のデータで1の個数が偶数の場合、パリティビットは0になります
- 元のデータで1の個数が奇数の場合、パリティビットは1になります
例えば、元のデータが1010の場合、1は2個(偶数)なので、パリティビットは0になります。全体では10100となり、1の個数は2個で偶数のままです。
【奇数パリティ】
奇数パリティは、データ全体の中で1の個数が奇数になるようにパリティビットを設定する方式です。
- 元のデータで1の個数が偶数の場合、パリティビットは1になります
- 元のデータで1の個数が奇数の場合、パリティビットは0になります
例えば、元のデータが1010の場合、1は2個(偶数)なので、パリティビットは1になります。全体では10101となり、1の個数は3個で奇数になります。
具体的な計算例
ここでは、ユーザーから提示された(1011)₂というデータを例に、偶数パリティと奇数パリティを実際に計算してみます。
【偶数パリティの計算】
元のデータは1011で、1が3個含まれています(奇数)。
偶数パリティでは1の個数を偶数にする必要があるため、パリティビットは1になります。
- 元のデータ:
1011(1が3個) - パリティビット:
1 - 送信データ:
1011 1(右端に配置、1が4個で偶数)
【奇数パリティの計算】
元のデータは1011で、1が3個含まれています(奇数)。
奇数パリティでは1の個数を奇数に保つ必要があるため、パリティビットは0になります。
- 元のデータ:
1011(1が3個) - パリティビット:
0 - 送信データ:
1011 0(右端に配置、1が3個で奇数)
このように、同じ元のデータでも偶数パリティと奇数パリティでは、追加されるパリティビットの値が異なります。
パリティチェックの仕組み
パリティビットを使ったエラー検出の流れは、以下のようになります。
まず、送信側ではデータにパリティビットを追加します。偶数パリティを使う場合、元のデータ1011にパリティビット1を追加して10111として送信します。
次に、受信側では受け取ったデータの1の個数を数えます。偶数パリティの場合、1の個数が偶数であれば正常、奇数であればエラーと判断します。
例えば、送信データ10111が正しく届いた場合、1の個数は4個(偶数)なので正常です。しかし、途中でノイズにより1ビットが反転して11111になった場合、1の個数は5個(奇数)となり、エラーが検出されます。
このようにパリティチェックは、データが正しく伝わったかを確認するシンプルで効果的な方法です。
パリティビットの限界
パリティビットは便利ですが、完璧ではありません。いくつかの限界があります。
最も大きな限界は、偶数個のビットが同時に反転した場合、エラーを検出できないことです。例えば、10111の2つのビットが反転して00101になった場合、どちらも1の個数は4個(偶数)なので、受信側ではエラーと判断できません。
また、パリティビットではエラーの位置が分からないため、エラーを修正することもできません。エラーが検出された場合、通常はデータの再送信を要求する必要があります。
さらに、1ビットしか追加しないため、複雑なエラーに対する保護能力は限られています。より高度なエラー検出や訂正が必要な場合は、CRC(巡回冗長検査)やハミング符号(エラー訂正符号の一種)などの別の手法が使われます。
実際の使用場面
パリティビットは、さまざまな場面で実際に使われています。
- メモリ: コンピュータのRAM(一時記憶装置)では、パリティメモリと呼ばれる種類があり、データの正確性を確認するためにパリティビットが使われています
- シリアル通信: RS-232などの古い通信規格では、データの送受信時にパリティビットを付加してエラーを検出していました
- ストレージ: 一部のハードディスクやSSD(記憶装置)では、データの整合性チェックの一部としてパリティビットが使用されています
- ネットワーク: 一部の古いネットワークプロトコル(通信手順)では、パリティチェックがエラー検出に利用されていました
現代のシステムでは、より高度なエラー検出・訂正手法が主流になっていますが、シンプルで軽量なパリティビットは今でも一部の用途で使われています。
まとめ
パリティビットは、データの正確性を確認するために追加される1ビットで、偶数パリティと奇数パリティの2つの方式があります。シンプルな仕組みながら、1ビットのエラー検出に有効な手法です。