[[PageNavi(internal24-navi)]]
{{{ comment
h2w-title:ページアウト
}}}
= ページアウト = #SECTION04360000000000000000
メモリが不足してくると参照頻度の低いページはtry_to_swap_out関数でスワップデバイスに追い出される. (詳しいアルゴリズムは後程説明する)
空きスワップ域を検索し、そこに物理メモリの内容を書き込み, 物理メモリを解放する. PTEにはスワップ先を示すインデックスを書き込んでおく.
まだ一度も書き込みを行っていないページ(Dビットの立っていないページ)の場合は, スワップデバイスに追い出さず, 単に物理メモリの解放とPTEのクリアを行う. スワップに追い出さずとも次にアクセスがあった場合, 同じ状態に復元することが可能である. (do_no_page関数)
(do_anonyous_page関数による0クリアされたメモリの割り当て, または、filemap_nopage関数によるファイルからの読み込み)
共有モードでmmapされているファイルのスワップアウト処理では、メモリ内容をmmap元のファイルに書き戻すことにより実現している。次に再びこのファイルにアクセスがあった場合、ファイルから読み込み直すこと(filemap_nopage関数)により元の状態を復元できる。
ただし, アクセス頻度の高いページを追い出さないよう, アクセスビットが立っているページは対象外としている.
下図は、その状態を示している。スワップアウトされた空間もしばらくは、swapキャッシュ上に存在することになる。コピーオンライトモードの空間もそのスワップアウトの対象となり、その場合swapキャッシュとプロセスの間でページを共有する。
[[Embed(internal24-images:img73.gif)]]
スワップキャッシュはしばらくすると古いものから次々とフリーメモリへと解放される。
[[Embed(internal24-images:img74.gif)]]
----
''(NIS)HirokazuTakahashi [[BR]]2000年12月09日 (土) 23時55分06秒 JST''1
[[PageNavi(internal24-navi)]]