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