ACPI相关(1)- 简介

什么是ACPI?

ACPI首先可以理解为一个独立于体系结构的电源管理和配置框架,它在主机OS中形成一个子系统。该框架建立一个硬件寄存器集来定义电源状态(休眠、hibernate、唤醒等)。硬件寄存器集可以容纳专用硬件和通用硬件上的操作。

  标准ACPI框架和硬件寄存器集的主要目的是启用电源管理和系统配置,无需操作系统来直接调用固件。ACPI作为系统固件(BIOS)和OS之间的接口层,如图1和图2所示,有一定的限制和规则。

Figure 1: ACPI overview

 

  从根本上说,ACPI定义了两种数据结构,它们在系统固件和操作系统之间共享:数据表和定义块。这些数据结构是固件和操作系统之间的主要通信机制。数据表存储原始数据,并由设备驱动程序使用。定义块由解释程序可执行的字节码组成。

Figure 2: ACPI structure

 

  这个定义块字节码是从ACPI源语言(ASL)代码编译而来的。ASL是用来定义ACPI对象和编写控制方法的语言。ASL编译器将ASL翻译成ACPI机器语言(AML)字节码。AML是ACPI AML解释器处理的语言,如图3所示。

Figure 3: ASL and AML

 

AML解释器执行字节码并计算定义块中的对象,以允许字节码执行循环构造、条件计算、访问已定义的地址空间以及应用程序所需的其他操作。AML解释器对已定义的地址空间具有读/写访问权,包括系统内存、I/O、PCI配置等等。它通过定义称为对象的入口点来访问这些地址空间。对象可以具有直接定义的值,也可以由AML解释器计算和解释。

这个可枚举对象集合是一个OS结构,称为ACPI名称空间。命名空间是系统上ACPI设备的层次表示。系统总线是这些ACPI设备枚举的根。在其他总线上可枚举的设备(如PCI或USB设备)通常不在名称空间中枚举。相反,它们自己的总线枚举设备并加载驱动程序。然而,所有可枚举的总线都有一种编码技术,允许ACPI对设备的总线特定地址进行编码,这样就可以在ACPI中找到它们,尽管ACPI通常不为这些设备加载驱动程序。

  通常,枚举具有_HID对象(硬件标识对象)的设备,并由ACPI加载其驱动程序。具有_ADR对象(物理地址对象)的设备通常不由ACPI枚举,通常也不由ACPI加载驱动程序。_ADR设备通常可以在不涉及ACPI的情况下执行所有必要的功能,但是在设备驱动程序不能执行某个功能的情况下,或者如果驱动程序需要与系统固件通信,ACPI可以评估对象来执行所需的功能。

  作为一个例子,PCI不支持本地热插拔。然而,PCI可以使用ACPI来评估对象和定义方法,这些方法允许ACPI填充在PCI上执行热插拔所需的函数。

ACPI的另一个方面是运行时模型,它处理在系统运行期间发生的任何ACPI中断事件。ACPI将继续评估处理这些事件所需的对象。这个基于中断的运行时模型将在下面的运行时模型一节中进行更详细的讨论。了解ACPI工作原理的最佳方法是按时间顺序排列。当用户启动系统时,系统固件就完成了设置、初始化和自我测试。

 Figure 4: ACPI initialization

 

  然后,系统固件使用固件初始化期间获得的信息,根据需要使用各种平台配置和电源接口数据更新ACPI表,然后将控制传递给引导加载程序。扩展根系统描述表(XSDT)是ACPI子系统使用的第一个表,包含系统上大多数其他ACPI表的地址。XSDT指向固定的ACPI描述表(FADT)以及OS在初始化期间处理的其他主要表。在OS初始化之后,FADT将ACPI子系统指向差分系统描述表(DSDT), DSDT是名称空间的开始,因为它是第一个包含定义块的表。 

然后ACPI子系统处理DSDT并开始从ACPI定义块构建命名空间。XSDT还指向辅助系统描述表(SSDTs),并将它们添加到名称空间中。ACPI数据表向OS提供关于系统硬件的原始数据

在OS从ACPI表构建了名称空间之后,它开始遍历名称空间,并为它在名称空间中遇到的所有_HID设备加载设备驱动程序。

系统启动并运行后,ACPI与OS一起处理通过ACPI系统控制中断(SCI)处理程序发生的任何ACPI中断事件。这个中断调用ACPI事件的方式有两种:固定事件和通用事件(GPEs)。SCI在整个系统中被多路复用,以管理ACPI中断事件。

  固定事件是ACPI规范中具有预定义含义的ACPI事件。这些固定事件包括按下电源按钮或ACPI定时器溢出等操作。这些事件由OS处理程序直接处理。

GPEs是ACPI规范中没有预定义的ACPI事件。这些事件通常通过评估控制方法来处理,这些方法是名称空间中的对象,可以访问系统硬件。当ACPI子系统使用AML解释器评估控制方法时,GPE对象根据操作系统的实现处理事件。通常,这可能涉及向设备发出通知,以调用设备驱动程序来执行函数。

ACPI包含一个热模型,允许系统主动地(通过执行诸如打开风扇之类的操作)或被动地(通过执行诸如节流处理器之类的操作)控制系统温度。我们可以使用图5中所示的一个通用热事件示例来演示ACPI运行时模型是如何工作的。

Figure 5: Runtime thermal event

 

 

ACPI热区包括读取当前系统温度和跳闸点的控制方法。

1. 当OS最初在名称空间中找到一个热区时,它将加载热区驱动程序,该驱动程序将评估热区以获得当前温度和触发点。

2. 当系统组件加热到足以触发跳点时,就会发生热区GPE。

  1. GPE通过SCI引起中断。当ACPI子系统接收到中断时,它首先检查是否发生了任何固定事件。在本例中,热区事件是一个GPE,因此没有发生固定事件。

4. 然后,ACPI子系统在名称空间中搜索与中断的GPE编号匹配的控制方法。在找到它之后,ACPI子系统评估控制方法,然后控制方法可能访问硬件和/或通知热区处理程序。

5. 然后,操作系统的热区处理程序将采取任何必要的操作来处理该事件,包括可能访问硬件。

ACPI是一个非常健壮的接口实现。热区跳闸点可以通知系统打开风扇,降低设备的性能,读取温度,关闭系统,或根据需要进行上述操作和其他操作的任何组合。这个运行时模型用于整个系统来管理在系统运行期间发生的所有ACPI事件。

ACPI可以最好地描述为一个概念框架和接口,这些概念和接口被实现为在主机OS中形成一个子系统。ACPI表、处理程序、解释器、名称空间、事件和中断模型一起构成了ACPI的实现,在主机OS中创建了ACPI子系统。从这个意义上说,ACPI是系统硬件/固件与OS和OS应用程序之间的接口,用于配置和电源管理。这为各种操作系统提供了通过ACPI名称空间支持电源管理和配置的标准化方法。

ACPI名称空间是系统上所有ACPI设备的可枚举的层次表示,用于查找和加载系统上ACPI设备的驱动程序。通过实时评估对象和发送中断,命名空间可以是动态的,同时限制操作系统调用本机系统固件代码。这使得设备制造商能够将自己的指令和事件编码到设备中。它还通过实现标准化的电源管理接口减少了不兼容性和不稳定性。

ACPI的诞生标准化了各厂商对于配置和电源管理的标准行为,为行业内标准实施方案。

  • 9
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值