アドレス空間の管理
プロセスの持つアドレス空間は図1のように管理される。
管理の大元としてmm_struct構造体があり、プロセスのtask_structのmm,active_mmからポイントされている(mm,active_mmの詳細はプロセス参照)。mm_structではプロセスのコードエリアやデータエリアの開始アドレス(code_start,data_start,...)などの情報を持つ。また、そのプロセスが使用するPageDirectoryへのポインタpgdも持つ。コンテキストスイッチが発生した場合は、この値がCR3レジスタのロードされて、物理ページのマップが切り替わる。
プロセスが持つアドレス空間はvm_area_struct構造体で管理される。1つのvm_area_structは連続したアドレス空間を表している。mm_structのmmapリストにつながれて、プロセスの持つ全アドレス空間を管理している。
管理の大元としてmm_struct構造体があり、プロセスのtask_structのmm,active_mmからポイントされている(mm,active_mmの詳細はプロセス参照)。mm_structではプロセスのコードエリアやデータエリアの開始アドレス(code_start,data_start,...)などの情報を持つ。また、そのプロセスが使用するPageDirectoryへのポインタpgdも持つ。コンテキストスイッチが発生した場合は、この値がCR3レジスタのロードされて、物理ページのマップが切り替わる。
プロセスが持つアドレス空間はvm_area_struct構造体で管理される。1つのvm_area_structは連続したアドレス空間を表している。mm_structのmmapリストにつながれて、プロセスの持つ全アドレス空間を管理している。
図1アドレス空間の管理
各プロセスのアドレス空間は/proc/<PID>/mapsで確認できる。各プロセスのvm_area_structのリストが表示される。
実装箇所:task_mmu.c::show_map()
各プロセスのアドレス空間は/proc/<PID>/mapsで確認できる。各プロセスのvm_area_structのリストが表示される。
実装箇所:task_mmu.c::show_map()