Windows的啟動過程包括以下幾個階段:
一,啟動自檢階段
這個階段主要是讀取 BIOS ,然後記憶體,CPU,硬碟,鍵盤等裝置進行自檢。這個階段在螢幕上顯示就是自檢的那些列印資訊。在開啟計算機電源時,首先開始電源啟動自檢過程。在BIOS中包含一些基本的指令,能夠幫助計算機在沒有安裝任何作業系統的情況下進行基本的啟動。電源啟動自檢過程首先會從BIOS中載入必要的指令,然後進行如下一系列的自檢操作:進行硬體的初始化檢查,例如檢查記憶體的容量等。驗證用於啟動操作
系統的裝置是否正常,例如,檢查硬碟是否存在等。從CMOS中讀取系統配置資訊。在完成了電源啟動的自檢之後,每個帶有韌體的硬體裝置,如顯示卡和磁碟控制器,都會根據需要完成內部的自檢操作。
二,初始化啟動階段
這個階段根據 BIOS 指定的啟動順序,找到可以啟動的優先啟動裝置,比如本地磁碟,CD Driver , USB 裝置等等,然後準備從這些裝置啟動系統。在完成了電源啟動自檢過程之後,儲存在CMOS中的設定,例如磁碟的引導順序等,能夠決定由哪些裝置來引導計算機。例如,可以設定磁碟的引導順序為首先透過A盤引導,其次才透過C盤引導,則系統會首先嚐試用A盤引導系統,如果A盤存在並可引導,則透過A盤引導。如果A盤不存在,則透過C盤引導系統。如果A盤存在,但不是引導盤,則系統地提示系統不可引導。 一般來說通常會使用硬碟引導。在進行硬碟引導時,啟動過程通常按照如下的步驟進行:
系統首先檢測開啟電源的硬碟。若該硬碟是啟動盤,BIOS就將主開機記錄(Main Boot Record――MBR,位於啟動磁碟的第一個扇區,其中主要包含引導程式碼(Boot Code)和分割槽表(Partition Table)資料。引導程式碼主要用於引導系統。而分割槽表則主要用於標識基本分割槽和擴充套件分割槽。)中的引導程式碼載入記憶體。接著,BIOS會將啟動過程的執行交給MBR來進行。計算機搜尋MBR中的分割槽表,找出活動分割槽(Active Partition)。計算機將活動分割槽的第一個扇區中的引導程式碼載入到記憶體。引導程式碼檢測當前使用的檔案系統是否可用。 引導程式碼查詢ntldr檔案,找到之後啟動它。BIOS將控制權轉交給ntldr,由ntldr完成作業系統的啟動。(注意,Win7與此不同,用的是bootmgr,請參考本文後面部分)
三,Boot 載入階段
這個階段首先從啟動分割槽(比如 C 盤) 載入 Ntldr ,然後Ntldr 做如下設定:
1.內建記憶體模式,如果是 x86 的處理器,並且作業系統是 32位,則設定為 32-bit flat memory mode,如果是 64 位作業系統並且是64位處理器,則設定為64位記憶體模式。
2.啟動檔案系統
3.讀取 boot.ini 檔案
四,檢測和配置硬體階段
這個階段檢查和配置一些硬體裝置,它們分別是:
l 系統韌體,比如時間和日期
l 匯流排和介面卡
l 顯示介面卡
l 鍵盤
l 通訊埠
l 磁碟
l 軟盤
l 輸入裝置(如滑鼠)
l 並口
l 在ISA匯流排上執行的裝置
五,核心載入階段
在核心載入階段,Ntldr 將首先載入Windows核心 Ntoskrnl.exe 和 硬體抽象層 (HAL). HAL對硬體底層的特性進行隔離,對作業系統提供統一的呼叫介面,作業系統移植到不同硬體時只要改變相應的 HAL 就可以,其它的核心元件不需要修改,這個是作業系統通常的設計模式。接下來Ntldr 從HKEY_LOCAL_ MACHINE\SYSTEM\CurrentControlSet 下讀取這臺機器安裝的驅動程式,然後依次載入驅動程式。這個階段系統核心會首先初始化底層裝置驅動,然後作業系統核心會在登錄檔的HKEY_LACAL_MACHINE\System\CurrentControlSet\Services鍵下查詢Start鍵值為0,和1的裝置驅動。Start值的含義:
StartType 值分0、1、2、3、4,數值越小就越早啟動,SERVICE_BOOT_START(0)是核心剛剛初始化之後,此時載入的都是與系統核心有關的重要的驅動程式,例如磁碟驅動;SERVICE_SYSTEM_START(1)稍晚一些;SERVICE_AUTO_START(2)是在登入介面出現的時候開始,如果登入較快,很可能驅動還沒有載入就登入進去了;SERVICE_DEMAND_START(3)是在需要的時候動態載入;SERVICE_DISABLED(4)是禁止載入。
l 0 == 由核心裝載器裝載
l 1 == 由I/O子系統裝載
l 2 == 自動啟動
l 3 == 手工啟動
l 4 == 禁止啟動
這些裝置驅動會在載入後後立即被初始化,如果發生錯誤,核心會根據該鍵值下的ErrorControl鍵的值進行處理,這個值共有4種:
(1),0:忽略,繼續引導,並且不顯示出錯資訊;
(2),1:正常,繼續引導,顯示出錯資訊;
(3),2:恢復,停止引導,使用“最後一次正確的配置”重啟系統,若是依然出錯則忽略;
(4),3:嚴重,停止引導,使用“最後一次正確的配置”重啟系統,如果依然出錯停止引導,並顯示一條錯誤資訊。
六,驅動程式載入完成後,Windows做如下設定:
核心會啟動會話管理器(Session Manager),這是一個名為smss.exe 的程式,是Windows系統中第一個建立的使用者模式程序,其作用表現如下:
1. 建立系統環境變數
2. 啟動 win32.sys ,這個是Windows子系統的核心模式部分。
3. 啟動 csrss.exe,這個是Windows子系統的使用者模式部分。
4. 啟動 winlogon.exe
5. 建立虛擬記憶體頁面檔案
6. 對一些必要的檔案進行改名,(主要是驅動檔案,如果更新後,需要在下次重啟前改名)
七,登入階段
在這一過程中,Windows 子系統啟動的winlogon.exe系統服務提供對Windows 使用者的登入和登出的支援。Winlogon.exe 可以完成如下一些工作:
1.啟動服務子系統(services.exe),也稱服務控制管理器(Service Control Manager, SCM)。
2.啟動本地安全授權(Local Security Authority , LSA)過程(lsass.exe)。
3.顯示登入介面
一個圖形化的識別和認證元件收集使用者的帳號和密碼,然後將這些資訊保安地傳送給LSA以進行認證處理。如果使用者提供的資訊是正確的,能夠透過認證,就允許使用者對系統進行訪問。
八,WIN7與XP啟動過程的區別:
1. 電腦開機後,開始啟動BIOS,開始BIOS自檢。
2. 透過自檢後,bios找到硬碟上的主開機記錄MBR.
3. MBR開始讀取硬碟分割槽表DPT,找到活動分割槽,找到活動分割槽中的分割槽引導記錄PBR,並且把控制權交給PBR.
4. PBR搜尋活動區中的啟動管理器bootmgr,找到後,PBR把控制權交給bootmgr(相當於xp裡的ntldr檔案)。
5. Bootmgr尋找活動分割槽中的boot資料夾中的BCD檔案(啟動配置資料,相當於xp裡的boot.ini檔案)。
6. 找到BCD後,Bootmgr首先從BCD 中讀取啟動管理器bootmgr選單的語言版本資訊,然後再呼叫BOOTMGR與相應語言的BOOTMGR.EXE.MUI (在boot資料夾對應語言資料夾中)組成相應語言的啟動選單,之後在顯示器上顯示多作業系統選擇畫面。
7. 如果存在多個作業系統而且系統設定的等待時間不是0,那麼螢幕就顯示多個作業系統的選擇介面。如果沒有多系統,那麼直接進入windows 7系統,不顯示選擇介面。
8. 選擇windows 7系統後,bootmgr就會讀取BCD裡win7系統所在的盤裡的windows\system32\winload.exe檔案,並且將控制權交給winload.exe。
9. Winload.exe載入windows7核心、硬體、服務等,之後載入桌面等資訊,從而啟動整個windows 7系統。
綜上Win7的啟動過程概括一下就是:BIOSàMBRàDPTàPBRàBootmgràBCDà系統選擇介面à選擇windows7àWinload.exeà核心載入等à啟動整個windows7系統。
更多參考文獻:
http://www.win7china.com/html/16231.html
http://blog.csdn.net/menggucaoyuan/article/details/7246567
http://bbs.pediy.com/showthread.php?t=145414
http://www.win7china.com/html/16231.html
http://jingyan.baidu.com/article/eb9f7b6dac24c3869364e801.html