SlideShare a Scribd company logo
1 of 13
BSDカーネルの設計と実装
第5章
5.13.5 ページ利用情報の管理
BSD読書会
@geek_alice
機種依存のページ管理
● ページの利用と修正に関する情報をハードウェ
アから取得する必要がある。
● vm_pmap構造体を用いる
非機種依存のページ管理
● ハードウェアのマッピングテーブルの詳細を理
解しなくても、pmapモジュールが参照と修正
ビット情報の問い合わせや、初期化を行うイン
ターフェースを提供してくれる。
ページアウトデーモンの役割
● ページの参照ビットを初期化する。
● ページの利用カウントを更新する。
マッピングが存在しないページへの問い合
わせ
マッピングが削除されている場合、ハードウェ
アが管理するページテーブルやTLB以外にもど
こかで管理されなければいけない。
マッピングが存在しないページへの問い合
わせ
● vm_page構造体のdirtyフィールドにページの
修正情報を保管する。
● dirtyビットが設定されていれば問い合わせに対
してTRUEを返す。
● これは過去の情報なので、そのページの現行の
マッピングに対応するページテーブルエントリ
の状態ビットも調べる。
vm_page構造体
struct vm_page {
● TAILQ_ENTRY(vm_page) pageq; /* page queue or free list (Q) */
●TAILQ_ENTRY(vm_page) listq; /* pages in same object (O) */
●vm_object_t object; /* which object am I in (O,P)*/
●
vm_pindex_t pindex; /* offset into object (O,P) */
●
vm_paddr_t phys_addr; /* physical address of page */
●
struct md_page md; /* machine dependant stuff */
●uint8_t queue; /* page queue index (P,Q) */
●int8_t segind;
●short hold_count; /* page hold count (P) */
●uint8_t order; /* index of the buddy queue */
●uint8_t pool;
●
u_short cow; /* page cow mapping count (P) */
●
u_int wire_count; /* wired down maps refs (P) */
●
uint8_t aflags; /* access is atomic */
●uint8_t oflags; /* page VPO_* flags (O) */
●uint16_t flags; /* page PG_* flags (P) */
●u_char act_count; /* page usage count (P) */
●u_char busy; /* page busy count (O) */
●vm_page_bits_t valid; /* map of valid DEV_BSIZE chunks (O) */
●
vm_page_bits_t dirty; /* map of dirty DEV_BSIZE chunks (M) */
●
};
act_countフィールドとflagsに
ページの参照情報が保持される
(ページアウトデーモンによっ
て定期的に更新される)
pmap_ts_referenced()関数
● ページアウトデーモンから呼び出される
● ページの参照数を取得する関数
●
管理対象外の物理ページが指定されると0を返す
● pv_entry構造体を走査してpv_entryに対応する
ページテーブルエントリの参照ビットを調べて初
期化する
● 発見された参照ビットの数を返す
5.13.6 物理ページの初期化
仮想記憶関数
物理メモリを初期化するための高次の関数が2つ用
意されている。
● pmap_zero_page()
● 物理アドレスを受け取って、そのページをゼロ充填す
る。内部ではbzero()を用いる。
● pmap_copy_page()
● 2つの物理アドレスを受け取り、最初のページの内容を次
のページにコピーする。内部ではbcopy()を用いる。
5.13.7 内部データ構造の管理
pmap_pinit()関数
●
機種依存のvm_pmap構造体の実態を作成す
る。
● fork,execを実行する際に新しいアドレス空間
を作成するためにvmspace_fork(),
vmspace_exec()関数によって使用される。
pmap_release()関数
● pmapに使われているの資源を開放する。
●
プロセスが終了した際にvmspaceを開放する
ために、vmspace_free()関数が使用される。

More Related Content

Viewers also liked (9)

Challenger program
Challenger programChallenger program
Challenger program
 
Libro software project management
Libro software project managementLibro software project management
Libro software project management
 
Cc whats up_with_global_warming
Cc whats up_with_global_warmingCc whats up_with_global_warming
Cc whats up_with_global_warming
 
Bsd daemon read
Bsd daemon read Bsd daemon read
Bsd daemon read
 
Cc whats up_with_global_warming
Cc whats up_with_global_warmingCc whats up_with_global_warming
Cc whats up_with_global_warming
 
Employer branding through Social Media
Employer branding through Social MediaEmployer branding through Social Media
Employer branding through Social Media
 
Periodic Classification
Periodic ClassificationPeriodic Classification
Periodic Classification
 
Human eye class 10
Human eye class 10Human eye class 10
Human eye class 10
 
Презентация iWowWe
Презентация iWowWe Презентация iWowWe
Презентация iWowWe
 

Bs dread5.13.5