即將換掉傳統 BIOS 的 UEFI,你懂了嗎?(二)

即將換掉傳統 BIOS 的 UEFI,你懂了嗎?(二)

上篇當中我們概略介紹了UEFI就快取代傳統BIOS的趨勢,不過說是一回事,資訊業界常有時間到了又推廣不起來的怪事。回到正題,前一篇我們只不過剛剛講完傳統BIOS的功用和開機流程,接下來趕緊對比看看透過UEFI韌體開機的系統,過程有什麼不一樣。

UEFI BIOS系統的開機流程

同樣是進行電腦系統的開機,由於UEFI BIOS是遵循UEFI論壇的規範定義下開發的,所以UEFI的開機流程會像下圖一般:

即將換掉傳統 BIOS 的 UEFI,你懂了嗎?(二)

1. SEC階段:

SEC(安全性)階段其主要的特色為「cache as RAM」,即處理器的快取當成記憶體。由於C語言需要使用堆疊,在這個階段的系統記憶體尚未被初始化,在沒有記憶體可用的情況下,便把處理器的快取當成記憶體來使用,在主記憶體被初始化之前來進行預先驗證CPU/晶片組及主機板。

因為這時侯沒有快取,會導致處理器的效能變得較差,所以在記憶體初始化完畢之前,SEC和PEI階段的程式碼越簡短,越能減少這個副作用。

2. PEI階段:

和傳統BIOS的初始化階段類似,PEI(EFI前初始化)階段是用以喚醒CPU及記憶體初始化。這時候只起始了一小部分的記憶體。同時,晶片組和主機板也開始初始化。接下來的服務程式會確定CPU晶片組被正確的初始化,在此時,EFI驅動程式派送器將載入EFI驅動程式記憶體,進入了起始所有記憶體的DXE階段(驅動程式執行環境)。

3. DXE階段:

DXE的主要功能在於溝通EFI驅動程式及硬體。也就是說此階段所有的記憶體、CPU(在此是指實體兩個或以上的非核心數目,也就是雙CPU插槽處理器甚至是四CPU插槽處理器)、PCI、USB、SATA和Shell都會被初始化。

4. BDS階段:

在BDS(開機設備選擇)這個階段,使用者就可以自開機管理者程式頁面,選擇要從哪個偵測到的開機設備來啟動。

5. TSL階段:

然後進入TSL(短暫系統載入)階段,由作業系統接手開機。除此之外,也可以在BDS階段選擇UEFI Shell,讓系統進入簡單的命令列,進行基本診斷和維護。

傳統BIOS哪裡不好?

在繼續探討何謂UEFI BIOS之前,先來看看傳統BIOS有哪些問題,讓Intel決心帶頭推出UEFI BIOS。

1. 過時的16位元模式

在x86系列CPU進入32位元的時代,為了相容性考量,當時最新的80386 CPU保留了16位元的執行方式,即真實模式(real mode)。在後來多次的CPU改朝換代中都保留了這種執行方式,甚至在含有EM64T的Xeon系列CPU中,供電到CPU啟動時仍然會切換到16位元的真實模式下執行。

也就是說,雖然各大BIOS廠商為了配合潮流演進,將許多新功能新元素添加到產品中,但BIOS在本質上沒有任何改變。迫使Intel在開發更新的CPU時,都必須加進會使效能大大降低的相容模式。

2. 只有1MB定址空間

各位讀者如果有注意傳統BIOS開機,在POST完畢後螢幕上打出的系統摘要表,會發現記憶體欄位標示著「Base Memory=640KB」。加上前一篇提到的384KB UMA(這裡的記憶體不會列入Base Memory),就是所謂1MB可定址記憶體空間。

會造成這項限制,主要還是真實模式的副作用。16位元的CPU,其定址能力為20條定址線所能處理的2^20位元組(Bytes),也就是1024千位元組(KB)。換句話說,在進入OS之前的開機階段,即使安裝了高達4GB的記憶體,絕大部分都無法使用。

3. 組合語言難維護

假設某天你買了一張高階工作站主機板,再裝上一張SCSI或SAS的磁碟陣列卡,竟然發現安裝後你的主機板開機開不下去,然後顯示「Not enough space to copy PCI option ROM」或「Option ROM memory space exhausted」警告字串。然後本來你那雀躍快樂的心情消失了,取而代之的是「歸LP火」熊熊燃燒著。

當你打電話給陣列卡商,電話那頭的死公務員聲音說著:「你要不要問問主機板廠有沒有新的BIOS?」。 好不容易找上主機板廠商客服問:「你們有沒有辦法解決?」然後,你和主機板BIOS工程師之間的攻防就此展開。

對板卡廠的BIOS工程師而言,除非剛好有下單下很大的客戶遇到類似相關問題,否則很有可能就是不了了之。你只好趁購買七天內退掉那張陣列卡,不然就是再找一張可以正常搭配的主機板。

由於傳統BIOS是用組合語言編寫的,而軟體界早就已經是C/C++高階語言甚至是.NET滿天飛,為了相對難找的人才(組合語言高手相對少,要BIOS真正寫得好的更是少數)來減緩新產品上市的速度,不管是消費者或廠商都無法接受。

此時UEFI BIOS標準化和模組化的特徵,便可加速產品推出和減少debug的時間。另外C語言寫的UEFI BIOS體積也會變大,連帶使儲存BIOS的EEPROM需要擴增。

別忘了,這也是Intel的勢力範圍,如果EFI BIOS推廣成功,板卡廠就得多採購一顆晶片。

即將換掉傳統 BIOS 的 UEFI,你懂了嗎?(二)

▲ 由於傳統BIOS的先天侷限,有時候磁碟陣列卡就是裝不上去。

4. 十年不變的程式碼

上述三大問題是以開發廠商的角度來觀察。其他隱而不現的部分,則包含了功能的侷限性和對使用者不夠友善的操作介面。對照現今的視窗介面作業系統,傳統BIOS以文字介面為主且充滿著火星文,加上除了單純的開機,作為仲介硬體初始化和作業系統的功能外實在陽春的可憐。

在開發Itanium CPU之際,業界大魔王Intel實在不想再受制於這些顧慮。試想,既然這是一個新生的CPU架構,那系統韌體和作業系統之間的介面就順便一起重新定義。

並且這一次,Intel為了讓以後各種新的規格和技術可以快速導入,嚴格定義這個傳統BIOS接班人必須具有擴展彈性,而且採取標準化的韌體介面規範,以避免發生傳統BIOS的IBV程式碼更新太被動的問題。

筆者不是開玩笑,業界之前盛傳一句話,如果Award BIOS當時(Intel Pentium處理器時代)沒有華碩,那肯定沒有後來功能齊全的BIOS程式編碼。傳統BIOS靜態連結,缺乏遠見且疊床架屋,而幾乎全基於經驗和約定的見招拆招。所以才有2000年開發出來所謂的EFI(Extensible Firmware Interface;可擴展韌體介面)技術作為工業標準規格,定義了一個驅動介面,用以溝通硬體/韌體和作業系統。

即將換掉傳統 BIOS 的 UEFI,你懂了嗎?(二)

秀典
作者

使用 Facebook 留言
emiljou
1.  emiljou (發表於 2010年12月14日 07:32)
「16位元的CPU,其定址能力為20條定址線所能處理的220位元組(Bytes),也就是1024千位元組(KB)。」
這…?囧rz
88b207db019222ecd2dfaf583e8d4ae4?size=48&default=wavatar
1人給推

2.  hello (發表於 2010年12月14日 10:34)
※ 引述《emiljou》的留言:
> 「16位元的CPU,其定址能力為20條定址線所能處理的220位元組(Bytes),也就是1024千位元組(KB)。」
> 這…?囧rz

220 should be 2^20...
4ca5775f1f5137fbe281e1b05e76b0d4?size=48&default=wavatar
4.  俊逸桑 (發表於 2010年12月14日 19:43)
外插卡最大的問題, 是boot的方法很多種, 從最古老的, 到最符合spec的, BIOS/OPROM都不知道user會什麼奇怪的排列組合.
個家做法皆想要面面俱到, 總是有所疏漏.

進入EFI, 會更加痛苦.一顆OPROM會要同時支援55AA/EBC/driver, 退貨率恐怕會暴增.
D02d464266d65fa11505572ca63a4195?size=48&default=wavatar
5.  hasam99 (發表於 2010年12月14日 22:21)
有點像是唬小孩,除非自己是資工系出身,否則現在人只懂得「花錢」買新機,而且越新越好,哪會這些。
高中以前也只有basic,c++還要到高職去學…
bios只要可以用,電腦能開機,似乎就ok啦!畢竟,一般人不是「代工廠」根本不用懂這麼多!
9635a29f21433f89f91653517b32358c?size=48&default=wavatar
6.  阿伯 (發表於 2010年12月15日 12:05)
※ 引述《hasam99》的留言:
> 有點像是唬小孩,除非自己是資工系出身,否則現在人只懂得「花錢」買新機,而且越新越好,哪會這些。
> 高中以前也只有basic,c++還要到高職去學…
> bios只要可以用,電腦能開機,似乎就ok啦!畢竟,一般人不是「代工廠」根本不用懂這麼多!

不是只懂得「花錢」

而是本來就不需要懂。

這些資訊本來就不是非專業人員該了解的東西。

懂了,專業人員要賺什麼阿 (≧▽≦)
9d69822ce1069f21cc5ca81076f43b1a?size=48&default=wavatar
8.  GOOD (發表於 2010年12月16日 02:32)
好文章 讚!!!!
這種才是有深度的文章
《hasam99》你自己看不懂就說嗎??惱xx怒

作者加油 支持!!
3d6081e11fa73545d021cc2ff5188441?size=48&default=wavatar
9.  JC (發表於 2011年5月26日 15:44)
本篇文章有一點點問題, 提供給作者 :
(1) 原文提到 :
"裝上一張SCSI或SAS的磁碟陣列卡,竟然發現安裝後你的主機板開機開不下去..." ; 此事從來就與 Assembly(組合語言) 的責任無關, 而且每一家 BIOS 內部演算法本來就不同, 也與是否用 UEFI 架構也無關聯, 一旦使用者無法裝,
那就得"自己" 乖乖去要求 "介面卡商" 幫你做好 UEFI Driver, 自行按照該公司的操作手冊去裝起來, 那與 BIOS Engineer "更加" 無關囉~

(2) 原文提到 :
"如果EFI BIOS推廣成功,板卡廠就得多採購一顆晶片" ; 作者是說安置 EFI BIOS 的晶片嗎 ?
如果 "是", 那作者就更不該如此說, 傳統 BIOS 本來就要有地方放, 只是 "容量小", 一部分的原因是 Assembly 祖譯起來本來就非常小, 他日換成 EFI BIOS, 是用 C 的語法
以及一堆 Library + 圖檔塞進去, 內容量比傳統還大, 必須換成 "容量大" 的晶片

因此, 少數支持 EFI BIOS 族群可別貶低傳統 BIOS, 它做的事情比你想像的還多呢~

除了標準的功能性不講, 希望不要只看到炫麗的噱頭而已...

用絢麗的 "刀叉" 吃飯, 與用古樸的 "筷子" 吃飯,
目的都是填飽肚子而已, 各有各的優點

發表回應
謹慎發言,尊重彼此。按此展開留言規則