奇偶校验位
此條目没有列出任何参考或来源。 (2013年10月15日) |
奇偶校验位(英語:Parity bit)或校验比特(check bit)是一个表示给定位数的二进制数中1的个数是奇数还是偶数的二进制数。奇偶校验位是最简单的错误检测码。
7位数据 (1的个数) |
带有校验位的字节 | |
---|---|---|
偶核對位元 | 奇核對位元 | |
0000000(0) | 00000000 | 00000001 |
1010001(3) | 10100011 | 10100010 |
1101001(4) | 11010010 | 11010011 |
1111111(7) | 11111111 | 11111110 |
类型
奇偶校验位有两种类型:偶校验位与奇校验位。
以偶校验位來說,如果一组给定数据位中1的个数是奇数,補一個bit为1,使得总的1的个数是偶数。例:0000001, 補一個bit为1, 00000011。
以奇校验位來說,如果给定一组数据位中1的个数是奇数,補一個bit为0,使得总的1的个数是奇数。例:0000001, 補一個bit为0, 00000010。
偶校验实际上是循环冗余校验的一个特例,通过多项式 x + 1 得到1位CRC。
錯誤檢測
如果傳輸過程中包括校驗位在內的奇數個數據位發生改變,那麼奇偶校驗位將出錯表示傳輸過程有錯誤發生。因此,奇偶校驗位是一種錯誤檢測碼,但是由於沒有辦法確定哪一位出錯,所以它不能進行錯誤校正。發生錯誤時必須扔掉全部的數據,然後從頭開始傳輸數據。在噪聲很多的媒介上成功傳輸數據可能要花費很長的時間,甚至根本無法實現。但是奇偶校驗位也有它的優點,它是使用一位數據能夠達到的最好的校驗碼,並且它僅僅需要一些异或门就能夠生成。參見漢明碼中關於其它錯誤校正碼的描述。
使用
由于它很简单,所以奇偶校验位用于许多计算机硬件中,遇到麻烦时能够重新操作或者通过简单的错误检测就能起到很大作用的场合。例如SCSI总线使用奇偶校验位检测传输错误,许多微处理器的指令高速缓存中也包括奇偶校验位保护。因为指令缓存数据是主内存数据的副本,所以在发现错误的时候能够抛弃错误数据并且重新取回数据。
在串行通信中,常用的格式是7个数据位、1个校验位、1到2个停止位。这种格式用方便的8位字节巧妙地适应了所有的7位ASCII字符。也可以用其它的格式表示,8位数据加上1个校验位可以传输任意的8位字节数据。
在串行通信中,奇偶校验位通常是由UART这样的接口硬件生成、校验的,在接收方,通过接口硬件中的寄存器的状态位传给CPU以及操作系统。错误数据的恢复通常是通过重新发送数据,这个过程通常由如操作系统输入输出程序这样的软件处理的。
奇偶校验块
一些容錯式磁碟陣列(RAID)使用奇偶校验块实现冗余。如果阵列中的一块磁盘出现故障,工作磁盘中的数据块与奇偶校验块一起来重建丢失的数据。
下面的图表每列表示一个磁盘,假设A1 = 00000111、A2 = 00000101以及A3 = 00000000。A1、A2、A3 异或得到的Ap等于00000010。如果第二个磁盘出现故障,A2将不能被访问,但是可以通过A1、A3与Ap的异或进行重建:
A1 XOR A3 XOR Ap = 00000101
冗余磁盘阵列 A1 A2 A3 Ap B1 B2 Bp C1 C2 C3 C4 Cp
注释
- ^ 数据块是格式A#,奇偶校验块是Ap。