5.1. 系统描述表架构概述
根系统描述指针 (RSDP) 结构位于系统的内存地址空间中,由平台固件设置。该结构包含扩展系统描述表 (XSDT) 的地址,该表引用向 OSPM 提供数据的其他描述表,为其提供基本系统的实现和配置知识(请参阅根系统描述指针和表)。

图 5.1 根系统描述指针和表
所有系统描述表都以相同的表头开头。系统描述表的主要目的是为 OSPM 定义各种行业标准实现细节。这些定义使实现可以在硬件要求和设计上保持灵活,同时仍为 OSPM 提供直接控制硬件所需的知识。
扩展系统描述表 (XSDT) 指向内存中的其他表。它通常首先指向固定 ACPI 描述表 (FADT)。该表中的数据包含各种固定长度条目,用于描述硬件的固定 ACPI 功能。FADT 又始终引用差分系统描述表 (DSDT),后者包含各种系统功能的信息和描述。这些表之间的关系如描述表结构所示。

图 5.2 描述表结构
OSPM 查找 RSDP 结构,如在 IA-PC 系统上查找 RSDP(“在 IA-PC 系统上查找 RSDP”)或在 UEFI 启用系统上查找 RSDP(“查找RSDP 在 UEFI 启用的系统上”)。
当OSPM定位该结构时,它会查找根系统描述表或扩展系统描述表的物理地址。根系统描述表以签名“RSDT”开头,而扩展系统描述表以签名“XSDT”开头。这些表包含一个或多个指向其他系统描述表的物理指针,用于提供系统的各种信息。如描述表结构所示,其中始终存在固定 ACPI 描述表 (FADT) 的物理地址。
当OSPM跟随物理指针指向另一个表时,它会检查每个表是否有已知的签名。根据签名,OSPM可以解释描述表中特定于实现的数据。
FADT的目的是定义与配置和电源管理相关的各种静态系统信息。固定 ACPI 描述表以“FACP”签名开头。 FADT描述了ACPI硬件寄存器在平台上的实现和配置细节。
有关ACPI硬件寄存器块的规范(PM1a_EVT_BLK、PM1b_EVT_BLK、PM1a_CNT_BLK、PM1b_CNT_BLK、PM2_CNT_BLK、PM_TMR_BLK、GP0_BLK、GP1_BLK和一个或多个P_BLKs),参见ACPI寄存器模型 PM1a_EVT_BLK、PM1b_EVT_BLK、PM1a_CNT_BLK、PM1b_CNT_BLK、PM2_CNT_BLK和PM_TMR_BLK块用于控制低级ACPI系统功能。
GPE0_BLK和GPE1_BLK块为控制方法的中断处理模型提供了基础。 P_BLK块用于控制处理器功能。
除了ACPI硬件寄存器实现信息外,FADT还包含一个物理指针,指向称为“差分系统描述表”(DSDT) 的数据结构,该数据结构以定义块格式进行编码(请参阅定义块)。
定义块包含平台硬件实现细节,以数据对象的形式组织在称为“ACPI 命名空间”的分层(树形)实体中,用于表示平台的硬件配置。由 OSPM 加载的所有定义块共同组成一个表示平台的命名空间。数据对象以 ACPI 机器语言(AML)的格式编码。以 AML 编码的数据对象由 OSPM 中的 AML 解释器进行“求值”。其值既可以是静态的,也可以是动态的。AML 解释器对动态数据对象的求值支持编程式求值,包括访问地址空间(例如 I/O 或内存访问)、执行计算和逻辑判断以确定结果。动态命名空间对象称为“控制方法”。OSPM 会将整个定义块作为逻辑单元“加载”,即向命名空间添加或从命名空间删除相关对象。DSDT 包含一个称为“差分定义块”的定义块,其中包含 OSPM 执行电源管理、热管理或即插即用功能所需的实现与配置信息,这些功能超出了 ACPI 硬件寄存器所描述的范围。
定义块可以定义新的系统属性,或者在某些情况下,基于先前的定义构建。定义块可以从系统内存地址空间加载。定义块的一种用途是描述和分发平台版本更改。
定义块允许将硬件平台实现的各种变化描述为ACPI兼容的OS,同时将变化限制在合理的范围内。定义块允许使用一些定义良好的对象名称来表达简单的平台实现。理论上,可以通过从 I/O 空间构建来在定义块内定义类似PCI配置空间的访问方法,但这不是定义块规范的目标。这样的空间通常被定义为“内置”运算符。
一些运算符执行简单的功能,而另一些则包含复杂的功能。定义块的强大之处在于它能够以多种方式将这些操作粘合在一起,从而为OSPM提供功能。存在的运算符旨在允许许多有用的硬件设计被ACPI表达,而不是允许所有硬件设计被表达。
5.1.1. 地址空间转换
一些平台可能包含当 I/O 和/或内存周期通过桥时执行转换的桥。该平移可以采用添加或减去偏移量的形式。或者它可以采用从 I/O 周期转换为内存周期并再转换回来的形式。当进行转换时,处理器在读取或写入周期期间放置在处理器总线上的地址与I/O总线桥放置在I/O总线上的地址不同。处理器放置在处理器总线上的地址在此称为处理器相对地址。桥接器放置在 I/O 总线上的地址称为总线相对地址。除非另有说明,本节中使用的所有地址都是处理器相对地址。
例如,考虑一个具有两个根PCI总线的平台。平台设计者有多种选择。一种解决方案是将 16 位 I/O 空间分成两部分,将一部分分配给第一个根PCI总线,将一部分分配给第二个根PCI总线。另一种解决方案是让两个根PCI总线解码整个 16 位 I/O 空间,将第二根PCI总线的 I/O 空间映射到内存空间。在第二种情况下,当处理器需要从第二个根PCI总线下方的设备的 I/O 寄存器中读取数据时,它需要在根PCI总线桥用于映射 I/O 空间的范围内执行内存读取。
- 由于历史兼容性问题,行业标准 PC 不提供地址空间转换。