存在するLinuxカーネルの開発(LKD)第3版、第12章エリアの下Robert Loveは次のように語っています。
特に、Linuxはメモリアドレッシングの2つのハードウェアの欠点を解決する必要があります。
一部のハードウェアデバイスは、特定のメモリアドレスに対してのみ直接メモリアクセス(DMA)を実行できます。
一部のアーキテクチャでは、仮想的に処理できるよりも大量のメモリを物理的に処理できます。したがって、一部のメモリはカーネルアドレス空間に永続的にマップされません。
私の質問:
- 最初は大丈夫です。 2はどういう意味ですか?
- 彼が意味するものは次のとおりです。一部のアーキテクチャでは、アドレスを指定できる仮想アドレスよりもアドレスを指定できる物理メモリが多いのですか?
- どうやってこれができますか?仮想アドレス空間は物理メモリより大きいか、少なくとも(存在する場合)物理メモリと同じであると考える。
- さらに、Virtual Address Space(VAS)が物理メモリよりも大きいため、一部のメモリはKAS(Kernel Address Space)に完全にマッピングされません。
しかし、KASには物理メモリだけがマッピングされているようです。上記の2番目の項目が何を意味するのか、そしてここで私が作っている間違った仮定が何であるかを教えてください。
答え1
PAE(物理アドレス拡張)彼が言ったのとまったく同じ音でした。
32ビットCPUは、システムにさらに多くのメモリがある場合でも、最大4 GBのメモリしかマッピングできません。ただし、PAEでは4GB以上を使用できますが、一度に4GBしかマッピングできません(単一プロセスでは4GB以上は使用できません)。
したがって、デフォルトでは、カーネルはアクティブに実行されているプロセスを変更すると、仮想メモリをそのプロセスで現在使用されている物理メモリに再マップします。