[閒聊] 談一下ECC怎麼工作的好了已刪文
首先要理解什麼事奇偶校驗
奇偶校驗就是 如果一串01
其中的1加起來結果是奇數個 得到1
加起來是偶數個 得到0
好 我們現在有一個記憶體陣列
每一格代表一個bit
這裡有 16*16 bit = 256bit = 32 byte
然後右邊與底部則是用來存放奇偶位的記憶體
0123456789ABCDEF 0
0123456789ABCDEF 1
0123456789ABCDEF 2
0123456789ABCDEF 3
0123456789ABCDEF 4
0123456789ABCDEF 5
0123456789ABCDEF 6
0123456789ABCDEF 7
0123456789ABCDEF 8
0123456789ABCDEF 9
0123456789ABCDEF A
0123456789ABCDEF B
0123456789ABCDEF C
0123456789ABCDEF D
0123456789ABCDEF E
0123456789ABCDEF F
0123456789ABCDEF
如果這裡面發生了一個bit翻轉會怎樣呢
假設是 5,2 這個bit 翻轉了
0123456789ABCDEF 0
01234?6789ABCDEF 1
0123456789ABCDEF 2
0123456789ABCDEF 3
0123456789ABCDEF 4
0123456789ABCDEF 5
0123456789ABCDEF 6
0123456789ABCDEF 7
0123456789ABCDEF 8
0123456789ABCDEF 9
0123456789ABCDEF A
0123456789ABCDEF B
0123456789ABCDEF C
0123456789ABCDEF D
0123456789ABCDEF E
0123456789ABCDEF F
0123456789ABCDEF
這時候奇偶校驗就會出錯, 本來該是零或是一的,
就會相反過來;
觀察錯誤的ECC的記憶體位置, 就會直接對應到5,2
顯示出這個位翻轉了, 必須把他翻回來
那如果錯兩個呢?
0123456789ABCDEF 0
0123456789ABCDEF 1
0123456789ABCDEF 2
0123?56789ABCDEF 3
0123456789ABCDEF 4
0123456789ABCDEF 5
0123456789ABCDEF 6
0123456789ABCDEF 7
0123456789ABCDEF 8
0123456789ABCDEF 9
0123456789ABCDEF A
012345678?ABCDEF B
0123456789ABCDEF C
0123456789ABCDEF D
0123456789ABCDEF E
0123456789ABCDEF F
0123456789BCDEF
這樣一來, 你就無法確定是圖中真正故障的?出錯,
還是實際上綠色的部分出錯, 沒法定位。
但知道他出錯還是可以的。
那如果是3個bit呢?
0123456789ABCDEF 0
0123456789ABCDEF 1
012?456789ABCDEF 2
0123456789ABCDEF 3
0123456789ABCDEF 4
0123456789ABCDEF 5
0123456789ABCDEF 6
0123456?89ABCDEF 7
0123456789ABCDEF 8
0123456789ABCDEF 9
0123456789ABCDEF A
0123456789ABCDEF B
0123456789ABCDEF C
0123456789A?CDEF D
0123456789ABCDEF E
0123456789ABCDEF F
0123456789ABCDEF
其實在這個狀況下, 跟2bit沒有太大區別。
不過如果換一個很巧合的排列方式,
這樣的話呢?
0123456789ABCDEF 0
0123456789ABCDEF 1
01234?6789ABCDEF 2
0123456789ABCDEF 3
0123456789ABCDEF 4
0123456789ABCDEF 5
0123456789ABCDEF 6
0123456789ABCDEF 7
0123456789ABCDEF 8
0123456789ABCDEF 9
0123456789ABCDEF A
0123456789ABCDEF B
0123456789ABCDEF C
01234?6789AB?DEF D
0123456789ABCDEF E
0123456789ABCDEF F
0123456789ABCDEF
因為同一行、列上有兩個錯誤,
所以翻過去又翻過來的結果是檢測不到
這樣確實不但沒有更正到錯誤的bit,
還把正確的bit當成了錯誤的bit
不過這種狀況實在機率很低啦。
好, 那存放奇偶校驗的位置有沒有可能故障,
把原本該儲存的值給弄錯了? 也是有的。
如果能額外儲存一個bit來記錄ECC位有沒有錯誤,
那是最好的。
如果沒有, 那可能比較實際的作法是,
單一行或列出現ECC錯誤, 做警報(HEA)而不做Correct動作(也沒法做)。
那剛好 ECC位行跟列各錯一個呢?
那就是沒買乖乖的問題了。
大概是這樣, 這是我以前學的ECC,
不只是記憶體, 包括硬碟、光碟、幾年前的FLASH、
乃至網路、PCIE與USB傳輸....都有類似的機制
有沒有什麼更強大的變體我就不清楚了。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.226.169.102 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/PC_Shopping/M.1655113794.A.4A9.html
PC_Shopping 近期熱門文章
PTT數位生活區 即時熱門文章