ACPI Specification 概述(基于ACPI_Spec_6_4_Jan22)

概述

        本章提供了高级配置和电源接口ACPI (Advanced Configuration and Power Interface)的概述。为了更容易理解ACPI,本节重点讨论关于ACPI的广泛和一般的陈述,而不是讨论每个可能的异常或关于ACPI的细节。ACPI规范的其余部分提供了关于ACPI内部工作的更多细节,建议使用ACPI的开发人员阅读。

        ACPI的历史ACPI是在20世纪90年代中期由Intel, Microsoft*, Toshiba*, HP*和Phoenix*合作开发的。在开发ACPI之前,操作系统主要使用BIOS (Basic Input/Output System)接口进行电源管理、设备发现和配置。电源管理的方法是利用操作系统调用系统BIOS的能力来进行电源管理。BIOS还用于根据探测输入/输出(I/O)来发现系统设备和加载驱动程序,并尝试将正确的驱动程序匹配到正确的设备(即插即用)。设备的位置也可以在BIOS中硬编码,因为平台本身是不可枚举的。这些解决方案在三个关键方面存在问题。首先,操作系统应用程序的行为可能会受到bios配置的电源管理设置的负面影响,导致系统在演示期间或其他不方便的时间进入睡眠状态。第二,电源管理接口是每个系统的专有接口。这要求开发人员了解如何为每个单独的系统配置电源管理。最后,各种设备的默认设置也可能相互冲突,导致设备崩溃、行为不稳定或变得无法发现。

ACPI的开发就是为了解决这些问题和其他问题。

ACPI是什么?

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

        标准ACPI框架和硬件寄存器集的主要目的是支持电源管理和系统配置,而不需要直接从操作系统本地调用固件。ACPI作为操作系统和系统固件之间的接口层,如下图所示。

        ACPI定义了两种类型的数据结构,它们通过ACPI子系统在系统固件和操作系统之间共享:数据表和定义块(见下图)。这些数据结构是固件和操作系统之间的主要通信机制。数据表存储原始数据,由设备驱动程序使用。定义块由可由解释器执行的字节码组成。

        初始化时,AML解释器将定义块中的字节代码提取为可枚举对象。这个可枚举对象集合形成了一个称为ACPI名称空间的操作系统构造。ACPI名称空间中的对象可以有一个直接定义的值,也可以由AML解释器计算。由操作系统指导的AML解释器对对象进行评估,然后与系统硬件进行接口以执行必要的操作。

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

        ACPI Source Language (ASL)代码用于定义对象和控制方法。然后,ASL编译器将ASL转换为包含在ACPI定义块中的ACPI机器语言(AML)字节码。定义块由标识表头和字节码组成,由AML解释器执行。

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

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

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

        例如,PCI不支持本机热插拔。但是,PCI可以使用ACPI来计算对象,并定义方法,这些方法允许ACPI填充在PCI上执行热插拔所需的功能。

        

 

        ACPI的另一个方面是运行时模型,它处理系统操作期间发生的任何ACPI中断事件。ACPI继续根据需要评估对象以处理这些事件。这个基于中断的运行时模型将在下面的运行时模型一节中进行更详细的讨论。

ACPI初始化

        理解ACPI如何工作的最好方法是按时间顺序排列。当用户启动系统时,系统固件就完成了设置、初始化和自我测试。

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

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

        当操作系统从ACPI表构建了命名空间后,它开始遍历命名空间并为它在命名空间中遇到的所有_HID设备加载设备驱动程序。

        在上面的ACPI初始化图中,在将控制权移交给引导加载程序之前,系统固件根据需要使用仅在运行时可用的信息更新ACPI表。XSDT是操作系统的ACPI子系统使用的第一个表,它包含系统上大多数其他ACPI表的地址。XSDT指向FADT、ssdt和其他主要ACPI表。FADT将ACPI子系统定向到DSDT, DSDT是名称空间的开始,因为DSDT是包含定义块的第一个表。ACPI子系统然后使用DSDT,并开始从定义块构建ACPI名称空间。XSDT还指向ssdt并将它们添加到名称空间。

运行时模型

        在系统启动并运行之后,ACPI与操作系统一起处理通过中断发生的任何ACPI事件。此中断以两种一般方式之一调用ACPI事件:固定事件和通用目的事件(GPEs)。

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

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

热事件的例子

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

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

        当操作系统最初在名称空间中找到一个热区域时,它加载热区域驱动程序,该驱动程序评估热区域以获得当前温度和跳点。

当系统组件的温度升高到足以触发跳闸点时,就会出现一个热区GPE。

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

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

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

        ACPI是一个非常健壮的接口实现。热区跳点可以根据需要通知系统开启风扇、降低设备性能、读取温度、关闭系统,或这些操作和其他操作的任何组合。

在整个系统中使用此运行时模型来管理在系统操作期间发生的所有ACPI事件。

 

 

 

总结

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

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

英文版原文下载地址:https://download.csdn.net/download/anqi8955/22027710

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值