Windows 作業系統引導過程 BIOS & EFI

CoderKo1o發表於2016-09-25

引導過程

引導過程指的是從計算機通電那一瞬間到CPU開始執行作業系統程式碼時的整個過程。在這個非常初期的階段彙總,CPU執行標準的啟動程式碼。這部分程式碼需要對硬體裝置進行探測,尋找最有可能啟動的作業系統並且根據使用者定義的引數啟動這個作業系統。

傳統形式的引導:BIOS

大部分PC機仍然使用BIOS引導,預設(通用)的引導載入器(boot loader)。BIOS是一種型別的韌體,提供一些簡單的選單項,使用者通過這寫選單項可以修改主機板引數、引導裝置順序等內容。韌體(firmware)可以看做一種軟體,這種軟體被寫入晶片,所以是“固化”的。韌體程式碼本身可以儲存在只讀儲存器(ROM)中。也可儲存在可程式設計只讀儲存器(PROM)或者電可擦除只讀儲存器(EEPROM)中,後兩種形式更為常見。

BIOS晶片主要存放:

  • 自診斷程式:通過讀取CMOS中的硬體配置,並對其自檢和初始化
  • CMOS設定程式:引導過程中,用特殊熱鍵啟動,進行設定後,存入CMOS RAM中
  • 系統自舉裝載程式(bootstrap):在自檢成功後將磁碟相對0道0扇區上的載入程式裝入記憶體執行
  • 主要I/O設定的驅動程式和中斷服務

BIOS和韌體的功能是一樣的:載入一些基本的自舉(bootstrap)程式碼給CPU執行。自舉程式和BIOS或者韌體的職責是:初始化硬體、檢測硬體、定位這些引導裝置、執行引導載入器程式;引導載入器程式的職責是:尋找選擇的作業系統、將所有必要的命令列引數傳遞給作業系統核心。

傳統的BIOS引導作業系統(Windows)如下圖(引用威鋒網):

計算機開機後,固化在ROM中的BIOS會被載入到記憶體執行,BIOS自檢完畢後就會載入COMS的引數,通過COMS的引數,BIOS載入啟動磁碟的MBR到記憶體執行。通過執行MBR的程式碼,記錄在MBR分割槽表中,標記為活動分割槽的磁碟分割槽PBR(Partition Boot Record)被載入到記憶體執行,PBR在執行後可載入作業系統載入器(如Windows的bootmgr)的程式碼到記憶體執行,作業系統載入器可載入作業系統核心到記憶體執行,進而完成BIOS的引導流程。

下一代BIOS:EFI

EFI(Extensible Firmware Interface)是一種取代傳統BIOS的技術。BIOS是一個固定的程式,而且通常是封閉的。EFI是一個全功能的執行時系統,在引導期間提供了更為強大的介面,甚至在之後的執行時也提供了介面,EFI程式通常是引導載入器。EFI程式實際上是一個二進位制程式。

EFI的一般由一下幾部分組成:

  • Pre-EFI初始化模組
  • EFI驅動執行環境
  • EFI驅動程式
  • 相容性支援模組(CSM)
  • EFI高層應用
  • GUID磁碟分割槽

###NVRAM變數

NVRAM是韌體介面中一個非常強大的功能,而且這顯然是BIOS沒有的功能,NARAM變數是在系統範圍記憶體在的,作業系統和韌體本身都可以訪問。一般來說。NVRAM變數可以分為以下幾類:

  • 引導相關的變數:用於指定要引導的核心和根檔案系統,還負責向核心傳遞引數。
  • 韌體內部變數:韌體使用的變數,一般被作業系統忽略
  • 臨時變數:根據需要設定或清空,通常在重新引導的時候不會保留

EFI引導作業系統(Windows)過程如下圖(引用威鋒網):

計算機開機後,就會載入固化在只讀儲存器RAM中的pre-EFI初始化程式,進行主橋及儲存器的初始化工作,緊接著載入EFI驅動執行環境(DXE),EFI驅動會被相繼載入及初始化,接著載入、啟動EFI系統,在EFI系統啟動後,GUID分割槽表就會被識別,之後EFI系統通過載入 NVRAM的引數來決定是否啟動BootCamp程式(蘋果雙重引導的解決方案),不啟動BootCamp程式就會啟動啟動裝載程式(Boot Loader)載入作業系統核心,完成EFI的引導流程。

參考部落格:

Mac 系統引導過程概述 & BootCamp 的祕密

參考文獻:

百度百科:BIOS

百度百科:EFI

相關文章