您好,登錄后才能下訂單哦!
文章太長,有很多人會看不進去。在這個浮躁的社會里,能夠把一本書逐字閱讀已經變成了一種奢侈,尤其是現在大行其道的速讀閱讀法,講究快即是美。而技術來不得半點取巧,需要一點點的讀,一點點的思考和吸收,浮躁了,你就變成啥也懂,啥也不精的偽專家。
一個顯著的區別就是EFI是用模塊化,C語言風格的參數堆棧傳遞方式,動態鏈接的形式構建的系統,較BIOS而言更易于實現,容錯和糾錯特性更強,縮短了系統研發的時間。
它運行于32位或64位模式,乃至未來增強的處理器模式下,突破傳統16位代碼的尋址能力,達到處理器的最大尋址。它利用加載EFI驅動的形式,識別及操作硬件,不同于BIOS利用掛載實模式中斷的方式增加硬件功能。后者必須將一段類似于驅動的16位代碼,放置在固定的0x000C0000至
0x000DFFFF之間存儲區中,運行這段代碼的初始化部分,它將掛載實模式下約定的中斷向量向其他程序提供服務。例如,VGA圖形及文本輸出中斷(INT 10h),磁盤存取中斷服務(INT 13h)等等。
由于這段存儲空間有限(128KB),BIOS對于所需放置的驅動代碼大小超過空間大小的情況無能為力。另外,BIOS的硬件服務程序都已16位代碼的形式存在,這就給運行于增強模式的操作系統訪問其服務造成了困難。因此BIOS提供的服務在現實中只能提供給操作系統引導程序或MS-DOS類操作系統使用。而EFI系統下的驅動并不是由可以直接運行在CPU上的代碼組成的,而是用EFI Byte Code編寫而成的。這是一組專用于EFI驅動的虛擬機器指令,必須在EFI驅動運行環境(Driver Execution Environment,或DXE)下被解釋運行。
這就保證了充分的向下兼容性,打個比方說,一個帶有EFI驅動的擴展設備,既可以將其安裝在安騰處理器的系統中,也可以安裝于支持EFI的新PC系統中,而它的EFI驅動不需要重新編寫。這樣就無需對系統升級帶來的兼容性因素作任何考慮。另外,由于EFI驅動開發簡單,所有的PC部件提供商都可以參與,情形非常類似于現代操作系統的開發模式,這個開發模式曾使Windows在短短的兩三年時間內成為功能強大,性能優越的操作系統。
基于EFI的驅動模型可以使EFI系統接觸到所有的硬件功能,在操作操作系統運行以前瀏覽萬維網站不再是天方夜譚,甚至實現起來也非常簡單。這對基于傳統BIOS的系統來說是件不可能的任務,在BIOS中添加幾個簡單的USB設備支持都曾使很多BIOS設計師痛苦萬分,更何況除了添加對無數網絡硬件的支持外,還得憑空構建一個16位模式下的TCP/IP協議棧。
一些人認為BIOS只不過是由于兼容性問題遺留下來的無足輕重的部分,不值得為它花費太大的升級努力。而反對者認為,當BIOS的出現制約了PC技術的發展時,必須有人對它作必要的改變。
EFI和操作系統
EFI在概念上非常類似于一個低階的操作系統,并且具有操控所有硬件資源的能力。不少人感覺它的不斷發展將有可能代替現代的操作系統。事實上,EFI的締造者們在第一版規范出臺時就將EFI的能力限制于不足以威脅操作系統的統治地位。
首先,它只是硬件和預啟動軟件間的接口規范;其次,EFI環境下不提供中斷的訪問機制,也就是說每個EFI驅動程序必須用輪詢的方式來檢查硬件狀態,并且需要以解釋的方式運行,較操作系統下的驅動效率更低;再則,EFI系統不提供復雜的存儲器保護功能,它只具備簡單的存儲器管理機制,具體來說就是指運行在x86處理器的段保護模式下,以最大尋址能力為限把存儲器分為一個平坦的段,所有的程序都有權限存取任何一段位置,并不提供真實的保護服務。
當EFI所有組件加載完畢時,系統可以開啟一個類似于操作系統Shell的命令解釋環境,在這里,用戶可以調入執行任何EFI應用程序,這些程序可以是硬件檢測及除錯軟件,引導管理,設置軟件,操作系統引導軟件等等。理論上來說,對于EFI應用程序的功能并沒有任何限制,任何人都可以編寫這類軟件,并且效果較以前MS-DOS下的軟件更華麗,功能更強大。
一旦引導軟件將控制權交給操作系統,所有用于引導的服務代碼將全部停止工作,部分運行時代服務程序還可以繼續工作,以便于操作系統一時無法找到特定設備的驅動程序時,該設備還可以繼續被使用。
EFI的組成
一般認為,EFI由以下幾個部分組成:
1. Pre-EFI初始化模塊
2. EFI驅動執行環境
3. EFI驅動程序
4. 兼容性支持模塊(CSM)
5. EFI高層應用
6. GUID 磁盤分區
在實現中,EFI初始化模塊和驅動執行環境通常被集成在一個只讀存儲器中。
Pre-EFI初始化程序在系統開機的時候最先得到執行,它負責最初的CPU,主橋及存儲器的初始化工作,緊接著載入EFI驅動執行環境(DXE)。當DXE被載入運行時,系統便具有了枚舉并加載其他EFI驅動的能力。在基于PCI架構的系統中,各PCI橋及PCI適配器的EFI驅動會被相繼加載及初始化;這時,系統進而枚舉并加載各橋接器及適配器后面的各種總線及設備驅動程序,周而復始,直到最后一個設備的驅動程序被成功加載。
正因如此,EFI驅動程序可以放置于系統的任何位置,只要能保證它可以按順序被正確枚舉。例如一個具PCI總線接口的ATAPI大容量存儲適配器,其EFI驅動程序一般會放置在這個設備的符合PCI規范的擴展只讀存儲器(PCI Expansion ROM)中,當PCI總線驅動被加載完畢,并開始枚舉其子設備時,這個存儲適配器旋即被正確識別并加載它的驅動程序。
部分EFI驅動程序還可以放置在某個磁盤的EFI專用分區中,只要這些驅動不是用于加載這個磁盤的驅動的必要部件。在EFI規范中,一種突破傳統MBR磁盤分區結構限制的GUID磁盤分區系統(GPT)被引入,新結構中,磁盤的分區數不再受限制(在MBR結構下,只能存在4個主分區),并且分區類型將由GUID來表示。在眾多的分區類型中,EFI系統分區可以被EFI系統存取,用于存放部分驅動和應用程序。
很多人擔心這將會導致新的安全性因素,因為EFI系統比傳統的BIOS更易于受到計算機病毒的***,當一部分EFI驅動程序被破壞時,系統有可能面臨無法引導的情況。實際上,系統引導所依賴的EFI驅動部分通常都不會存放在EFI的GUID分區中,即使分區中的驅動程序遭到破壞,也可以用簡單的方法得到恢復,這與操作系統下的驅動程序的存儲習慣是一致的。
CSM是在x86平臺EFI系統中的一個特殊的模塊,它將為不具備EFI引導能力的操作系統提供類似于傳統BIOS的系統服務。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。