博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Advanced Configuration and Power Management Interface(ACPI)学习总结
阅读量:5220 次
发布时间:2019-06-14

本文共 2814 字,大约阅读时间需要 9 分钟。

ACPI简单说由两部分组成,ACPI table及ASL。

ACPI table中主要存着一些硬件会用到的资源。ACPI table中的dsdt包含了所有ASL code存放的位置,OS借此可以找到ASL code。

ASL,全称ACPI source language.是专门用来编译ACPI中的一些东西。ASL经过机器编译后会变为AML,然后由OS来执行。ASL将平台上的设备建立成ACPInamespace,同时他还提供有关这些设备的操作方法。

 

ACPI是一种规范,它并不是单纯硬件或软件的规范。ACPI是一种接口规范由硬件和软件组成。

ACPI包含三个重要的runtime元件:

1.ACPI Tables

ACPI System Description Tables描述了硬件上的接口,这其中包含了一些固定的寄存器的地址。另外ACPI Tables中包含了一些OS可以直接执行的AML code,OS可以通过interpreter来执行这些code。

2.ACPI Registers

包含在硬件的接口中,由ACPI System Description Tables描述。

3.ACPI BIOS

ACPI system Firmware,是一个符合ACPI规范的BIOS。ACPI System Description Tables由 ACPI BIOS提供。

 

为了支持ACPI,OS需要支持一些功能,加粗项为OS至少必须支持的功能

·支持系统地址映射报告接口

·可以需找并使用ACPI table

·可以解释AML

·可以枚举并适配ACPI namespace中描述的主板设备

·接口带有power management timer功能

·接口带有real-time clock wake alarm功能

·可以在legacy下进入ACPI mode

·可以执行设备电源管理规范

·可以执行电源资源管理

·可以处理电源状态

·可以控制处理器和设备的状态

·支持ACPI热模式

·支持ACPI事件处理模式,比如SCI中断等等

·支持Global Lock的获取与释放

·可以使用reset register来重启系统

·可以提供API来影响电源管理规范

·可以执行driver来支持ACPI定义的设备

·可以使用API来支持系统指针

·支持所有系统状态S1-S5

·支持OS直接电源管理

 

Global System State

系统的电源状态可以分为G1、G2、G3、G5。

G1 Sleeping

系统在该状态下消耗很少的电量,用户指令将不执行,系统也会关闭。工作内容被存在硬件中,系统可以被唤醒且不用被重启。这个阶段拆机是不安全的。

G3 Mechanical Off

切断电源,一团废铁,适合拆机。

G2/S5 Soft Off

系统消耗很少的电量。需要重启被唤醒,内容不会被存在硬件中。拆机同样不安全。

G0 Working

正常工作状态。

还有一种S4 Non-Voaltile Sleep,它在特殊的状态下发生。

直观示意如图所示:

 

※这些状态之间的切换是一句以下六个方面:

a) 应用程序还在执行吗?

b) 外部事件与应用程序的响应时间为多长?过长的话可能就没在使用了。

c) 电源消耗量如何?

d) 重启OS是否需要回到G0?

e) 你拆完电脑后是否还想存活?

f) 电源状态是否会因电气特性而改变?

 

 

通常系统在G0和G1之间切换较多,在G0阶段又要分为两个部分来处理电源管理的情况,分别为Device和Processor。

Device Power State

下面先学习一下Device Power State。Device Power State分为5种,D3 (Off)

、D3hot 、D2、D1、D0。他们评判为哪种状态的主要依据是:

(1)       电源消耗情况

(2)       设备内容

(3)       设备驱动

(4)       存储时间

下面详细列出每种状态特点:

D3 (Off)

完全移除设备的供电,设备内容将会丢失。当重新供电时,OS软件将会重新初始化该设备。设备进入这种状态后将会有最长的重新存储时间,所有类型的设备都可以被定义为这种状态。

D3hot

这种状态是为了保存很多的电量和设备数据,处于这种状态的设备将被软件列出。一旦设备内容丢失,设备会被重新初始化并转变成D0,所有类型的设备都可以被定义为这种状态。 

D2

这种状态是为了保存很多的电量和少量的数据,相比D0,D1。很多设备不会被定义为D2。

D1

这种状态是为了保存很多的电量和一些多于D2的数据。很多设备不会被定义为D1。

D0 (Fully-On)

设备完全活跃,耗电量最高。

直观示意如图所示:

 

Processor Power State

处理器在G0阶段的电源消耗状态。分为C0,C1,C2,C3.

C0 Processor Power State

处理器正常执行命令

C1 Processor Power State

这种处理器状态拥有最低的Latency。硬件的Latency只保留足够OS可以正常执行软件。没有软件会显示这种状态

C2 Processor Power State

这种状态是C1的改善。处理器最差的Latency被使用时,系统会决定何时用C2代替C1。没有软件会显示这种状态。

C3 Processor Power State

C1.C2的改善。处理器最差的Latency被使用时,OS会决定是否进入C3。在C3状态中处理器负责的cache会忽略掉所有snoop,所以OS要自己负责。

 

有关sleep的状态之前有学习过,今天做了复习。

 

Device and Processor Performance State

分为P0,P1,PN。分别表示Performance能力与耗能的大中小。

 

系统通过SDT结构来决定他本身支持的省电层级。

Root System Description Pointer位于memory地址空间中,RSDP structure table中包含Extended System Description Table的地址。XSDT负责提供个给OS其他的SDT表的数据和地址。通常它指向第一个表是Fixed ACPI Description table,FADT中包含了描述ACPI hardware特点的信息。FADT总是会参考Differentiated System Description Table,DSDT中描述了多种类型系统的特点。

       |XSDT-----àSSDT

RSDT--->|  \----à|FADT----àDSDT

       |RSDT--->|

               |SSDT

 

转载于:https://www.cnblogs.com/wudibuzaijia/p/8535582.html

你可能感兴趣的文章
常用到的多种锁(随时可能修改)
查看>>
用UL标签+CSS实现的柱状图
查看>>
mfc Edit控件属性
查看>>
Linq使用Join/在Razor中两次反射取属性值
查看>>
[Linux]PHP-FPM与NGINX的两种通讯方式
查看>>
Java实现二分查找
查看>>
优秀员工一定要升职吗
查看>>
[LintCode] 462 Total Occurrence of Target
查看>>
springboot---redis缓存的使用
查看>>
架构图-模型
查看>>
sql常见面试题
查看>>
jQuery总结第一天
查看>>
Java -- Swing 组件使用
查看>>
Software--Architecture--DesignPattern IoC, Factory Method, Source Locator
查看>>
poj1936---subsequence(判断子串)
查看>>
黑马程序员_Java基础枚举类型
查看>>
[ python ] 练习作业 - 2
查看>>
一位90后程序员的自述:如何从年薪3w到30w!
查看>>
在.net core上使用Entity FramWork(Db first)
查看>>
System.Net.WebException: 无法显示错误消息,原因是无法找到包含此错误消息的可选资源程序集...
查看>>