図1 スワップイン処理。新たにメモリー領域を確保し,その中にハード・ディスクに退避した内容を読み出してアクセスできるようにします。
図1 スワップイン処理。新たにメモリー領域を確保し,その中にハード・ディスクに退避した内容を読み出してアクセスできるようにします。
[画像のクリックで拡大表示]

 メモリー不足によりハード・ディスクにいったん退避したメモリーの内容に,再びアクセスするための処理です。カーネルが新たにメモリー領域を割り当て,その中に退避しておいた内容をハード・ディスクから読み出してアクセスできるようにします。

 スワップインは図1のように動作します。図1では,プロセスAが使用している仮想ページVの内容はハード・ディスク内の「S」に退避しています。仮想ページは,プロセスが直接アクセスできるメモリーのことです。メモリーは「ページ」という単位で分割されています。

 実メモリーの各ページ(実ページ)と仮想ページの対応は表によって管理されています。図1の場合,その表には「仮想ページはV」「対応する実ページがない」「スワップアウト先はS」という情報が格納されています。ハード・ディスクに退避した処理(スワップアウト)によって記されたものです。

 スワップインは次のように実行されます。
(1)プロセスAが仮想ページVにアクセスします。
(2)表の中から仮想ページVの情報を検索します。このとき,対応する実ページはありません。対応する実ページがないという「ページフォルト例外」がCPUに通知されます。
(3)ページフォルト例外により,CPUはページフォルト例外ハンドラを実行します。ページフォルト例外ハンドラは,新しい実ページPを割り当て,スワップアウト先のSからページ内容を実ページPに読み込みます。また,先ほどの表を「仮想ページはV」「対応する実ページがある」「実ページはP」に更新します。
(4)ページフォルト例外ハンドラが処理を終えると,(1)の仮想ページVへのアクセスが再実行されます。
(5)再び,表の中から仮想ページVの情報を検索します。今度は実ページPが対応しているため,実ページPにアクセスし,(1)のメモリー・アクセスを処理が動作します。