一、內(nèi)存為什么要Training,內(nèi)存初始化代碼為什么是BIOS中的另類
內(nèi)存需要Training的原因:因?yàn)楝F(xiàn)代內(nèi)存的I/O頻率越來(lái)越高,這就讓小小的一點(diǎn)誤差都會(huì)被放大。因此,內(nèi)存需要進(jìn)行對(duì)齊和補(bǔ)償,以平衡和對(duì)沖線路的差異和信號(hào)的噪聲,從而保證數(shù)據(jù)的準(zhǔn)確性。內(nèi)存的訪問(wèn)鏈路非常復(fù)雜,包括了內(nèi)存控制器、PHY、布線、內(nèi)存顆粒、內(nèi)存 Cell 等等,每個(gè)環(huán)節(jié)都可能引起時(shí)鐘不同步和采樣延遲的問(wèn)題。因此,需要在各個(gè)部分分別進(jìn)行對(duì)齊和補(bǔ)償,以使內(nèi)存 DIMM 的上百條連線整齊劃一,確保數(shù)據(jù)傳輸?shù)恼_性和穩(wěn)定性。
內(nèi)存初始化代碼在 BIOS 中是一個(gè)另類的原因:是因?yàn)樗巧贁?shù)與模擬信號(hào)和信號(hào)完整性打交道的地方,在內(nèi)存的對(duì)齊和補(bǔ)償過(guò)程中,需要進(jìn)行大量的采樣、眼圖代碼的操作。相比于其他 BIOS 代碼,內(nèi)存初始化代碼需要更多的核心技術(shù)功底和實(shí)踐經(jīng)驗(yàn)才能編寫(xiě)。另外,不同的 CPU 廠商可能采用不同的內(nèi)存訪問(wèn)方式,其中 Intel 采用 In Band training,因此在 BIOS 中進(jìn)行內(nèi)存訓(xùn)練,而 ARM 和 AMD 使用 OOB(Out Of Band)Training,則在其他位置進(jìn)行內(nèi)存初始化。
二、內(nèi)存主要技術(shù)
1、ECC
在普通的內(nèi)存上,常常使用一種技術(shù),即Parity,同位檢查碼(Parity check codes)被廣泛地使用在偵錯(cuò)碼(error detectioncodes)上,它們?cè)黾右粋€(gè)檢查位給每個(gè)資料的字元(或字節(jié)),并且能夠偵測(cè)到一個(gè)字符中所有奇(偶)同位的錯(cuò)誤,但Parity有一個(gè)缺點(diǎn),當(dāng)計(jì)算機(jī)查到某個(gè)Byte有錯(cuò)誤時(shí),并不能確定錯(cuò)誤在哪一個(gè)位,也就無(wú)法修正錯(cuò)誤。基于上述情況,產(chǎn)生了一種新的內(nèi)存糾錯(cuò)技術(shù),那就是ECC,ECC本身并不是一種內(nèi)存型號(hào),也不是一種內(nèi)存專用技術(shù),它是一種廣泛應(yīng)用于各種領(lǐng)域的計(jì)算機(jī)指令中,是一種指令糾錯(cuò)技術(shù)。
ECC的英文全稱是“ Error Checking and Correcting”,對(duì)應(yīng)的中文名稱就叫做“錯(cuò)誤檢查和糾正”,從這個(gè)名稱我們就可以看出它的主要功能就是“發(fā)現(xiàn)并糾正錯(cuò)誤”,它比奇偶校正技術(shù)更先進(jìn)的方面主要在于它不僅能發(fā)現(xiàn)錯(cuò)誤,而且能糾正這些錯(cuò)誤,這些錯(cuò)誤糾正之后計(jì)算機(jī)才能正確執(zhí)行下面的任務(wù),確保服務(wù)器的正常運(yùn)行。之所以說(shuō)它并不是一種內(nèi)存型號(hào),那是因?yàn)椴⒉皇且环N影響內(nèi)存結(jié)構(gòu)和存儲(chǔ)速度的技術(shù),它可以應(yīng)用到不同的內(nèi)存類型之中,就象前講到的“奇偶校正”內(nèi)存,它也不是一種內(nèi)存,最開(kāi)始應(yīng)用這種技術(shù)的是EDO內(nèi)存,SD也有應(yīng)用,而ECC內(nèi)存主要是從SD內(nèi)存開(kāi)始得到廣泛應(yīng)用,而新的DDR、RDRAM也有相應(yīng)的應(yīng)用,主流的ECC內(nèi)存其實(shí)是一種SD內(nèi)存。
2、Chipkill
Chipkill技術(shù)是IBM公司為了解決服務(wù)器內(nèi)存中ECC技術(shù)的不足而開(kāi)發(fā)的,是一種新的ECC內(nèi)存保護(hù)標(biāo)準(zhǔn)。我們知道ECC內(nèi)存只能同時(shí)檢測(cè)和糾正單一比特錯(cuò)誤,但如果同時(shí)檢測(cè)出兩個(gè)以上比特的數(shù)據(jù)有錯(cuò)誤,則一般無(wú)能為力。ECC技術(shù)之所以在服務(wù)器內(nèi)存中泛采用,一則是因?yàn)樵谶@以前其它新的內(nèi)存技術(shù)還不成熟,再則在服務(wù)器中系統(tǒng)速度還是很高,在這種頻率上一般來(lái)說(shuō)同時(shí)出現(xiàn)多比特錯(cuò)誤的現(xiàn)象很少發(fā)生,正因?yàn)檫@樣才使得ECC技術(shù)得到了充分地認(rèn)可和應(yīng)用,使得ECC內(nèi)存技術(shù)成為幾乎所有服務(wù)器上的內(nèi)存標(biāo)準(zhǔn)。
3、Register
Register即寄存器或目錄寄存器,在內(nèi)存上的作用我們可以把它理解成書(shū)的目錄,有了它,當(dāng)內(nèi)存接到讀寫(xiě)指令時(shí),會(huì)先檢索此目錄,然后再進(jìn)行讀寫(xiě)操作,這將大大提高服務(wù)器內(nèi)存工作效率。帶有Register的內(nèi)存一定帶Buffer(緩沖),并且能見(jiàn)到的Register內(nèi)存也都具有ECC功能,其主要應(yīng)用在中高端服務(wù)器及圖形工作站上,如IBM Netfinity 5000。
三、BIOS是什么
BIOS是英文”Basic Input Output System”的縮略詞,直譯過(guò)來(lái)后中文名稱就是”基本輸入輸出系統(tǒng)”。在IBM PC兼容系統(tǒng)上,是一種業(yè)界標(biāo)準(zhǔn)的固件接口。BIOS這個(gè)字眼是在1975年名列前茅次由CP/M操作系統(tǒng)中出現(xiàn)。 BIOS是個(gè)人電腦啟動(dòng)時(shí)加載的名列前茅個(gè)軟件。
其實(shí),它是一組固化到計(jì)算機(jī)內(nèi)主板上一個(gè)ROM芯片上的程序,它保存著計(jì)算機(jī)最重要的基本輸入輸出的程序、開(kāi)機(jī)后自檢程序和系統(tǒng)自啟動(dòng)程序,它可從CMOS中讀寫(xiě)系統(tǒng)設(shè)置的具體信息。 其主要功能是為計(jì)算機(jī)提供最底層的、最直接的硬件設(shè)置和控制。此外,BIOS還向作業(yè)系統(tǒng)提供一些系統(tǒng)參數(shù)。系統(tǒng)硬件的變化是由BIOS隱藏,程序使用BIOS功能而不是直接控制硬件。現(xiàn)代作業(yè)系統(tǒng)會(huì)忽略BIOS提供的抽象層并直接控制硬件組件。
延伸閱讀1:內(nèi)存
內(nèi)存(Memory)是計(jì)算機(jī)的重要部件,也稱內(nèi)存儲(chǔ)器和主存儲(chǔ)器,它用于暫時(shí)存放CPU中的運(yùn)算數(shù)據(jù),以及與硬盤(pán)等外部存儲(chǔ)器交換的數(shù)據(jù)。它是外存與CPU進(jìn)行溝通的橋梁,計(jì)算機(jī)中所有程序的運(yùn)行都在內(nèi)存中進(jìn)行,內(nèi)存性能的強(qiáng)弱影響計(jì)算機(jī)整體發(fā)揮的水平。只要計(jì)算機(jī)開(kāi)始運(yùn)行,操作系統(tǒng)就會(huì)把需要運(yùn)算的數(shù)據(jù)從內(nèi)存調(diào)到CPU中進(jìn)行運(yùn)算,當(dāng)運(yùn)算完成,CPU將結(jié)果傳送出來(lái)。