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
  • 第 16 章

    • 总览
    • 16.1. 睡眠状态
    • 16.2. 刷新缓存
    • 16.3. 初始化

16.2. 刷新缓存

在进入 S1、S2 或 S3 睡眠状态之前,OSPM 负责刷新系统缓存。ACPI 提供了多种刷新系统缓存的机制。这些机制包括:

  • 使用原生指令(例如 IA-32 架构的 WBINVD 指令)来刷新并使平台缓存失效。
* FADT 中的 WBINVD_FLUSH 标志置位为 (1) 表示系统提供此支持级别。
  • 使用 IA-32 指令 WBINVD 来刷新但不使平台缓存失效。
* FADT 中的 WBINVD 标志置位为 (1) 表示系统提供此支持级别。

手动刷新机制有两个注意事项:

  • 最大的缓存大小为 1 MB(FLUSH_SIZE 的最大值为 2 MB)。

  • 不存在牺牲缓存(对于这种缓存,手动刷新算法不可靠)。

具有内建牺牲缓存的处理器将不支持手动刷新机制,因此必须支持 WBINVD 机制才能使用 S2 或 S3 状态。

手动缓存刷新机制依赖于两个 FADT 字段:

  • FLUSH_SIZE。 以字节为单位,指示最大缓存大小的两倍。

  • FLUSH_STRIDE。 以字节为单位,指示缓存的最小行大小。

缓存刷新大小值通常是最大缓存大小的两倍,而缓存刷新步长值通常是平台中最小缓存行大小。OSPM 将通过读取由缓存刷新大小指示的连续内存块来刷新系统缓存。

Prev
16.1. 睡眠状态
Next
16.3. 初始化