2010.12.14 07:05

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

ADVERTISEMENT

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

UEFI BIOS系統的開機流程

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

ADVERTISEMENT

1. SEC階段:

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

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

2. PEI階段:

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

ADVERTISEMENT

3. DXE階段:

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

4. BDS階段:

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

5. TSL階段:

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

ADVERTISEMENT

傳統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時,都必須加進會使效能大大降低的相容模式。

ADVERTISEMENT

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的先天侷限,有時候磁碟陣列卡就是裝不上去。

4. 十年不變的程式碼

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

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

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

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

  • 延伸閱讀:

ADVERTISEMENT