ページテーブルの管理について学んでおり、VA to PA translation
4つのメモリアクセスが必要であることを学びました4-level page table
(TLBの欠落とページワークキャッシュの欠落を考慮)。
ただし、Linuxではfollow_page
PTW関数を使用し、その関数は内部的に呼び出されるため、その他をさらにfollow_page_mask
呼び出します。p4d_offset
pud_offset
pgd_offset
だから私の質問は、例えば呼び出されたらディレクトリの仮想アドレスをpud_offset
返し(私の意見では)、ディレクトリの実際のアドレスを取得するためにPTWをやり直す必要があるということです。PMD
PMD
それでは、memory accesses
4のアドレス変換はどうなりますか? 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
ページディレクトリとページテーブルエントリには、ページテーブルとページディレクトリの先頭の物理アドレスが含まれます。したがって、これらの場所を見つけるためにページテーブルナビゲーションを実行する必要はありません。
メモリアクセスはメモリ管理デバイスのハードウェアによって実行されるため、誤ったアドレスやマップされていないページにアクセスしようとするなど、一部のエラーが発生しない限り、アクセスはソフトウェアに透過的です。