Posts tagged ‘パリティ’

パリティビット

よくパソコンのメモリとかの裏に「パリティ有」とか書いてあったりします。
昔から聞いたことがあった単語だったのですが、まあいいやと思っていたのですが、
最近それを知る機会があったので、せっかくなのでメモしておきます。

まずWikpediaの記載によると、

パリティビット(parity bit)は、コンピュータと通信において、与えられた二進数に対して全体の奇偶性を保つために与えられる一桁の二進数(つまり 0 か 1)である。パリティビットは最も単純な誤り検出符号である。

もうこの時点で意味がわかんない。「奇遇性」ってヒマがあれば追ってみるけど別にいいやと思っちゃいますね普通。

パリティチェックの基本については、以下ページがすごく参考になりました。
通信基本用語 – 誤り制御 | LINEEYE
http://www.lineeye.co.jp/html/term_ayamari.html
エラー制御
http://www.asahi-net.or.jp/~ax2s-kmtn/error.html

まずこれは、あるデータを通信する場合に、そのデータが正常なものなのかをやんわりと検証するためのものです。
送信側は知っていても、受信側は受信するだけで、それが正しいのかどうかはわかりません。

なので、送信するデータを元に、明白な計算結果を一緒につけてあげるのがパリティビットの役割です。

たとえば、「A」も文字コードは10進数で「65」で、1バイトで表現できます。
これを2進数に変換すると「01000001」になります。

パリティビットのルールは、送信側と受信側で決めておくことが出来ますが、たとえばパリティビットは偶数です、と決めたとすると、
上記の「01000001」の中の1の数が偶数であれば、最後に「0」を付与して送信します。
(パリティビットは奇数です、と決めた場合は、パリティビットを合わせた1の数が奇数になるように送信側で調整します。)

受信側は、010000001と「0」をあわせて受信しており、1の数がちゃんと偶数であればOKとします。
途中、通信状態によりどこかのビットが反転(0が1、1が0)になった場合には全体として偶数にならないのでエラーを検出できます。
ただし、この場合はたまたま2つのビットが反転した場合にはエラー検出できません。
全体として奇数か偶数かしかわからないので。これを垂直パリティ方式と言います。
これがWikpediaの「奇遇性」と言うことなんだろうな。

そこで、1キャラクタだけではなく、ある単位でパリティビットを与えて、それがどうなのかを計算する方法があります。
それが水平パリティ方式と言うことになります。

たとえば、「ABCD」と言うデータがあったとしたら、これを2進数にしてリストすると、
A:01000001
B:01000010
C:01000011
D:01000100

となります。これの垂直パリティビットは、偶数パリティの場合は「0010」になりますが、これのタテのパリティビットも算出して送ります。
これをBlockCheckCharacter(BCC)と言うそうですが、以下のようになります。

A:01000001 0
B:01000010 0
C:01000011 1
D:01000100 0
————–
00000100 1

これで、垂直パリティと組み合わせると、多少はエラー検出率があげることが出来ます。
ただ、これはほんとに低レイヤーの処理の話ですなぁ。