目錄
(說明:本文中的計算機以微機爲模型來說明。)
計算機啓動過程是個很複雜的過程,有一個非常完善的依靠軟件與硬件相互協作來完成的自檢機制,該過程也被稱爲計算機的初始化過程。整個初始化過程是從加電瞬間起,直到系統停留在命令行提示符或圖形桌面上。
關鍵詞
BIOS:
BIOS(Basic Input-Output System),即微機的基本輸入/輸出系統,是集成在主板上的一個ROM芯片(BIOS芯片)中的一組程序,其中保存有微機系統最重要的基本輸入/輸出程序、系統信息設置程序、開機加電自檢程序和系統啓動自舉程序,爲微機提供最低的、最直接的硬件控制。
CMOS:
CMOS是微機主板上的一塊RAM芯片,用於保存當前系統的硬件配置和用戶對某些參數的設定。假如CMOS-RAM參數丟失,致使系統檢測不到各個硬件,則微機無法正常工作。CMOS中各項參數的設定通過專門的程序完成,BIOS可以對其進行修改。
內存地址:
爲便於CPU訪問而賦予內存的編號。有一些地址段一般被分配給特定的程序使用。如:A0000H~BFFFFH保留給顯存使用,C0000H~FFFFFH保留給BIOS使用,其中顯卡BIOS一般在C0000H~C7FFFH處、IDE控制器的BIOS在C8000H~CBFFFH處。
POST:
微機通電穩定後,系統BIOS指導對微機的關鍵設備進行粗略檢測的過程。
蜂鳴碼:
在POST過程中,根據蜂鳴的次數和長短來報告錯誤情況的方式。
RESET信號:
重新啓動時,需要將微機的一些設備恢復到缺省狀態,如將CPU到實模式下、IP指向FFFF:0000內存單元。
啓動過程
通電階段
當按下“POWER”鍵時,計算機進入初始化過程,電源開始向主板及其他設備供電(電源指示燈常亮、電源風扇開始轉動…),主板上的芯片組會向CPU發出並保持一個RESET信號,讓CPU內部自動恢復到初始狀態(實模式),此時的電壓還不夠穩定,CPU不會馬上執行命令。大約100~500ms後,電源+ 5V端輸出電壓達到4.75V時,電源會向主板芯片組發送一個POWER GOOD邏輯信號,當主板芯片組檢測到POWER GOOD信號時,認爲電源已經開始穩定供電,會撤去先前發出的RESET信號。CPU馬上就從地址FFFF:0000處開始執行命令(JMP XXXXX),跳轉到系統BIOS中真正的啓動代碼處。
上電自檢(POST)階段
計算機正常通電後,CPU開始執行存放在BIOS中的指令。系統BIOS首先要做的事情就是進行POST。POST的主要任務時檢測系統中的一些關鍵設備(CPU、系統主板、基本的640KB內存、1MB以上的擴展內存等)是否存在和能否正常工作,並將檢測的結果與微機中的CMOS-RAM參數進行對比。如果在這個過程中發現了致命錯誤,系統BIOS會控制喇叭產生蜂鳴碼來報告錯誤情況。正常情況下POST過程進行得非常快,我們幾乎無法感覺到這個過程。POST結束之後就會調用其他代碼來進行更加完整得硬件檢測。
顯卡檢測階段
系統BIOS將查找顯卡BIOS,存放顯卡BIOS-ROM芯片的起始地址通常在C0000H處,系統BIOS找到顯卡BIOS之後會對其中的內容進行加法求和校驗和測試評估。假如測試成功,控制權轉交給顯卡BIOS,進行裝入和初始化顯卡,初始化完成後有一個光標出現在顯示屏幕上,控制返回給系統BIOS。沒有安裝顯卡BIOS時,系統BIOS爲主板的顯卡適配器提供一個初始化流程,同樣出現一個光標。視頻系統初始化後可在屏幕上看到一些初始化信息,介紹生產廠商、圖形芯片類型等內容。假如加法求和校驗和測試失敗,初始化通常會立即中斷(黑屏)。
其他關鍵設備檢測階段
接着系統BIOS會查找其他設備的BIOS程序,之後以同樣得方式初始化這些設備。假如發生錯誤會在屏幕上提示錯誤信息。
系統BIOS信息顯示
查找完所有其他設備的BISO之後,系統BISO將顯示出自己的啓動畫面,其中包括:系統BISO的類型、序列號和版本號內容等。
CPU、內存檢測階段
系統BIOS將檢測和顯示CPU的類型和工作頻率,然後開始測試所有的RAM。並同時在屏幕上顯示內存測試的進度。假如出現錯誤屏幕將藍屏。
標準硬件設備檢測
內存測試通過之後系統BIOS將開始檢測系統中安裝的一些標準硬件設備(硬盤、CD-ROM、串口、並口等),還要自動檢測和設置內存的定時參數,硬盤參數和訪問模式等。當微機檢查到硬件正常並與CMOS設置相等後,繼續啓動過程。
即插即用設備檢測
標準設備檢測完畢後,系統BIOS內部的支持即插即用的代碼開始檢測和配置系統中安裝的即插即用設備,每當找到一個設備之後,系統BIOS都會在屏幕上顯示出設備的名稱和型號等信息,同時爲該設備分配中斷、DMA通道和I/O端口等資源。
概略硬件信息
到這一階段,所有硬件都已經檢測配置完畢,多數系統BIOS會重新清屏在屏幕上方顯示出一個表格,其中概略地列出了系統中安裝的各種硬件設備,以及它們使用的資源和一些相關工作參數。
更新ESCD階段
接下來系統BIOS將更新ESCD。ESCD是系統BIOS用來與操作系統交換硬件配置信息的一種手段。通常ESCD數據只在硬件配置發生變化後纔會更新,但當系統BIOS與操作系統使用的數據格式不一致時,每次啓動都會更新ESCD。
系統引導階段
上述過程完畢之後,系統BIOS的自舉程序將根據用戶在“CMOS參數”中的設置的啓動順序來引導系統,一般都是從硬盤啓動。從硬盤引導之後,BIOS把主引導記錄讀入內存,並將控制權交給主引導程序,檢查分區表,尋找活動分區,找到之後再將控制權交給活動分區的引導記錄,由引導記錄來引導操作系統。如成功引導接着屏幕上便會出現系統啓動的界面。
(以下的模型以Windows XP)
軟件引導系統啓動階段
ntldr讀取boot.ini中的內容,定位操作系統所在的啓動分區。如果計算機中只有一個操作系統,ntldr會自動執行下一步。如果計算機中有多個操作系統,那麼這時會有一個選單讓用戶選擇要啓動的操作系統,當用戶選擇Windows 9X/Me時,ntldr會把計算機的控制權交給bootsect.dos;選擇其他操作系統系統會將控制權交給其相應的程序。
檢測和配置硬件階段
啓動Windows XP後,ntldr啓動ntdetect.com。ntdetect.com將收集計算機硬件信息列表並將列表返回到ntldr,這樣做的目的時便於以後將這些硬件信息加入到註冊表HKEY_LOCAL_MACHINE下的hardware中。ntdetect.com的重要性在於不兼容ACPI的計算機中列舉設備,這種情況下設備資源是由硬件分配的。在兼容ACPI的計算機中,設備資源是由操作系統分配的。在這個過程中,ntdetect.com會查找Windows XP創建的硬件配置文件。Windows XP會爲桌面型電腦創建一個硬件配置文件,爲移動型電腦創建兩個硬件配置文件,用戶也可以創建自己特定的硬件配置文件。硬件配置文件中沒有的設備的驅動程序不會在Windows XP啓動過程中加載。對於有多個硬件配置文件的計算機,用戶可以選擇是否在啓動時顯示硬件配置文件選單以便用戶選擇特定的硬件配置文件。
內核加載階段
在這個階段,ntldr首先加載稱爲 Windows XP 內核的ntokrnl.exe。這裏,系統加載了 Windows XP 內核但是沒有將它初始化。接着 ntldr 加載硬件抽象層(Hardware Abstraction Layer,hal.dll),然後,系統繼續加載 HKEY_LOCAL_MACHINE\SYSTEM 鍵,ntldr讀取 HKEY_LOCAL_MACHINE\SYSTEM\Select 中的鍵值來決定哪一個ControlSet將被加載。ControlSet中包含設備的驅動程序以及需要加載的服務.ntldr加載HKEY_LOCAL_MACHINE\SYSTEM\ControlSetXXX\Services\...下 start 鍵值爲 0 的最底層設備驅動。當作爲 ControlSet 鏡像的 Current Control Set被加載時,ntldr 將計算機的控制權交給 Windows XP 內核的ntokrnl.exe,初始化內核就開始了。初始化內核開始的時候,彩色的Windows XP 的 logo 以及進度條顯示在屏幕中央,在這個階段,系統完成了啓動的 4項任務:
1) 內 核 使 用 在 硬 件 檢 測 時 收 集 到 的 數 據 來 創 建HKEY_LOCAL_MACHINE\HARDWARE 鍵。
2) 內核通過複製 HKEY_LOCAL_MACHINE\SYSTEM\Current ControlSet 的值來創建了 HKEY_LOCAL_MACHINE\ SYSTEM\Clone。Clone 是計算機數據的備份,不包括啓動中的改變,也不會被修改。
3)系統完成初始化以及加載設備驅動程序,內核初始化那些在加載內核階段被加載的底層驅動程序,然後內核掃描HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\...下 start 鍵值爲 1 的設備驅動程序。這些設備驅動程序在加載的時候便完成初始化,如果有錯誤發生,內核使用Error Control鍵值來決定如何處理,值爲 3 時,錯誤標誌爲危機/關鍵,系統初次遇到錯誤會以 HKEY_LOCAL_MACHINE\SYSTEM\Select 中 Last Known Good所指的 ControlSet重新啓動,如果使用 Last Known Good Control Set 啓動仍然產生錯誤,系統報告啓動失敗,錯誤信息將被顯示,系統停止啓動;值爲 2 時錯誤情況爲嚴重,系統啓動失敗並且以 Last Known Good Control Set 重新啓動,如果系統啓動已經在使用Last Known Good 值,它會忽略錯誤並且繼續啓動;當值是 1 的時候錯誤爲普通,系統會產生一個錯誤信息,但是會忽略這個錯誤並且繼續啓動;當值是 0 的時候忽略,系統不會顯示任何錯誤信息而繼續運行。
4) 內核啓動 Session Manager (Smss.exe)。Session Manager 的作用是啓動 Windows XP 高級子系統以及服務,啓動控制所有輸入、輸出設備以及訪問顯示器屏幕的 Win32 子系統以及 Windows 登陸進程(Winlogon.exe),到這裏,初始化內核就完成了。
登陸階段
Winlogon.exe 首先啓動服務管理 (Service Control Manager,Services.exe)和本地安全認證 (Local Security Authority,Lsass.exe),同時顯示 Windows XP 歡迎屏幕,這時候,系統還可能在後臺繼續初始化剛纔沒有完成的驅動程序。然後 Winlogon 會提示用戶輸入有效的用戶名或密碼。接着,服務管理最後執行以及掃描 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servives 來檢查是否還有服務需要加載,服務管理查找start鍵值爲 2 或更高的服務,服務按照 start 的值以及 DependOnGroup和DepandOnService 的值來加載。只有用戶成功登陸到計算機後,Windows XP 的啓動才被認爲是完成,在成功登陸後,系統拷貝 HKEY_LOCAL_MACHINE\SYSTEM\Clone 到 Last Known Good Control Set,完成這一步驟後,系統才意味着已經成功引導了。
下面配一張啓動的流程圖作爲參考:
參考文獻
[1]陳放,潘素珍.計算機啓動過程的解析[J].電子製作,2013(07):86.
[2]樊劍劍.從開機黑屏談計算機的啓動過程[J].福建電腦,2008(11):69+78.
[3]陳興,程新黨.計算機啓動故障分析與排除[J].軟件導刊,2008(08):41-42.
[4]武峯.關於計算機啓動過程的分析與探討[J].電腦與電信,2007(06):69-71.
[5]賈玉濤.計算機啓動過程詳解[J].家電檢修技術,2006(16):44-45.
[6]馬志永,龐飛.漫談計算機的啓動過程[J].河北審計,2000(11):28-29.
參考博客: