メモリスワッピングは、オペレーティングシステムのパフォーマンス向上に役立つ、広く利用されている技術です。このプロセスにより、システムは必要に応じて物理メモリと仮想メモリを効率的に切り替えられます。
物理メモリ(RAM)は主に処理の実行に使われるため、常にすべての負荷に対応できるとは限りません。メモリが枯渇し、アプリケーションやプロセスを実行するために追加のメモリが必要になる場合もあります。
メモリスワッピングは、物理メモリとハードディスクの領域を組み合わせて、より大きな仮想アドレス空間を作り出すことで、この問題に対処できます。使用されていないメモリの内容はディスク領域にスワップされ、後から復元できます。その結果、物理メモリが解放され、ほかの処理を実行できるようになります。
ここからは、メモリスワッピングの仕組み、パフォーマンス向上への効果、メリット、制限事項など、重要なポイントを詳しく見ていきます。
詳しくはRAMをご覧ください。
メモリスワッピングの仕組みとパフォーマンス向上
メモリスワッピングとは、メモリを交換することです。このプロセスの主な目的は、メインメモリの利用効率を高めることです。
オペレーティングシステムでは、プロセスは優先度ベースのプリエンプティブスケジューリングに従って実行されます。より優先度の高いタスクを実行する必要が生じた場合、その実行に使えるメインメモリの領域を確保しなければなりません。そのため、システムは仮想メモリとストレージ領域を追加リソースとして利用します。これにより、プロセスをより高速に実行し、データを効率的に分析できます。
ストレージのディスク領域は、メモリの実行用記憶領域に相当する機能を果たします。このストレージ領域は「スワップ領域」と呼ばれます。物理RAMからスワップアウトされたプロセスは、このスワップ領域で実行されます。
デフォルトでは、オペレーティングシステムまたは仮想マシンのハイパーバイザーがメモリスワッピングのプロセスを管理します。ただし、必要に応じてユーザーがこの機能を無効にすることもできます。
物理RAMを完全に使い切り、追加のプロセスやアプリケーションが実行領域を必要とすると、メモリスワッピングが開始されます。オペレーティングシステムはこれを自動的に管理し、物理メモリ領域をスワップ領域にマッピングすることで、仮想メモリ容量(非物理RAM)を構成します。
このプロセス全体の主な目的は、コンピューターのハードウェアが実際に搭載している容量を超える、より多くの利用可能なメモリを実現することです。ユーザーはメモリをストレージのディスク領域まで拡張できます。これにより、安定性を保ちながら効率的なメモリ管理を実現できます。
スワップ領域またはスワップファイルとは?
コンピューターの物理メモリは十分な容量を備えていますが、多くの場合、さらに領域が必要になります。そこで、メモリの一部をディスクにスワップします。ハードドライブのスワップ領域は、物理メモリの代替として機能します。プロセスメモリのイメージを保持し、仮想メモリとして機能します。
コンピューターの物理メモリが不足すると、データをディスクに保存するために仮想メモリを利用します。コンピューターのオペレーティングシステムはスワップ領域を使い、実際よりも多くのメモリを搭載しているようにデバイスを見せます。
スワッピングとは、仮想メモリと物理メモリの間でデータを交換するプロセスであり、「スワップ領域」とはそのために使われるディスク領域を指します。実行中のプロセスは、RAMとディスク領域を組み合わせた仮想メモリを利用できます。RAMが容量に達すると、ハードドライブに保存された仮想メモリの一部であるスワップ領域が消費されます。
システムのメモリが不足すると、スワップファイルと呼ばれるシステムファイルがSSDまたはハードディスク上に一時的な記憶領域を生成します。このファイルは、非アクティブなアプリケーションからRAMの一部をスワップすることで、ほかの実行中のプログラムのためにメモリを解放します。
ユーザーは、WindowsやLinuxなどのオペレーティングシステムが提供するスワップ領域のデフォルト容量を、必要に応じて調整できます。仮想メモリを使いたくない場合は、完全に無効にすることもできます。
ただし、無効にした状態でメモリが不足すると、カーネルは十分な物理メモリを解放するため、実行中のプロセスをいくつか終了させます。スワップ領域を使うかどうかは、完全にユーザーの判断に委ねられます。
詳しく読む:メモリとストレージの違いとは?
メモリスワッピングのメリット
メモリスワッピングには、システムの最適化、マルチタスク性能の向上、継続的な処理のためのプロセスの優先順位付けなど、いくつかのメリットがあります。主なメリットは次のとおりです。
- メモリを最大限に活用: スワッピングによってメモリが解放され、より多くのアプリケーションをシームレスに実行できます。スワップファイルにより各プログラムに専用メモリが確保され、全体的なパフォーマンスが向上します。
- 継続的な処理: 優先度ベースのプロセススケジューリングではスワッピング方式を利用できます。これは、優先度の低い処理を高優先度のプロセスに置き換え、処理の中断を最小限に抑える方法です。
- システムの最適化: スワッピングにより、CPUは多くのタスクを同時に処理でき、プログラムの実行待ち時間を短縮できます。その結果、1つのメインメモリ内で多数のプロセスをCPUが管理しやすくなります。
- マルチタスク性能の向上: メモリスワッピングは、より多くのプログラムを同時かつ効率的に実行できるようにし、マルチプログラミングのレベル向上にも役立ちます。
メモリスワッピングの制限事項
メモリスワッピングには、パフォーマンスの遅延、容量の制限、情報の喪失など、いくつかのデメリットもあります。考えられる主な欠点は次のとおりです。
- パフォーマンス: メモリスワッピングによって起動された場合、ディスクストレージ領域は、プロセスの実行に使われる実際のRAMと同じパフォーマンスを発揮できません。
- ディスクの制限: スワップファイルはストレージメディアの信頼性とアクセス性に左右されるため、システムメモリほど信頼性が高くない場合があります。
- 容量: スワップ可能なメモリ容量は、オペレーティングシステムまたはハイパーバイザーが割り当てたスワップ領域によって制限されます。
- 情報の喪失: 大量のスワッピング中にコンピューターシステムの電源が失われると、ユーザーはプログラム関連の情報をすべて失う可能性があります。
- ページフォルトの増加: スワッピングの実装が不適切だと、複合的な処理によってページフォルトが増加し、処理速度が低下する可能性があります。
メモリスワッピングはどのようにパフォーマンスを向上させるのか?
メモリ管理におけるスワッピングの主な目的は、コンピューターのハードウェアが対応できる容量を超えるメモリを利用可能にすることです。物理メモリが割り当てられていても、プロセスがさらにメモリを必要とする場合があります。
メモリスワッピングにより、オペレーティングシステムとユーザーは、システムを物理RAMだけに制限せず、メモリをディスクまで拡張できます。
オペレーティングシステムまたはハイパーバイザーがメモリスワッピングのプロセスを管理します。スワップは通常、デフォルトで有効になっていますが、ユーザーは無効にすることもできます。実際のメモリスワッピングの手順とスワップファイルの作成は、オペレーティングシステムが自動的に制御します。
プロセスやアプリが物理RAMを使い果たし、より多くの領域を必要とすると、必要に応じて開始されます。追加のRAMが必要になると、物理メモリページの状態がスワップ領域に変換され、仮想メモリ容量(物理RAMではないメモリ容量)が実現します。
メモリスワッピングの例
スワッピングとは、プロセスを入れ替えることです。プロセスの入れ替えには、優先度ベースのプリエンプティブスケジューリングが使われます。つまり、より優先度の高いプロセスがシステムに入ると、メモリ管理によって優先度が最も低いプロセスが一時的にディスクへ移され、最優先のプロセスがメインメモリで実行されます。
優先度の低いプロセスは、最優先のプロセスが終了するとメモリに戻され、処理を続けます。この技術はロールイン/ロールアウトと呼ばれます。
ロード時にアドレスバインディングが行われる場合、メインメモリからページアウトされたプロセスは、メインメモリにページインされる際に同じアドレス空間を占有します。実行時バインディングの場合は、アドレスがリアルタイムで決定されるため、プロセスはメインメモリ内の任意のアドレス空間を利用できます。
プロセスを入れ替えると、メモリ内に複数の空き領域が生じます。これらの空き領域に対処するため、空き領域を結合して大きなメモリ領域を作成します。そのために、各手続きを可能な限り下方向へ移動させます。このプロセスはコンパクションと呼ばれ、CPU時間を多く消費するため、ほとんど適用されません。
たとえば、40+20+20Kの空き領域がある場合、合計の領域は利用できますが、連続しているわけではありません。そこでスワッピングにより、コンパクションによって80Kの領域を作成します。
スワッピングとページングの違いとは?
スワッピングとは、プロセスをメインメモリから二次メモリへ一時的に移動するプロセスです。二次メモリよりも高速なメインメモリを有効活用できます。ただし、RAMの容量には限りがあるため、休止中のプロセスは二次メモリに移されます。
一方、ページングはメモリ割り当てのプロセスであり、連続していない複数のメモリブロックに固定サイズの領域を割り当てます。通常、そのサイズは4KBです。ページングは常に、現在アクティブなページ間で行われます。
以下は、オペレーティングシステムにおけるページングとスワッピングの主な違いです。
- ページングは、メインメモリで使用するデータを二次記憶装置から保存・取得できる、メモリ管理技術です。一方、スワッピングはプロセスを一時的に一次メモリから二次メモリへ移動します。
- ページングはページを転送するため、スワッピングよりも柔軟です。一方、スワッピングは柔軟性が低くなります。
- スワッピングでは、多くのタスクがメインメモリで実行されています。一方、ページングでは、一部のプロセスがメインメモリで実行されています。
- 一次メモリと二次メモリの間で入れ替えられるプロセスをスワッピングと呼びます。これに対して、ページングでは、ページと呼ばれる同一サイズのメモリブロックがメインメモリと二次メモリの間を移動します。
- スワッピングによって、CPUはプロセスに高速にアクセスできます。一方、ページングでは仮想メモリを利用できます。
- スワッピングは高負荷のワークロードに適しています。一方、ページングは軽度から中程度のワークロードに適しています。
- スワッピングを使うとマルチプログラミングが可能になります。ページングでは、プロセスの物理アドレス空間を非連続にできるため、外部フラグメンテーションを防止できます。
ページングとスワッピングの徹底比較
ページングとスワッピングは、さまざまな観点から比較できます。主な違いは次のとおりです。
| 特徴 | ページング | スワッピング |
|---|---|---|
| 定義 | RAMで使用するデータを二次記憶装置から保存・取得できるようにするメモリ管理技術です。 | プロセスを一次メモリから二次メモリへ一時的に移動します。 |
| 基本事項 | ページングによって、プロセスのメモリアドレス空間を非連続にできます。 | スワッピングにより、オペレーティングシステムは複数のプログラムを同時に効率よく実行できます。 |
| 柔軟性 | プロセスのページだけを移動するため、ページングのほうが柔軟です。 | スワッピングはプロセス全体をRAMと二次記憶装置の間で往復させるため、柔軟性が低くなります。 |
| 主な機能 | ページングでは、ページは一次メモリと二次メモリの間で転送される同一サイズのメモリブロックです。 | スワップされるプロセスは、一次メモリと二次メモリの間を往復します。 |
| マルチプログラミング | ページングにより、より多くのプロセスをメインメモリで実行できます。 | スワッピングでメインメモリ上で実行できるアプリケーション数は、ページングより少なくなります。 |
| ワークロード | 高負荷のワークロードにはスワッピングが適しています。 | 軽度から中程度のワークロードには、ページングが適しています。 |
| 用途 | ページングでは仮想メモリを利用できます。 | スワッピングにより、CPUはプロセスにより高速にアクセスできます。 |
| プロセス | スワッピングでは、多くのプロセスがメインメモリで実行されます。 | ページングでは、一部のプログラムがメインメモリで実行されます。 |
要点:メモリスワッピングとは?
OSのスワッピング機能は、停止中または非アクティブなプロセスをメインメモリから二次メモリへ一時的に移動することで、メモリを適切に使用できるようにします。主なメリットの1つは、スワッピング技術によってRAMを適切に利用し、すべてのプロセスでメモリを利用可能にできることです。
スワッピング技術の主な欠点は、切り替えアルゴリズムが十分に優れていない場合、システムのパフォーマンスが低下することです。スワッピングは、正しく行えばマシンをスムーズに動作させるうえで非常に効果的です。しかし、正しく行われなければ、動作が遅くなったり、システム障害が発生したりする可能性があります。
詳しく読む:メモリ管理。