概述

本章提供了高级配置和电源接口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

ACPI Specification 概述(基于ACPI_Spec_6_4_Jan22)相关推荐

  1. ACPI Specification 第三章 ACPI概念

    目录 第三章 ACPI 概念... 2 3.1系统电源管理... 3 3.2电源状态... 3 3.2.1电源按钮... 4 3.2.2平台电源管理特点... 5 3.2.2.1移动电脑... 5 3 ...

  2. ACPI Specification 第四章 ACPI硬件规范

    第四章 ACPI硬件规范... 2 4.1 Hardware-Reduced ACPI 3 4.1.1 Hardware-Reduced事件... 3 4.1.1.1 GPIO提示事件或中断提示事件. ...

  3. Injective Protocol官方文档翻译(五) -衍生产品规范(Derivatives Specification) 概述

    文章目录 一.衍生产品规范(Derivatives Specification) 概述 拓展:什么是永续合约?永续合约特点有哪些? 拓展:头寸(position) 一.衍生产品规范(Derivativ ...

  4. ARP原理概述——基于WinPcap发送ARP请求数据包获取远程MAC地址

    ARP原理概述--基于WinPcap发送ARP请求数据包获取远程MAC地址 ARP协议 ARP概述 ARP工作原理 ARP数据包格式 编写程序发送ARP请求获取本机和远程IP的MAC 注意: ARP协 ...

  5. ACPI Specification 第一章 介绍

    目录 1.1主要目标 1.2电源管理基本原理 1.3传统的支持 1.4 OEM实现策略 1.5电源和休眠按钮 1.6 ACPI规范和ACPI结构 1.7 操作系统和平台遵从性 1.7.1 acpi定义 ...

  6. ACPI Specification 第二章 条款的定义

    目录 2.1 ACPI通用术语 2.2全局系统状态定义 2.3设备电源状态定义 2.3.1设备性能状态 2.4睡眠和软化状态的定义 2.5处理器电源状态定义 2.6设备和处理器性能状态定义 本规范使用 ...

  7. 概述—基于机载LiDAR点云数据的建筑物轮廓提取

    一.机载LiDAR系统介绍 机载激光雷达测量技术的英文名称是LiDAR, LiDAR是英文Light Detection And Ranging(光探测与光测距)的缩写,是融合了 GPS.INS.激光 ...

  8. Linux内核配置解析 - 概述(基于ARM64架构)

    1. 前言 对刚接触Linux kernel的同学来说,遇到的第一个问题就是:我该从哪里入手?. 话说Linux kernel的打开方式是多种多样的:从简单的设备驱动入手:从源代码的目录结构入手:从k ...

  9. BIOS工程师需要掌握的知识

    ACPI规范: ACPI Specification 概述(基于ACPI_Spec_6_4_Jan22)_anqi8955的专栏-CSDN博客 ​​​​​​ACPI Specification 第一章 ...

最新文章

  1. Java实现Runnable接口创建多线程
  2. boost::math::tools::simple_continued_fraction用法的测试程序
  3. 【TensorFlow】——合并与分割(stack、concat、split)
  4. ROS Nodelet使用
  5. 开课吧:Java开发学习路线-基础知识
  6. Java全栈开发---Java ERP系统开发:商业ERP(七
  7. dns缓存时间 linux,如何在Linux服务器上刷新DNS缓存
  8. 设置vs2107背景图片
  9. 如何使用 Pixelmator Pro调整照片,打印出最完美的照片效果?
  10. 通过you-get下载视频,自动判断下载最优画质
  11. php热加载原理,什么是热更新?
  12. 【JAVA】删除整个文件夹(深度删除)
  13. OAuth安全相关问题
  14. Thingsboard 项目说明,框架目录结构、技术及部署相关说明
  15. [C#搜片神器] 之P2P中DHT网络爬虫原理
  16. 又抓到虫子了:IE中奇怪的应用CSS的BUG
  17. oracle五种数据类型,Oracle数据类型
  18. 开源浏览器引擎Webkit引发浏览器格局变化
  19. uniapp 仿美团饿了么城市列表+顶部搜索
  20. 关于yahoo.com.cn邮箱导入Gmail邮箱验证异常的机制解析及解决办法

热门文章

  1. ubuntu下如何使用USB转串口设备
  2. 文学常识100条(3)
  3. Java基础之多线程汇总一
  4. 【死磕 Redis】----- 主从复制(二):全量复制和部分复制
  5. Floyd算法与Dijkstra算法的区别
  6. 查看域名cname记录
  7. openstack中的quota
  8. Sybase复制服务器、自动备份恢复及案例
  9. php 截取小时,php截取小时和分钟,在进行和其它时间段的比较
  10. WebStorm 2018安装报NSIS错误