More Related Content
Similar to Bsd5.12.3 (20)
Bsd5.12.3
- 2. 5.12.3(P.235~236)の流れ
● スワッピングの解説
● 5.12.3の流れ
●
スワッピングとは
● スワップ処理
● スワップアウト処理
●
4.4BSDおよびFreeBSDのスワップアウトデーモン
●
スワップアウトの仕組み
- 3. スワッピングとは
● 深刻なメモリ不足への対策としてスワッピング
がある。以下のいずれかの条件の時にスワッピ
ングが行われる
●
ページプロセスによるメモリの解放では間に合わな
いぐらいのメモリ不足
● プロセスが10秒以上完全に動作を停止
※スワッピング
主記憶が不足した時に、主記憶と二次記憶の間でプ
ロセス全体を移動させるメモリ管理アルゴリズム(用
語集。P.672)
- 4. スワップ処理
● 以下を含めて、プロセスを主記憶上から完全に
削除する。
● プロセスのページテーブル・まだスワップ空間にお
かれていないデータ・スタックセグメントのペー
ジ・ユーザ構造体&スレッドスタック
※一般的に、スワップスケジューリング機構は高負
荷環境では有効に動作しない。スワッピングアルゴ
リズムよりもページ置換アルゴリズムのほうが性能
がよい。
- 5. スワップアウト処理
● スワップアウトデーモンvmdaemon(プロセス番
号3)によって処理される。
● スワップアウトポリシーはvm_daemon関数で実装さ
れている。
– 「vm/vm_pageout.c lines 127, 128, 133, 146, 1478,
1484, 1492行」参照。
● 10秒以上休眠→スワップアウト
●
↑で該当するプロセスない&2秒以上休眠&十分な
メモリある→スワップアウト
– swap_idle_threshold「vm/vm_glue.c lines 865, 866,
867, 873, 874, 875, 975, 978, 998, 1003, 1016行」参
照。
※スワップアウトデーモン=ページアウトデーモン?
- 6. 4.4BSDおよびFreeBSDのスワップ
アウトデーモン
● 4.4BSDのスワップアウトデーモン
●
深刻なメモリ不足の際は、最も長時間レジデントな
状態にあった実行可能なプロセスをスワップアウト
– 特定のプロセスが完全に動作停止してしまうのを防ぐた
めに、スワップ対象のプロセスを順番に選択
● FreeBSDのスワップアウトデーモン
● 実行可能なプロセスをスワップアウトの対象としな
い
– 実行可能なプロセスがメモリ内に収まらなければデッド
ロックのリスクがあるが、昨今の計算機はメモリが充分
だから大丈夫
●
But クラウド普及&VMが沢山→メモリ不十分な計算機の環境
もあり得る昨今では、大丈夫とは言い切れないのでは!?
- 7. スワップアウトの仕組み
● ①スワップインプロセスがメモリ上にない
(P_INMEMはクリアされてる)
●
powerpc/powerpc/db_trace.c, line 141
● ②スワップアウト処理の間はPS_SWAPPINGOUTフ
ラグ有効
● vm/vm_glue.c lines 792, 839, 955, 1062, 1084, 1096
● sys/proc.h, line 667
● ③実行可能なプロセスをスワップアウト→実行
可能なプロセスのキューから取り除く
● ④プロセスのユーザ構造体とスレッドのカーネ
ルスタックにページングのマークをつける
→標準的なページアウトの仕組みで処理