Linuxカーネルがx86システムで仮想メモリを8MBから1GBに処理する方法

Linuxカーネルがx86システムで仮想メモリを8MBから1GBに処理する方法

Linuxカーネルでページングを有効にする方法を研究していますが、カーネルが8MBから1GBの仮想メモリをどのように処理するのか理解していません。私の言葉は、ブート段階でカーネルが非常に小さいページテーブルを画像にエンコードするということです。 swapper_pg_dirが指すこのページテーブルを使用すると、ページテーブルの最初の2つのエントリのみを書き込むことができます。各項目は4MBページを指します。したがって、カーネルは合計8 MBの仮想メモリしかアドレス指定できません。その後、カーネルは1GBの仮想メモリをすべて駆動するために2番目のレベルのページテーブルを保存する必要があります。この問題を解決するには、2番目のレベルのページテーブルエントリが配置されているバッファを取得できるいくつかのメモリアロケータ、つまりbootmemアロケータに依存する必要があります。

だから私の質問は:カーネルが仮想メモリを8MBから1GBまでどのように処理しますか?

答え1

問題が正確に何であるかよくわかりません。ページングユニットを用いて行った。ここを参照してください。https://stackoverflow.com/questions/18431261/how-does-x86-paging-work

896MB未満のページディレクトリはまだディレクトリに保存され、swapper_pg_dir最初の8MBが初期化された後に再初期化されます。 896MB以上、4096MB未満では状況がさらに複雑になり、4096MB以上では状況がさらに複雑になります。

関連情報