Linuxカーネルに関する技術情報を集めていくプロジェクトです。現在、Linuxカーネル2.6解読室の第2章までを公開中。
メモリが不足してくると参照頻度の低いページはtry_to_swap_out関数でスワップデバイスに追い出される. (詳しいアルゴリズムは後程説明する)
空きスワップ域を検索し、そこに物理メモリの内容を書き込み, 物理メモリを解放する. PTEにはスワップ先を示すインデックスを書き込んでおく.
まだ一度も書き込みを行っていないページ(Dビットの立っていないページ)の場合は, スワップデバイスに追い出さず, 単に物理メモリの解放とPTEのクリアを行う. スワップに追い出さずとも次にアクセスがあった場合, 同じ状態に復元することが可能である. (do_no_page関数)
共有モードでmmapされているファイルのスワップアウト処理では、メモリ内容をmmap元のファイルに書き戻すことにより実現している。次に再びこのファイルにアクセスがあった場合、ファイルから読み込み直すこと(filemap_nopage関数)により元の状態を復元できる。
ただし, アクセス頻度の高いページを追い出さないよう, アクセスビットが立っているページは対象外としている.
下図は、その状態を示している。スワップアウトされた空間もしばらくは、swapキャッシュ上に存在することになる。コピーオンライトモードの空間もそのスワップアウトの対象となり、その場合swapキャッシュとプロセスの間でページを共有する。
スワップキャッシュはしばらくすると古いものから次々とフリーメモリへと解放される。
(NIS)HirokazuTakahashi
2000年06月11日 (日) 22時29分57秒 JST1
[PageInfo]
LastUpdate: 2008-08-27 14:45:12, ModifiedBy: hiromichi-m
[Permissions]
view:all, edit:login users, delete/config:members