揭祕英特爾處理器如何啓動?

  英特爾處理器是怎樣運行的?當咱們打開計算機時,它會在可以加載操做系統以前通過一系列步驟。在這篇文章中,咱們將看到典型的x86處理器如何啓動。這是一個很是複雜且涉及的過程。咱們只提出一個基本的總體結構。此外,處理器實際上採用何種路徑來達到能夠加載OS的狀態,這取決於引導固件。操作系統

  施加電源以前指針

  讓咱們從BIOS芯片開始,也稱爲引導ROM。BIOS芯片是計算機主板上的一塊硅片,它能夠存儲字節。它有兩個咱們感興趣的特徵。首先,它(或其中的一部分)是內存映射到CPU的地址空間,這意味着CPU能夠像訪問RAM同樣訪問它。特別是,CPU能夠將其指令指針指向BIOS芯片內的執行代碼。其次,BIOS芯片存儲的字節表明CPU執行的第一個指令。BIOSchop還包含其餘代碼和數據。典型的BIOS包含閃存描述符(BIOS芯片的內容表),BIOS區域(要執行的第一條指令),IntelME(Intel管理引擎)和GbE(千兆以太網)。blog

  通電時內存

  現代英特爾芯片配備了所謂的英特爾管理引擎。只要有電源-經過電池或電源-IntelME就會出現。它執行本身的初始化,要求它讀取BIOS的閃存描述符以查找IntelME區域的位置,而後從BIOS的IntelME區域讀取代碼和配置數據。接下來,當咱們按下計算機上的電源按鈕時,CPU會亮起。在多處理器系統上,始終存在一個名爲BootstrapProcessor(BSP)的指定處理器。在任何一種狀況下,處理器老是以所謂的16位實模式啓動,其中insruction指針指向地址0xffff.fff0,即復位向量。在此初始模式下,處理器有前12個地址線被斷言,所以任何地址都看起來像0xfffx.xxxx。編譯器

  BIOS芯片也以這樣的方式設置,即從BIOS執行的第一條指令位於處理器的物理地址0xffff.fff0。所以,處理器可以從BIOS芯片的BIOS區域執行第一條指令。該區域包含所謂的引導固件。引導固件的示例是UEFI實現,coreboot和經典BIOS。io

  引導固件的第一件事就是切換到32位模式。它也是「保護模式」,即打開分段,而且可使用不一樣的訪問權限管理處理器地址空間的各個段。然而,啓動固件只有一個段,有效地關閉了分段。這稱爲平面模式。編譯

  早期的初始化配置

  值得注意的是,在啓動過程的這一點上,DRAM不可用。DRAM初始化是啓動固件的主要目標之一。但在它初始化DRAM以前,它須要作一些準備。sso

  微代碼補丁就像CPU正常運行的補丁。英特爾不斷髮布針對不一樣CPU的微碼補丁。引導固件在引導過程當中很早就應用了這些補丁。處理器的一部分是所謂的sout橋接器或I/O控制器集線器(ICH)或外圍控制器集線器(PCH)。ICH也有一些初步措施。例如,ICH可能包含一個看門狗定時器,能夠關閉哪一個DRAM正在初始化。必須首先關閉該看門狗定時器。權限

​  固然全部這些都是由某人編寫的代碼固件完成的。如今咱們知道的大多數代碼都使用堆棧。但咱們已經提到DRAM還沒有初始化,所以沒有內存。那麼這段代碼是如何編寫和運行的呢?答案是這是無堆棧代碼。要麼它是手寫的x86彙編,要麼就像coreboot同樣,它是用C語言編寫的,並使用稱爲ROMCC的特殊編譯器進行編譯,該編譯器將C轉換爲無堆棧彙編指令。這固然有一些限制,因此ROMCC編譯代碼不是咱們想要執行的全部內容。咱們須要儘快堆疊。(歡迎轉載分享)

相關文章
相關標籤/搜索