過去經常為了優化家裡的Windows 7系統啟動時間所苦惱,為此我還特地買了塊固態硬盤和可以做Smart Cache的主板進行優化,此後就經常用安全衛士360的啟動時間優化作為評測,看到經過優化的電腦可以用17秒時間啟動系統並且在安全衛士360中顯示擊敗了全國99%的電腦,不禁飄飄然起來。然而最近工作用的筆記本電腦因為工作原因升級了Windows 8 RTM版,卻驚訝的發現在我的大黑Thinkpad W520上,竟然啟動時間是7秒,沒看錯,真的是歎為觀止的7秒!!! 比較一下同樣用SSD啟動的家中的Mac Air竟然還要勝上一籌。那麼究竟Windows 8中暗藏了什麼玄機呢?讓我們一探究竟!
想想大家是不是都曾經為了優化啟動時間苦惱過?聰明的你也許會采用過去我常用的方式-休眠方式,但是這種方式顯然由於要保持通電狀態維持內存狀態而或者不利於筆記本電池的壽命或者對台式機還是費電。Windows 8的出現就是為了滿足我們可以高效快速的冷啟動。其實在Windows 7中已經對啟動過程做了適當的優化和改進,例如並行加載設備驅動和服務啟動,但是Windows 8顯然更進了一步,確切的說Windows 8創新性的結合了冷啟動和休眠方式來加速啟動過程。
那麼Windows 7中的啟動和關機過程涉及了哪些環節呢?
一個完整的關機過程包括了:
選擇開始菜單中的關閉按鈕或按下電源按鈕或者應用程序通過調用 API ExitWindowsEx() 或 InitiateShutdown() 等啟動關機。
Windows 系統將關機信息廣播給所運行應用程序,讓他們有機會來保存活躍數據和設置狀態;應用程序還可以請求一點額外的時間。
Windows 系統將關閉每個登陸的用戶會話。
Windows 系統將系統關閉信息發送給所有服務並告知關機過程已經開始,隨後有序的將其關閉,關閉過程是並行的停止服務,對於具有依賴關系的服務串行關閉。如果服務沒有響應,系統將強制關閉。
系統也會告知所有設備,將其關閉。
Windows關閉自身系統會話(會話0)
Windows系統將所有掛起的數據刷新到硬盤並確保完全保存。
Windows系統通過ACPI電源接口通知底層電源模塊關機。
對於系統的啟動過程呢?(我還將在未來的無盤SAN Boot引導Windows Server 2012的博客裡面展開論述)
按下電源按鈕後, PC 的固件啟動開機自檢過程(大家熟知的POST),並加載固件設置。這個預引導過程結束時會檢測到一個有效的系統磁盤才繼續。(當然我們需要在BIOS中設置檢測到硬件後的引導順序)
Firmware 的嵌入式啟動程序讀取主引導記錄 (MBR),隨後啟動 Bootmgr.exe。Bootmgr.exe 在 Windows 啟動分區上查找並啟動 Windows 加載程序 (Winload.exe) 。
加載啟動 Windows 內核所需的基本驅動程序然後Windows的內核程序開始運行,在此過程加載系統注冊表配置單元和附加標記為 BOOT_START 的驅動程序到內存中。
Windows內核將控制傳遞給會話管理器進程 (Smss.exe) 初始化系統會話,然後加載和啟動未標記為 BOOT_START的設備和驅動程序。
Winlogon.exe 啟動,顯示用戶登錄屏幕,服務控制管理器啟動服務,相應的組策略腳本運行。當用戶登錄時,Windows 將創建該用戶的會話。
Explorer.exe 啟動,系統將創建初始化桌面,並顯示它的桌面窗口管理器 (DWM)進程。
從上面的關機過程中,可以發現系統需要關閉所有的用戶會話和內核會話,關閉服務和設備然後才會徹底關機。
而 Windows 8可以快速啟動的關鍵改變在於:
在 Windows 8中會關閉用戶會話,但不再關閉內核會話而是以柔性的休眠方式處理。相比充分休眠方式,由於應用程序使用的內存頁很多,相對的如果只保留系統會話 0 的休眠狀態數據實際是會小很多的,這樣會大大減少休眠所用到的內存回寫到磁盤的時間。休眠狀態就是指寫到磁盤 (hiberfil.sys) 上的文件有效保存系統狀態和內存的內容信息,然後恢復和還原的時候在將內容讀取回內存。Windows 8的冷啟動使用了這種技術,讀取休眠文件和重新初始化驅動程序的時間會快很多,對於大多數主機上會有30-70%在的顯著提升。這一點也比較容易看出來,聰明的各位看官你懂得:
從休眠方式恢復的速度顯然比重新初始化恢復快很多(這不就是投機的我們之前會可以選擇休眠的原因嗎)。另外,Windows 8還增加了多階段恢復的功能,類似單機系統的分布式作業拆解,例如如果你是i5或i7四核的主機將充分利用所有內核並發讀取和解壓縮休眠Hibernate文件,要知道解壓縮還是比較消耗CPU的;這個功能對於我們從休眠狀態恢復系統同樣有了很大的提升!
另外值得一提的如何對待休眠文件,在Windows 8系統中用 dir /s /ah hiberfile.sys 也許你會發現這是相當大的一個。默認是以物理內存的 75%作為休眠文件的大小。基本上是作為系統為了進入休眠狀態時寫出的狀態數據所保留的大小。實際上作為快速啟動,它通常只是是物理內存的 10 ~15% (根據驅動程序、 服務和其他因素而異)。
另一個重要 Windows 8 的快速啟動特點是,盡管這種方式不會完全枚舉所有"即插即用"的設備驅動程序,但快速驅動模式仍然會初始化驅動程序。因此在快速啟動方式下的冷啟動仍然可以和從前一樣從容應對硬件環境的改變。當然大家如果有條件用SSD快速啟動的效果會更加明顯,你也懂得即便是讀少量的休眠文件固態盤也比機械硬盤給力。
還有一個值得介紹的其實也多余一說的是如果你的PC機不算老,那麼當然對比用老的BIOS啟動,新的UEFI(統一可擴展固件接口)BIOS的啟動速度還是快很多的。UEFI在通電後會首先初始化CPU和內存,與BIOS不同,接下來其他設備的加載和初始化則將有可能被並行處理,這將大大提高系統的啟動速度。當然現在絕大多數主機的主板都支持UEFI模式:)
最後,檢查一下你的Windows 8是不是啟動了這個功能吧,當然默認應該是打開的:
在命令行運行powercfg /a , 可以看到我的系統已經啟用了快速啟動功能。
通過控制面板,也可以設置和查看:
最後說明一下,大家可能知道可以通過運行 powercfg /hibernate off命令禁用休眠和回收磁盤空間,不過看了前面介紹的快速啟動部分也許你該明白這樣做,不僅僅將禁用休眠連快速啟動功能也損失了。如果你想直接回到Windows 7
的啟動狀態,可以運行shutdown /s /full / t 0 關機或者選擇從圖形界面重新啟動都會觸發一個舊的冷啟動過程,但是為什麼要退回去呢?