8.2. 刷新缓存
为了在不使用 ARB_DIS 特性的情况下支持 C3 电源状态,硬件必须提供刷新并使处理器缓存失效的功能(对于 IA 处理器,这将是 WBINVD 指令)。为了支持 S1、S2 或 S3 睡眠状态,硬件必须提供刷新平台缓存的功能。缓存刷新由以下机制之一支持:
将系统缓存回写并使其失效的处理器指令(对于 IA 处理器是 WBINVD 指令)。
将系统缓存回写但不使其失效的处理器指令(对于 IA 处理器是 WBINVD 指令,以及某些仅部分支持的芯片组;也就是说,它们不会使缓存失效)。
ACPI 规范要求所有平台都支持用于刷新系统缓存的本地 CPU 指令(在 CPU 和芯片组中都提供支持),并为当前尚不具备此能力的系统提供有限的“尽力而为”支持。平台所使用的方法通过本节中指出的适当 FADT 字段和标志来指示。
ACPI 在 FADT 中规定了描述系统缓存能力的参数。如果平台正确支持处理器的回写并失效指令(对于 IA 处理器为 WBINVD),则通过在 FADT 中设置 WBINVD 标志向 OSPM 指示此支持。
如果平台既不支持前两种刷新选项中的任何一种,则 OSPM 可以在满足以下条件时尝试手动刷新缓存:
对不超过 2 MB 的连续物理内存进行启用缓存的顺序读取将刷新平台缓存。
还需要两个额外的 FADT 字段来支持手动刷新缓存:
FLUSH_SIZE,通常为系统中最大缓存大小的两倍。
FLUSH_STRIDE,通常为系统中最小的缓存行大小。