奇偶校驗位
此條目沒有列出任何參考或來源。 (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。