レベル4ページテーブルからVAからPAへの変換には4つのメモリアクセスのみが必要な方法

レベル4ページテーブルからVAからPAへの変換には4つのメモリアクセスのみが必要な方法

ページテーブルの管理について学んでおり、VA to PA translation4つのメモリアクセスが必要であることを学びました4-level page table(TLBの欠落とページワークキャッシュの欠落を考慮)。

ただし、Linuxではfollow_pagePTW関数を使用し、その関数は内部的に呼び出されるため、その他をさらにfollow_page_mask呼び出します。p4d_offsetpud_offsetpgd_offset

だから私の質問は、例えば呼び出されたらディレクトリの仮想アドレスをpud_offset返し(私の意見では)、ディレクトリの実際のアドレスを取得するためにPTWをやり直す必要があるということです。PMDPMD

それでは、memory accesses4のアドレス変換はどうなりますか? 4つ以上ではないですか?

答え1

人々がx86で4段階のページテーブルを使用する仮想物理アドレス変換には最大4つのメモリアクセスが必要であると言うのは、線形をデコードするためにCPU(厳密にはMMU)が実行する必要があることを意味します。メモリ。アドレスを物理アドレスに変換します。

このプロセスは、ボリューム3Aに詳細に記載されている。インテル®64およびIA-32アーキテクチャーソフトウェア開発者マニュアル、セクション4.5。 4KiBページを持つ4レベルモード(最悪の場合)では、線形アドレスは次のように設定されます。

47-39 38-30 29~21日 20~12日 11-0
PML4 ディレクトリポインタ 目次 テーブル オフセット

これらのアドレスが与えられると、完全なアドレスデコードが必要な場合、CPUは次のことを行う必要があります。

  • CR3関連するPML4エントリを見つけるためにデフォルト値とPML4値を使用します(1つのメモリアクセス)。
  • PML4エントリに対応するページディレクトリポインタテーブルからディレクトリポインタへのエントリを読み込みます(1つのメモリアクセス)。
  • ページディレクトリからそのディレクトリのエントリを読み込みます(1つのメモリアクセス)。
  • ページテーブルからテーブルのエントリを読み込みます(一度のメモリアクセス)。

最後の読み出し結果は線形アドレスのオフセット部分と結合され、合計4回のメモリアクセス後に物理アドレスを提供します。

カーネルは、ページエラーが発生した場合にのみ関与します。これを処理するには、CPUが理想的に行うよりも多くの作業を行う必要があります。

答え2

ページディレクトリとページテーブルエントリには、ページテーブルとページディレクトリの先頭の物理アドレスが含まれます。したがって、これらの場所を見つけるためにページテーブルナビゲーションを実行する必要はありません。

メモリアクセスはメモリ管理デバイスのハードウェアによって実行されるため、誤ったアドレスやマップされていないページにアクセスしようとするなど、一部のエラーが発生しない限り、アクセスはソフトウェアに透過的です。

関連情報