Default Pager
Rev.16を表示中。最新版はこちら。
作成中補助記憶装置へのPageOut/PageInを行う。
表1 vstructの内容(一部)
| フィールド | 内容 | 
|---|---|
| vs_mem_obj | |
| vs_control | |
| vs_readers | 処理中のReadRequest数 | 
| vs_writers | 処理中のWriteRequest数 | 
| vs_indirect | クラスタマップがIndirectマップ。(vsu_imapが有効) | 
| vsu_dmap | |
| vsu_imap | 
mem_obj->pagerがmagic numberだとvsであることを示す。
Paging Segment
仮想記憶を行う上でページアウトするデバイス、パーティション毎にPaging Segmentが作成されて管理される。Paging Segmentはpaging_segments[]からまとめて管理される(図1)。各Paging Segmentは各Segmentの空き容量を管理する。ps_pgnumが総ページ数でps_clcountが実際の空き容量となる(クラスタ数。ps_clshiftだけ右シフトするとページ数になる)。
Paging Segmentはdefault_pager_add_file(), default_pager_add_segment()によって作成される。default_pager_add_file()はスワップファイルをPagerに登録するルーチンでmacx_swapon()から呼ばれる。default_pager_add_segment()はスワップパーティションをPagerに登録するルーチン。

図1 Paging Segment
[関連関数]
dp_memory_object_data_request()
PageIn処理を行うDefault Pagerのエントリルーチン。
dp_memory_object_data_return()
PageOut処理を行うDefault Pagerのエントリルーチン。
default_pager_memory_object_create()vstructを構築する。
vm_object_pager_create()でVM ObjectにDefault
Pagerを割り当てる時に使われる。Default PagerはVM
Objectが作成された時には作られず、PageOut時にはじめて作成される。
pvs_cluster_read(vs, vs_offset, cnt)
ps_read_file()
vnode_pagein() - BSD側に実装
