ロングモードのx86-64アーキテクチャ上のTLBに直接、特定の仮想アドレスの物理アドレスを提供することは可能ですか?
たとえば、PML4Eにゼロを設定すると、無効なアドレスが検出されるため、ページフォールト例外がトリガーされます。例外の間に、CPUは、この仮想アドレスがX物理にあることを命令を使用して、TLBに通知できます。ページフレーム?
これを実行したいのは、コードによって物理アドレスがどこにあるかを簡単に判断できるためです。これにより、コストのかかるページウォークを回避できます。
ロングモードのx86-64アーキテクチャ上のTLBに直接、特定の仮想アドレスの物理アドレスを提供することは可能ですか?
たとえば、PML4Eにゼロを設定すると、無効なアドレスが検出されるため、ページフォールト例外がトリガーされます。例外の間に、CPUは、この仮想アドレスがX物理にあることを命令を使用して、TLBに通知できます。ページフレーム?
これを実行したいのは、コードによって物理アドレスがどこにあるかを簡単に判断できるためです。これにより、コストのかかるページウォークを回避できます。
いいえ、TLBにページを配置する必要があります。正確には、適切なPTEを作成/更新する必要があります(必要に応じてPDEとPDPEを使用)。MMU管理に関するすべては、どういうわけかページテーブルとTLBに基づいています。ユーザー/スーパーバイザー保護モードでさえ、マップされたページの特別なフラグとして実行されます。
なぜ「ページウォーク」は費用のかかる操作だと思いますか?それはまったく高価ではありません。更新する必要のあるPTEを決定するには、PML4E-> PDPE->PDE->PTEの4つのポインターのみを逆参照する必要があります。これらのエントリは、関連するテーブルの単なるインデックスです。PML4Eを取得するには、ページフォールト処理中に取得された39〜47ビットのアドレスを使用し、その値をPML4テーブルのインデックスとして使用する必要があります。PDPEを取得するには、PDEテーブルなどのインデックスとして30〜39ビットのアドレスが必要です。それはあなたのシステムを遅くすることができるものではありません。物理ページの割り当てにはそれよりも時間がかかると思います。