ページアウト

メモリが不足してくると参照頻度の低いページはtry_to_swap_out関数でスワップデバイスに追い出される. (詳しいアルゴリズムは後程説明する)

空きスワップ域を検索し、そこに物理メモリの内容を書き込み, 物理メモリを解放する. PTEにはスワップ先を示すインデックスを書き込んでおく.

まだ一度も書き込みを行っていないページ(Dビットの立っていないページ)の場合は, スワップデバイスに追い出さず, 単に物理メモリの解放とPTEのクリアを行う. スワップに追い出さずとも次にアクセスがあった場合, 同じ状態に復元することが可能である. (do_no_page関数)

(do_anonyous_page関数による0クリアされたメモリの割り当て, または、filemap_nopage関数によるファイルからの読み込み)

共有モードでmmapされているファイルのスワップアウト処理では、メモリ内容をmmap元のファイルに書き戻すことにより実現している。次に再びこのファイルにアクセスがあった場合、ファイルから読み込み直すこと(filemap_nopage関数)により元の状態を復元できる。

ただし, アクセス頻度の高いページを追い出さないよう, アクセスビットが立っているページは対象外としている.

下図は、その状態を示している。スワップアウトされた空間もしばらくは、swapキャッシュ上に存在することになる。コピーオンライトモードの空間もそのスワップアウトの対象となり、その場合swapキャッシュとプロセスの間でページを共有する。

img66.gif

スワップキャッシュはしばらくすると古いものから次々とフリーメモリへと解放される。

img67.gif

(NIS)HirokazuTakahashi
2000年06月11日 (日) 22時29分57秒 JST
1