== Windows 電腦的四種運行狀態 ==
這四種運行狀態(或稱電源狀態)是:
- 工作狀態 (Working), S0
- 睡眠狀態 (Sleep), S1 或 S3
- 休眠狀態 (Hibernate), S4
- 關機狀態 (Shutdown), S5
請注意:以上四種狀態中,並沒有一種被我叫作“待機狀態”,因為“待機”這個詞是有歧義的,因此我避免使用它。
[一個提示] 在 Windows 2000 和 Windows XP 中,『開始』菜單→關機選項中確實有一項被叫作“待機(Standby)”,它的效果實際上等同於睡眠(Sleep)。微軟后來應該是也覺得 Standby 這個提法有歧義,因此從 Vista 起就將其改名為“睡眠(Sleep)”。由於 Windows XP 的影響很深遠,有些軟硬件廠商一直用 Standby 來指代 Sleep ,直到今天。現在,請暫時忘掉“待機”這個提法,本文最后一部分回頭再討論這個詞。
【工作狀態】 工作狀態就是一個系統的全功能狀態,用戶讓它干什么它馬上就干什么,只要是這個系統的軟硬件能力范圍之內。形象地說,用戶敲一個按鍵或移動一下鼠標,屏幕上立即就有相應的反饋。
現在有一個問題,我不敲鍵盤也不按鼠標,電腦屏幕上一片寂靜,那它還是處在工作狀態嗎?當然是,你應該將工作狀態與否的實質理解為 CPU 有沒有執行代碼。雖然你覺得電腦是一片安靜,但 CPU 可沒閑着,因為系統中總是有一些后台程序在活動,比如,后台有個程序在幫你下載電影,操作系統自身的安全防護程序在掃描病毒。
沒有人直接參與的這種工作狀態,常常也被稱作“空閑狀態(Idle)”。空閑狀態跟睡眠、休眠的區別在於,空閑狀態下的系統仍舊是全功能運作的,有任何外部事件的發生,系統都會立即處理。比如:有個 QQ 好友突然發消息給你,你的 QQ 程序就會立即收到並彈出提示,即使你當時人不在電腦旁;反之,進入睡眠狀態的 Windows 電腦是無法收到新的 QQ 消息的。
了解了工作狀態的關鍵特征,現在可以說非工作狀態了。拿 Windows 7 舉例,開始菜單,關機選項能夠呈現睡眠、休眠、關機這三種選擇,全了。下面給出中英文界面對照圖。
【睡眠狀態】 睡眠狀態的特征是: CPU 停止執行指令,內存中的東西原樣留在內存中。
睡眠狀態意味着:
- 你的未存盤文檔沒有丟失,它留在你的內存中。
- 后台的所有程序暫停執行,比如,后台的下載程序暫停下載動作,QQ 也不再能收到好友消息。
- 你可以敲一下鍵盤將系統喚醒。(點擊或移動鼠標不一定能喚醒系統,看具體情況)
- 在系統被喚醒前,如果斷電,內存中的信息將全部丟失,因為內存中的信息需要少量電力來維持。換言之,你的未存盤文檔的未存盤部分將丟失。
- 系統喚醒后,所有的系統狀態恢復成睡眠前的樣子。你之前打開的所有應用程序窗口都留在原處,里頭的內容也沒變,你可以繼續編輯未存盤的文檔,就好像系統並未經歷過睡眠那般。
【休眠狀態】 休眠狀態和睡眠狀態的大部分特征是相同的,區別之處在於:原先睡眠狀態下留在內存中的信息被原樣寫入硬盤,休眠完成后系統自身進入零耗電狀態;喚醒系統時,硬盤中的內存鏡像被原樣裝入內存,系統恢復運行。
這意味着:
- 系統執行“進入休眠”這個操作,所花費的時間比“進入睡眠”要長很多,畢竟多了個“寫硬盤”的動作。如果電腦上的硬盤是機械硬盤,寫入速度算 100MB/s,內存大小是 4GB,那么,寫硬盤時間可長達 40 秒。Windows 7 起有個改進,會將內存數據壓縮后再寫入硬盤,通常會節省一半的時間,即 20 秒,另外,當前沒用到的內存塊也不會被寫入硬盤,又能再節省一些時間。
- 休眠完成后,即使你拔掉電源線,未存盤的文檔也不會丟失,因為數據已經存在硬盤上了。
一點點小結:由於睡眠和休眠並不丟失內存中的數據,因此 Windows 並不會提示你保存未存盤的文件。
【關機狀態】 在 Windows 7 及之前版本的 Windows 上,開始菜單→關機,就是進入這種狀態。關機將導致內存中的數據全部被清空,因此,應用程序會提示你保存未存盤的文檔;如果你發現文檔還需要修改修改才值得保存,你可以趁此機會取消剛才的關機請求。
這里提一下“重啟(Restart/Reboot)”這個詞,進入關機狀態后再開機,被稱為重啟;如果是睡眠或休眠后再喚醒(Wakeup/Resume),則不叫重啟。
【一個有趣的問題,既然休眠是零耗電,你願不願意用休眠來代替關機呢?】
就我個人而言,當我發現 Windows 2000 開始提供休眠功能時,我就愛上它了,我默認的關電腦方式就改為了休眠。我喜歡給電腦配大內存(總是將主板的內存槽都插滿),同時打開多個程序,休眠帶來的巨大好處是,從休眠中喚醒后,我昨天遺留的工作環境、軟件狀態就原原本本地在那里了,我的工作思路馬上就能接上。
感謝 Windows NT 內核的高穩定性,一次 Windows 開機后一般能運行一兩個月才需要重啟。需要重啟的場合有下面這么幾種:
- 升級了一個軟件,升級過程被要求重啟,不重啟的話,有一些舊文件無法被刪除。
- 原因一般是系統組件或驅動程序出了問題,不重啟無法解決故障。
- Windows 自身有 bug,導致內存消耗太大的情況下無法進入休眠。微軟陸續出過一些補丁來修正,但似乎一直沒有徹底解決,該問題到 Windows 8.1 時還一直存在。
那休眠和喚醒的速度,比起關機再開機的速度,是否真的更快了呢?我的親身體會是,如果內存沒超過 8GB,休眠喚醒的速度體驗確實比較快,而且,內存越小越快。想想看,Windows 一次開機過程,時間都消耗到哪里去了?如果是安裝一份全新的 Windows ,不裝任何第三方軟件,它的開機速度是相當快的,大約 20 秒即可;隨着你安裝越來越多的第三方軟件,開機速度將越來越慢,為什么呢?因為很多第三方軟件會在系統中安插后台進程,那些后台進程是一開機就要執行的,是它們拖慢了開機速度。第三方軟件的進程做完初始化動作后,如果你沒有明確去使用它們,它們一般處於安靜狀態,只是消耗着少量的內存。現在你采用休眠策略,休眠和喚醒的過程,那些第三方程序是不需要重新初始化的,這部分時間就被活生生省下來了。
很可惜啊,休眠這么好的功能,很多人其實並不懂得使用,也許他們聽說過這個功能,但是不敢使用。畢竟很多人對陌生的事物總是抱有一絲恐懼的。
~~~~
休眠是個好功能,但微軟從 Vista 起的一個設計讓我蠻痛恨的:休眠過程不再顯示進度條了。
Windows XP 和 Windows 2000 的休眠過程會顯示一個進度條,用於表示內存數據寫入硬盤的進度。Windows XP 的顯示如下:
剛才說過,這個操作通常需要幾十秒時間,內存越大休眠越費時,因此有個進度條是很好的設計。然而,從 Vista 起,這個休眠進度條被微軟砍掉了,那屏幕上顯示什么呢?屏幕上什么都不顯示,就是個黑屏。這就很讓人討厭了。想想以下兩種場景。
- 假設我用台式電腦,我希望休眠完畢后切斷電源。我如何直觀判斷休眠是否完成了呢?
- 我出差用筆記本電腦,我希望休眠完成后再將電腦塞到包里。需要判定的理由是,有某些情況休眠會失敗,休眠失敗意味着,雖然我向 Windows 下達了休眠請求,但 Windows 一直卡在工作狀態,我的電腦還在大量地發熱。冒然將還在工作狀態的電腦憋在電腦包里,電腦有可能會因為過熱而損壞。
沒有了休眠進度條,休眠是否完成的判斷方法還是有的,只不過比較費神,我得盯住電腦的電源指示燈,電源指示燈熄滅我才能確認休眠完成了。如果黑屏持續的時間比以往的經驗要長很多,我只能判定休眠失敗了,此時只好強制關機。
微軟為什么要把這樣有用的一個反饋界面給砍掉呢?我不相信這是技術難題,既然 Windows XP 都做到了,Vista 為什么做不到?兩個字總結:犯懶。當然,微軟會在其他方面找一些冠冕堂皇的理由來辯解,但根本站不住腳。下頭講“混合睡眠”時就會有這樣一個理由。
【四種運行狀態的總結表】
在 Sleep 狀態下,除了鍵盤以外的哪些外設可以喚醒系統,不同軟硬件的系統有不同的表現。比如,有些機器的 BIOS 設置中允許 USB 鼠標喚醒系統;使用 Intel 的網卡,通過網卡的驅動程序可以設置是否被特定的數據包喚醒。
下圖是一個 Intel 網卡的驅動程序配置界面,可以配置 Windows 被什么樣的網絡數據包喚醒。圖中所謂的“待命”,顯然是沿用了 Windows XP 時代的 Standby 用語,其實它是 Sleep 的意思。
注:從概念上說,休眠是比睡眠更深度的節能狀態,意思是,
- 在休眠狀態下,更多的外設會被系統置於“非活動”狀態以節省電力消耗。舉個例子,一台 2005 年左右的 PC 台式機,進入睡眠時我們會發現它的硬盤仍在旋轉(能聽到旋轉的嗡嗡聲),而進入休眠時,硬盤肯定是不轉的。
- 休眠狀態下能夠主動喚醒主機的外設也更少。睡眠和休眠狀態下具體哪些外設能夠喚醒主機,跟當前系統的軟硬件配置有很大關系。