図1 スワップアウト処理。使用中の実メモリーから内容一部を取り出し,ハード・ディスクに退避します。
図1 スワップアウト処理。使用中の実メモリーから内容一部を取り出し,ハード・ディスクに退避します。
[画像のクリックで拡大表示]

 メイン・メモリー(実メモリー)が不足した場合,使用中の実メモリーから内容の一部を取り出し,ハード・ディスクに退避する処理です。退避することで空きメモリーを作成します。退避は,ページと呼ばれる,実メモリーをいくつかに分割している単位で行われます。

 実メモリーが不足すると,カーネルはさまざまな方法で空いている実メモリーを確保しようとします。スワップアウトは,その一環で実行されます。具体的には図1のように実行されます。

(1)ハード・ディスクに退避する対象は,最近アクセスされていない使用中のページから選びます。使用中のページは使用頻度によって「Active」(高)と「Inactive」(低)という2つの状態で管理されています。退避対象は,Inactive状態のページの中から選ばれます。ここでは,「実ページP」が選ばれたことにします。

(2)ハード・ディスク上の退避先(スワップアウト先)を決定し,実ページPの内容を退避先(ここでは「S」)に書き込みます。

(3)実ページと仮想ページの対応を管理している,プロセスの対応表を更新します。仮想ページはプロセスが直接アクセスできるメモリーです。例えば,仮想ページ「V」,対応する実ページ「あり」,実ページ「P」と,対応表に書かれているとします。これは,実ページPが仮想ページVに割り当てられているという意味です。先ほど,実ページPの内容をSに退避しましたから,Sが仮想ページVに割り当てられるように書き換えます。具体的には,仮想ページ「V」,対応する実ページ「なし」,スワップアウト先「S」にします。

(4)これで実ページPを解放でき,解放して空きとなったページは別の用途に使えます。