Linux電源管理(2)_Generic PM之基本概念和軟件架構(蝸窩科技,www.wowotech.net)

 

1. 前言

這裏的Generic PM,是蝸蝸本身起的名字,指Linux系統中那些常規的電源管理手段,包括關機(Power off)、待機(Standby or Hibernate)、重啓(Reboot)等。這些手段是在嵌入式Linux普及以前的PC或者服務器時代使用的。在那個計算機科學的蠻荒時代,人類在 摩爾定律的刺激下,孜孜追求的是計算機的計算能力、處理性能,所以並不特別關心Power消耗。html

在這種背景下發展出來的Linux電源管理機制,都是粗放的、靜態的、被動的,具體請參考下面的介紹。ubuntu

2. Generic PM在Linux操做系統中的表現形式

Linux操做系統中,和Generic PM有關的操做以下面圖片:服務器

Generic PM在Linux操做系統中的表現形式

該圖片截取自蝸蝸使用的「Linux ubuntu 2.6.32-38」系統,共有3部分組成:架構

第1部分是系統關機、重啓等操做的界面,共包含Hibernate、Restart、Shutdown三個操做選項;框架

二、3部分是「電源管理屬性」設置,所謂的電源管理屬性,能夠配置系統在不一樣供電模式下(如AC Power、Battery等,因爲蝸蝸的機器是PC機,所以就沒有電池供電的選項),處於Inactive狀態多久後,系統關閉Display,或者進入Sleep狀態。性能

本文將會圍繞上面提到的各個名詞,講述它們的意義、在內核中的實現方式。開始以前,先解釋一下這些詞彙的意義。字體

Shutdown,很好理解,就是關機的意思。同時意味着再也不使用計算機。 spa

Restart,也很好理解,就是重啓系統的意思。重啓的過程,再也不使用計算機。 操作系統

Hibernate,可翻譯爲冬眠。.net

聽到「冬眠」這個詞,您是否眼前一亮?蝸蝸在「Linux電源管理(1)_總體架構」中解釋電源管理的概念的時候,提到過,動物冬眠就是大天然所設計的電源管理方式的一種。在動物界,冬眠是指動物們(一般針對溫血動物)經過下降體溫的方式而進入的相似昏睡的生理狀態,在這種狀態下,須要消耗的能量較少,從而能夠達到省電(能量)的目的。

而在計算機界,設計師們也借用了「冬眠」的概念,在不須要使用計算機時,將它當前的全部現場(執行的程序、顯示器顯示的圖像、正在播放的聲音等)保存到一些斷電不會丟失的存儲器中(如硬盤中),而後將計算機關閉。從新開啓後,系統會從存儲器中將關閉前的現場讀取出來並恢復,此時從使用者的角度看,計算機就像沒有關閉過同樣。

若是把計算機界的「冬眠」搬到動物界,會是這樣的場景:一隻恐龍,邁着八字步,吃着香蕉,晃晃悠悠的走在樹林中。而後,無聊的孫猴子來了,喊了一聲 「定!」,恐龍就定在那裏了。再而後,一萬年過去了,無聊的孫猴子又來了,喊了一聲「動!」,恐龍繼續邁着八字步,吃着香蕉,就像什麼事情都沒有發生一 樣。

Sleep,睡眠。這個詞也是從生物界學來的。想象一下「睡眠」和「冬眠」的區別?「睡眠」睡的輕,隨時均可以醒來。在計算機中,Hibernate須要 把現場保存到斷電不丟失的存儲器中,並在醒來的時候讀回來,這些可能須要較長的時間(由於斷電不丟失存儲器的訪問速度都比較慢)。若是想快點,就把現場保 存在內存中就能夠了,這就是Sleep。不過這是要付出代價的,內存要保持供電,這就要消耗能量,魚與熊掌不可兼得啊!

Auto Sleep,查看上面圖片第3個部分,能夠設置系統「處於Inactive狀態多久後,自動進入Sleep狀態」。好比我正在寫這篇文章,而後被老婆喊去跪搓衣板了,一跪兩個小時。這兩個小時內,計算機再也不被使用,若是不進入Sleep狀態,將會消耗不少能量。爲了不這無謂的消耗,可讓系統在符合條件時(如20分鐘不使用),自動睡下去。

Auto put display to Sleep,原理相似,只是操做的對象是Display(顯示器等)。

 

注:

不知讀者有沒有注意到,蝸蝸在解釋上面的詞彙時,一直在用紅色字體強調「計算機再也不使用」。這就是Generic PM和Runtime PM的本質區別,即,在使用者的主觀意願上,是否須要暫停使用計算機(哪怕短短的一段時間)。

這也是Generic PM在傳統的計算機操做系統中被普遍使用的緣由,由於那個時候對計算機的使用大可能是主動方式。而對當前的移動互聯來講,就很是不合時宜了,由於人們須要移 動設備實時在線、實時接收被動事件(如來電),也就不可能主觀地暫停使用(哪怕短短的一段時間)。這種最終需求的差別,會致使在軟件設計上有很大的差異, 正由於如此,Runtime PM的出現和儘快成熟,才顯得格外重要。

3. Generic PM的軟件架構

在介紹完Generic PM的基本概念後,咱們來看一下它在Linux內核中的總體實現,並抽象出簡單的軟件架構,以便再後續的文章中,對Generic PM的主要組成部分進行更爲細緻的分析。具體以下:

Generic PM Architecture

根據上面的描述可知,Generic PM主要處理關機、重啓、冬眠(Hibernate)、睡眠(Sleep,在Kernel中也稱做Suspend)。在內核中,大體能夠分爲三個軟件層次:

API Layer,用於向用戶空間提供接口,其中關機和重啓的接口形式是系統調用(在新的內核中,關機接口還有一種新方式,具體講到的時候再說),Hibernate和Suspend的接口形式是sysfs。

PM Core,位於kernel/power/目錄下,主要處理和硬件無關的核心邏輯。

PM Driver,分爲兩個部分,一是體系結構無關的Driver,提供Driver框架(Framework)。另外一部分是具體的體系結構相關的Driver,這也是電源管理驅動開發須要涉及到的內容(圖中紅色邊框的模塊)。

另外,電源管理是一個系統級的模塊,於是會涉及到設備模型、進程管理等等方方面面的內容,咱們能夠在後續具體的分析過程當中,細細品味。

相關文章
相關標籤/搜索