3

アプリケーションは仮想メモリで動作します。これは素晴らしいコンセプトです。連続したブロックのように扱うことができ、物理 RAM で連続しているかどうか、またはハードディスク上にあるかどうかを気にする必要はありません。

私が理解している限り、仮想アドレスと物理アドレス間のマッピングは、変換ルックアサイド バッファーを使用して CPU (または少なくともハードウェア) によって直接行われます。

カーネルがどうにかして TLB の内容を維持していると思いますが、ここで少し行き詰まっているので、3 つの質問があります。

TLB の内容を照会、読み取り、および書き込むための特定のアセンブラー命令は何ですか? このトピックに関連するオペコードをグーグルで検索したのは、あまり幸運ではありませんでした。INVLPG と TLBWI を見つけました。私はそのレベルの深さに慣れていないので、間違った検索用語を使用しているだけかもしれません. すぐに見つけた場合、どの検索語を使用しますか?

これらすべてのアセンブラ命令には、特権 CPU モードが必要ですか?

TLB の初期コンテンツは何ですか? TLB が最初に空の場合、それはオペレーティング システムの最初のアセンブラー命令が物理メモリに直接マップされることを意味しますか (したがって、仮想アドレス == 物理アドレス)?

4

2 に答える 2

2

最初のブートアップでは、ページングが無効になっているため、線形アドレス = 物理アドレスになります。

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 のオプションではありません。

于 2020-01-11T21:38:15.487 に答える