「単一のプロセスでさえ、システムの物理メモリよりも大きな仮想アドレス空間を持つことができる」ことを知っているので、どのカーネルコードが物理メモリよりも大きな仮想メモリを作成する責任があるか知りたいですか?
2 つ目は、コードを変更して少し大きくすることはできますか? コードを変更して仮想メモリを拡張すると、パフォーマンス上の利点はありますか?
すべてのメモリ管理(およびアドレス空間)管理コードが含まれます。
アプリケーションの観点からは、より多くの仮想メモリ(カーネルがMMUを制御し、ページフォールトを処理する)、特にmmap(2)、mprotect(2)、madvise(2)、execve(2)システムコールを理解する必要があります。アプリケーションは、これらのシステムコールを使用してアドレス空間を変更します。proc(5)ファイルシステムを使用してクエリを実行できます。たとえばcat /proc/self/maps
、それを実行しているプロセスのアドレス空間を示していますcat
AdvancedLinuxProgrammingもお読みください。VDSOとASLRの詳細をご覧ください。
カーネル内では、関連するソースコードは主にそのmm /サブディレクトリです(ただし、ほぼすべてのファイルシステムにmmap
特定のコードがあり、ページフォールトもスケジューリングなどに関連しています...)