Windows快速啟動背後的功臣:休眠

在PC的世界裡,微軟還是這裡的君主,這個總部坐落在美國北方西雅圖的北境統治者感受到越來越強的寒意。Winter is coming,Linux的不死士兵們不斷是從各個角落鑽出來,撬動著微軟王座的基石:Windows操作系統。微軟不得不加緊修修補補,改善Windows的用戶體驗。畢竟他的臣民們如果都叛逃了,他的皇位也會不保。

普通用戶感受最大的除了界面的變化之外,一個直觀的感受是啟動速度快了很多,這和微軟在windows 8提出的快速啟動(Fast Startup,注意和Android的Fast Boot區別)是分不開的。微軟當時統計,啟動速度提高了30%到70%:

(圖片來源 MSDN)

正因為這樣的突出表現,Windows8雖然被廣泛詬病,快速啟動卻被保留了下來並在Windows10中繼續發揮重要作用。

快速啟動能夠如此強大,和它背後的功臣:休眠功能(hibernate)是分不開的。

休眠hibernate

Hibernation一般指冬眠,冬眠的動物里最有名的就是熊,而微軟在美國科技界的外號就是北極熊,無怪乎休眠被起名Hibernation。

我們專欄在前面一期介紹過睡眠(Sleep, 一起學習電腦如何睡眠S3)。我們來回憶一下:

ACPI提供了一種機制使系統在Working狀態(G0)和Sleeping狀態(G1)以及soft-off (G2)狀態之間轉換。

G1 Sleeping狀態下系統耗電較少,沒有程序在執行,如果有任何喚醒事件傳入系統會使系統快速恢復至G0工作狀態。Sleeping狀態分為四種:

S0:正常工作狀態,所有設備正常運轉。

S1:Sleeping with Processor Context Maintained, CPU停止工作,不執行任何指令,但是CPU,晶元組以及DRAM內容沒有遺失。此狀態可以快速恢復到工作狀態。

S2:比S1的睡眠狀態更深更省電,CPU停止工作,但是CPU和cache的內容已丟失。DRAM仍處於帶電狀態。

S3:又叫Suspend to RAM,功耗更低,內存信息得以保持,CPU, Cache, Chipset的內容均丟失。DRAM仍處於帶電狀態。

S4:又叫Suspend to Disk,hibernate。功耗最低,喚醒需要的時間最長,所有設備都不再工作。Memory的資料被保存在Disk中。當系統收到喚醒信號後,首先從Disk中恢復memory。

這裡的休眠就是指S4 (hibernate)。作為一個UEFI專欄,這裡要指出UEFI固件對於S4不需要做任何特殊處理,memory被保存到disk,S4回來後從Disk恢復的動作全部由操作系統完成,UEFI可以將其作為一般啟動即可。這和S3有很大不同。

快速啟動Fast Startup

休眠在windows操作系統中存在已經有很長時間了,微軟只是在win8開始為它找到了新的使用場景。微軟的工程師一直致力提高啟動速度,因為他們發現57%的PC用戶和45%的筆記本用戶還是每天關閉電腦(2011年數據,見參考文獻[1]):

(圖片來源:MSDN)

而Hibernate卻使用率不高。微軟的工程師發現: Windows啟動到登陸界面要進行的步驟每次完全一樣,只有在登陸後運行程序不同。他們產生了一個大膽的想法,為什麼不把登陸完成之前的內容藉助Hibernate存儲下來,而每次啟動都從這個點再繼續呢?想法不錯,經過實驗,他們找到了合適的存儲點,結果啟動速度大為提高。我們通過下圖可以形象的看出兩者的差別:

(圖片來源:MSDN)

Cold boot是指原本的冷啟動,下面是快速啟動。

幹得好,程序員們!

結論

原理說完了,下面說一下它的相關問題:

1. 怎麼開啟Fast Startup

在大多數情況下,快速啟動都是預設開啟的。如果你的沒有開啟,打開快速啟動也很簡單,照著下面圖片做就好了:

如果你在電源管理界面裡面沒有看到開啟快速啟動的選項框,如下:

那可能是你的休眠模式沒有打開。用管理員模式開啟命令行窗口,輸入powercfg /hibernate on

2. 怎麼啟動個乾淨的系統

有些用戶擔憂,每次都是休眠啟動,如果系統出問題,我想要個一乾二淨的登陸環境怎麼辦? 辦法由兩個:

A. 關機不要直接用關機選項,而是開啟命令行窗口,輸入 shutdown /s /full / t 0。

B. 不要關機,而是選擇重啟。重啟不會用快速啟動。

3. 如何縮小休眠文件 hiberfil.sys

休眠文件hiberfil.sys隨著你的內存大小而設定,通常是你安裝內存的75%大小。土豪用戶引以為傲的大內存帶來了大休眠文件,對寸土寸金的SSD來說就肉痛了。如果你僅僅想用快速啟動而對休眠不感興趣的話,用下面這個命令

powercfg /h /type reducedn

可以節省大約一半的空間。

請確保在管理員許可權下。

4. 快速啟動的缺點

對雙啟動或者多啟動來說,Windows會鎖住啟動分區,你有可能不能順利進入其他操作系統,尤其Linux系統。如果你通過手動進入的話,對Windows分區進行操作可能會導致再次返回該Windows時發生藍屏。建議Dual OS的用戶慎用快速啟動。

其他

這裡亂入一個知識點。微軟不但把休眠用到了開機上,還創造出了一個叫做混合睡眠的概念。這是因為微軟發現關閉電腦,尤其是筆記本的人越來越少。經過平板浪潮的洗禮,大部分人開始習慣把筆記本一合就完事了。而合上筆記本的動作在很多情況下(可以在Windows裡面設置)都是進入睡眠S3。而S3有個問題是它還在消耗著電力,儘管比較少。這就帶來一個嚴重的問題,如果在S3情況下電力消耗殆盡,那麼未存儲的東西不就丟失了嗎?過去這種情況都由UEFI固件偷偷處理,它會在電力下降到一個閾值後偷偷開機,幫你把S3轉換到S4。

出問題的是很多小品牌的筆記本廠商,他們固件基礎薄弱,這個功能問題很多。而隨著不關機人群的擴展,出問題的機會越來越大。於是微軟發明了個混合睡眠模式,即:

1. 合上蓋子的時候進入混合睡眠模式,即雖然要進入S3,但也把S4需要的內容存儲下來了。

2. 如果在電源消耗完之前從S3回來,例如開啟蓋子等。就按照S3啟動路徑。

3. 如果電源消耗結束後再回來,就按照S4的路徑啟動。

這樣相當於為S3加上了S4的雙保險,保證文件不會丟失。

你可以通過powercfg看一下你開啟混合啟動了嗎:

參考文獻:

[1]. blogs.msdn.microsoft.com

歡迎大家關注本專欄和用微信掃描下方二維碼加入微信公眾號"UEFIBlog",在那裡有最新的文章。同時歡迎大家給本專欄和公眾號投稿!

用微信掃描二維碼加入UEFIBlog公眾號


推薦閱讀:

對於程序員來說,什麼叫良好的編碼習慣,怎麼樣養成良好的編碼習慣?
有哪些需要計算機技術,又和音樂相關的職業?
C 語言之美(一)
什麼樣的技術 Leader 是稱職的?
做遊戲,學編程(C語言) 9 貪吃蛇

TAG:电脑知识 | 操作系统 | 计算机技术 |