Linux电源管理(2)_Generic PM之基本概念和软件架构

来源:互联网 发布:毕业论文致谢 知乎 编辑:程序博客网 时间:2024/04/30 05:46


转自http://www.wowotech.net/pm_subsystem/generic_pm_architecture.html

作者:wowo 发布于:2014-5-13 19:24 分类:电源管理子系统


1. 前言

 Generic PM指常规的电源管理手段,包括关机(Power off)、待机(Standby or Hibernate)、重启(Reboot)等。

开始之前,先解释一下这些词汇的意义。

Shutdown是关机的意思,同时意味着不再使用计算机

Restart是重启系统的意思,重启的过程就不再使用计算机

Hibernate,可翻译为冬眠。在不需要使用计算机时将它当前的所有现场(执行的程序、显示器显示的图像、正在播放的声音等)保存到一些断电不会丢失的存储器中(如硬盘中),然后将计算机关闭。重新开启后,系统会从存储器中将关闭前的现场读取出来并恢复,此时从使用者的角度看,计算机就像没有关闭过一样。   

Sleep,睡眠。想象一下“睡眠”和“冬眠”的区别?“睡眠”睡的轻,随时都可以醒来。在计算机中,Hibernate需要把现场保存到断电不丢失的存储器中,并在醒来的时候读回来,这些可能需要较长的时间(因为断电不丢失存储器的访问速度都比较慢)。如果想快点,就把现场保存在内存中就可以了,这就是Sleep。不过这是要付出代价的,内存要保持供电,这就要消耗能量,鱼与熊掌不可兼得啊!

AGeneric PM是针对的整个系统,根据系统的状态进行调整,而Runtime PM 针对的是系统中的单个设备,根据设备的状态进行调整,具有较高的独立性。uto Sleep,可以设置系统“处于Inactive状态多久后,自动进入Sleep状态”。为了避免这无谓的消耗,可以让系统在符合条件时(如20分钟不使用),自动睡下去。

Auto put display to Sleep,原理类似,只是操作的对象是Display(显示器等)。

 

注:

不知读者有没有注意到,蜗蜗在解释上面的词汇时,一直在用红色字体强调“计算机不再使用”。这就是Generic PM和Runtime PM的本质区别,即在使用者的主观意愿上,是否需要暂停使用计算机(哪怕短短的一段时间)。 这也是Generic PM在传统的计算机操作系统中被广泛使用的原因,因为那个时候对计算机的使用大多是主动方式。而对当前的移动互联来说,就非常不合时宜了,因为人们需要移动设备实时在线、实时接收被动事件(如来电),也就不可能主观地暂停使用(哪怕短短的一段时间)。这种最终需求的差异,会导致在软件设计上有很大的差别,正因为如此,Runtime PM的出现和尽快成熟,才显得格外重要。


Generic PM是针对的整个系统,根据系统的状态进行调整;而Runtime PM 针对的是系统中的单个设备,根据设备的状态进行调整,在需要使用的时候打开,不需要使用的时候关闭,具有较高的独立性。

2. 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,这也是电源管理驱动开发需要涉及到的内容(图中红色边框的模块)。

0 0
原创粉丝点击