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