奇偶検査 (キグウケンサ) とは | 意味や読み方など丁寧でわかりやすい用語解説
奇偶検査 (キグウケンサ) の読み方
日本語表記
奇偶検査 (キグウケンサ)
英語表記
parity check (パリティチェック)
奇偶検査 (キグウケンサ) の意味や用語解説
奇偶検査とは、デジタルデータの伝送や保存時に、データに誤りが生じていないかを検出する最も基本的な手法の一つである。データは、コンピュータ内部での処理、ネットワークを介した伝送、ストレージへの保存など、さまざまな過程で電気信号のノイズ、磁気的な劣化、物理的な損傷といった要因により、意図せずビットが反転してしまう「ビットエラー」が発生する可能性がある。このようなビットエラーは、プログラムの誤動作、データの破損、システムの停止など、重大な問題を引き起こしかねないため、誤りを検出する仕組みが必要となる。奇偶検査は、この誤り検出を実現するためのシンプルかつ効率的な方法として、古くから広く利用されてきた。 奇偶検査の基本的な考え方は、データのビット列に含まれる「1」の数を数え、その偶数か奇数かという情報(偶奇性)を、追加の1ビット(パリティビットと呼ばれる)に格納することにある。データ送信側や書き込み側では、元のデータビット列に対してパリティビットを付加し、受信側や読み出し側では、そのデータとパリティビットを含めた全体の偶奇性を再度計算し、それが期待される偶奇性と一致するかどうかを検証する。もし偶奇性が一致しない場合、データにビットエラーが発生したと判断される。 具体的に奇偶検査の仕組みを説明する。まず、パリティビットの生成方法には主に「偶数パリティ」と「奇数パリティ」の二種類がある。 偶数パリティでは、データビット列とパリティビットを合わせた全体の「1」の数が偶数になるように、パリティビットの値を0か1に決定する。例えば、「10110」という5ビットのデータがある場合、このデータに含まれる「1」の数は3個(奇数)である。偶数パリティを適用するには、全体の「1」の数を偶数にする必要があるため、パリティビットを「1」とする。これにより、データとパリティビットを合わせた「101101」という6ビットの列が生成され、この中に含まれる「1」の数は4個(偶数)となる。 一方、奇数パリティでは、データビット列とパリティビットを合わせた全体の「1」の数が奇数になるようにパリティビットを決定する。上記の例「10110」であれば、元の「1」の数は3個(奇数)であるため、パリティビットを「0」とすることで、全体で3個の「1」となり、奇数に保たれる。結果として「101100」というビット列が生成される。どちらの方式を用いるかは、システムやプロトコルによって事前に決められている。 データが送信されたり、ストレージから読み出されたりした後、受信側や読み出し側で奇偶検査が実行される。この検査では、受け取ったデータビット列と付加されたパリティビットを合わせた全体の「1」の数を再度計算する。そして、その計算結果の偶奇性が、生成時に採用された偶奇パリティのルール(偶数パリティなら偶数、奇数パリティなら奇数)と一致するかを確認する。もし、計算された偶奇性と期待される偶奇性が異なっていた場合、データ伝送中や保存中に少なくとも1ビットのエラーが発生したと判断し、エラーを通知する。 奇偶検査の利点は、その単純さと実装の容易さにある。わずか1ビットを追加するだけで誤り検出機能を実現できるため、ハードウェアやソフトウェアの実装コストが非常に低い。そのため、かつてのコンピューターのメインメモリや、RS-232Cなどのシリアル通信、一部のストレージデバイスなど、さまざまな場面で広く利用されてきた歴史がある。 しかし、奇偶検査には限界も存在する。この手法は、データ中の**1ビットのエラー**であれば確実に検出できる。なぜなら、1ビットが反転するだけで、全体の「1」の偶奇性が必ず変化するためである。例えば、偶数パリティの「101101」が、途中で先頭のビットが反転して「001101」になった場合、含まれる「1」の数は3個となり、偶数ではなく奇数になるため、エラーが検出される。 しかし、同時に**2ビットのエラー**が発生した場合、検出できない可能性が高いという弱点がある。もし2つのビットが両方とも「0→1」に反転するか、「1→0」に反転した場合、全体の「1」の数の偶奇性は変わらないため、奇偶検査ではエラーを検出できない。同様に、偶数個のビットが同時に反転した場合は、奇偶性が維持されてしまうため、エラーを見過ごしてしまうことになる。また、奇偶検査は「エラーが発生したこと」を検出できるが、「どのビットが間違っているか」を特定したり、誤りを自動的に訂正したりする能力は持たない。 現代のコンピュータシステムやネットワークでは、より高度で強力な誤り検出・訂正技術が主流となっている。例えば、CRC(Cyclic Redundancy Check:巡回冗長検査)は複数ビットのエラー検出に非常に優れており、ECC(Error-Correcting Code:誤り訂正符号)メモリは、検出だけでなく1ビットのエラーを自動的に訂正する能力を持つ。これらの技術は奇偶検査よりも複雑なアルゴリズムを必要とするが、より高いデータ信頼性を要求されるシステムでは不可欠となっている。 それでも、奇偶検査はデジタルデータ処理における誤り検出の基礎を理解する上で非常に重要な概念であり、低コストでシンプルな誤り検出が必要とされる特定の組み込みシステムや簡易な通信プロトコルにおいては、現在でもその有効性が認識され利用されている。システムエンジニアを目指す者として、このような基本的な誤り検出の仕組みを理解することは、より複雑なシステムの設計やトラブルシューティングを行う上での土台となる知識である。