Pager
Pagerはディスク上のデータなどをアドレス空間からアクセスできるようにする。Default Pager,Vnode
Pager,Device Pagerの三種類がある。
Default Pager
Vnode Pager
Device Pager
[関連ルーチン]
Pagerへのインタフェースはosfmk/vm/memory_object.cにある。
memory_object_data_request()
memory_object_data_return()
Default Pager
仮想記憶を実現するために補助記憶装置にページをPageOut/PageInする。
通常のVM Object(ページ)にはこのPagerが使用される。
通常のVM Object(ページ)にはこのPagerが使用される。
Vnode Pager
ファイルとアドレス空間のマッピングを行う。mmap()でファイルをアドレス空間にマッピングする場合に使用される。
Device Pager
I/O空間上のメモリなどハードウェア上のメモリなどをマップするのに使う。
[関連ルーチン]
Pagerへのインタフェースはosfmk/vm/memory_object.cにある。
memory_object_data_request()
Memory Object(Pager)にデータの取得を要求する。
vm_fault_page()でPageIn処理をするのに使われる。
Pagerの種類に応じて以下の各Requestルーチンを呼び出す。
dp_memory_object_data_request()
vnode_pager_data_request()
device_pager_data_request()
dp_memory_object_data_request()
vnode_pager_data_request()
device_pager_data_request()
memory_object_data_return()
ページアウト用カーネルスレッド(vm_pageout_iothread_continue())から呼び出される。
Pagerの種類に応じて以下の各Requestルーチンを呼び出す。
dp_memory_object_data_return()
vnode_pager_data_return()
device_pager_data_return()
dp_memory_object_data_return()
vnode_pager_data_return()
device_pager_data_return()