[閒聊] 談一下ECC怎麼工作的好了已刪文

看板PC_Shopping (個人電腦購買)作者 (此方不可長)時間3年前 (2022/06/13 17:49), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
首先要理解什麼事奇偶校驗 奇偶校驗就是 如果一串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
文章代碼(AID): #1YfmX2If (PC_Shopping)
文章代碼(AID): #1YfmX2If (PC_Shopping)