More Related Content
Similar to Bsd5.10.1 (12)
Bsd5.10.1
- 2. 5.10.1(P.214~215)の流れ
● vnodeページャについて概説
● 5.10.1の流れ
●
vnodeページャの特徴
● vnodeページャの処理の流れ
– vnodeの新規作成
– ページイン要求
– 解放するページの保存
– ファイルがプライベートマップされている場合
● 従来のBSDカーネルとFreeBSDの違い
- 3. vnodeページャの特徴
● vnodeページャ
●
ファイルシステム上のファイルをマップするオブ
ジェクトを管理する
●
ファイルはopenによって明示的にオープン、あるい
はexecによって暗黙的にオープン
●
(↑のいずれの場合でも)システムはそのファイルに
対応するvnodeを見つけるか、もし存在しなければ
新しく作らなければならない。
※ページャ
カーネルモジュールの1つで、ページにデータを充填したり、内容
が更新されたページに対応するメモリを他の用途に割り当てなけれ
ばならなくなった時に、それを保管する処理を行う(用語集 P.686)
- 4. vnodeページャの処理の流れ
● vnodeの新規作成
●
ページ内のファイル保持のためのオブジェクト確保
し、そのオブジェクトにvnodeページャを割り当て
る。そのページャハンドルはvnodeを指し、固有
データにファイルのサイズを設定する。
– vnode_pager_alloc関数
→sys/vm/vnode_pager.cの109~176行
●
vnodeサイズが変更されたことが通知される
– vnode_pager_setsize関数
→sys/vm/vnode_pager.cの292~374行
- 5. vnodeページャの処理の流れ
● ページイン要求
●
ページの読み込み
– 必要なのは要求されたページのみ。しかしpgo_getpages
関数は他のページも(同時読み込みが可能なら)読み込
む。
– vnode_pager_getpages関数
→vm/vnode_pager.cの609~626行
609 vnode_pager_getpages(object, m, count, reqpage)
610 vm_object_t object;
611 vm_page_t *m;
612 int count;
613 int reqpage;
614 {
615 int rtval;
616 struct vnode *vp;
617 int bytes = count * PAGE_SIZE;
618
619 vp = object->handle;
620 VM_OBJECT_UNLOCK(object);
621 rtval = VOP_GETPAGES(vp, m, bytes, reqpage, 0);
622 KASSERT(rtval != EOPNOTSUPP,
623 ("vnode_pager: FS getpages not implementedn"));
624 VM_OBJECT_LOCK(object);
625 return rtval;
626 }
- 6. vnodeページャの処理の流れ
● 入出力操作
●
vnodeページャの入力
– ページャが対応するページにファイルの内容を読み込む
ためにデバイスドライバのストラテジ関数を実行してい
る間、そのページをカーネルアドレス空間にマップする
(物理入出力バッファを使用)。ページ充填終了後にカー
ネルマップを解除し、物理入出力バッファを解放して
ページを返す。
– vnode_pager_input_smlfs関数
→vm/vnode_pager.cの421~524行
– vnode_pager_input_old関数
→vm/vnode_pager.cの527~594行
- 7. vnodeページャの処理の流れ
● 解放するページの保存
●
要求しているページに対応する配列内のインデック
スを渡す
– pgo_getpages関数→vm/vnode_pager.hの59行目
– vnode_pager_generic_getpages関数
→vm/vnode_pager.cの633~917行
● 要求されたページを書き出す
– pgo_putpages関数→vm/vnode_pager.hの60行目
– vnode_pager_generic_putpages関数
→vm/vnode_pager.cの982~1093行?
– 同時に書き出し可能なページ(要求されたページと同じ
ファイルシステムブロック内にあるすべてのページ)を書
き出す
- 8. vnodeページャの処理の流れ
● ファイルがプライベートマップされている場合
●
シャドウオブジェクトで修正されたページの管理
(ファイルシステムに書き出されないようにする)を
する。
●
そのため、プライベートマップされたオブジェクト
がダーティページをファイルに保存要求しない。
- 9. 従来のBSDカーネルとFreeBSDの違
い
● 従来のBSDカーネル
●
ファイルシステムと仮想記憶で独立したキャッシュ
を管理
● FreeBSD
●
ファイルシステムのキャッシャはなし。仮想記憶の
キャッシュが両方を管理
●
仕様変更のメリット
– カーネル内に確保できるアドレス空間の量がファイルシ
ステムのキャッシュで制限されることがなくなった
– 他にシステムメモリに対する要求がない場合は、すべて
のメモリをファイルシステムのキャッシュに使用可能