FE EXAM

スワッピング(swapping)

プロセス全体を主記憶と補助記憶の間でまるごと退避・復帰させる仕組み。

INTERACTIVE VISUALIZATION
主記憶
補助記憶
移動中
フェーズ
idle
主記憶使用量
7/10
退避中のプロセス
1
シナリオ
ステップ1 / 5
STEP 1/5主記憶が不足主記憶(=メインメモリ)にプロセスAとBが入っていますが、新しいプロセスCを動かしたいのに空きが足りません。主記憶の容量は 10、AとBで 7 を使っており、Cの 5 を入れる余裕がない状態です。プロセス(=実行中のプログラム1つ分)をまるごと扱うのがスワッピングの特徴です。
主記憶(メインメモリ)プロセスAプロセスB補助記憶(スワップ領域)プロセスC
スワップの流れ
スワップアウト:主記憶 → 補助記憶(プロセスをまるごと退避)
スワップイン:補助記憶 → 主記憶(退避したプロセスを復帰)
解説

📌
スワッピングとは

主記憶補助記憶B退避

スワッピングとは、主記憶(=メインメモリ)が不足したとき、プロセス(=実行中のプログラム1つ分)を主記憶と補助記憶の間でまるごと入れ替える仕組みのことです。退避することをスワップアウト、戻すことをスワップインといいます。

身近な例で考えると、狭い作業机と大きな書庫の関係に似ています。机(=主記憶)に書類を全部広げられないので、今使わない書類の束をまるごと書庫(=補助記憶)にしまい、必要になったらまた机に戻します。1束まるごと動かすのがスワッピングの特徴です。

上のツールで▶ボタンを押すと、主記憶が足りないときにプロセスBを補助記憶へ退避し、空いた領域に別のプロセスを置く流れを確認できます。

⚖️
ページングとの違い

スワッピングと似た仕組みにページングがあります。どちらも主記憶と補助記憶を行き来させますが、動かす単位(粒度)が違います。

項目スワッピングページング
動かす単位プロセス全体(粒度が大きい)ページ単位(細かい)
読み込み量まるごと全部必要な分だけ
現代OS補助的に併用中心的に使用

スワッピングはプロセスを丸ごと動かすため、退避・復帰のたびに大きなデータをやり取りします。一方ページングはページ単位(=メモリを一定サイズに区切った単位)で必要な分だけ動かすので無駄が少なく、現代のOSはページ単位の管理が中心です。

💾
スワップ領域の役割

物理メモリスワップ領域(見かけ上の拡張)+

スワップ領域とは、補助記憶(ディスク)上に確保された、退避されたプロセスやページを置くための専用領域のことです。スワップアウトされたデータはここに保存されます。

スワップ領域があることで、物理メモリの不足を補い、見かけ上のメモリを増やせます。実際の物理メモリが少なくても、当面使わないプロセスを退避しておけば、その分だけ多くのプロセスを同時に抱えられるようになります。これが仮想記憶(=実際のメモリより大きく見せかける仕組み)の土台です。

ただし補助記憶は主記憶よりずっと遅いため、スワップが多発すると性能が落ちます。上のツールの補助記憶(右側のボックス)が、このスワップ領域にあたります。

💡
なぜスワッピングが必要なのか

主記憶(満杯)プロセスAプロセスB新プロセスC補助記憶Bを退避すればCが入れるスワップアウト

主記憶(メインメモリ)は容量に限りがあります。プログラムを実行するとき、OSはそのプログラムを主記憶に読み込んでからCPUに渡します。しかし主記憶が満杯だと、新しいプログラムをどこにも置けません。

なぜ主記憶だけでは限界があるのか。主記憶は非常に高速ですが、その分コストが高く、大容量にしにくいという性質があります。一方、補助記憶(ハードディスクやSSDなど)は主記憶より容量が何十倍も大きく、コストも低い。この差を利用するのがスワッピングです。
主記憶:今すぐ使うデータを置く。容量は小さいが高速
補助記憶:しばらく使わないデータを退避する。容量は大きいが低速

身近な例で考えると、スマートフォンでアプリをバックグラウンドに移すのに似ています。表示していないアプリを「休眠状態」にしてメモリを空け、別のアプリのために領域を確保しています。スワッピングはこれと同じ発想をOSが自動で行う仕組みです。

⚠️
スワッピングのコスト(速度への影響)

主記憶アクセス:極めて速い補助記憶アクセス:主記憶のvs数十〜数百倍遅い

スワッピングには大きなコスト(代償)があります。補助記憶は主記憶より何十倍〜何百倍も遅いのです。そのため、スワップアウトとスワップインのたびに大量のデータを補助記憶からやり取りするスワッピングは、どうしても時間がかかります。

なぜ遅くなると困るのか。コンピュータの動作が目に見えてもたつき始める「スラッシング(=スワップが多発して処理がほぼ止まってしまう状態)」という問題に発展することがあります。OSはスワップが増えないよう、なるべく使われているプロセスを主記憶に保つように工夫しています。
スワップが少ない:補助記憶のやり取りが少なく、快適に動く
スワップが多発:補助記憶のやり取りが増え、全体の処理が大幅に遅くなる

まとめると、スワッピングは「主記憶の限界を補助記憶で補う便利な仕組みだが、多用すると速度が落ちる」というトレードオフの関係にあります。同時に起動するプログラムを増やしすぎると動作が遅くなるのは、このスワッピングが多発しているからと考えられます。

練習問題

🎯
基本情報技術者 練習問題

Q1.スワッピングの説明として最も適切なものはどれか。
A.プロセス全体を主記憶と補助記憶の間でまるごと退避・復帰させる仕組み
B.ページ単位で必要な分だけ主記憶へ読み込む方式
C.CPUを一定時間ごとに切り替えて複数プロセスを実行する方式
D.主記憶を固定長の区画に分割して管理する方式
Q2.スワッピングとページングの違いとして正しいものはどれか。
A.スワッピングはページ単位、ページングはプロセス全体を扱う
B.スワッピングはプロセス全体(粒度が大きい)、ページングはページ単位(細かく必要な分だけ)を扱う
C.両者はまったく同じ意味である
D.ページングは補助記憶を使わない
Q3.スワップ領域の役割として正しいものはどれか。
A.CPU内部に置かれ、計算を高速化する記憶領域である
B.補助記憶上に確保され、退避されたプロセスやページを置く専用領域である
C.主記憶の一部で、OSのプログラムだけを置く領域である
D.ネットワーク越しに他のPCのメモリを借りる領域である

関連コンテンツ