Linux本14章 - ページの回収処 理

プロセス空間で使用している実
ページ
回収の対象
基本戦略
ページキャッシュで使用している
実ページ
最近使っていない実ページを回収する
(1)activeリストの後ろから一定数取得
ゾーンごとに管理
プロセス空間としてアクセスされていたらactiveに戻
すリストに格納
(2)activeリスト, inactiveリストへの振り分け
activeリスト:最近アクセスされた
実ページ
activeキューからinactiveキューへ
の移動
ページキャッシュ、もしくはアクセスされていないな
らinactiveにするリストに格納
inactiveリスト:最近アクセスされ
ていない実ページ
(3)2で振り分けたリストをactive, inactiveリストの
先頭につなぐ
activeリスト、inactiveリストでの
管理
(1)ページに対するアクセスの判定
(2)無名ページの場合、スワップ領域の割り当てを行
う
無名ページの場合、ページテーブルエントリのスワッ
プエントリを設定
(3)ページテーブルエントリから実ページの参照をや
める
最近アクセスされていないものは
activeリストからinactiveリストに
移していく
回収処理の実装
実ページの回収はinactiveリストか
ら
inactiveキューからページを選択
し、解放
Linux本14章 - ページの回収処
ページキャッシュの場合、ページテーブルエントリを
クリア
メモリ上で変更されたページをディスク上に書き戻す
デマンドページングで割り当てら
れたときはまずactiveリストにつ
ながれる
理
PG_referencedフラグを利用
(4)ダーティページの書き戻し
ページキャッシュ、プロセス空間
非マップ
回収対象ページの管理構造
(5)バディシステムへページを返却
ページキャッシュにアクセスがあ
るとフラグを立てる
inactiveリストにつながっていて、
フラグが立っているときにアクセ
スした場合、activeリストに移す
少しずつプライオリティ(検索する数に関係する)を上
げながら実行
ページへのアクセスはカーネルが
感知できない
残りページが少なくなったときに
バディシステムから起こされる
kswapdデーモン
ページ数がしきい値を下回ったと
きに実行
回収処理の実体と実行の契機
最近アクセスされたかどうかの判
断。3種類に分類しそれぞれでやり
方が異なる。
プロセス空間マップ、非ページ
キャッシュ
ページテーブルエントリを参照し
て判断
回収処理の時点でのみアクセスの
判断、activeリストinactiveリスト
の移動を行う
本当に残りページが少なくなった
ときに呼び出される
try_to_free_page関数
上の二つのケース両方調べる
しきい値の判定はしない
ページキャッシュ、プロセス空間
マップ
PG_referencedフラグ
ページテーブルエントリ参照
それぞれはpage構造体で状態を管
理