コンピュータのオペレーティングシステムでは、メモリページングは、物理アドレスと論理アドレスの間に間接参照のレベルを導入し、プログラムが使用する物理メモリが連続していないことを可能にするメモリ管理方式です。 [ 1 ]これは、メモリ断片化の問題を回避するのにも役立ちます。
ページングは、アドレス空間の総サイズがシステムの物理メモリを超えることを可能にするために、ページフレームの割り当てと解放、二次記憶装置へのページの格納と二次記憶装置からのページの取得という関連技術と組み合わされることが多い。[ 2 ]歴史的な理由から、この技術はスワッピングと呼ばれることもある。
仮想メモリと組み合わせると、ページング仮想メモリと呼ばれます。この方式では、オペレーティングシステムは二次記憶装置から同じサイズのブロック(ページ)単位でデータを取得します。ページングは、現代のオペレーティングシステムにおける仮想メモリの実装において重要な要素であり、二次記憶装置を利用することで、プログラムが利用可能な物理メモリのサイズを超えることを可能にします。
論理アドレスを物理アドレスに効率的に変換するには、ハードウェアによるサポートが必要です。そのため、ページングメモリ機能は通常、CPUのメモリ管理ユニット(MMU)またはメモリ保護ユニット(MPU)を介してCPUに組み込まれており、オペレーティングシステムのカーネル内の特権システムコードによって別途有効化されます。例えば、 x86命令セットアーキテクチャ(ISA)を実装するCPUでは、メモリページングはCR0制御レジスタを介して有効化されます。
1960年代、スワッピングは初期のメモリ管理技術でした。プログラム全体またはセグメント全体がランダムアクセスメモリ(RAM)からディスクまたはドラムに「スワップアウト」(または「ロールアウト」)され、別のプログラムまたはセグメントがスワップイン(またはロールイン)されました。[ 3 ] [ 4 ]スワップアウトされたプログラムは現在の状態ですが、RAMが別のプログラムによって使用されている間は実行が中断されます。スワップアウトされたセグメントを持つプログラムは、そのセグメントが必要になるまで実行を続けることができ、その時点でセグメントがスワップインされるまで実行が中断されます。
プログラムには、異なるタイミングで同じメモリ領域を占有する複数のオーバーレイが含まれる場合があります。オーバーレイは、RAM を二次記憶装置にページングする方法ではなく、単にプログラムの RAM 使用量を最小限に抑える方法です。後続のアーキテクチャではメモリ分割が使用され、個々のプログラムセグメントが二次記憶装置と RAM 間で交換される単位となりました。セグメントは、プログラムのコードセグメントまたはデータセグメント全体、あるいは場合によっては他の大きなデータ構造でした。これらのセグメントはRAM 内に存在するときに連続している必要があり、断片化を解消するために追加の計算と移動が必要でした。[ 5 ]
フェランティのアトラスと、マンチェスター大学で開発されたアトラススーパーバイザー[ 6 ](1962年)は、メモリページングを実装した最初のシステムでした。ページングをサポートする初期のマシンとそのオペレーティングシステムには、IBM M44/44XとそのMOSオペレーティングシステム(1964年)[ 7 ] 、 SDS 940 [ 8 ]とBerkeley Timesharing System(1966年)、改良されたIBM System/360 Model 40とCP-40オペレーティングシステム(1967年)、IBM System/360 Model 67とTSS/360、CP/CMS、Michigan Terminal System(MTS)などのオペレーティングシステム(1967年)、 RCA 70/46とTime Sharing Operating System(TSOS)(1967年)、GE 645とMultics(1969年)、BBN設計のページングハードウェアとTENEXオペレーティングシステムを追加したDEC PDP-10(1969年)などがあります。
これらのマシン、およびメモリページングをサポートする後継マシンは、ページアドレスレジスタのセットまたはメモリ内ページテーブル[ d ]を使用して、プロセッサがRAM内の任意のページを、あたかも連続した論理アドレス空間であるかのように操作できるようにします。これらのページは、二次記憶装置[ a ]とRAMの間で交換される単位となりました。
プロセスが、現在RAM内のページフレームにマッピングされていないページを参照しようとすると、プロセッサはこの無効なメモリ参照をページフォルトとして扱い、プログラムからオペレーティングシステムに制御を移します。オペレーティングシステムは、次のことを行う必要があります。
すべてのページフレームが使用中の場合、オペレーティングシステムは、プログラムが必要とするページのために再利用するページフレームを選択する必要があります。追い出されたページフレームがプログラムによってデータ保持のために動的に割り当てられていた場合、またはRAMに読み込まれた後にプログラムによって変更されていた場合(つまり、「ダーティ」状態になっていた場合)、解放する前に二次記憶装置に書き出す必要があります。プログラムが後で追い出されたページを参照すると、別のページフォルトが発生し、ページをRAMに再度読み込む必要があります。
オペレーティングシステムが再利用するページフレームを選択する方法、つまりページ置換アルゴリズムは、効率に影響を与えます。オペレーティングシステムは、最も使用頻度の低いページフレームを予測します。これは多くの場合、最も使用頻度の低いページフレーム(LRU)アルゴリズム、またはプログラムのワーキングセットに基づくアルゴリズムによって行われます。応答性をさらに向上させるために、ページングシステムは、どのページがすぐに必要になるかを予測し、プログラムが参照する前にそれらを事前にRAMにロードしたり、長期間参照されていないページからページフレームを奪って利用可能にしたりすることがあります。一部のシステムでは、セキュリティを損なうデータ漏洩を防ぐために新しいページをクリアし、デバッグを容易にするためにインストール時に定義された値またはランダムな値に設定します。
純粋なデマンドページングを使用する場合、ページは参照されたときにのみロードされます。メモリマップドファイルから実行されるプログラムは、RAMにページが一切ロードされていない状態で開始されます。プログラムがページフォルトを起こすと、オペレーティングシステムは、メモリマップドファイル、ページングファイル、またはページデータを含むスワップパーティションなどのファイルから必要なページをRAMにコピーします。
システムによっては、デマンドページングのみを使用するものもある。つまり、ページが実際に要求されるまで待ってからRAMに読み込む。
他のシステムでは、RAMに存在しないページのうち、近いうちに必要になる可能性が高いページを推測し、そのページが要求される前にRAMにプリロードすることで、レイテンシを削減しようと試みています。(これは多くの場合、プリクリーニングと組み合わせて行われます。プリクリーニングとは、現在RAMにあるページのうち、近いうちに必要になる可能性が低いページを推測し、それらを事前にストレージに書き出す処理です。)
ページフォルトが発生すると、予測ページングシステムは参照されたページだけでなく、すぐに参照される可能性のある他のページも読み込みます。単純な予測ページングアルゴリズムは、まだ必要とされていない次の数ページを連続して読み込みます(参照の局所性を使用した予測)。これは、CPU のプリフェッチ入力キューに似ています。スワッププリフェッチは、十分な空きページがあれば、最近スワップアウトされたページをプリフェッチします。[ 9 ]
プログラムが終了した場合、ユーザーが同じプログラムを再度実行する可能性があるため、オペレーティングシステムはページの解放を遅らせることがあります。
システムによってはアプリケーションヒント機能があり、アプリケーションはページを利用可能にするよう要求し、遅延なく処理を続行できる場合があります。
空きページキューは、割り当て可能なページフレームのリストです。このキューが空にならないようにすることで、ページフォルトの処理に必要な計算量を最小限に抑えることができます。一部のオペレーティングシステムは、最近参照されていないページを定期的に検索し、ページフレームを解放して空きページキューに追加します。このプロセスは「ページスティール」と呼ばれます。一部のオペレーティングシステム[ e ]はページ再利用をサポートしています。プログラムがスティールされたページを参照してページフォルトを起こした場合、オペレーティングシステムはこれを検出し、内容をRAMに読み戻すことなくページフレームを復元します。
オペレーティングシステムは、定期的にダーティページを事前クリーンアップする場合があります。つまり、変更されたページを二次記憶装置に書き戻します[ a ]。これは、たとえその後さらに変更される可能性がある場合でも行われます。これにより、新しいプログラムが起動したり、新しいデータファイルが開かれたりする際に、新しいページフレームを取得するために必要なクリーンアップの量が最小限に抑えられ、応答性が向上します。(Unix系オペレーティングシステムは定期的に同期処理を使用してすべてのダーティページを事前クリーンアップします。Windows系オペレーティングシステムは「変更ページ書き込み」スレッドを使用します。)
システムによってはアプリケーションヒント機能が備わっており、アプリケーションはページをクリアまたはページアウトして、遅延なく処理を続行するように要求できます。
初期化が完了すると、ほとんどのプログラムは、プログラムが必要とするメモリ総量に比べて、ごく少数のコードページとデータページで動作します。最も頻繁にアクセスされるページはワーキングセットと呼ばれます。
ワーキングセットがシステム全体のページ数のごく一部である場合、仮想メモリシステムは最も効率的に動作し、ページフォールトの解決に費やされる計算量はごくわずかです。ワーキングセットが大きくなるにつれて、ページフォールトの解決は、その増加が臨界点に達するまでは管理可能な範囲にとどまります。その後、フォールトが劇的に増加し、フォールトの解決に費やされる時間が、プログラムが記述した目的の計算に費やされる時間を圧倒します。この状態はスラッシングと呼ばれます。スラッシングは、巨大なデータ構造を扱うプログラムで発生します。その大きなワーキングセットが継続的なページフォールトを引き起こし、システムを著しく遅くします。ページフォールトを解消するには、二次記憶装置からすぐに再読み込みする必要のあるページを解放する必要がある場合があります。[ a ]「スラッシング」は、仮想メモリシステム以外の文脈でも使用されます。たとえば、コンピューティングにおけるキャッシュの問題や、ネットワークにおけるシリーウィンドウ症候群を説明する場合などです。
最悪のケースはVAXプロセッサで発生する可能性があります。ページ境界をまたぐ単一のMOVL命令では、ソースオペランドが変位遅延アドレッシングモードを使用し、オペランドアドレスを含むロングワードがページ境界をまたぐ場合と、デスティネーションオペランドが変位遅延アドレッシングモードを使用し、オペランドアドレスを含むロングワードがページ境界をまたぐ場合があり、ソースとデスティネーションの両方がページ境界をまたぐ可能性があります。この単一の命令は10ページを参照します。すべてがRAMにない場合、それぞれがページフォルトを引き起こします。フォルトが発生するたびに、オペレーティングシステムは大規模なメモリ管理ルーチンを実行する必要があり、その過程で複数のI/Oが発生する可能性があり、これには他のプロセスページをディスクに書き込んだり、アクティブなプロセスのページをディスクから読み取ったりすることが含まれる場合があります。オペレーティングシステムがこのプログラムに10ページを割り当てることができない場合、ページフォルトを修復すると、命令が必要とする別のページが破棄され、命令を再開すると再びフォルトが発生します。
過剰なページングを減らし、スラッシングの問題を解決するには、同時に実行するプログラムの数を減らすか、コンピュータのRAM容量を増やすことで、プログラムごとに利用可能なページ数を増やすことができます。
マルチプログラミング環境やマルチユーザー環境では、コードとデータが別々のページに記述された同じプログラムを、複数のユーザーが同時に実行することがあります。RAMの使用量を最小限に抑えるため、すべてのユーザーがプログラムの単一コピーを共有します。各プロセスのページテーブルは、コードがアドレス指定されるページが共有コピーを指し、データがアドレス指定されるページが各プロセス固有の異なる物理ページを指すように設定されます。
異なるプログラムが同じライブラリを使用する場合もあります。メモリ容量を節約するため、共有ライブラリのコピーは1つだけ物理メモリにロードされます。同じライブラリを使用するプログラムは、同じページ(ライブラリのコードとデータを含むページ)にマッピングされる仮想アドレスを持ちます。プログラムがライブラリのコードを変更する場合、コピーオンライト方式を使用するため、メモリは必要なときにのみ割り当てられます。
共有メモリは、プログラム間の効率的な通信手段です。プログラムはメモリ内のページを共有し、データの書き込みと読み込みによってデータを交換できます。
ページングをサポートした最初のコンピュータは、1963年にフェランティ、マンチェスター大学、プレッシーが共同開発したスーパーコンピュータAtlas [ 10 ] [ 11 ] [ 12 ] でした。このマシンは、512 ワードのページごとに 1 つのエントリを持つ連想 (内容アドレス指定可能) メモリを備えていました。スーパーバイザ[ 13 ]は、非等価割り込み[ f ]を処理し、コアとドラム間のページ転送を管理して、プログラムに 1 レベルのストア[ 14 ]を提供しました。
ページングは、1990 年のWindows 3.0以降、Microsoft Windowsの機能として搭載されています。Windows 3.x では、スワップ ファイルとして使用するために、またはという名前の隠しファイルが作成されます。通常はルート ディレクトリにありますが、他の場所 (通常は WINDOWS ディレクトリ) に作成される場合もあります。そのサイズは、システムのスワップ領域の量 (コントロール パネル→ 拡張設定の「仮想メモリ」でユーザーが選択する設定) によって決まります。ユーザーがこのファイルを移動または削除すると、次回 Windows を起動したときに「永続スワップ ファイルが破損しています」というエラー メッセージとともにブルー スクリーンが表示されます。ユーザーは、ファイルを削除するかどうか (ファイルが存在しない場合でも) を選択するよう求められます。386SPART.PARWIN386.SWP
Windows 95、Windows 98、Windows Me は同様のファイルを使用しており、その設定はコントロール パネル → システム → パフォーマンス タブ → 仮想メモリにあります。Windows はページ ファイルのサイズを物理メモリの 1.5 倍から開始し、必要に応じて物理メモリの 3 倍まで拡張するように自動的に設定します。物理メモリが少ないシステムでメモリを大量に消費するアプリケーションを実行する場合は、これらのサイズをデフォルト値よりも高い値に手動で設定することをお勧めします。
Windows NTファミリーでページングに使用されるファイルは です。ページ ファイルのデフォルトの場所は、Windows がインストールされているパーティションのルート ディレクトリです。Windows は、ページ ファイル用に利用可能なドライブの空き領域を使用するように構成できます。ただし、Windows Vista および Windows Server 2008 [ 15 ]より前のバージョンでは、ブルースクリーンの後にカーネル ダンプまたは完全なメモリ ダンプを書き込むようにシステムが構成されている場合、ブート パーティション (つまり、Windows ディレクトリを含むドライブ) にページ ファイルが必要です。Windows は、メモリ ダンプの一時的なストレージとしてページ ファイルを使用します。システムが再起動されると、Windows はメモリ ダンプをページ ファイルから別のファイルにコピーし、ページ ファイルで使用されていた領域を解放します。[ 16 ]pagefile.sys
Windows のデフォルト設定では、必要に応じてページ ファイルが初期割り当てを超えて拡張できます。これが徐々に起こると、ページ ファイルはひどく断片化され、パフォーマンスの問題を引き起こす可能性があります。[ 17 ]これを回避するための一般的なアドバイスは、Windows がページ ファイルを拡大しないように、単一の「ロックされた」ページ ファイル サイズを設定することです。ただし、ページ ファイルは、デフォルト設定では物理メモリの総量の 150% がいっぱいになったときにのみ拡張されます。[ 18 ]したがって、ページ ファイルが拡張される前に、ページ ファイルでバックアップされた仮想メモリの総要求がコンピュータの物理メモリの 250% を超える必要があります。
ページファイルが拡張される際に発生する断片化は一時的なものです。拡張された領域が使用されなくなると(次の再起動時、あるいはそれよりも早く)、追加されたディスク領域は解放され、ページファイルは元の状態に戻ります。
ページ ファイルのサイズを固定すると、Windows アプリケーションが物理メモリとページ ファイルの合計サイズを超えるメモリを要求する場合に問題が発生する可能性があります。メモリ割り当て要求が失敗し、アプリケーションやシステム プロセスがクラッシュする恐れがあります。また、ページ ファイルはシーケンシャルに読み書きされることはほとんどないため、完全にシーケンシャルなページ ファイルを使用することによるパフォーマンス上の利点は最小限です。ただし、大きなページ ファイルを使用すると、一般的にメモリを大量に消費するアプリケーションを、ディスク スペースの使用量が増える以外にデメリットなく使用できます。ページ ファイル自体が断片化しても問題にならない場合もありますが、可変サイズのページ ファイルが断片化すると、時間の経過とともにドライブ上に複数の断片化ブロックが作成され、他のファイルも断片化される原因となります。このため、すべてのアプリケーションのニーズを満たすのに十分なサイズが割り当てられている限り、固定サイズの連続したページ ファイルを使用する方が優れています。
より新しい仕様のシステムであれば、必要なディスク容量を容易に確保できます(例えば、3GB のメモリを搭載し、750GBのディスクドライブ 上に6GBの固定サイズページファイルを持つシステム、または6GBのメモリと16GBの固定サイズページファイル、2TBのディスク容量を持つシステムなど)。どちらの例でも、ページファイルを最大サイズまで拡張した状態で、システムが使用するディスク容量は約0.8%です。
Windows システムが物理メモリの総量よりもはるかに多くのメモリを慢性的に使用している場合、パフォーマンスを向上させるためにページ ファイルのデフラグが推奨されることもあります。 [ 19 ]この見解では、一時的な拡張結果を除けば、ページ ファイルは時間の経過とともに断片化しないという事実が無視されています。一般的に、ページ ファイル アクセスに関連するパフォーマンスの問題は、物理メモリを増設することでより効果的に対処できます。
Unixシステムやその他のUnix ライクなオペレーティングシステムでは、物理 RAM がいっぱいになったときにディスク領域を RAM の代わりに使用する動作を「スワップ」という用語で表します。[ 20 ]これらのシステムの一部では、ハードディスクのパーティション全体をスワッピング専用にすることが一般的です。これらのパーティションはスワップ パーティションと呼ばれます。多くのシステムでは、データ ドライブとは別に、スワップ パーティションのみを含むスワッピング専用のハード ドライブ全体があります。スワッピング専用のハード ドライブは、「スワップ ドライブ」、「スクラッチ ドライブ」、または「スクラッチ ディスク」と呼ばれます。これらのシステムの中には、スワップ パーティションへのスワップのみをサポートするものもあれば、ファイルへのスワップもサポートするものもあります。
Linuxカーネルは、事実上無制限の数のスワップバックエンド(デバイスまたはファイル)をサポートし、バックエンドの優先順位の割り当てもサポートしています。カーネルが物理メモリからページをスワップアウトする場合、利用可能な空き領域を持つ最も優先順位の高いバックエンドを使用します。複数のスワップバックエンドに同じ優先順位が割り当てられている場合、それらはラウンドロビン方式で使用され(これはRAID 0ストレージレイアウトにいくらか似ています)、基盤となるデバイスに効率的に並列アクセスできる限り、パフォーマンスが向上します。[ 21 ]
エンドユーザーの視点から見ると、Linuxカーネルのバージョン2.6.x以降では、スワップファイルはスワップパーティションとほぼ同じ速度で動作します。制限事項は、スワップファイルは基盤となるファイルシステム上に連続して割り当てる必要があることです。スワップファイルのパフォーマンスを向上させるために、カーネルは基盤となるデバイス上のスワップファイルの配置場所のマップを保持し、直接アクセスすることでキャッシュをバイパスし、ファイルシステムのオーバーヘッドを回避します。[ 22 ] [ 23 ]回転式磁気メディアデバイスであるHDD上に存在する場合、スワップパーティションを使用する利点の1つは、連続したHDD領域に配置できるため、データスループットが向上したり、シーク時間が短縮されたりすることです。ただし、スワップファイルの管理上の柔軟性は、スワップパーティションの特定の利点を上回る場合があります。たとえば、スワップファイルはマウントされた任意のファイルシステム上に配置でき、任意のサイズに設定でき、必要に応じて追加または変更できます。スワップパーティションはそれほど柔軟ではありません。パーティショニングツールやボリューム管理ツールを使用しない限り拡張できず、さまざまな複雑さやダウンタイムが発生する可能性があります。
SwappinessはLinux カーネルのパラメータで、空きメモリからメモリ割り当て要求を満たせない場合に、実行時メモリのスワップアウトとシステムページキャッシュからのページ削除の相対的な重みを制御します。Swappiness は 0 から 200 までの値に設定できます。 [ 24 ]値が低いとカーネルはページキャッシュからページを追い出すことを優先し、値が高いと「コールド」メモリページのスワップアウトを優先します。デフォルト値は です。これを高く設定すると、コールドページをスワップインする必要がある場合 (たとえば、アイドル状態だったプログラムとやり取りする場合) にレイテンシが高くなる可能性があります。一方、値を低く設定 (0 であっても) すると、キャッシュから追い出されたファイルを再度読み込む必要がある場合にレイテンシが高くなる可能性がありますが、コールドページをスワップバックする必要が少なくなるため、対話型プログラムの応答性が向上します。スワッピングは多くのランダム書き込みを伴うため、HDD をさらに遅くする可能性もありますが、 SSD にはこの問題はありません。確かにデフォルト値はほとんどのワークロードでうまく機能しますが、想定されるタスクを実行するデスクトップや対話型システムでは設定値を下げた方が良い場合があり、バッチ処理や対話性の低いシステムでは設定値を上げた方が良い場合があります。[ 25 ]60
システムメモリが現在のタスクに対して著しく不足し、メモリアクティビティの大部分が低速なスワップを経由する場合、CPUがアイドル状態であっても、システムは事実上どのタスクも実行できなくなる可能性があります。すべてのプロセスがスワップを待機している状態は、システムがスワップ死状態にあるとみなされます。[ 26 ] [ 27 ]
スワップの死は、メモリの過剰割り当てが正しく設定されていないために発生する可能性があります。[ 28 ] [ 29 ] [ 30 ]
「スワッピングによる死亡」問題の本来の説明は、Xサーバーに関連しています。Xサーバーがキーストロークに応答するために使用するコードまたはデータがメインメモリにない場合、ユーザーがキーストロークを入力すると、サーバーは1つ以上のページフォルトを起こし、キーストロークを処理する前にこれらのページがスワップから読み込まれる必要があるため、応答が遅くなります。これらのページがメモリに保持されない場合、次のキーストロークを処理するために再びフォルトが発生する必要があり、システムが他のタスクを正常に実行している場合でも、実質的に応答しなくなります。[ 31 ]
macOS は複数のスワップ ファイルを使用します。デフォルト (および Apple が推奨) のインストールでは、ルート パーティションにスワップ ファイルを配置しますが、別のパーティションまたはデバイスに配置することも可能です。[ 32 ]
AmigaOS 4.0では、RAM の割り当てと物理メモリのデフラグのための新しいシステムが導入されました。これは、デフラグできないフラットな共有アドレス空間を依然として使用しています。スラブ割り当てとスワッピングを可能にするページングメモリに基づいています。ページングは AmigaOS 4.1で実装されました。物理メモリがすべて使い果たされると、システムがロックアップする可能性があります。[ 33 ] スワップメモリはアクティブ化および非アクティブ化でき、ユーザーは物理 RAM のみを使用することを選択できます。
仮想メモリオペレーティングシステムのバックエンドストレージは、通常、RAMよりも桁違いに低速です。例えば、ハードディスクでは、読み書きが開始されるまでに数ミリ秒の遅延が発生します。そのため、可能な限りスワッピングを減らすか、なくすことが望ましいです。一部のオペレーティングシステムでは、カーネルの判断に影響を与える設定が提供されています。
/proc/sys/vm/swappinessDisablePagingExecutiveカーネルモードのコードとデータがページアウトの対象となるかどうかを制御するレジストリ設定が用意されています。多くのUnix系オペレーティングシステム(例えば、AIX、Linux、Solarisなど)では、パフォーマンス向上のために、複数のストレージデバイスをスワップ領域として並列に使用することが可能です。
一部の旧型仮想メモリオペレーティングシステムでは、プログラムが実行時データ用のメモリを割り当てる際に、スワップバッキングストアに領域が確保されます。オペレーティングシステムベンダーは通常、割り当てるべきスワップ領域の量に関するガイドラインを発行しています。
ページングは、プロセスが使用するアドレスのサイズ(プロセスの「仮想アドレス空間」または「論理アドレス空間」)を、特定のコンピュータに実際に搭載されているメインメモリの量(物理アドレス空間)と異なるものにするための方法の一つです。
ほとんどのシステムでは、プロセスの仮想アドレス空間のサイズは、使用可能なメインメモリよりもはるかに大きい。[ 36 ]例えば、
真のnビットアドレッシングを備えたコンピュータには、2 <sup> n </sup>個のアドレス指定可能なRAMユニットが搭載されている可能性があります。例えば、4GBのRAMを搭載し、物理アドレス拡張(PAE)を搭載していない32ビットx86プロセッサが挙げられます。この場合、プロセッサは搭載されているすべてのRAMをアドレス指定できますが、それ以上はできません。
しかし、このような場合でも、ページングを利用することで、物理メモリよりも多くの仮想メモリをサポートすることが可能です。例えば、多数のプログラムが同時に実行される場合、それらに必要な物理メモリの量はシステムに搭載できる量を超える可能性がありますが、そのすべてを一度にRAMに格納する必要はありません。ページングシステムは、どのメモリを二次記憶装置に割り当てるかを効率的に判断し、搭載されているRAMを最大限に活用します。
さらに、オペレーティングシステムは、インストール済みのRAMの制限を超えて拡張する可能性のあるファイルなど、より大きなメモリを必要とするプログラムに対してサービスを提供する場合があります。ファイルのすべてをプロセスのアドレス空間に同時にマッピングすることはできませんが、オペレーティングシステムは、ファイルの領域をアドレス空間にマッピングし、別の領域をマッピングする必要がある場合はマッピングを解除できるようにすることができます。
Magic-1 [ 36 ] 、一部のPDP-11マシン、および物理アドレス拡張を備えた32ビットx86プロセッサを使用する一部のシステムなど、プロセスの仮想アドレス空間よりも大きなメインメモリを持つコンピュータがいくつかあります。これは、単一のプロセスがその仮想アドレス空間の量よりも多くのメインメモリを使用できないため、ページングの大きな利点を無効にします。このようなシステムでは、二次的な利点を得るためにページング技術がよく使用されます。
仮想アドレス空間の累積合計サイズは、利用可能な二次記憶装置の容量によって依然として制限される。
Vista および Windows Server 2008 では、メモリ ダンプを取得するために、ページ ファイルは、以前のバージョンの要件とは異なり、オペレーティングシステムがインストールされているパーティションと同じパーティションにある必要はありません。