BIOS之ACPI 高级电源配置

260阅读 0评论2020-09-04 hiyachen
分类:云计算

本文来自维基百科。
高级配置与电源接口
Advanced Configuration and Power Interface),简称ACPI1997年由Intel、Microsoft、Toshiba 所共同制定提供操作系统应用程序管理所有电源管理接口。2000年8月推出 ACPI 2.0规格。2004年9月推出 ACPI 3.0规格。2009年6月16日则推出 ACPI 4.0规格。

概要

作为标准中最广为认可的部分,电源管理经历了较多的改进。
早先,Advanced Power Management模型(APM)将电源管理几乎完全分配给BIOS控制,这大大的限制了操作系统在控制电能消耗方面的功能。
当前,ACPI的电源管理特性以前只适用从便携式电脑(例如膝上型电脑)到桌面型电脑、工作站和服务器。例如,系统可能会进入极低功率消耗状态。这些就是可利用在多数桌面型电脑上的“睡眠”和“休眠”设置。睡眠和休眠状态可以通过移动鼠标,按键盘按键,从另外一台电脑接收一条信息(如果连接到了一个局域网)或者重大系统错误来唤醒系统。
现在,如果ACPI在BIOS和其他系统硬件中被实现,它就可以由操作系统所调用(触发)。

ACPI可以实现的功能包括:

Windows 98是支持ACPI的第一个微软的操作系统。FreeBSD v5.0是支持ACPI的第一个UNIX操作系统[来源请求]。Linux、NetBSD和OpenBSD都至少有一些支持ACPI。

ACPI术语

按照在本文中的定义, ACPI是一种描述硬件接口的方法,要足够抽象以允许灵活创新的硬件实现,并且足够具体以允许shrink-wrap OS code使用这个硬件接口

它是一种电脑硬件,具有支持OSPM所必备的特性,而且还具有特定的接口,这些接口的特性是由ACPI规范所指定的描述表(Description Tables)所描述的。

一个树状层次机构,在受操作系统控制的内存里面,这段内存里面包含命名对象(named objects)等。这些对象(objects)可以是数据对象,控制方法对象,总线/设备包对象等。操作系统通过从驻留在 ACPI BIOS 中的 ACPI Tables 载入载出(loading and/or unloading)定义块(definition blocks),来动态改变命名空间(namespace)的内容。在ACPI Namespace 中的所有信息都来自 Differentiated System Description Table (DSDT),DSDT 里面包含了 Differentiated Definition Block 还有一个或者多个其他的定义块(definition blocks)。

是一种由ACPI兼容的OS支持的虚拟机的伪代码(Pseudo-code),里面写有ACPI控制方法和控制对象。

一个中断控制器架构,通常多见于Intel32位架构(Intel Architecture-based 32-bit)的PC系统。APIC架构支持多处理器中断管理(中断均匀的分布在所有处理器),多I/O子系统支持,与8259A兼容,并且支持处理器内部中断(Inter-Processor Interrupt, IPI)。这个架构由直属于处理器的本地APICs(Local APICs)和在(南桥)芯片中的I/O APIC组成。

一种和AML等同的编程语言。ASL编译以后就是AML镜像(AML images)。

控制方法定义OS如何执行一个简单的硬件任务。例如,OS调用控制方法(Control Method)去读取一个高温区的温度。控制方法是用一种叫做AML的编码语言写的,AML可以被兼容ACPI的OS所解释并执行。ACPI兼容的系统必须在ACPI table中提供一组最小的控制方法。OS提供一组well-defined 的控制方法,以使ACPI table开发者能够在他们的控制方法中引用。OEM厂商可以通过,要么Including control methods in the BIOS that test configurations and respond as needed,要么为芯片组的不同修订版包含一组不同的控制方法,来使一个BIOS能够同时支持芯片组的不同修订版。

Definition Blockl以数据和控制方法(编码成AML)的形式包含关于硬件实现和配置详细信息。OEM厂商可以在ACPI Tables中提供一个或者多个Definition Blocks。有一个definition block是必须被提供:那就是Differentiated Definition Block,它描述了基本的系统。在装载Differentiated Definition Block之后,紧接着OS会把Differentiated Definition Block的内容插入到ACPI Namespace。OS可以动态的从the active ACPI Namespace插入和删除的其他definition blocks,可以包含指向Differentiated Definition Block的引用。

设备中包含的变化的数据;通常是易失性(volatile)数据。当进入或者离开特定的状态(states)的时候,设备应该忘记这些信息,在这种情况下OS软件负责保存并恢复这些信息。设备上下文(Device Context)指的是包含在设备周边的小数量的信息。同样可以看看System Context。

OEM厂商必须为ACPI兼容的OS提供一个DSDT。这个DSDT包含Differentiated Definition Block,它能提供关于基本系统的实现和配置信息。OS总是在ACPI Namespace中插入DSDT信息,当系统启动的时候,而且绝不会删除它。

它是一个在OS和固件平台之间的接口。这个接口的形式是一种包含有平台相关信息的数据表,and boot and run-time service calls that are available to the OS and loader。这些一起为启动OS提供一个标准的环境。

在读写内存中的一种结构,BIOS用它来实现固件和OS之间的信息交换(handshaking )。通过FADT(Fixed ACPI Description Table)FACS被转到兼容ACPI的OS中。FACS包含上次启动时的系统硬件签名,firmware waking vector,和Global Lock。

一个包含ACPI 硬件寄存器块(Hardware Register Block)的实现和配置详细信息的表,OS需要用这些配置信息来直接管理ACPI硬件寄存器块和DSDT的物理地址,DSDT则包含其他平台的实现和配置详细信息。 OEM厂商必须在RSDT/XSDT中提供FADF给兼容ACPI的OS。当系统启动的时候,OS则总是把已经定义好了的namespace信息(它存在于DSDT的Differentiated Definition Block中)插入到ACPI Namespace,并且OS绝不会删除它。

ACPI接口提供的一组特征。ACPI规范限制硬件编程模型(hardware programming model)在哪产生还有如何产生的。所有的Fixed Features,如果被使用了,会按照本片规范中的描述进行实现,以使OSPM能够直接访问Fixed Features寄存器(fixed feature registers)。

一组事件,当Fixed Feature寄存器中的一对状态和事件位(event bits)被在同一时间设定时,这组事件会在ACPI接口处发生。当一个Fixed Feature时间发生时,系统控制中断(SCI,system control interrupt)is raised。对于ACPI Fixed Feature Events来说OSPM(or an ACPI-aware driver)扮演事件的处理者。

一组在fixed feature register space中的硬件寄存器,fixed feature register space在系统I/O地址空间的特殊的地址里。ACPI为fixed features定义了寄存器块(register blocks)(每个寄存器块从FADT那里得到一个单独的指针)

The general-purpose event registers contain the event programming model for generic features. All general-purpose events generate SCIs.

Global System States适用于整个系统,而且对于用户是可见的。各种不同的Global System States在ACPI规范中是从G0标记到G3的。

在ACPI硬件寄存器中的一些没有被使用的位(bits),在ACPI规范中会指定这些位是“ignored”的。在读的时候,软件会忽略ACPI硬件寄存器中的Ignored Bits位(而不去读取它),写的时候,会保护Ignored Bits(不去写这写位)。

一种对于电脑的一般描述术语,这种电脑的处理器架构符合Intel处理器家族基于Intel架构指令集(Intel Architecture instruction set)的定义,并且有工业标准(industry-standard)PC的结构。

一个输入输出高级可编程中断控制器,用来从设备传递中断给处理器里面的本地APIC(local APIC)。

An Input/Output Streamlined Advanced Programmable Interrupt Controller用来从设备传递中断给处理器里面的本地APIC(local APIC)。 应用于安腾处理器(Itanium)。 和APIC的不同可以看看Intel? Itanium? Processor Family Interrupt Architecture Guide ,PDF文档的最后一章会讲到不同点。

这是一种电脑状态,在这个电脑状态下电源管理策略是由平台硬件/固件决定的。在如今的系统中,传统电源管理特性被用来支持安装有传统OS的电脑中的电源管理,这种传统OS并不支持OS直接管理电源架构(OS-directed power management architecture)。

没有ACPI或者OSPM电源管理支持的电脑系统。

An OS that is not aware of and does not direct the power management functions of the system. Included in this category are operating systems with APM 1.x support. 这种OS不知道同时也不能直接管理系统电源。包含在这类中的是支持APM 1.x 的操作系统。

接收来自I/O APIC的中断。

接收来自I/O SAPIC的中断。关于SAPIC,请看“I/O SAPIC”。

它被用在支持APIC和SAPIC的系统上,以描述APIC的实现。Following the MADT is a list of APIC/SAPIC structures that declare the APIC/SAPIC features of the machine.

ACPI Namespace的节点就是objects,这些objects被OS用system definition tables中的信息插入tree。这些objects可以是数据对象(data objects),包对象(package objects),控制方法对象(control method objects)等。包对象refer to其他对象(objects)。对象同样拥有类型(type),大小(size),和相对名称(relative name)。

ACPI Namespace的一部分。有一组规则for naming objects。

电源(和系统)管理的一个模型,在其中OS扮演重要的角色,使用全局信息为手边的任务优化系统行为(system behavior)。

一组objects。

用户按的按钮或者其他有触点的开关(switch contact)设备,通过它可以把系统从睡眠或者soft off状态切换到工作状态,还可以给OS发送信号使OS从睡眠或者soft off状态恢复到工作状态。

一种最小化系统电源消耗的软硬件机制,管理系统热量限制,延长系统电池使用时间(battery life)。电源管理在系统速度,噪音,电池使用时间,处理器速度,还有电源消耗之间取得平衡。一些system functions,比如appliance (for example, answering machine, furnace control) operations,需要电源管理。

设备需要的资源(比如power planes和clock sources),设备需要在给定的电源状态下对这些资源进行操作。

由两个寄存器块组成(它有两个指向两个不同寄存器块的指针)。在寄存器分组(register grouping)内部的固定位可以被在两个寄存器块(register blocks)之间拆分。这就允许了在寄存器分组内部的位可以被在两个芯片(chips)之间拆分。

在ACPI硬件寄存器中有一些没有被使用的位,在ACPI规范中被称为保留位。为了未来能够扩展,硬件寄存器保留位总是被归零,并且写入的数据不会造成其他的影响。OSPM的实现必须往所有使能和状态寄存器的保留位写“0”,同样还要往控制寄存器(control registers)的preserve bits写“0”

兼容ACPI的系统必须在系统低地址空间(system’s low address space)提供一个RSDP。这种结构的唯一目的就是提供RSDT和XSDT的物理地址。

signature为RSDT的table,它跟随在一组指向其他系统描述表(system description tables)的物理指针之后。OS通过跟随RSDP结构中的指针来定位RSDT。

状态

全局状态(Global System States)

ACPI规范定义了一台兼容ACPI的电脑系统可以有以下七个状态(所谓的全局状态):

此外,当操作系统在不支持ACPI的情况下运行,这种状态被定义为Legacy。在这个状态下,硬件和电源不是通过ACPI来管理的,实际上已经禁用了ACPI。

(参考资料:ACPI规范3.0b版的链接在下面 External links, 查看chapter 7.3.4)

设备电源状态(Device Power State)

设备状态对于用户来说往往是不可见的,比如当一个设备已经没有电源供应的时候,可能整个系统还是在工作状态,应该是一个很好的例子吧。 设备状态是与设备相关的状态,他们的定义和以下四个因素有关:

电源消耗(Power consumption),设备用电量的多少。

设备状态/环境(Device context),设备(从D0进入其他状态的时候)保留了多少原来的状态/环境。操作系统负责保存丢失的设备状态/环境。

设备驱动(Device driver),让设备恢复到D0,驱动程序应该做什么(或者做多少)。

设备状态有一下几个:


设备状态总结
设备状态 电源消耗 保留设备状态信息 驱动程序恢复
D1 D0>D1>D2>D3 >D2
D2 D0>D1>D2>D3 >D1
D3 - Off 0 没有保留 完全初始化并且装载

处理器电源状态(Processor Power State)

处理器电源状态(C0到C3状态,后面还有Cn)是指在G0状态下(只对G0状态有效,在其他状态下不予讨论)的处理器电能消耗和温度管理的状态。

只有C0状态下CPU才会执行指令,C1到Cn状态下CPU都处于各种不同程度的睡眠状态(Sleeping States),在这睡眠状态下,CPU都有一个恢复到C0的唤醒时间latency),它是和CPU的电能消耗有关的,通常,用电能量越小意味着得花更长的时间恢复到C0状态,也就是唤醒时间越长。

当在C0状态下时,ACPI允许通过定义节流阀(throttling)过程,和通过进去多性能状态(multiple performance states,P-states)来改变处理器的性能。

各个状态的定义如下所示:

这个状态是不被软件所见的。

设备和处理器性能状态(Device and Processor Performance States)

设备和处理器性能状态(Px状态)是在C0(对于处理器)和D0(对于设备)下定义的电源消耗和能力的状态。性能状态允许OSPM在性能和能源消耗之间取得平衡。P0是最高性能状态,从P1到Pn是连续的低性能状态,最高限制n为16。

这个状态在Intel处理器中称为SpeedStep,在AMD处理器中称为PowerNow!或Cool'n'Quiet,在VIA处理器中称为PowerSaver。

参考资料

  1.   ^ Aram Kananov ? How To: ACPI Suspend to RAM on Dell Latitude D800 with Fedora Core 3
上一篇:高性能网络 SR-IOV机制--VF与PF的通信
下一篇: BIOS电源管理ACPI的D3cold-D3hot