メモリの割り当て
[カーネルのメモリ割り当て関数]
kmem_alloc()
仮想アドレス空間と物理ページを割り当てる。
物理ページはPageOutされない。
物理ページはPageOutされない。
kmem_alloc_pageable()
仮想アドレス空間のみ割り当てて、物理ページは割り当てない。
kmem_alloc_wired()
kmem_alloc()に同じ
kmem_alloc_contig()
kmem_alloc()と同じだが、割り当てる物理ページは連続ページとなる。
[関連関数]
vm_page_alloc(object, offset)
vm_page_grab()でFreeキューから物理ページを取得してvm_objectに割り当てる(object->memqにつなげる)
vm_map_wire()
再帰呼び出し用の内部ルーチンvm_map_wire_nested()を呼び出す。vm_map_wire_nested()はvm_fault_wire()を呼び出して物理ページをマップしていく。vmmapをたどる際submapを見つけたら自分を再帰呼出しする。
vm_fault_wire()
pmapを設定して仮想アドレスに対して物理ページをマップする。
vm_fault()を呼び出すことでページフォルトをシミュレートして割り当てを行なう。
vm_fault()を呼び出すことでページフォルトをシミュレートして割り当てを行なう。
[関連ページ]
ページフォルト