過去經(jīng)常為了優(yōu)化家里的Windows 7系統(tǒng)啟動時間所苦惱,為此我還特地買了塊固態(tài)硬盤和可以做Smart Cache的主板進行優(yōu)化,此后就經(jīng)常用安全衛(wèi)士360的啟動時間優(yōu)化作為評測,看到經(jīng)過優(yōu)化的電腦可以用17秒時間啟動系統(tǒng)并且在安全衛(wèi)士360中顯示擊敗了全國99%的電腦,不禁飄飄然起來。然而最近工作用的筆記本電腦因為工作原因升級了Windows 8 RTM版,卻驚訝的發(fā)現(xiàn)在我的大黑Thinkpad W520上,竟然啟動時間是7秒,沒看錯,真的是嘆為觀止的7秒!!! 比較一下同樣用SSD啟動的家中的Mac Air竟然還要勝上一籌。那么究竟Windows 8中暗藏了什么玄機呢?讓我們一探究竟!
想想大家是不是都曾經(jīng)為了優(yōu)化啟動時間苦惱過?聰明的你也許會采用過去我常用的方式-休眠方式,但是這種方式顯然由于要保持通電狀態(tài)維持內(nèi)存狀態(tài)而或者不利于筆記本電池的壽命或者對臺式機還是費電。Windows 8的出現(xiàn)就是為了滿足我們可以高效快速的冷啟動。其實在Windows 7中已經(jīng)對啟動過程做了適當(dāng)?shù)膬?yōu)化和改進,例如并行加載設(shè)備驅(qū)動和服務(wù)啟動,但是Windows 8顯然更進了一步,確切的說Windows 8創(chuàng)新性的結(jié)合了冷啟動和休眠方式來加速啟動過程。
那么Windows 7中的啟動和關(guān)機過程涉及了哪些環(huán)節(jié)呢?
一個完整的關(guān)機過程包括了:
選擇開始菜單中的關(guān)閉按鈕或按下電源按鈕或者應(yīng)用程序通過調(diào)用 API ExitWindowsEx() 或 InitiateShutdown() 等啟動關(guān)機。
Windows 系統(tǒng)將關(guān)機信息廣播給所運行應(yīng)用程序,讓他們有機會來保存活躍數(shù)據(jù)和設(shè)置狀態(tài);應(yīng)用程序還可以請求一點額外的時間。
Windows 系統(tǒng)將關(guān)閉每個登陸的用戶會話。
Windows 系統(tǒng)將系統(tǒng)關(guān)閉信息發(fā)送給所有服務(wù)并告知關(guān)機過程已經(jīng)開始,隨后有序的將其關(guān)閉,關(guān)閉過程是并行的停止服務(wù),對于具有依賴關(guān)系的服務(wù)串行關(guān)閉。如果服務(wù)沒有響應(yīng),系統(tǒng)將強制關(guān)閉。
系統(tǒng)也會告知所有設(shè)備,將其關(guān)閉。
Windows關(guān)閉自身系統(tǒng)會話(會話0)
Windows系統(tǒng)將所有掛起的數(shù)據(jù)刷新到硬盤并確保完全保存。
Windows系統(tǒng)通過ACPI電源接口通知底層電源模塊關(guān)機。
對于系統(tǒng)的啟動過程呢?(我還將在未來的無盤SAN Boot引導(dǎo)Windows Server 2012的博客里面展開論述)
按下電源按鈕后, PC 的固件啟動開機自檢過程(大家熟知的POST),并加載固件設(shè)置。這個預(yù)引導(dǎo)過程結(jié)束時會檢測到一個有效的系統(tǒng)磁盤才繼續(xù)。(當(dāng)然我們需要在BIOS中設(shè)置檢測到硬件后的引導(dǎo)順序)
Firmware 的嵌入式啟動程序讀取主引導(dǎo)記錄 (MBR),隨后啟動 Bootmgr.exe。Bootmgr.exe 在 Windows 啟動分區(qū)上查找并啟動 Windows 加載程序 (Winload.exe) 。
加載啟動 Windows 內(nèi)核所需的基本驅(qū)動程序然后Windows的內(nèi)核程序開始運行,在此過程加載系統(tǒng)注冊表配置單元和附加標(biāo)記為 BOOT_START 的驅(qū)動程序到內(nèi)存中。
Windows內(nèi)核將控制傳遞給會話管理器進程 (Smss.exe) 初始化系統(tǒng)會話,然后加載和啟動未標(biāo)記為 BOOT_START的設(shè)備和驅(qū)動程序。
Winlogon.exe 啟動,顯示用戶登錄屏幕,服務(wù)控制管理器啟動服務(wù),相應(yīng)的組策略腳本運行。當(dāng)用戶登錄時,Windows 將創(chuàng)建該用戶的會話。
Explorer.exe 啟動,系統(tǒng)將創(chuàng)建初始化桌面,并顯示它的桌面窗口管理器 (DWM)進程。
從上面的關(guān)機過程中,可以發(fā)現(xiàn)系統(tǒng)需要關(guān)閉所有的用戶會話和內(nèi)核會話,關(guān)閉服務(wù)和設(shè)備然后才會徹底關(guān)機。
而 Windows 8可以快速啟動的關(guān)鍵改變在于:
在 Windows 8中會關(guān)閉用戶會話,但不再關(guān)閉內(nèi)核會話而是以柔性的休眠方式處理。相比充分休眠方式,由于應(yīng)用程序使用的內(nèi)存頁很多,相對的如果只保留系統(tǒng)會話 0 的休眠狀態(tài)數(shù)據(jù)實際是會小很多的,這樣會大大減少休眠所用到的內(nèi)存回寫到磁盤的時間。休眠狀態(tài)就是指寫到磁盤 (hiberfil.sys) 上的文件有效保存系統(tǒng)狀態(tài)和內(nèi)存的內(nèi)容信息,然后恢復(fù)和還原的時候在將內(nèi)容讀取回內(nèi)存。Windows 8的冷啟動使用了這種技術(shù),讀取休眠文件和重新初始化驅(qū)動程序的時間會快很多,對于大多數(shù)主機上會有30-70%在的顯著提升。這一點也比較容易看出來,聰明的各位看官你懂得:
從休眠方式恢復(fù)的速度顯然比重新初始化恢復(fù)快很多(這不就是投機的我們之前會可以選擇休眠的原因嗎)。另外,Windows 8還增加了多階段恢復(fù)的功能,類似單機系統(tǒng)的分布式作業(yè)拆解,例如如果你是i5或i7四核的主機將充分利用所有內(nèi)核并發(fā)讀取和解壓縮休眠Hibernate文件,要知道解壓縮還是比較消耗CPU的;這個功能對于我們從休眠狀態(tài)恢復(fù)系統(tǒng)同樣有了很大的提升!