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

Default Pager


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

作成中

Default Pagerは補助記憶装置へのPageOut/PageInを行う。

Default Pagerには管理用の構造体としてvstructがある。vstructとvm_objectとの関係を図1に示す。vm_objectのpagerが指すmemory_objectのpager値がISVSの値だとmemory_objectはvstructであることを意味する(vstructの先頭4Byteはmemory_objectと共有する)。


図1 vstruct


表1 vstructの内容(一部)
フィールド
内容
vs_mem_obj
vs_control
memory_object_controlへのポインタ。ここ経由でvm_objectへ遡ることができる。
vs_readers処理中のReadRequest数
vs_writers
処理中のWriteRequest数
vs_indirect
クラスタマップがIndirectマップ。(vsu_imapが有効)
vsu_dmap

vsu_imap

Default Pagerにおけるmemory_objectの実体。
mem_obj->pagerがmagic numberだとvsであることを示す。


図2 vsmap

Paging Segment

仮想記憶を行う上でページアウトするデバイス、パーティション毎にPaging Segmentが作成されて管理される。Paging Segmentはpaging_segments[]からまとめて管理される(図3)。

各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に登録するルーチン。



図3 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側に実装



最終更新 2006/06/14 17:20:47 - kztomita
(2006/06/13 15:40:10 作成)
添付ファイル
paging_segment.png - kztomita
vstruct.png - kztomita
vsmap.png - kztomita


最近更新したページ