為什么需要ECC內(nèi)存?
因為硬盤的速度遠遠比不上CPU的速度,所以電腦在程序運行時CPU都會先把要執(zhí)行的代碼和各種數(shù)據(jù)從硬盤讀取到內(nèi)存(單片機這種小CPU除外),之后和內(nèi)存交互數(shù)據(jù),所以內(nèi)存的穩(wěn)定性很大程度上決定了電腦的穩(wěn)定性。
但是在電腦的運行環(huán)境中,存在著各式各樣的干擾,包括EMI電磁干擾、電源紋波干擾等,這些干擾會導(dǎo)致內(nèi)存在和CPU交互數(shù)據(jù)時發(fā)生比特翻轉(zhuǎn)(某個0變成1),如果比特翻轉(zhuǎn)發(fā)生在某些不重要的位置上,比如某張圖片或者某個視頻流里面,使用者很有可能會感受不到。
但是一旦發(fā)生在某個代碼里面,輕則導(dǎo)致軟件報錯或者閃退,重則藍屏死機或hardfault,對于普通PC來說還算能接受,畢竟概率很小,但是對于服務(wù)器來講,一次宕機可能會造成災(zāi)難性的損失,所以服務(wù)器往往會使用穩(wěn)定性更高的ECC內(nèi)存。
漢明碼原理
為什么ECC內(nèi)存能糾錯呢?就是因為使用了漢明碼編碼。更準(zhǔn)確來說,目前絕大多數(shù)ECC內(nèi)存都是使用的漢明碼來發(fā)現(xiàn)并糾錯的。漢明碼在一組數(shù)據(jù)中最多只能糾錯1個比特或者最多發(fā)現(xiàn)2個比特的錯誤,超過2個比特的錯誤就有概率通過漢明碼校驗,這是前提,只有在這個基礎(chǔ)上我們才能推出后面的結(jié)論。
漢明碼原理總結(jié)來說就是奇偶校驗+交集排除,奇偶校驗負責(zé)檢測錯誤,交集排除負責(zé)定位錯誤的位置。
奇偶校驗:根據(jù)被傳輸?shù)囊唤M二進制代碼的數(shù)位中“1”的個數(shù)是奇數(shù)或偶數(shù)來進行校驗。以偶校驗為例,在每組數(shù)據(jù)中增加一個奇偶校驗位,若原始數(shù)據(jù)1的個數(shù)為奇數(shù),那奇偶校驗位就補1,若原始數(shù)據(jù)1的個數(shù)本身就是偶數(shù)那奇偶校驗位就不用補1,用0代替。奇偶校驗有個巧妙的地方,就是奇偶校驗位本身也能被校驗,這也是奇偶校驗?zāi)芎徒患懦浜鲜褂玫囊粋€必要前提。
交集排除:簡單來說就是元素A若同時在集合B和集合C中,如果A、B、C都存在的話,那A一定在B∩C中。下面以一個4*4的數(shù)據(jù)舉例說明。
1.為了使用交集排除,先把4*4的數(shù)據(jù)分成下圖4個區(qū):
2.在1區(qū)使用偶校驗得出沒有錯誤:
3.在2區(qū)使用偶校驗得出有錯誤:
4.在3區(qū)使用偶校驗得出有錯誤:
5.在4區(qū)使用偶校驗得出沒有錯誤:
6.綜合2、3、4、5的結(jié)論就可以得出,錯誤數(shù)據(jù)同時在2區(qū)和3區(qū),并且1區(qū)和4區(qū)沒有錯誤,所以錯誤數(shù)據(jù)一定在如下(2,3)的位置,所以把(2,3)的1改為0就能得到正確的一組數(shù)據(jù)。
總結(jié)
以上就是漢明碼最基礎(chǔ)的原理,但這并不是漢明碼被廣泛運用在內(nèi)存糾錯的全部原因,因為單純比糾錯能力,它遠遠沒有LDPC低密度校驗碼強,能被廣泛運用的原因是漢明碼能用極少的硬件電路實現(xiàn)(4*4的數(shù)據(jù)只需要5級異或門),而且有效數(shù)據(jù)比很高(一組數(shù)據(jù)只需要在2的整數(shù)次方的比特位置插入一個比特的校驗位,有效數(shù)據(jù)比成指數(shù)級提高,當(dāng)然一組數(shù)據(jù)越長超過2比特錯誤的概率也就越大),具體原理后面再分析。
審核編輯:湯梓紅
-
單片機
+關(guān)注
關(guān)注
6037文章
44558瀏覽量
635349 -
cpu
+關(guān)注
關(guān)注
68文章
10863瀏覽量
211778 -
硬盤
+關(guān)注
關(guān)注
3文章
1310瀏覽量
57314 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3025瀏覽量
74054 -
ECC
+關(guān)注
關(guān)注
0文章
97瀏覽量
20569
原文標(biāo)題:干貨|ECC內(nèi)存為什么比普通內(nèi)存更穩(wěn)定?
文章出處:【微信號:cdebyte,微信公眾號:億佰特物聯(lián)網(wǎng)應(yīng)用專家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論