姓名:黎文淵
學(xué)號(hào):17021210909
轉(zhuǎn)載自:https://www.zhihu.com/question/68033587,有刪節(jié)
【嵌牛導(dǎo)讀】:cpu擁有大規(guī)模集成電路,數(shù)以億計(jì)的電路晶體管,由于量大,電路損壞或者失效的概率來說應(yīng)該不小,可是就日常使用的系統(tǒng)Windows或Macos或者Linux很少出現(xiàn)明顯的錯(cuò)誤。這是為什么呢?
【嵌牛鼻子】:UEFI固件、服務(wù)器、嵌入式產(chǎn)品、開源硬件從業(yè)者
【嵌牛提問】:為什么擁有巨大規(guī)模集成電路的cpu很少出錯(cuò)?
【嵌牛正文】
首先,我們要明確一點(diǎn),CPU會(huì)出錯(cuò),并且一旦出錯(cuò),會(huì)越來越頻繁的出錯(cuò)。
我們這里所說的錯(cuò)誤,主要指程序崩潰,或者是程序的運(yùn)算結(jié)果出錯(cuò)。后者SDC(silent data corruption)通常更嚴(yán)重,比如說計(jì)算機(jī)結(jié)果不對(duì)但程序沒有崩潰,錯(cuò)誤結(jié)果最終也許會(huì)導(dǎo)致更嚴(yán)重后果。
電路晶體管出現(xiàn)錯(cuò)誤并不少見,不過從整個(gè)計(jì)算機(jī)系統(tǒng)來看,統(tǒng)計(jì)講到某個(gè)特定的使用者,出現(xiàn)錯(cuò)誤,并且能被體驗(yàn)到并不會(huì)很頻繁。即使硬件出現(xiàn)錯(cuò)誤,并不會(huì)都傳遞到最上層的軟件,比方說,只有5%的錯(cuò)誤會(huì)影響到處理器的狀態(tài),最終用戶觀察到的比如程序崩潰,計(jì)算結(jié)果出錯(cuò)實(shí)際上會(huì)很少。
通常我們說的硬件錯(cuò)誤有兩種,一種是soft error;另一種是hard error。soft error,不是軟件錯(cuò)誤,是指因?yàn)楸尘拜椛洌╝lpha射線、高能輻射)造成的隨機(jī)翻轉(zhuǎn),0變成1或者1變成0。這種錯(cuò)誤是瞬時(shí)發(fā)生的,很難復(fù)現(xiàn)。hard error或者permanent faults就是題主說的電路損壞或者失效。
先講soft error,大部分soft error并不會(huì)影響結(jié)果,比如說某個(gè)晶體管臨時(shí)的位翻轉(zhuǎn),但是邏輯門的輸出不依賴這個(gè)晶體管的狀態(tài);或者出錯(cuò)的時(shí)候時(shí)鐘正好不在那個(gè)狀態(tài)去用那個(gè)值;或者說出現(xiàn)在一個(gè)位置,很快被新的值覆蓋;或者說那個(gè)錯(cuò)誤的值不影響軟件執(zhí)行結(jié)果。因?yàn)榉N種原因,只有很少的錯(cuò)誤會(huì)傳到到最終用戶可見的程度。在處理器架構(gòu)設(shè)計(jì)中,還會(huì)針對(duì)關(guān)鍵電路采用容錯(cuò)機(jī)制,檢測(cè)或者糾正錯(cuò)誤,常見的,比如奇偶校驗(yàn)、ECC等。
hard error,是永久性的電路失效,表現(xiàn)形式就是部分電路的輸出不變,永遠(yuǎn)是1或者0。有的器件,會(huì)有備份電路,有檢測(cè)手段可以測(cè)試并用備份電路替代壞掉的。另外在實(shí)際情況中,損壞的電路并不會(huì)每次都被用到,比方說,芯片上有個(gè)buffer,其中壞了一個(gè)bit,但因?yàn)槲业膶?shí)際應(yīng)用不會(huì)把這個(gè)buffer用完,也不會(huì)用到壞掉的那個(gè)bit,于是不會(huì)受那個(gè)壞掉的bit影響。
硬件也會(huì)提供機(jī)制向軟件報(bào)告錯(cuò)誤。軟件(操作系統(tǒng))也會(huì)有容錯(cuò)機(jī)制去處理硬件報(bào)告的異常。比如說重試,很可能就不會(huì)再出錯(cuò)。出現(xiàn)無(wú)法恢復(fù)的錯(cuò)誤就是變成我們常見的程序崩潰了、kernel panic、死機(jī)之類的。
實(shí)際上,很多錯(cuò)誤并不會(huì)影響用戶體驗(yàn),比如某個(gè)后臺(tái)程序報(bào)一個(gè)錯(cuò),或者崩潰了;再比如屏幕上某個(gè)像素值有一瞬間不對(duì);玩游戲的時(shí)候某個(gè)NPC走位不對(duì);或者點(diǎn)了下按鈕第一下沒動(dòng)... 這些我們都不會(huì)直接想到是某個(gè)晶體管工作不正常。
因此,硬件的糾錯(cuò)機(jī)制會(huì)讓細(xì)微的偶然錯(cuò)誤化于無(wú)形,同時(shí)也避免了數(shù)據(jù)的錯(cuò)誤,幫助計(jì)算機(jī)系統(tǒng)健康穩(wěn)定運(yùn)行。