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.mzph.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…