pmap
Rev.5を表示中。最新版はこちら。
pmapでは仮想→物理アドレスのマッピングを管理する。変換テーブルの実体はPageDirectoryになる(PageDirectoryの構造はCPUのマニュアル参照)。pmap内のdirbase,pdirbaseがPageDirecotryを指す。pdirbaseは物理アドレスを保持する。図1 pmapの構造 (i386の場合)
アドレス空間は各スレッド毎に存在するので、pmapも各スレッド毎に存在する(図2)。カーネル空間のpmapはkernel_mapからポイントされている。
図2 pmapの種類
物理ページ管理のためにpv_entryがある。各pv_entryは物理ページ1つに対応しており、ページ数分並んだ配列をpv_head_tableが指している(図3)。
pv_entryのpmapはその物理ページがが属しているpmapへのポインタを持ち、vaはその物理ページに対応する仮想アドレスを保持する。メモリの頭の方(〜avail_start)はカーネルが使用するため、これに該当する物理ページのpv_entryをpmap_init()でカーネル用に設定している。
これらのページは、カーネル空間なのでpmapはkernel_pmapを指し、vaはVM_MIN_KERNEL_ADDRESSを先頭にPAGE_SIZEずつインクリメントした値を設定する。
図3 pv_entry
[関連関数]
pmap_init()
i386_vm_init()