Windows引導過程
Windows作為最流行的個人計算機操作系統,成為了我們學習、工作和生活的一部分。平時使用計算機,我們都得先按下電源鍵然後等待Windows啟動,初始化,進入歡迎頁面,啟動完成。會不會覺得整個過程比較神奇,想一探究竟?其實整個啟動過程經曆了多個階段,接下來小編将一一講述每一個階段,揭開它們神秘的面紗。
通電後CPU首先執行的是主闆引導程序,主闆引導程序可分為BIOS和UEFI。BIOS是最早的方案,搭配MBR分區使用,BIOS逐漸被UEFI代替,UEFI一般搭配GPT分區使用,所以引導過程會有兩種情況:
- BIOS MBR
- UEFI GPT
這兩種情況都會分别介紹。
UEFI
UEFI(Unified Extensible Firmware Interface)以靈活擴展、引導更省時等特性,成為了BIOS的替代方案,新推出的主闆和操作系統基本上默認使用UEFI引導,小編win10系統采用的就是UEFI引導。
如何查看自己的計算機是什麼方式引導的?
在“此電腦”上右鍵選擇“管理”,彈出“計算機管理”選擇“磁盤管理”,如果能找到一個“EFI系統分區”,那麼就是UEFI引導方式了。
UEFI一般搭配GPT分區技術使用,雖然也可以搭配MBR,但是由于MBR磁盤容量最大隻能是2TB,在磁盤容量越來越大的今天略顯不足,所以默認都是使用GPT分區技術。GPT可以做到:
- 支持容量超過2TB的磁盤;
- 使用16字節的GUID标識分區類型,不容易沖突;
- 理論上分區數目不限制(受限于Windows隻能最多識别128個分區);
- 分區容量幾乎沒有限制,因為使用64位整數,64位整數最大值為2^64 - 1,數值非常大;
- 提供CRC檢驗,檢測數據損壞;
- 備份分區表,提高可靠性。
引導流程
1.按下電源鍵,電源向主闆以及其它設備供電,剛開始電壓不穩,主闆會持續發送RESET信号給CPU,CPU執行初始化。當電壓穩定後,主闆停止發送RESET信号,CPU開始執行指令;
2.CPU讀取UEFI指令,執行UEFI初始化,執行其它設備的初始化;
3.查找EFI分區,EFI分區不需要一定是第一個分區;
4.加載\EFI\Boot\bootx64.efi,在安裝Windows時實際上會使用\EFI\Microsoft\Boot\bootmgfw.efi的内容替換到\EFI\Boot\bootx64.efi,所以\EFI\Boot\bootx64.efi其實就是\EFI\Microsoft\Boot\bootmgfw.efi;
5.bootmgfw.efi會讀取BCD文件,BCD是一個數據庫文件,如果包含多個系統,信息會包含在BCD中,通過顯示一個系統列表供用戶選擇;
6.BCD中包含每個系統的引導文件的路徑,Windows的是\Windows\System32\winload.efi,加載到内存中并執行;
7.winload.efi讀取\Windows\bootstat.dat文件,有需要則顯示引導菜單,比如安全引導等等;接着加載内核程序Ntoskrnl.exe,相關輔助HAL.dll、CI.dll、PSSHED.dll、BootVID.dll,把CPU執行權交給内核程序;
8.内核程序執行系統初始化。
通過上面的流程可知道,引導相關的文件都存放在EFI系統分區中,下圖是小編win10的EFI系統分區的一些文件:
BIOS
BIOS(Basic Input Output System)是最早的引導方案并使用了相當長的一段時間,所以在Win8、Win7、WinXP以及更早的版本都能找到BIOS的引導存在。BIOS隻支持MBR分區技術,所以GPT并不适合BIOS。
引導流程
1.上電并穩定後,CPU執行地址0xFFFF0h處指令,此處為BIOS程序;
2.BIOS進行硬件自檢,沒有問題後加載硬盤的第一個扇區到内存0x7c00h處,第一個扇區為MBR(Master Boot Record),MBR包含執行程序和分區表;
3.CPU開始執行MBR程序,查找第一個活動分區,把活動分區的第一個扇區加載到内存中,活動分區第一個扇區為PBR(Partition Boot Record);
4.CPU開始執行PBR,第一個指令就是跳過BPB(BIOS Parameter Block)到可執行代碼處;BPB包含比較多參數,有族的大小、MFT記錄大小、MFT位置等,用于讀取NTFS文件;
5.PBR讀取VBR(Volume BootRecord,占用分區開始的16扇區)剩餘的15扇區到内存中;接着CPU跳轉到0x07C0:027A處,執行BOOTMGR代碼(第二個扇區中);
6.開始尋找bootmgr.exe,找不到則尋找ntldr.exe(win vista之前的系統);
7.CPU加載并跳轉到bootmgr.exe處執行,讀取BCD文件,如果含有多個系統,則列舉顯示供用戶選擇;
8.選擇的是Windows則讀取winload.exe文件到内存中,CPU跳轉到winload.exe處執行,讀取文件\windows\bootstat.dat,有需要則顯示引導菜單,比如安全引導等等;接着加載内核程序Ntoskrnl.exe,相關輔助HAL.dll、CI.dll、PSSHED.dll、BootVID.dll,把CPU執行權交給内核程序;
9.内核程序執行系統初始化。
可見BIOS引導更多的是通過MBR去引導系統,UEFI則主導整個引導過程。
結束語
在啟動計算機的過程中,難免會遇到各種各樣的問題,比如藍屏、黑屏等等,掌握了其啟動的流程,将有利于我們對各類故障進行排查和修複。
以上就是關于今天的全部内容,下期将給大家帶來《容器如何使用tini作為啟動進程》,敬請期待~
,