============================================================================
高级配置与电源接口
维基百科,自由的百科全书
高级配置与电源接口(Advanced Configuration and Power Interface),简称ACPI,1997年由Intel、Microsoft、Toshiba 所共同制定提供操作系统应用程序管理所有电源管理接口。2000年8月推出 ACPI 2.0规格。2004年9月推出 ACPI 3.0规格。2009年6月16日则推出 ACPI 4.0规格。
目录
[隐藏]
1 概要
2 ACPI术语
3 状态
3.1 全局状态(Global System States)
3.2 设备电源状态(Device Power State)
3.3 处理器电源状态(Processor Power State)
3.4 设备和处理器性能状态(Device and Processor Performance States)
4 参考资料
[编辑] 概要
作为标准中最广为认可的部分,电源管理经历了较多的改进。
早先,Advanced Power Management模型(APM)将电源管理几乎完全分配给BIOS控制,这大大的限制了操作系统在控制电能消耗方面的功能。
当前,ACPI的电源管理特性以前只适用从便携式电脑(例如膝上型电脑)到桌面型电脑、工作站和服务器。例如,系统可能会进入极低功率消耗状态。这些就是可利用在多数桌面型电脑上的“睡眠”和“休眠”设置。睡眠和休眠状态可以通过移动鼠标,按键盘按键,从另外一台电脑接收一条信息(如果连接到了一个局域网)或者重大系统错误来唤醒系统。
现在,如果ACPI在BIOS和其他系统硬件中被实现,它就可以由操作系统所调用(触发)。
ACPI可以实现的功能包括:
系统电源管理(System power management)
设备电源管理(Device power management)
处理器电源管理(Processor power management)
设备和处理器性能管理(Device and processor performance management)
配置/即插即用(Configuration/Plug and Play)
系统事件(System Event)
电池管理(Battery management)
温度管理(Thermal management)
嵌入式控制器(Embedded Controller)
SMBus控制器(SMBus Controller)
Windows 98是支持ACPI的第一个微软的操作系统。FreeBSD v5.0是支持ACPI的第一个UNIX操作系统[来源请求]。Linux、NetBSD和OpenBSD都至少有一些支持ACPI。
[编辑] ACPI术语
高级配置电源管理接口(Advanced Configuration and Power Interface (ACPI))
按照在本文中的定义, ACPI是一种描述硬件接口的方法,要足够抽象以允许灵活创新的硬件实现,并且足够具体以允许shrink-wrap OS code使用这个硬件接口
ACPI硬件(ACPI Hardware)
它是一种电脑硬件,具有支持OSPM所必备的特性,而且还具有特定的接口,这些接口的特性是由ACPI规范所指定的描述表(Description Tables)所描述的。
ACPI命名空间(ACPI Namespace)
一个树状层次机构,在受操作系统控制的内存里面,这段内存里面包含命名对象(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机器语言(ACPI Machine Language (AML))
是一种由ACPI兼容的OS支持的虚拟机的伪代码(Pseudo-code),里面写有ACPI控制方法和控制对象。
高级可编程中断控制器(Advanced Programmable Interrupt Controller (APIC))
一个中断控制器架构,通常多见于Intel32位架构(Intel Architecture-based 32-bit)的PC系统。APIC架构支持多处理器中断管理(中断均匀的分布在所有处理器),多I/O子系统支持,与8259A兼容,并且支持处理器内部中断(Inter-Processor Interrupt, IPI)。这个架构由直属于处理器的本地APICs(Local APICs)和在(南桥)芯片中的I/O APIC组成。
ACPI源语言(ACPI Source Language (ASL))
一种和AML等同的编程语言。ASL编译以后就是AML镜像(AML images)。
控制方法(Control Method)
控制方法定义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能够同时支持芯片组的不同修订版。
中央处理器或者处理器(Central Processing Unit (CPU) or Processor)
定义块(Definition Block)
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的引用。
设备(Device)
设备上下文(Device Context)
设备中包含的变化的数据;通常是易失性(volatile)数据。当进入或者离开特定的状态(states)的时候,设备应该忘记这些信息,在这种情况下OS软件负责保存并恢复这些信息。设备上下文(Device Context)指的是包含在设备周边的小数量的信息。同样可以看看System Context。
区分系统描述表(Differentiated System Description Table (DSDT))
OEM厂商必须为ACPI兼容的OS提供一个DSDT。这个DSDT包含Differentiated Definition Block,它能提供关于基本系统的实现和配置信息。OS总是在ACPI Namespace中插入DSDT信息,当系统启动的时候,而且绝不会删除它。
可扩展固件接口(Extensible Firmware Interface (EFI))
它是一个在OS和固件平台之间的接口。这个接口的形式是一种包含有平台相关信息的数据表,and boot and run-time service calls that are available to the OS and loader。这些一起为启动OS提供一个标准的环境。
嵌入式控制器(Embedded Controller)
嵌入式控制器接口(Embedded Controller Interface)
固件ACPI控制结构(Firmware ACPI Control Structure (FACS))
在读写内存中的一种结构,BIOS用它来实现固件和OS之间的信息交换(handshaking )。通过FADT(Fixed ACPI Description Table)FACS被转到兼容ACPI的OS中。FACS包含上次启动时的系统硬件签名,firmware waking vector,和Global Lock。
固定ACPI描述表(Fixed ACPI Description Table (FADT))
一个包含ACPI 硬件寄存器块(Hardware Register Block)的实现和配置详细信息的表,OS需要用这些配置信息来直接管理ACPI硬件寄存器块和DSDT的物理地址,DSDT则包含其他平台的实现和配置详细信息。 OEM厂商必须在RSDT/XSDT中提供FADF给兼容ACPI的OS。当系统启动的时候,OS则总是把已经定义好了的namespace信息(它存在于DSDT的Differentiated Definition Block中)插入到ACPI Namespace,并且OS绝不会删除它。
固定特征(Fixed Features)
ACPI接口提供的一组特征。ACPI规范限制硬件编程模型(hardware programming model)在哪产生还有如何产生的。所有的Fixed Features,如果被使用了,会按照本片规范中的描述进行实现,以使OSPM能够直接访问Fixed Features寄存器(fixed feature registers)。
固定特征事件(Fixed Feature Events)
一组事件,当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 Registers)
一组在fixed feature register space中的硬件寄存器,fixed feature register space在系统I/O地址空间的特殊的地址里。ACPI为fixed features定义了寄存器块(register blocks)(每个寄存器块从FADT那里得到一个单独的指针)
一般目的事件寄存器(General-Purpose Event Registers)
The general-purpose event registers contain the event programming model for generic features. All general-purpose events generate SCIs.
一般特征(Generic Feature)
全局系统状态(Global System States)
Global System States适用于整个系统,而且对于用户是可见的。各种不同的Global System States在ACPI规范中是从G0标记到G3的。
省略位(Ignored Bits)
在ACPI硬件寄存器中的一些没有被使用的位(bits),在ACPI规范中会指定这些位是“ignored”的。在读的时候,软件会忽略ACPI硬件寄存器中的Ignored Bits位(而不去读取它),写的时候,会保护Ignored Bits(不去写这写位)。
Intel个人电脑架构(Intel Architecture-Personal Computer (IA-PC))
一种对于电脑的一般描述术语,这种电脑的处理器架构符合Intel处理器家族基于Intel架构指令集(Intel Architecture instruction set)的定义,并且有工业标准(industry-standard)PC的结构。
I/O APIC(Input/Output Advanced Programmable Interrupt Controller)
一个输入输出高级可编程中断控制器,用来从设备传递中断给处理器里面的本地APIC(local APIC)。
I/O SAPIC
An Input/Output Streamlined Advanced Programmable Interrupt Controller用来从设备传递中断给处理器里面的本地APIC(local APIC)。 应用于安腾处理器(Itanium)。 和APIC的不同可以看看Intel® Itanium® Processor Family Interrupt Architecture Guide ,PDF文档的最后一章会讲到不同点。
老式的(Legacy)
这是一种电脑状态,在这个电脑状态下电源管理策略是由平台硬件/固件决定的。在如今的系统中,传统电源管理特性被用来支持安装有传统OS的电脑中的电源管理,这种传统OS并不支持OS直接管理电源架构(OS-directed power management architecture)。
老式的硬件(Legacy Hardware)
没有ACPI或者OSPM电源管理支持的电脑系统。
老式的操作系统(Legacy OS)
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 的操作系统。
本地APIC(Local APIC)
接收来自I/O APIC的中断。
本地SAPIC(Local SAPIC)
接收来自I/O SAPIC的中断。关于SAPIC,请看“I/O SAPIC”。
复合APIC描述表(Multiple APIC Description Table (MADT))
它被用在支持APIC和SAPIC的系统上,以描述APIC的实现。Following the MADT is a list of APIC/SAPIC structures that declare the APIC/SAPIC features of the machine.
对象(Object)
ACPI Namespace的节点就是objects,这些objects被OS用system definition tables中的信息插入tree。这些objects可以是数据对象(data objects),包对象(package objects),控制方法对象(control method objects)等。包对象refer to其他对象(objects)。对象同样拥有类型(type),大小(size),和相对名称(relative name)。
对象名(Object name)
ACPI Namespace的一部分。有一组规则for naming objects。
操作系统直接电源管理(Operating System-directed Power Management (OSPM))
电源(和系统)管理的一个模型,在其中OS扮演重要的角色,使用全局信息为手边的任务优化系统行为(system behavior)。
包(Package)
一组objects。
电源开关(Power Button)
用户按的按钮或者其他有触点的开关(switch contact)设备,通过它可以把系统从睡眠或者soft off状态切换到工作状态,还可以给OS发送信号使OS从睡眠或者soft off状态恢复到工作状态。
电源管理(Power Management)
一种最小化系统电源消耗的软硬件机制,管理系统热量限制,延长系统电池使用时间(battery life)。电源管理在系统速度,噪音,电池使用时间,处理器速度,还有电源消耗之间取得平衡。一些system functions,比如appliance (for example, answering machine, furnace control) operations,需要电源管理。
电源资源(Power Resources)
设备需要的资源(比如power planes和clock sources),设备需要在给定的电源状态下对这些资源进行操作。
电源来源(Power Sources)
寄存器分组(Register Grouping)
由两个寄存器块组成(它有两个指向两个不同寄存器块的指针)。在寄存器分组(register grouping)内部的固定位可以被在两个寄存器块(register blocks)之间拆分。这就允许了在寄存器分组内部的位可以被在两个芯片(chips)之间拆分。
保留位(Reserved Bits)
在ACPI硬件寄存器中有一些没有被使用的位,在ACPI规范中被称为保留位。为了未来能够扩展,硬件寄存器保留位总是被归零,并且写入的数据不会造成其他的影响。OSPM的实现必须往所有使能和状态寄存器的保留位写“0”,同样还要往控制寄存器(control registers)的preserve bits写“0”
根系统描述指针(Root System Description Pointer (RSDP))
兼容ACPI的系统必须在系统低地址空间(system’s low address space)提供一个RSDP。这种结构的唯一目的就是提供RSDT和XSDT的物理地址。
根系统描述表(Root System Description Table (RSDT))
signature为RSDT的table,它跟随在一组指向其他系统描述表(system description tables)的物理指针之后。OS通过跟随RSDP结构中的指针来定位RSDT。
[编辑] 状态
[编辑] 全局状态(Global System States)
ACPI规范定义了一台兼容ACPI的电脑系统可以有以下七个状态(所谓的全局状态):
'G0(S0)正常工作状态:电脑的正常工作状态-操作系统和应用程序都在运行。CPU(s)执行指令。 在这个状态下(即没有进入G1睡眠),CPU和像硬盘、DVD驱动器等等这些的设备可以一再的进入和从低能源状态回来,叫做C0-Cn和D0-D3。(例如膝上型电脑,当使用电池运行的时候通常关掉所有当前未使用的设备;一些桌面型电脑也这么做来减少噪声。)
G1 睡眠 细分为从S1到S4这四种状态。系统从这几种状态被唤醒到G0运行(唤醒等待时间)所需的时间最短的是S1,较短的是S2和S3,不太短的是S4。
S1:最耗电的睡眠模式。处理器的所有寄存器被刷新,并且CPU停止执行指令。CPU和内存的电源一直维持着,一些设备如果没有被使用那么就会被停止供电。这种模式通常指上电待机或者简单叫做POS,特别在BIOS设置界面上。一些新式的电脑不再支持S1;老式的电脑对S1支持可能要比S3好。
S2:一个比S1更深的睡眠状态,不过已经不给CPU供电了;然而,通常这种模式并不被采用。
S3 :在BIOS中叫做"挂到内存" (Suspend to RAM/STR),在Windows XP以后的Windows版本和一些Linux发行版中叫做"待机(Standby)", 在Windows Vista和Mac OS X则叫做"睡眠(Sleep)",虽然ACPI规范仅仅提到术语"S3"和"睡眠(Sleep)"。在这个状态下,主存储器(RAM)仍然有电源供给,尽管它也是几乎唯一的有电源供给的原件。因为操作系统、所有应用程序和被打开的文档等等的状态都是保存在主存储器中,用户可以把工作恢复到正好上次他们保持的状态-电脑从S3状态回来时主存储器的内容和它进入S3状态时候的内容是相同象的。(规范中提到了S3和S2是相当类似的,只有更多的组件在S3状态下会被关掉电源。) 相比较S4来说S3有两个好处;电脑恢复的过程比重启要快,第二,如果任何正在运行的应用程序(被打开的文档等等)有私有信息在里面,这些信息是不会被写到硬盘上的。然而,在系统不能被唤醒比如遇到了电源故障的时候, 高速缓冲存储器可能会被flushed来防止数据毁坏。
S4: 在Windows中叫休眠, 在Mac OS X中叫作安全睡眠,也称为挂到硬盘,虽然ACPI规范中只提到了一个术语S4(main article:Hibernate(OS feature))。在这个状态下,所有主存储器的内容被储存在非挥发性存储器,例如硬盘,保护操作系统当前的状态,包括所有应用程序,打开的文档等.这意味着从S4恢复后,用户可以恢复到原本的工作状态,采用的方法和S3是一样的。S4和S3之间的差异是,除了把主存储器中的内容移进移出所消耗的时间以外,在S3状态下的时候如果一旦停电了,所有主存储器上的数据就会丢失,包括所有的没有保存的文档,而在S4状态下则没有影响.S4和其他的S状态有很大不同,事实上更类似G2Soft Off状态和G3 Mechanical Off状态,而不是S1-S3.在S4状态下的系统同样可进入G3(Mechanical Off)状态,并且保留S4时候的状态信息.所以它可以恢复到以前的运行状态在关掉电源之后.
G2(S5)Soft Off--G2,S5,和Soft Off都是相同的叫法。G2和G3Mechanical Off几乎是相同的,但有些部件仍然带电,使电脑仍然可以被键盘、时钟、modem(电话唤醒)、LAN(网络唤醒)还有USB设备所唤醒。[1]在启动系统从G2恢复到G0正常工作模式的过程中,无论是G3 Mechanical Off还是G2都得运行启动程序来启动操作系统。
此外,当操作系统在不支持ACPI的情况下运行,这种状态被定义为Legacy。在这个状态下,硬件和电源不是通过ACPI来管理的,实际上已经禁用了ACPI。
(参考资料:ACPI规范3.0b版的链接在下面 External links, 查看chapter 7.3.4)
[编辑] 设备电源状态(Device Power State)
设备状态对于用户来说往往是不可见的,比如当一个设备已经没有电源供应的时候,可能整个系统还是在工作状态,光驱应该是一个很好的例子吧。 设备状态是与设备相关的状态,他们的定义和以下四个因素有关:
电源消耗(Power consumption),设备用电量的多少。
设备状态/环境(Device context),设备(从D0进入其他状态的时候)保留了多少原来的状态/环境。操作系统负责保存丢失的设备状态/环境。
设备驱动(Device driver),让设备恢复到D0,驱动程序应该做什么(或者做多少)。
设备状态有一下几个:
D0 Fully-On 是(正常)工作状态,电源消耗量最多,设备是完全被相应的,并且设备保留了全部的设备状态/环境。
D1 和 D2是中间电源状态,它的定义根据设备的不同而有所不同。
D3 Off是设备电源关闭所以对总线来说是没有相应的。设备状态/环境全部丢失,操作系统会重新初始化设备当重新给它加电的时候。这个状态下的设备恢复到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)来改变处理器的性能。
各个状态的定义如下所示:
C0是正常工作状态,当处理器处于这种状态下的时候,它能正常处理指令。
C1(通常称为Halt)拥有最短的唤醒时间,这个延时必须短到操作系统软件使用CPU的时候不会考虑到唤醒时间方面的因素。一些处理器,比如说奔腾4(Pentium 4),支持C1E(Enhanced C1 state)这样的低电能消耗技术。
这个状态是不被软件所见的。
C2 (通常称为Stop-Clock),这个状态下处理器维持着所有的软件所见的状态信息,但是需要更长的时间来恢复到C0。这个状态下情况最坏的硬件唤醒时间是由ACPI固件提供,并且操作系统软件可以利用这些信息来决定是采用C1而不是C2状态,C2比C1更省电。
C3 (通常称为Sleep),相比C1和C2更省电了。这个状态下情况最坏的硬件唤醒时间是由ACPI固件提供,并且操作系统软件可以利用这些信息来决定是采用C2而不是C3状态,当处于C3状态时,处理器缓存保留了所有的状态信息,但是忽略所有的侦听。操作系统软件负责保证缓存数据的一致性。
[编辑] 设备和处理器性能状态(Device and Processor Performance States)
设备和处理器性能状态(Px状态)是在C0(对于处理器)和D0(对于设备)下定义的电源消耗和能力的状态。性能状态允许OSPM在性能和能源消耗之间取得平衡。P0是最高性能状态,从P1到Pn是连续的低性能状态,最高限制n为16。
P0状态,使用最大性能并且消耗的电能最多。
P1状态,性能比前者要小,但是消耗电能也相应少一些。
Pn状态,n是的大小是依赖于处理器和设备的,处理器和设备可以定一个任意的不超过16的数字。
这个状态在Intel处理器中称为SpeedStep,在AMD处理器中称为PowerNow!或Cool'n'Quiet,在VIA处理器中称为PowerSaver。
[编辑] 参考资料
^ Aram Kananov » How To: ACPI Suspend to RAM on Dell Latitude D800 with Fedora Core 3
ACPI Spec 3.0b