轉自:http://blog.csdn.net/haomcu/article/details/7398703linux
系統掛起(Suspend)是電源管理(APM&ACPI)的一個特性,給用戶帶來了很大的方便。Linux在2.6系列核心中對電源管理有了較好的支持,下面就談談Linux對系統掛起的支持狀況。android
另外有一篇介紹android和linux內核對電源管理的支持的比較,代碼級別的:Linux Kernel and Android 休眠與喚醒(中文版)網站
一個網址是http://blog.csdn.net/hellolwl/article/details/6271207操作系統
Linux對系統掛起的支持.net
Linux同時提供了對APM和ACPI的支持,當時二者是不兼容的,同一時刻只能有一種機制工做。因爲ACPI的優越性,因此如今Linux將ACPI設爲缺省的電源管理方案。對於一些比較舊的主板,若是其BIOS中ACPI的實如今2000年之前,那麼Linux自動啓用APM(能夠經過核心命令行參數acpi=force來強制啓用ACPI)。若是你下主板BIOS中對ACPI的支持有些問題致使Linux工做不正常,那麼還可使用核心命令行參數acpi=off來強制禁用ACPI,這樣Linux會自動啓用APM電源管理。命令行
Linux如今主要支持三種ACPI的節電方式:設計
S1:Stopgrant,即待機(standby)模式。顯示屏自動斷電,只是主機通電。這時敲任意鍵便可恢復原來狀態。
S2 S3:STR(Suspend To Ram),即掛起到內存。系統把當前信息儲存在內存中,只有內存等幾個關鍵部件通電,這時計算機處在高度節電狀態。此時系統不能從鍵盤喚醒。手工喚醒的方法只能是按前面板上的電源按鈕。喚醒後,計算機從內存中讀取信息很快恢復到原來狀態。
S4:STD(Suspend To Disk),即掛起到硬盤,也即休眠。計算機自動關機,關機前將當前數據存儲在硬盤上,用戶下次按開關鍵開機時計算機將無須啓動操做系統,直接從硬盤讀取數據,恢復原來狀態。orm
在Linux下查看核心支持ACPI狀況的方法以下:blog
2.4核心下:
# cat /proc/acpi/sleep
S0 S1 S3 S4 S5
2.6核心下:
# cat /sys/power/state
standby mem disk內存
上面的輸出可知,咱們系統中核心同時支持三種節電模式。
在/sys/power目錄下還有一個文件:disk,文件的內容能夠以下:
shutdown: 將系統狀態保存到磁盤,讓BIOS關閉計算機; platform: 將系統狀態保存到磁盤,讓BIOS關閉計算機,而且點亮掛起指示燈; firmware: 讓BIOS本身將系統狀態保存,而且關閉計算機,須要BIOS本身有掛起磁盤。大部分工做都由BIOS完成,對操做系統是透明的;
進入這三種節電模式的方法以下:
#echo standby > /sys/power/state ---->掛起(S1) #echo mem > /sys/power/state ---->掛起到內存(S3) #echo shutdown > /sys/power/disk; echo disk > /sys/power/state ---->掛起到磁盤(S4) #echo platform > /sys/power/disk; echo disk > /sys/power/state
Linux下的磁盤掛起(STD)是經過swsusp機制實現的:將系統當前狀態保存的內存後,再把內存內容寫入交換分區(swap)。這裏要求交換分區容量最好大於內存容量。系統掛起到磁盤後,下次啓動的時候須要向核心傳遞命令行參數resume=/dev/hdaX(/dev/hdaX是系統中的交換分區),這樣系統就可以很快恢復到關機時的狀態。
還有一個非正式的核心補丁能夠實現STD:Software Suspend 2。該項目是一個快速發展的項目,設計上教swsusp有一些優點,可是尚未集成到核心正式發佈中,實現方式與swsusp基本相同。
雖然Linux提供了系統掛起的機制,可是執行上面的掛起操做不必定可以成功。一方面,這些操做除了須要BIOS支持之外,還須要外圍硬件設備可以兼容,即設備支持節電狀態,支持從節電狀態或斷電狀態恢復;另外一方面,這些設備驅動必須可以接收電源管理指令。目前,系統掛起的主要障礙就是那些還不太完善的驅動程序,如USB、顯卡、聲卡驅動等。
固然,如今Linux核心對系統掛起的支持還有待改進,主要表如今:
不過能夠放心,全部的問題內核黑客們都可以解決!
參考閱讀: