ACPI 中文文档ACPI 中文文档
首页
第 1 章
第 2 章
第 3 章
第 4 章
第 5 章
第 6 章
第 7 章
第 8 章
第 9 章
第 10 章
第 11 章
第 12 章
第 13 章
第 14 章
第 15 章
第 16 章
第 17 章
第 18 章
第 19 章
第 20 章
第 21 章
附录 A
首页
第 1 章
第 2 章
第 3 章
第 4 章
第 5 章
第 6 章
第 7 章
第 8 章
第 9 章
第 10 章
第 11 章
第 12 章
第 13 章
第 14 章
第 15 章
第 16 章
第 17 章
第 18 章
第 19 章
第 20 章
第 21 章
附录 A
  • 第 15 章

    • 总览
    • 15.1. INT 15H, E820H - 查询系统地址映射
    • 15.2. E820 假设与限制
    • 15.3. UEFI GetMemoryMap() 启动服务函数
    • 15.4. UEFI 假设和限制
    • 15.5. 示例地址映射
    • 15.6. 示例:操作系统用法

15.3. UEFI GetMemoryMap() 启动服务函数

启用 EFI 的系统使用 UEFI GetMemoryMap() 启动服务函数将内存资源传达给操作系统加载器。然后,这些资源必须由操作系统加载器传达给 OSPM。

GetMemoryMap 接口仅在启动服务期间可用。在 OSPM 加载后,它不作为运行时服务提供。操作系统或其加载器通过调用 ExitBootServices() 启动从启动服务到运行时服务的转换。调用 ExitBootServices() 后,所有系统内存映射信息都必须从 ACPI 命名空间中的对象派生。

GetMemoryMap() 接口返回一个 UEFI 内存描述符数组。这些内存描述符定义了一个系统内存映射,其中包括所有已安装的 RAM,以及由固件保留的物理内存范围。每个描述符都包含一个类型字段,该字段规定了操作系统应如何处理该物理地址范围。下表定义了从 UEFI 内存类型(参见 UEFI 规范)到 ACPI 地址范围类型 的映射,该映射:

  • 如果平台启动固件在 UEFI 和传统 BIOS 模式下都描述该内存范围,则应遵循此映射;并且

  • 如果 OS 加载器使用 ACPI E820h 系统地址映射表将该信息传递给 OS,则应使用此映射。

表 15.6 UEFI 内存类型及其到 ACPI 地址范围类型的映射

类型助记符ACPI 地址范围类型
0EfiReservedMemoryTypeAddressRangeReserved
1EfiLoaderCodeAddressRangeMemory
2EfiLoaderDataAddressRangeMemory
3EfiBootServicesCodeAddressRangeMemory
4EfiBootServicesDataAddressRangeMemory
5EfiRuntimeServiceCodeAddressRangeReserved
6EfiRuntimeServicesDataAddressRangeReserved
7EfiConventionalMemoryAddressRangeMemory
8EfiUnusableMemoryAddressRangeReserved
9EfiACPIReclaimMemoryAddressRangeACPI
10EfiACPIMemoryNVSAddressRangeNVS
11EfiMemoryMappedIOAddressRangeReserved
12EfiMemoryMappedIOPort SpaceAddressRangeReserved
13EfiPalCodeAddressRangeReserved
14EfiPersistentMemoryAddressRangePersistentMemory
15 to 0x6FFFFFFF保留。AddressRangeReserved
0x70000000 to 0x7FFFFFFF保留供 OEM 使用OS 不应使用供应商定义范围内的内存类型,因为不同供应商之间可能发生冲突。
0x80000000 to 0xFFFFFFFF保留供由操作系统供应商提供的 UEFI OS 加载器使用OSV 定义

上表适用于支持传统 BIOS 模式和 UEFI 模式的系统固件,以及 OS 加载器。

Prev
15.2. E820 假设与限制
Next
15.4. UEFI 假设和限制