1.ACPI全称
ACPI全称Advanced Configuration and Power Interface,即“高级配置和电源接口”。主要在X86平台(ARM等架构也可)上实现电源管理相关的功能。
2.ACPI提出背景
ACPI是在20世纪90年代中期,由Intel,Microsoft,东芝以及Phoenix合作开发的一种标准。
ACPI的提出是为了规范电源管理和设备的发现与配置。在ACPI提出之前,电源管理主要通过操作系统调用BIOS接口来实现。操作系统下的设备的发现,驱动的加载以及设备和驱动的匹配,也都是由BIOS来完成。设备的位置在BIOS中直接编码,因为平台本身无法进行设备的枚举。
但是,以上的解决方案存在很多的局限。
1. 操作系统中运行的应用可能会受BIOS的影响。因为BIOS中会进行电源管理的相关设定和配置,这些配置会导致操作系统在某些时刻意外休眠。
2. 基于BIOS的电源管理接口实现无法跨平台,不具备通用性。这也就意味着,需要对每一个平台都进行相关配置。
3. 在BIOS中提前进行的设定,可能会在插入不同设备的时候,引起设备之间的冲突,例如:设备无法被发现,设备崩溃或者设备异常等等情况。
ACPI标准的提出,正是为了解决上述局限。
3.ACPI是什么
ACPI是一个与架构无关的,用来实现电源管理与配置的框架。这个框架是存在于操作系统中的一个子系统。这个子系统建立了一个硬件寄存器集合(Hardware Register Set),来定义电源状态(睡眠、休眠、唤醒等)。硬件寄存器集合(Hardware Register Set)在专用硬件和通用硬件上均可进行相关操作。
ACPI子系统是位于操作系统 和 系统固件(BIOS)中间的一个接口层(箭头表示数据流向)
-
ACPI架构无关指的是:ACPI可以在X86以外的架构运行,如ARM服务器多用ACPI进行管理。
4.ACPI结构
ACPI定义了两种数据结构类型(Data Table 和 Definition Block)。这两种类型作为BIOS和OS之间的主要通信机制,可以在BIOS和OS之间共享。
Data Table存储了原始数据(Raw data),这些原始数据由设备驱动程序使用。Definition Block由可以被解释器执行的字节码(Byte Code)构成。
根据ACPI标准定义的实现流:
ACPI将会提供一个AML解释器,该AML解释器由操作系统主导。AML解释器将会提取Definition Block中的Byte Code,并将其作为可枚举的对象。这些可枚举对象的集合被称为ACPI namespace。
OS根据系统硬件来评估ACPI namespace中的对象,然后实现相应的操作。ACPI namespace中的对象,可以直接给其赋值,也可以强制交给AML解释器来计算与解释。