{ 開機 – BIOS & UEFI }

BIOS 的開機流程

(即將換掉傳統 BIOS 的 UEFI,你懂了嗎?(一))
1.系統開機區塊初始化
2.POST (power on self test)
3.記錄系統的設定值
4.載入作業系統
bios

UEFI 的開機流程

(即將換掉傳統 BIOS 的 UEFI,你懂了嗎?(二))
1.平台初始化
2.載入作業系統
uefi

傳統BIOS

壞處:
1.過時的16-bit模式
在 x86系列 CPU 進入 32-bit 時開始,為了相容性考量,所有 CPU 都保留了 16-bit 的執行方式,即真實模式 (real mode)。這一直沿用到現在,在供電到 CPU 啟動時仍然會切換到 16-bit 的真實模式下執行。這迫使 Intel 在開發新的 CPU 時,都必須要加入這個會使效能大大降低的相容模式。

2.只有1MB定址空間
主要還是真實模式的副作用,16-bit 的 CPU,其定址能力為 20 條定址線所能處理的 2^20 Bytes,也就是 1024KB。換句話說,在進入 OS 之前的開機階段,即使安裝了高達 4GB 的記憶體,絕大部分都無法使用。

3.組合語言落後
傳統 BIOS 是沿用組合語言編寫的,而軟體界早就已經是 C/C++ 高階語言甚至是 .NET 的天下。假如有天你買了張 SCSI 或 SAS 的磁碟陣列卡,竟然發現安裝後你的主機板開不了機,然後顯示「Not enough space to copy PCI option ROM」或「Option ROM memory space exhausted」警告字串。這時就算你找上主機板廠商的工程師也不容易幫你 debug。
UEFI BIOS 標準化和模組化的特徵,便可加速產品推出和減少 debug 所需時間。另外C語言寫的UEFI BIOS 體積變大,使儲存 BIOS 的 EEPROM 也連帶被擴增。

4.十年不變的程式碼
傳統 BIOS 除了單純的開機,作為硬件初始化和作為與系統之間的中介,功能實在陽春的可憐。傳統 BIOS 靜態連結,缺乏遠見且疊床架屋,幾乎全基於經驗和約定的見招拆招。所以才有 2000年開發出來的所謂 EFI (Extensible Firmware Interface,可擴展韌體介面) 技術作為工業標準規格,定義了一個驅動介面,用以硬體/韌體與作業系統之間溝通。

UEFI BIOS

好處:
1.定址空間更彈性
傳統 BIOS 是以真實模式的中斷向量方式來增加硬件功能,方法是要將一段類似於驅動程式的16位元代碼放置在記憶體 0x000C0000 至 0x000DFFFF 之間,只有 128KB 的有限記憶體空間,因此,當必須要放置超過 128KB 的 option ROM 時 (如 Legacy BIOS 的例子3),傳統 BIOS 便無能為力。很多時候傳統 BIOS 工程師為了解決這類問題,就要想辦法用可行的排列組合硬擠出空間來放驅動代碼。而重組過程更會一不小心造成一些副作用,例如原先解決了的bug,重組後又再發生!然而,UEFI BIOS 利用載入 EFI driver 的形式,來進行對硬件的辨識/控制及系統資源掌控,可以更有系統的分配儲存空間,避免使用強制定址。

2.更佳的向下相容性

3.開發維護更容易
EFI driver 開發簡單,所有的 PC 零組件廠商都可以參與。有了 EFI driver,也可以讓顯示卡在開機階段就載入某種程度的功能,進而可以把傳統文字介面為主的 BIOS 轉成圖形介面。

4.系統更精簡
最後還有 EFI Shell,這是個精簡的作業系統,可以讓使用者進行 BIOS 的更新、系統診斷、安裝特定軟件。有了 UEFI BIOS 甚至可以播放 DVD 而不需完全載入 OS,EFI driver 可以被載入或卸載,連 TCP/IP 核心程式都可以使用。

總結

compare

支持 UEFI 的 OS

對於 UEFI 的支援是從 Windows Server 2008 和 Vista SP1 的 64bit 版本開始,另外 Windows 7 也是只有 64bit 版本完整支援 UEFI。

實際上的 UEFI

UEFI 具有啟動速度快安全性高和支持大容量硬盤而聞名。在目前還是有系統不支持 UEFI 啟動,所以在安裝新舊系統上還存在設定上的差異,具體如下:
legacy BIOS vs UEFI BIOS