Linux電源管理(2)_常規的電源管理的基本概念和軟件架構

原文:

Linux電源管理(2)_Generic PM之基本概念和軟件架構

1. 前言

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

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

2. 常規的電源管理在Linux操作系統中的表現形式

Linux操作系統中,常規的電源管理的有關操作如下面圖片:

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

第2、3部分是“電源管理屬性”設置,所謂的電源管理屬性,可以配置系統在不同供電模式下(如AC Power、Battery等,由于蝸蝸的機器是PC機,因此就沒有電池供電的選項),處于Inactive狀態多久后,系統關閉Display,或者進入Sleep狀態。

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

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

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

Hibernate,可翻譯為冬眠。

2.1 Hibernate

聽到“冬眠”這個詞,您是否眼前一亮?動物冬眠就是大自然所設計的電源管理方式的一種。在動物界,冬眠是指動物們(通常針對溫血動物)通過降低體溫的方式而進入的類似昏睡的生理狀態,在這種狀態下,需要消耗的能量較少,從而可以達到省電(能量)的目的。

而在計算機界,設計師們也借用了“冬眠”的概念,在不需要使用計算機時,將它當前的所有現場(執行的程序、顯示器顯示的圖像、正在播放的聲音等)保存到一些斷電不會丟失的存儲器中(如硬盤中),然后將計算機關閉。重新開啟后,系統會從存儲器中將關閉前的現場讀取出來并恢復,此時從使用者的角度看,計算機就像沒有關閉過一樣。如果把計算機界的“冬眠”搬到動物界,會是這樣的場景:一只恐龍,邁著八字步,吃著香蕉,晃晃悠悠的走在樹林中。然后,無聊的孫猴子來了,喊了一聲“定!”,恐龍就定在那里了。再然后,一萬年過去了,無聊的孫猴子又來了,喊了一聲“動!”,恐龍繼續邁著八字步,吃著香蕉,就像什么事情都沒有發生一樣。

2.2 Sleep

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

2.3 Auto Sleep

Auto Sleep,可以設置系統“處于Inactive狀態多久后,自動進入Sleep狀態”。比如我正在寫這篇文章,然后被老婆喊去跪搓衣板了,一跪兩個小時。這兩個小時內,計算機不再被使用,如果不進入Sleep狀態,將會消耗很多能量。為了避免這無謂的消耗,可以讓系統在符合條件時(如20分鐘不使用),自動睡下去。

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

3.常規的電源管理的軟件架構

根據上面的描述可知,常規的電源管理主要處理關機、重啟、冬眠(Hibernate)、睡眠(Sleep,在Kernel中也稱作Suspend)。在內核中,大致可以分為三個軟件層次:

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

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

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

另外,電源管理是一個系統級的模塊,因而會涉及到設備模型、進程管理等等方方面面的內容,我們可以在后續具體的分析過程中,細細品味。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/78613.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78613.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/78613.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習基礎理論 - 分類問題評估指標

幾個定義:混淆矩陣 TP: True Positives, 表示實際為正例且被分類器判定為正例的樣本數FP: False Positives, 表示實際為負例且被分類器判定為正例的樣本數FN: False Negatives, 表示實際為正例但被分類器判定為負例的樣本數TN: True Negatives, 表示實際為負例且被分類…

在線教育系統開發常見問題及解決方案:源碼部署到運營維護

當下,越來越多的教育機構、企業培訓部門以及創業者,選擇開發屬于自己的在線教育系統。然而,從源碼部署到實際運營,整個過程中常常會遇到一系列技術與管理難題。今天,筆者將從在線教育系統源碼維護、運營等幾個方向為大…

RAG(Retrieval-Augmented Generation,檢索增強生成)

RAG(Retrieval-Augmented Generation,檢索增強生成)是一種結合 信息檢索 和 文本生成 的技術,旨在提升大語言模型(LLM)生成內容的準確性和時效性。其核心思想是:先檢索相關知識,再基…

項目實戰 -- 狀態管理

redux基礎 還記得好久好久之前就想要實現的一個功能嗎? 收起側邊欄折疊菜單,沒錯,現在才實現 因為不是父子通信,所以處理起來相對麻煩一點 可以使用狀態樹或者中間人模式 這就需要會redux了 Redux工作流: 異步就…

Go語言之路————指針、結構體、方法

Go語言之路————指針、結構體、方法 前言指針結構體聲明初始化使用組合引用結構體和指針結構體的標簽 方法例子結合結構體總結 前言 我是一名多年Java開發人員,因為工作需要現在要學習go語言,Go語言之路是一個系列,記錄著我從0開始接觸Go…

[創業之路-390]:人力資源 - 社會性生命系統的解構與重構:人的角色嬗變與組織進化論

前言: 人、財、物、信息、機制、流程、制度、方法共同組合了一個持續的消耗資源、持續的價值創造、持續面臨生存與發展、遺傳與變異的社會性生命系統。 "人"是所有社會性生命系統最最基礎性的要素,它彌漫在系統中多維立體空間的不同節點上&am…

JS執行器在UI自動化測試中的應用

前言 在進行UI自動化過程會遇到滾動條下拉、隱藏元素定位、只讀屬性元素的編輯、富文本處理等,此時可以使用JS執行器簡化我們的一些處理操作。 具體應用 JS執行器的使用步驟: 1.先寫個JS腳本,如果需要獲取操作后的值,JS腳本前面…

解析Suna:全球首款開源通用AI智能體

導語: 嘿,哥們兒,最近 AI Agent 這塊兒挺火的,有個叫 Suna 的開源項目冒出來挺快!聽說只用了 3 周就開發出來了,但功能上感覺已經能跟那個商業版的 Manus掰掰手腕了。它能幫你搞定瀏覽器自動化、管文件、爬…

模板方法模式:定義算法骨架的設計模式

模板方法模式:定義算法骨架的設計模式 一、模式核心:模板方法定義算法骨架,具體步驟延遲到子類實現 在軟件開發中,經常會遇到這樣的情況:某個算法的步驟是固定的,但具體步驟的實現可能因不同情況而有所不…

淺談Java 內存管理:棧與堆,垃圾回收

在Java編程世界里,內存管理是一項極為關鍵的技能,它就像程序運行背后的“隱形守護者”,默默影響著程序的性能與穩定性。今天,咱們就來簡單學習一下Java內存管理中的兩大核心要點:棧與堆的內存分配機制,以及…

【WebGL小知識】WebGL平臺上不同Json的比較

今天來總結一下WebGL平臺上不同Json插件的差別,話不多說直接開始。 JsonUtility JsonUtility是Unity自帶的Json解析,無需另外安裝插件。 優點: Unity自帶,兼容性好,WebGL平臺可以使用輕量級,性能較好。 …

4.22tx視頻后臺開發一面

總時長大概在一個小時,主要提問C、操作系統、計網以及數據庫等方面,最后兩個算法編程題。 一上來先介紹項目 Linux下的mybash命令處理器和內存池 mybash可以再總結歸納一下,一上來有點緊張沒有條理 內存池是用邊界標識法寫的,…

從StandardMaterial和PBRMaterial到PBRMetallicRoughnessMaterial:Babylon.js材質轉換完全指南

在現代3D圖形開發中,基于物理的渲染(PBR)已成為行業標準。本文將深入探討如何在Babylon.js中將傳統StandardMaterial和PBRMaterial轉換為PBRMetallicRoughnessMaterial,并保持視覺一致性。 為什么需要轉換? PBRMetallicRoughnessMaterial作…

UEditor文檔在Servlet項目上的應用

UEditor 是一款功能強大的富文本編輯器,在項目中應用廣泛。 Ueditor使用 引入 UEditor 下載 UEditor:從 UEditor 官方網站(ueditor 官網)下載適合項目需求的版本。解壓文件:將下載的壓縮包解壓到項目的靜態資源目錄…

ThinkPHP快速使用手冊

目錄 介紹 安裝(windows環境) 安裝Composer 安裝ThinkPHP 目錄結構 配置文件 第一個接口(Controller層) Hello World 自定義Controller 請求參數 獲取查詢參數(Get請求) 獲取指定請求參數 獲取…

面向 C# 初學者的完整教程

🧱 一、項目結構說明 你的項目大致結構如下: TaskManager/ ├── backend/ │ ├── TaskManager.Core/ // 實體類和接口 │ ├── TaskManager.Infrastructure/ // 數據庫、服務實現 │ └── TaskManager.API/ // We…

Axios 的 GET 和 POST 請求:前端開發中的 HTTP 通信

🤍 前端開發工程師、技術日更博主、已過CET6 🍨 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 🕠 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 🍚 藍橋云課簽約作者、…

【前端】如何檢查內存泄漏

在實際的場景中,如果觀察到內存持續出現峰值,并且內存消耗一直沒有減少,那可能存在內存泄漏。 使用 Chrome DevTools 來識別內存圖和一些內存泄漏,我們需要關注以下兩個方面: ● 使用性能分析器可視化內存消耗&#xf…

JavaScript的JSON處理Map的弊端

直接使用 Map 會遇到的問題及解決方案 直接使用 Map 會導致數據丟失,因為 JSON.stringify 無法序列化 Map。以下是詳細分析及解決方法: 問題復現 // 示例代碼 const myMap new Map(); myMap.set(user1, { name: Alice }); myMap.set(user2, { name: B…

【數據結構】第五彈——Stack 和 Queue

文章目錄 一. 棧(Stack)1.1 概念1.2 棧的使用1.3 棧的模擬實現1.3.1 順序表結構1.3.2 進棧 壓棧1.3.3 刪除棧頂元素1.3.4 獲取棧頂元素1.3.5 自定義異常 1.4 棧的應用場景1.改變元素序列2. 將遞歸轉化為循環3. 四道習題 1.5 概念分區 二. 隊列(Queue)2.1 概念2.2 隊列的使用2.3…