私はBovetとCesatiの "Understanding Linux Kernel"という本を読んでいます。第2章では、「Linuxでのページング」では、PAEを有効にしていない32のアーキテクチャーを使用して、ページの中間と上部のディレクトリーを除去する方法を説明しています。私は作者が何を意味しているのかについて問題があります。Linuxカーネルメモリ管理のページングレベル
彼らは治療で緩んでいて、直感的に理解できません。
物理アドレス拡張がない32ビットアーキテクチャでは、2つのページングレベルで十分です。 Linuxは本質的に、Page Top DirectoryとPage Middle Directoryフィールドがゼロビットを含んでいると言ってこれを排除します。ただし、Page Upter DirectoryとPage Middle Directoryは、32ビットおよび64ビットのアーキテクチャで同じコードを実行できるように、ポインタのシーケンス内で保持されます。カーネルは、Page Top DirectoryとPage Middle Directoryのエントリ数を1に設定し、これら2つのエントリをページグローバルディレクトリの適切なエントリにマッピングすることにより、Page Top DirectoryとPage Middle Directoryの位置を保持します。
誰かがこれをもっと美味しく説明できますか?
もう少し考えてみましたが、これが意味をなさないかどうか確認してください。したがって、基本的に、このMMUハードウェアは、TLBミスのページ階層を通り抜けます。このため、基本的に単一のエントリPMDとPUDは気付かれません。しかし、残りのカーネルコードでは、4レベルのページングの統一されたインタフェースを提示する必要があります。したがって、1つのエントリPUDと1つのエントリPMDがあり、それぞれがそのアドレスの対応するPGDエントリとまったく同じ値を含むようにエミュレートされます。 – subramanian
はい。 PAEのないプロセッサでは、MMUは下位の2つのテーブルしか期待していませんが、カーネルは4つすべてを想定しているため、上位2つを1つのエントリで作成する必要があります。できるだけ回答としてコメントを追加してください。 – ughoavgfhw
私の説明には、Linuxiosがそれを私に明確に説明する穴があったと思います。私は彼の答えを正しいものとしてマークします。 – subramanian