15. 系统地址映射接口
本节说明兼容 ACPI 的系统如何将其内存资源/类型映射传达给 OSPM。系统向 OSPM 传达内存资源/映射有三种方式。第一种是 INT 15 BIOS 接口,用于基于 IA-PC 的系统,以传达系统的初始内存映射。启用 UEFI 的系统使用 UEFI GetMemoryMap() 启动服务函数将内存资源传达给操作系统加载器。然后,这些资源必须由操作系统加载器传达给 OSPM。有关 UEFI 服务的更多信息,请参见 UEFI 规范。
最后,如果内存资源可能动态添加或移除,则在 ACPI 命名空间中定义内存设备,以传达该内存设备所描述的资源信息(见 内存设备)。
ACPI 定义了以下地址范围类型。
表 15.1 地址范围类型
| 值 | 助记符 | 在 S4 中保存 | 描述 |
|---|---|---|---|
| 1 | AddressRangeMemory | 是 | 该范围是操作系统可用的可用 RAM。 |
| 2 | AddressRangeReserved | 否 | 该地址范围正被系统使用或保留,不应包含在操作系统内存管理器的可分配内存池中。 |
| 3 | AddressRangeACPI | 是 | ACPI 可回收内存。系统读取 ACPI 表之后,该范围内的可用 RAM 可供 OS 使用。 |
| 4 | AddressRangeNVS | 是 | ACPI NVS 内存。该地址范围正被系统使用或保留,操作系统不得使用。要求在 NVS 睡眠期间保存并恢复该范围。 |
| 5 | AddressRangeUnusable | 否 | 该地址范围包含已检测到错误的内存。OSPM 不得使用该范围。 |
| 6 | AddressRangeDisabled | 否 | 该地址范围包含未启用的内存。OSPM 不得使用该范围。 |
| 7 | AddressRangePersistent-Memory | 否 | OSPM 必须将此内存理解为具有非易失属性,并将其与传统易失内存区别处理。该内存区域支持按字节寻址的非易失性。注意:使用 AddressRangePersistentMemory 报告的内存的扩展属性应将位 [0] 置为 1(见 地址范围描述符结构的扩展属性)。 |
| 8 - 11 | 未定义 | 否 | 保留供将来使用。OSPM 必须将任何此类型的范围视为其返回类型为 AddressRangeReserved。 |
| 12 | OEM 定义 | 否 | 操作系统不应使用供应商定义范围内的内存类型,因为不同供应商之间可能发生冲突。 |
| 13 to 0xEFFFFFFF | 未定义 | 否 | 保留供将来使用。OSPM 必须将任何此类型的范围视为其返回类型为 AddressRangeReserved。 |
| 0xF0000000 to 0xFFFFFFFF | OEM 定义 | 否 | 操作系统不应使用供应商定义范围内的内存类型,因为不同供应商之间可能发生冲突。 |
平台运行时固件可以使用 AddressRangeReserved 地址范围类型,将各种地址屏蔽为不适合可编程设备使用。平台运行时固件这样做的部分原因如下:
该地址范围包含系统 ROM。
该地址范围包含 ROM 正在使用的 RAM。
该地址范围正被内存映射系统设备使用。
无论出于何种原因,该地址范围都不适合标准设备用作设备内存空间。
该地址范围位于某个 NVRAM 设备内,其中对内存位置的读写已不再成功,也就是说,该设备已磨损损坏。
当进入 S4 睡眠状态或从 S4 睡眠状态返回时,OSPM 不会保存或恢复报告为 AddressRangeReserved、AddressRangeUnusable、AddressRangeDisabled 或 AddressRangePersistentMemory 的内存。
平台引导固件必须确保,报告为 AddressRangePersistentMemory 的内存内容在系统复位或电源循环事件后得以保留。