我目前正在开发一个管理程序功能。
当发生 EPT 违规时,我对如何处理 TLB 无效感到困惑
我正在使用 i7 CPU 在 Linux 上进行开发。我的实现:
- 启用 VPID 和 EPT
- 最初,每个 EPT 条目的写入权限都被清除(设置了读取和执行权限)
- 如果发生 EPT 违规(尝试写入时),设置写入权限并更改条目以指向另一个页面(另一个 hpa)
根据英特尔手册,
“EPT 违规会使任何用于转换导致 EPT 违规的客户物理地址的客户物理映射(与当前 EP4TA 相关联)无效。并且还会使任何组合映射无效”
我对这部分感到困惑。
它是否确保 EPT Violation 不仅使当前内核的 TLB 缓存中的相应 TLB 条目失效,而且使其他内核的 TLB 缓存中的相应 TLB 条目失效?
如果是这样,是否可以仅设置写访问权限并分配新的 hpa 而无需 tlb 击落?