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 将通过读取由缓存刷新大小指示的连续内存块来刷新系统缓存。