現在、ハイパーバイザー機能を開発中です。
EPT 違反が発生したときに TLB 無効化をどうするかについて混乱しています
i7 CPUを使用して、Linuxで開発しています。私の実装:
- VPID と EPT が有効
- 最初に、すべての EPT エントリの書き込みアクセスがクリアされます (読み取りおよび実行アクセスが設定されます)。
- EPT違反が発生した場合(書き込みを試みたとき)、書き込みアクセスを設定し、エントリを別のページ(別のhpa)を指すように変更します
インテルのマニュアルによると、
「EPT 違反は、EPT 違反の原因となったゲスト物理アドレスの変換に使用されるゲスト物理マッピング (現在の EP4TA に関連付けられている) を無効にします。また、結合されたマッピングも無効にします」
この部分で迷っています。
EPT 違反が、現在のコアの TLB キャッシュだけでなく、他のコアの TLB キャッシュでも対応する TLB エントリを無効にすることを保証しますか?
もしそうなら、tlb シュートダウンせずに、書き込みアクセスを設定して新しい hpa を割り当てるだけでよいでしょうか?