INVD
无效的内存
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
0F 08 | INVD | ZO | 有效 | 有效 | Flush 内部缓存; 启动对外部缓存的冲洗. |
实测开销
正在从 arch-data 加载实测数据...
说明
无效化(flushes)处理器的内部缓存,并发布特殊功能总线循环,引导外部缓存也冲走自己. 内部缓存中保存的数据不写回主内存.
执行此指令后, 处理器不会等待外部缓存完成冲洗操作, 然后再执行指令 。 响应缓存冲信号是硬件的责任.
INVD指令是一种特殊指令. 当处理器在 保护模式 运行时,程序或程序的 CPL 必须是 0 执行此指令.
INVD指令在缓存用作临时内存时可以使用,缓存内容需要作废而不是写回内存. 当缓存被用作临时内存时,任何外部设备都不应该积极将数据写入主内存.
谨慎使用此指示. 内部缓存而不写入主内存的数据将丢失. 注意从外部设备到主内存的任何数据(例如通过PCIWrite)都可以暂时存储在缓存中;当INVD指令执行时,这些数据可能会丢失. 除非有特定要求或好处可以冲出缓存而不写回修改后的缓存行(例如,临时内存,测试,或者在缓存与主内存一致性无关的情况下的断层恢复),否则软件应该使用WBINVD指令.
在支持处理器保留内存的处理器上,当处理器保留内存保护启动时,INVD指令无法执行. 见39.5节,"EPC与管理EPC页",Intel(R)64和IA-32架构软件开发者手册,第3D卷.
在支持SEAM的处理器上,INVD指令在SEAM范围保护时无法执行. 见Intel(R)64和IA-32架构软件开发者手册第3卷第35.4节,"记忆保护".
一些处理器在BIOS执行完成后阻止INVD执行. 他们通过将CPUID.07H.01H:EAX[30]列为1来报告这一点. 在这种处理器上,如果 SR BIOS DONE (MSR 地址 151H) 的比特 0 是 1 ,则 INVD 无法执行 。
此指令的操作在非64位模式和64位模式中是相同的.
IA-32 架构兼容性
INVD指令依赖于执行;它可能针对Intel 64或IA-32处理器的不同家族不同执行. 此指令在IA-32处理器上不比Intel486处理器更早得到支持.
行动
Flush(InternalCaches);
SignalFlush(ExternalCaches);
Continue (* Continue execution *)受影响的旗帜
None.
异常
保护模式
#GP(0) | 如果当前特权级别不是0. 如果启动处理器保留内存保护。 如果 SEAM 范围被保护。 如果 CPUID.07H.01H: EAX [30] = 1, 比特 0 在 MSR BIOS DONE (MSR 地址 151H) 中设置 。 |
#UD | 如果使用 LOCK 前缀 。 |
实地址模式
#GP(0) | 如果 CPUID.07H.01H: EAX [30] = 1 和 bit 0 在 MSR BIOS DONE (MSR 地址 151H) 中设置,如果启动处理器保留内存保护,如果 SEAM 范围受到保护. |
#UD | 如果使用 LOCK 前缀 。 |
虚拟 8086 模式
#GP(0) | INVD指令无法在虚拟 8086 模式中执行. |
兼容模式
| 与保护模式中的例外相同. |
64 位模式
| 与保护模式中的例外相同. |