Mac OS Xのカーネル Xnuのメモ書き
最近更新したページ

メモリの割り当て



[カーネルのメモリ割り当て関数]
kmem_alloc()
仮想アドレス空間と物理ページを割り当てる。
物理ページは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()を呼び出すことでページフォルトをシミュレートして割り当てを行なう。

[関連ページ]
ページフォルト

最終更新 2006/06/11 18:02:57 - kztomita
(2006/05/29 01:17:18 作成)