最初のブートアップでは、ページングが無効になっているため、線形アドレス = 物理アドレスになります。
x86-64 UEFI ファームウェアは、x86-64 ロング モードではページングが有効になっている必要があるため、おそらく ID マッピングの物理メモリを設定する必要があります。 .
レガシー BIOS モードで起動する場合、ファームウェアは CPU をリアル モードに戻しint 10h
、MBR ブートローダーが実行される前にレガシー BIOS などのハンドラをインストールします。
x86 では、TLB はハードウェアによって管理されます(TLB ミスに応答するページ ウォーク、ソフトウェアからは見えません)。ページ テーブルは、ハードウェアが直接読み取る方法を認識している (レベル間のポインターに物理アドレスを使用する) 基数ツリー データ構造内にある必要があります。( https://wiki.osdev.org/Paging / https://wiki.osdev.org/Page_Tables )。
L2 TLB ミスの後に何が起こるかを参照してください。HW ページ ウォークがデータ自体をフェッチし、ロードまたはストア (またはコード フェッチ) を完了できるように TLB エントリを作成するという事実の詳細については、.
唯一の制御ソフトウェアはinvlpg
、1 つの 4k ページのキャッシュされた情報を無効にすることです (たとえば、ページ テーブル エントリを変更した後)。そのため、HW は次のアクセス時にページ ウォークでそれをリロードします。(または、CR3 をリロードすると、「グローバル」エントリ以外のすべてが無効になります。ID で TLB エントリにタグを付けるための PCID (プロセス コンテキスト ID) HW サポートもあるため、同じ物理コア上のいくつかの異なるページ テーブル間で頻繁にスワップする必要はありません。パフォーマンスの災害。)
mov cr3, reg
トップレベルのページディレクトリの物理アドレスを設定するために、ページテーブルを見つける場所をCPUに伝えます。(ページングを有効にするかどうかを制御する制御レジスタ ビットもあります。保護モードではオプションです。)
x86 ページングはどのように機能しますか?も参照してください。
対照的に、MIPS のような一部の ISA は、ソフトウェアTLB管理を使用します。この場合、TLB ミスが OS 提供のハンドラーにトラップされます。これはページ フォールト ハンドラーに少し似ており、独自のデータ構造を使用します。 t TLB ミス)。 x86ではなくTLBWI
、MIPS命令です。
これは x86 のオプションではありません。