計算機硬件知識:BIOS、EFI與UEFI詳解!

本文估計很多小白看不懂,但是還是建議你硬著頭皮看完,這篇文章主要講解了這幾種“BIOS”的啟動方式,對電腦啟動問題判斷的理解會有益處。

BIOS是個程序,存儲在BIOS芯片中,而現在的新式電腦用的基本都是UEFI啟動,早期的過渡電腦用的都是EFI啟動。其實EFI或UEFI的一部分也是存儲在一個芯片中,由于它們在表面形式、基本功能上和BIOS差不多,所以習慣上我們也把存儲EFI/UEFI的芯片叫做EFI/UEFI BIOS芯片,EFI/UEFI也叫做EFI/UEFI BIOS,但在實際上它們和BIOS根本是不一樣的,所以最好還是把后面的“BIOS”尾巴去掉為好,下面就來具體談一下BIOS、EFI和UEFI。

BIOS用于計算機硬件自檢、CMOS設置、引導操作系統啟動、提供硬件I/O、硬件中斷等4項主要功能,因此BIOS程序可以分為若干模塊,主要有Boot Block引導模塊、CMOS設置模塊、擴展配置數據(ESCD)模塊、DMI收集硬件數據模塊,其中引導模塊直接負責執行BIOS程序本身入口、計算機基本硬件的檢測和初始化,ESCD用于BIOS與OS交換硬件配置數據,DMI則充當了硬件管理工具和系統層之間接口的角色,通過DMI,用戶可以直觀地獲得硬件的任何信息,CMOS設置模塊就是實現對硬件信息進行設置,并保存在CMOS中,是除了啟動初始化以外BIOS程序最常用的功能。

BIOS本身是匯編語言代碼,是在16位實模式下調用INT 13H中斷執行的,由于x86-64是一個高度兼容的指令集,也為了遷就BIOS的16位實模式的運行環境,所以即使現在的CPU都已是64位,如果還是在BIOS啟動(基本見于09年以前的主板),在開機時仍然都是在16位實模式下執行的。16位實模式直接能訪問的內存只有1MB,就算你安了4G、8G或者16G還是32G內存,到了BIOS上一律只先認前1MB。在這1MB內存中,前640K稱為基本內存,后面384K內存留給開機必要硬件和各類BIOS本身使用,了解了這些,下面談一下BIOS啟動計算機的具體過程。

當按下電源開關時,電源就開始向主板和其他設備供電,這時電壓還不穩定,在早期的南北橋主板上,由主板北橋向CPU發復位信號,對CPU初始化;穩定電壓后復位信號便撤掉。而對于現在的單南橋主板,則由CPU自身調整穩定電壓達到初始化的目的,當電壓穩定后,CPU便在系統BIOS保留的內存地址處執行跳轉BIOS起始處指令,開始執行POST自檢。

在POST自檢中,BIOS只檢查系統的必要核心硬件是否有問題,主要是CPU、640K基本內存、顯卡是否正常,PS/2鍵盤控制器、系統時鐘是否有錯誤等等。由于POST檢查在顯卡初始化以前,因此在這個階段如發生錯誤,是無法在屏幕上顯示的,不過主板上還有個報警揚聲器,而且如果主板的8255外圍可編程接口芯片沒有損壞的話,POST報警聲音一定是會出來的。可以根據報警聲的不同大致判斷錯誤所在,一般情況下,一聲短“嘀”聲基本代表正常啟動,不同的錯誤則是不同的短“嘀”聲和長“嘀”聲組合。POST自檢結束后,BIOS開始調用中斷完成各種硬件初始化工作。

硬件初始化工作中,主要說明兩點,首先經過POST檢測后,電腦終于出現了開機啟動畫面,這就是已經檢測到了顯卡并完成了初始化。但是請注意,由于BIOS是在16位實模式運行,因此該畫面是以VGA分辨率(640*480,縱橫比4:3)顯示的,因為實模式最高支持的就是VGA。以前的小14-17寸CRT顯示器由于都是4:3比例,最高分辨率也比較低,因此這個開機啟動畫面沒有什么違和感,但現在的液晶顯示器基本上都是寬屏16:9的,分辨率也較高,因此在這樣的顯示屏下,啟動畫面上的一切東西顯示都可以說“慘不忍睹”——圖形被拉長,字體很大很模糊,可以很明顯看到顯示字體的鋸齒。第二,BIOS只識別到由主引導記錄(MBR)初始化的硬盤,之所以說明這點,是因為后續的EFI或UEFI采用了一種新的GUID磁盤分區系統(GPT)格式,這種硬盤在BIOS下是無法識別的。硬件全部初始化完畢后,接下來進入更新ESCD階段。

在ESCD更新階段中,BIOS將對存儲在CMOS中和操作系統交換的硬件配置數據進行檢測,如果系統硬件發生變動,則會更新該數據,否則不更新保持原狀不變,ESCD檢測或更新結束后,BIOS將完成最后一項工作,就是啟動操作系統。

最后這一步中,BIOS根據CMOS中用戶指定的硬件啟動順序,讀取相應設備的啟動或引導記錄,引導相應設備上的操作系統啟動,進入操作系統,此后便由操作系統接替BIOS負責硬件和軟件間的相互通信。如果發現所有硬件都沒有能引導操作系統的記錄,則會在屏幕上顯示相應錯誤信息,并將電腦維持在16位實模式。

雖然BIOS作為電腦加電啟動所必不可少的部分,但是從其于1975年誕生之日起近30余年,16位匯編語言代碼,1M內存尋址,調用中斷一條條執行的理念和方式竟然一點都沒有改變,雖然經各大主板商不懈努力,BIOS也有了ACPI、USB設備支持,PnP即插即用支持等新東西,但是這在根本上沒有改變BIOS的本質,而英特爾為了遷就這些舊技術,不得不在一代又一代處理器中保留著16位實模式(否則根本無法開機的)。但是,英特爾在2001年開發了全新的安騰處理器,采用IA-64架構,并推出了全新的EFI。后來證明,安騰處理器、IA-64架構沒有推廣開來,而EFI和后繼的UEFI卻發揚光大,成為現在電腦的主要預啟動環境。

EFI,是Extensible Firmware Interface的詞頭縮寫,直譯過來就是可擴展固件接口,它是用模塊化、高級語言(主要是C語言)構建的一個小型化系統,它和BIOS一樣,主要在啟動過程中完成硬件初始化,但它是直接利用加載EFI驅動的方式,識別系統硬件并完成硬件初始化,徹底摒棄讀各種中斷執行。EFI驅動并不是直接面向CPU的代碼,而是由EFI字節碼編寫成,EFI字節碼是專用于EFI的虛擬機器指令,需要在EFI驅動運行環境DXE下解釋運行,這樣EFI既可以實現通配,又提供了良好的兼容。此外,EFI完全是32位或64位,摒棄16位實模式,在EFI中就可以實現處理器的最大尋址,因此可以在任何內存地址存放任何信息。另外,由于EFI的驅動開發非常簡單,基于EFI的驅動模型原則上可以使EFI接觸到所有硬件功能,在EFI上實現文件讀寫,網絡瀏覽都是完全可能的。i,BIOS上的的CMOS設置程序在EFI上是作為一個個EFI程序來執行的,硬件設置是硬件設置程序、而啟動管理則是另一個程序,保存CMOS又是另一個程序,雖然它們在形式的Shell上是在一起的。

EFI在功能上完全等同于一個輕量化的OS(操作系統),但是EFI在制定時就定位到不足以成為專業OS的地位上,首先,它只是一個硬件和操作系統間的一個接口;其次,EFI不提供中斷訪問機制,EFI必須用輪詢的方式檢查并解釋硬件,較OS下的驅動執行效率較低,最后,EFI只有簡單的存儲器管理機制,在段保護模式下只將存儲器分段,所有程序都可以存取任何一段位置,不提供真實的保護服務。伴隨著EFI,一種全新的GUID磁盤分區系統(GPT)被引入支持,傳統MBR磁盤只能存在4個主分區,只有在創建主分區不足4個時,可以建立一個擴展分區,再在其上建立被系統識別的邏輯分區,邏輯分區也是有數量的,太多的邏輯分區會嚴重影響系統啟動,MBR硬盤分區最大僅支持2T容量,對于現在的大容量硬盤來說也是浪費。GPT支持任意多的分區,每個分區大小原則上是無限制的,但實際上受到OS的規定限制不能做到無限,不過比MBR的2T限制是非常重要的進步。GPT的分區類型由GUID表唯一指定,基本不可能出現重復,其中的EFI系統分區可以被EFI存取,用來存取部分驅動和應用程序,雖然這原則上會使EFI系統分區變得不安全,但是一般這里放置的都是些“邊緣”數據,即使其被破壞,一般也不會造成嚴重后果,而且也能夠簡單的恢復回來。

當EFI發展到1.1的時候,英特爾決定把EFI公之于眾,于是后續的2.0吸引了眾多公司加入,EFI也不再屬于英特爾,而是屬于了Unified EFI Form的國際組織,EFI在2.0后也遂改稱為UEFI,UEFI,其中的EFI和原來是一個意思,U則是Unified(一元化、統一)的縮寫,所以UEFI的意思就是“統一的可擴展固件接口”,與前身EFI相比,UEFI主要有以下改進:

首先,UEFI具有完整的圖形驅動功能,之前的EFI雖然原則上加入了圖形驅動,但為了保證EFI和BIOS的良好過渡,EFI多數還是一種類DOS界面(仍然是640*480VGA分辨率),只支持PS/2鍵盤操作(極少數支持鼠標操作),不支持USB鍵盤和鼠標。到了UEFI,則是擁有了完整的圖形驅動,無論是PS/2還是USB鍵盤和鼠標,UEFI一律是支持的,而且UEFI在顯卡也支持GOP VBIOS的時候,顯示的設置界面是顯卡高分辨率按640*480或1024*768顯示,因此畫面雖小但很清楚,但是這樣會導致屏幕周圍大片留黑,不過魚和熊掌不可兼得,除非UEFI默認窗口大小也是最高分辨率。

其次,UEFI具有一個獨特的功能,安全啟動,而EFI是沒有安全啟動的,安全啟動(Secure Boot),實際上通俗的解釋是叫做固件驗證。開啟UEFI的安全啟動后,主板會根據TPM芯片(或者CPU內置的TPM)記錄的硬件簽名對各硬件判斷,只有符合認證的硬件驅動才會被加載,而Win8以后的Windows則是在操作系統加載的過程中對硬件驅動繼續查簽名,符合Windows記錄的硬件才能被Windows加載,這在一定程度上降低了啟動型程序在操作系統啟動前被預加載造成的風險,但是這也會造成系統安裝變得壟斷。

無論EFI還是UEFI,都必須要有預加載環境、驅動執行環境、驅動程序等必要部分組成,為了支持部分舊設備(如在UEFI下掛載傳統MBR硬盤,不支持UEFI啟動的顯卡在UEFI下仍然支持運行等),還需要一個CSM兼容性支持模塊、EFI或UEFI都是僅支持GPT磁盤引導系統的,下面就具體談一下EFI或UEFI啟動計算機的過程。

一般地,預加載環境和驅動執行環境是存儲在UEFI(UEFI BIOS)芯片中的,當打開電源開關時,電腦的主要部件都開始有了供電,與BIOS不同的是,UEFI預加載環境首先開始執行,負責CPU和內存(是全部容量)的初始化工作,這里如出現重要問題,電腦即使有報警喇叭也不會響,因為UEFI沒有去驅動8255發聲,不過預加載環境只檢查CPU和內存,如果這兩個主要硬件出問題,屏幕沒顯示可以立即確定,另外一些主板會有提供LED提示,可根據CPU或內存亮燈大致判斷故障。

CPU和內存初始化成功后,驅動執行環境(DXE)載入,當DXE載入后,UEFI就具有了枚舉并加載UEFI驅動程序的能力,在此階段,UEFI會枚舉搜索各個硬件的UEFI驅動并相繼加載,完成硬件初始化工作,這相比BIOS的讀中斷加載速度會快的多,同樣如加載顯卡的UEFI驅動成功,電腦也會出現啟動畫面,硬件驅動全部加載完畢后,最后同BIOS一樣,也得去啟動操作系統。

在啟動操作系統的階段,同樣是根據啟動記錄的啟動順序,轉到相應設備(僅限GPT設備,如果啟動傳統MBR設備,則需要打開CSM支持)的引導記錄,引導操作系統并進入,這里需要注意的是,UEFI在檢測到無任何操作系統啟動設備時,會直接進入UEFI設置頁面,而不是像BIOS那樣黑屏顯示相關信息。

綜上對BIOS和UEFI啟動計算機過程的敘述,可以概括為:BIOS先要對CPU初始化,然后跳轉到BIOS啟動處進行POST自檢,此過程如有嚴重錯誤,則電腦會用不同的報警聲音提醒,接下來采用讀中斷的方式加載各種硬件,完成硬件初始化后進入操作系統啟動過程;而UEFI則是運行預加載環境先直接初始化CPU和內存,CPU和內存若有問題則直接黑屏,其后啟動PXE采用枚舉方式搜索各種硬件并加載驅動,完成硬件初始化,之后同樣進入操作系統啟動過程。

此外,BIOS是16位匯編語言程序,只能運行在16位實模式,可訪問的內存只有1MB,而UEFI是32位或64位高級語言程序(C語言程序),突破實模式限制,可以達到要求的最大尋址。

IT技術分享社區

個人博客網站:https://programmerblog.xyz

文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271101.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271101.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271101.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java pdf 導出下載_Java+PDF模板導出成pdf文件,并下載

1,根據前人經驗,熟悉完成基礎操作:https://www.cnblogs.com/wangpeng00700/p/8418594.html?tdsourcetags_pcqq_aiomsg2,根據鏈接中操作完成之后,在本地生成pdf文件已經沒有問題了。但如果放到,Linux服務器…

在db2數據庫上模擬死鎖場景 還是z上的

如果條件允許,起兩個線程互相搶資源就行了,但問題是,時間上還需要同步,要做到完美控制,還得加其他邏輯,忒費事,所以可以用下面的辦法: 在目標表上直接加個鎖……簡單,粗暴…

條件隨機場 python_用條件隨機場做網絡小說命名實體識別

一直想用統計學習方法來改善撥云搜索,這次先在命名實體上小小嘗試一下。線性鏈條件隨機場對于無向圖中的節點,定義一組特征函數,使其狀態僅受鄰近節點和觀測序列的影響。在標注任務中,節點只有前后兩個鄰近節點,即線性…

項目開發基礎:常用測試方法介紹

1、集成測試集成測試就是把模塊按照設計說明書的要求組合起來進行測試。1.1、集成測試方法:a、分別測試各個模塊,再把這些模塊組合起來進行整體測試,也就是非增量式集成。特點:可以對模塊進行并行測試,能充分利用人力&…

java 多數據源處理_java – 用于處理多個數據源的Spring事務管理

這可能是一個重復的問題,但我找不到(至少我無法理解)一個滿意的答案,因此再次提問.我正在使用兩個數據源(MySQL和Oracle).以下是執行流程:主方法-A調用方法-B(寫入Oracle DB)然后它(方法-A)調用方法-C(寫入mySQL DB)然后它(方法-A)調用方法-D(寫入Oracle DB) ).如果…

MyBatis Generator

1 <?xml version"1.0" encoding"UTF-8"?>2 <!DOCTYPE generatorConfiguration3 PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"4 "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"&g…

svd奇異值分解_NCL專輯 | 奇異值分解(SVD)

奇異值分解SVD(Singular Value Decomposition)是一種矩陣分解方法&#xff0c;在氣象領域中常用來分析兩個氣象場場之間的關系。NCL的函數庫中與SVD相關的函數包括svd_lapack&#xff0c;svdcov&#xff0c;svdcov_sv&#xff0c;svdstd&#xff0c;svdstd_sv。svd_lapack&…

項目測試基礎:白盒測試相關知識筆記

1、白盒測試概念白盒測試又稱為結構測試&#xff0c;主要是根據程序的內部結構和邏輯來設計測試用例&#xff0c;然后對程序的路徑和過程進行測試&#xff0c;檢查是否滿足設計的需要。2、白盒測試常用的技術介紹白盒測試常用的技術有邏輯覆蓋、循環覆蓋、基本路徑測試。2.1 邏…

java全局變量和局部變量

分類&#xff1a; 變量按作用范圍劃分分為全局變量&#xff08;成員變量&#xff09;和局部變量 成員變量按調用方式劃分分為實例屬性與類屬性 局部變量按定義位置劃分分為形參&#xff0c;方法局部變量&#xff0c;代碼塊局部變量 成員變量&#xff1a; 直接在類中聲明的…

電腦系統知識:Windows原版系統與Ghost系統的區別,你知道嗎?

經常看到有電腦小白的朋友問原版操作系統跟Ghost的區別是什么&#xff0c;該怎么選擇安裝哪種系統&#xff1f;今天在這里就說說它們之間的聯系與區別。Windows原版系統&#xff1a;原版系統就是微軟推送給用戶的原始“干凈”的系統。系統不含第三方的軟件&#xff0c;軟件補丁…

sql server update觸發器_SQL Server 觸發器

T-SQL 觸發器觸發器分為BEFORE觸發器*(SQL Server不支持&#xff0c;Oracle支持)在事件發生時觸發。AFTER觸發器是 SQLServer生成的最初用于自動相應數據修改的機制。在 SQLServer200以前的版本中 AFTER觸發器是唯一的觸發器&#xff0c;因此不用指明 AFTER&#xff0c;也可以用…

iOS 公司開發者賬號申請

對于獨立開發者很有用,收藏起來,以備不時之需! 蘋果開發者賬號分三種。 個人賬號&#xff1a;個人申請用于開發蘋果app所使用的賬號&#xff0c;僅限于個人使用&#xff0c;申請比較容易&#xff0c;$99。 公司賬號&#xff1a;以公司的名義申請的開發者賬號&#xff0c;用于公…

php渲染視圖,Laravel 視圖渲染:Blade 模板引擎

Laravel 視圖渲染&#xff1a;Blade 模板引擎由 學院君 創建于3年前, 最后更新于 2年前版本號 #153378 views27 likes0 collectsBlade 簡介Blade 是由 Laravel 提供的非常簡單但功能強大的模板引擎&#xff0c;不同于其他流行的 PHP 模板引擎&#xff0c;Blade 在視圖中并不約束…

項目管理基礎:系統切換相關知識筆記

1、系統試運行主要任務對新系統進行初始化、補錄各種原始數據記錄記錄系統運行過程中的數據和狀況核對新舊系統輸出結果是否正確對實際系統的輸入方式進行考察主要包括是否方便、效率、可靠性、誤操作保護等方面。對系統實際運行、響應速度進行實際測試&#xff0c;確定是否滿足…

sql 分組統計_leetcode-sql面試題十七篇精講合集

這可能是全網最干貨的sql講解系列文章。全系列共十七講。做了大量的知識點的拓展&#xff0c;涵蓋了sql的方方面面。歡迎關注點贊收藏&#xff0c;正在整理三年數據分析的點點滴滴。包括Excel、python、sql、power BI、各種分析模型框架。保證輸出最干的干貨。涉及知識點包括&a…

實時數據處理插件開發flume+kafka+storm:flume

有時間了再寫。。。。轉載于:https://www.cnblogs.com/wchb/p/5786582.html

項目管理基礎:系統維護相關知識筆記

1、系統的可維護性系統的可維護性就是項目維護人員理解、改正、改動和改進該軟件的難易程度。提高系統的可維護性是開發軟件吸引所有步驟的關鍵目的&#xff0c;系統能否被很好地維護&#xff0c;可用系統的可維護性這一指標來衡量。1.1 系統可維護性的評價指標可理解性&#x…