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

vmmap


Rev.9を表示中。最新版はこちら

スレッドの仮想アドレス空間を管理しているデータ構造を図1に示す。各スレッドのthread構造体のmapポインタが、仮想アドレス管理のためデータの大元、vm_mapへのポインタを持つ。vm_mapにはvm_map_entryのリストがあり、そのスレッドにどの仮想アドレス領域が割り当てられているかを管理している。1つのvm_map_entryが1つの連続した仮想アドレス領域を示す。また、pmapポインタは仮想→物理アドレスへ変換を行なうためのPageTableへのポインタを保持している(参照pmap)。


図1 論理アドレス空間の管理

*1 submap
objectは共用体で、vm_map_entry_t.is_sub_map == 0ならvm_object。1ならvm_mapでSubmapになる。Submapは複数のプロセスでマップを共用する時に使用する。


表1 vm_map_entry内の主なフィールド
フィールド
意味
vme_start
Regionの開始仮想アドレス
vme_end
Regionの終了仮想アドレス
object
vm_objectかSubmapが入る共用体。
is_sub_map = TRUEだとSubmap。
is_shared

is_sub_map
objectはsub_mapである
needs_copy
Copy On Writeが必要なRegionの場合TRUE
protection
Regionへ許可されているアクセス種別。
VM_PROT_READ    Read可
VM_PROT_WRITE   Write可
VM_PROT_EXECUTE コードの実行可
inheritance
vm_map_fork()でvmmapを複製する時の動作
VM_INHERIT_NONE   複製しない
VM_INHERIT_SHARE  共有する
VM_INHERIT_COPY   コピーする(実際にはページをReadOnlyにしてCOWの設定をする)



最終更新 2006/06/10 17:04:15 - kztomita
(2006/03/27 13:06:35 作成)
添付ファイル
vmmap.png - kztomita


最近更新したページ