為什么需要ECC內存?因為硬盤的速度遠遠比不上CPU的速度,所以電腦在程序運行時CPU都會先把要執行的代碼和各種數據從硬盤讀取到內存(單片機這種小CPU除外),之后和內存交互數據,所以內存的穩定性很大程度上決定了電腦的穩定性。但是在電腦的運行環境中,存在著各式各樣的干擾,包括EMI電磁干擾、電源紋波干擾等,這些干擾會導致內存在和CPU交互數據時發生比特翻轉(某個0變成1),如果比特翻轉發生在某些不重要的位置上,比如某張圖片或者某個視頻流里面,使用者很有可能會感受不到。但是一旦發生在某個代碼里面,輕則導致軟件報錯或者閃退,重則藍屏死機或hardfault,對于普通PC來說還算能接受,畢竟概率很小,但是對于服務器來講,一次宕機可能會造成災難性的損失,所以服務器往往會使用穩定性更高的ECC內存。
漢明碼原理
為什么ECC內存能糾錯呢?就是因為使用了漢明碼編碼。更準確來說,目前絕大多數ECC內存都是使用的漢明碼來發現并糾錯的。漢明碼在一組數據中最多只能糾錯1個比特或者最多發現2個比特的錯誤,超過2個比特的錯誤就有概率通過漢明碼校驗,這是前提,只有在這個基礎上我們才能推出后面的結論。
漢明碼原理總結來說就是奇偶校驗+交集排除,奇偶校驗負責檢測錯誤,交集排除負責定位錯誤的位置。奇偶校驗:根據被傳輸的一組二進制代碼的數位中“1”的個數是奇數或偶數來進行校驗。以偶校驗為例,在每組數據中增加一個奇偶校驗位,若原始數據1的個數為奇數,那奇偶校驗位就補1,若原始數據1的個數本身就是偶數那奇偶校驗位就不用補1,用0代替。奇偶校驗有個巧妙的地方,就是奇偶校驗位本身也能被校驗,這也是奇偶校驗能和交集排除配合使用的一個必要前提。交集排除:簡單來說就是元素A若同時在集合B和集合C中,如果A、B、C都存在的話,那A一定在B∩C中。下面以一個4*4的數據舉例說明。1.為了使用交集排除,先把4*4的數據分成下圖4個區:2.在1區使用偶校驗得出沒有錯誤:3.在2區使用偶校驗得出有錯誤:4.在3區使用偶校驗得出有錯誤:5.在4區使用偶校驗得出沒有錯誤:
6.綜合2、3、4、5的結論就可以得出,錯誤數據同時在2區和3區,并且1區和4區沒有錯誤,所以錯誤數據一定在如下(2,3)的位置,所以把(2,3)的1改為0就能得到正確的一組數據。
總結
以上就是漢明碼最基礎的原理,但這并不是漢明碼被廣泛運用在內存糾錯的全部原因,因為單純比糾錯能力,它遠遠沒有LDPC低密度校驗碼強,能被廣泛運用的原因是漢明碼能用極少的硬件電路實現(4*4的數據只需要5級異或門),而且有效數據比很高(一組數據只需要在2的整數次方的比特位置插入一個比特的校驗位,有效數據比成指數級提高,當然一組數據越長超過2比特錯誤的概率也就越大),具體原理后面再分析。
-
內存
+關注
關注
8文章
3028瀏覽量
74071 -
ECC
+關注
關注
0文章
97瀏覽量
20575
發布評論請先 登錄
相關推薦
評論