Mac OS Xのカーネル Xnuのメモ書き

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()

最終更新 2006/05/29 01:01:17 - kztomita
(2006/03/27 13:06:55 作成)
添付ファイル
pmap2.png - kztomita
pmap.png - kztomita
pv_entry.png - kztomita


最近更新したページ