Linux はメモリ管理に 3 つのレベルのページ テーブルを使用することを知っています。
ページ テーブルの内容について混乱しました。ページ テーブルには次のレベルのページ テーブルのベース アドレスが含まれていますか、それともページ フレーム番号が含まれていますか?
ページフレーム番号が含まれている場合、その特定のページテーブルのベースアドレスはどのように取得されますか?それはどこに保存されますか?
誰かが私にこれを明確にしてくれたら素晴らしいでしょう.
Linux はメモリ管理に 3 つのレベルのページ テーブルを使用することを知っています。
ページ テーブルの内容について混乱しました。ページ テーブルには次のレベルのページ テーブルのベース アドレスが含まれていますか、それともページ フレーム番号が含まれていますか?
ページフレーム番号が含まれている場合、その特定のページテーブルのベースアドレスはどのように取得されますか?それはどこに保存されますか?
誰かが私にこれを明確にしてくれたら素晴らしいでしょう.
x86(/ 64)について話している場合、すべてのページテーブルエントリ(ターミナル1を除く)には次のページテーブルの物理アドレスが含まれ、ターミナルPTEには実際のコード/データページの物理アドレスが含まれます。
ページテーブルはそれ自体がページとして編成されているため、それらの物理アドレスは当然ページサイズの倍数になります。
完全な物理アドレスをPTEに格納することはほとんど意味がなく、最下位12ビットは常にゼロ(ページサイズが4KBの場合)であるため、PTEには格納されません(PTEで回復されたスペースが使用されます)。カーネル/ユーザー、読み取り専用/書き込み可能、実行可能、存在、ダーティ、アクセスなどの制御フラグ用)。このように切り捨てられたアドレスは、ページ番号に他ならないため、一般にページフレーム番号と呼ばれます(アドレス0のページの0から、アドレス4096のページの1までのすべてのページを数える場合など)。
すべての厄介な詳細を含むあなたの質問に対する最終的な答えは、関連するCPUマニュアルにあります。