メモリページング

コンピュータのオペレーティングシステムにおいて、メモリページングは​​、プログラムが使用する物理メモリが連続していなくてもよいようにするメモリ管理方式です。 [ 1 ]これは、メモリの断片化の問題を回避し、断片化を減らすために圧縮が必要になることを防ぎます。

ページングは​​、アドレス空間の合計サイズがシステムの物理メモリを超えることを可能にするために、ページフレームの割り当てと解放、および二次記憶装置へのページの格納と二次記憶装置からのページの取得という関連技術[ a ]と組み合わせられることがよくあります。 [ 2 ]歴史的な理由から、この技術はスワッピングと呼ばれることもあります。

仮想記憶と組み合わせると、ページング仮想記憶と呼ばれます。この方式では、オペレーティングシステムは二次記憶装置から同じサイズのブロック(ページ)単位でデータを取得します。ページングは​​、現代のオペレーティングシステムにおける仮想記憶実装の重要な部分であり、二次記憶装置を使用することで、プログラムが利用可能な物理メモリのサイズを超えることを可能にします。

論理アドレスを物理アドレスに効率的に変換するには、ハードウェアによるサポートが必要です。そのため、ページングメモリ機能は通常、メモリ管理ユニット(MMU)またはメモリ保護ユニット(MPU)を介してCPUにハードワイヤードされており、オペレーティングシステムカーネル内の特権システムコードによって個別に有効化されます。例えば、 x86命令セットアーキテクチャ(ISA)を実装したCPUでは、メモリページングは​​CR0制御レジスタを介して有効化されます。

歴史

1960年代、スワッピングは初期のメモリ管理技術でした。プログラム全体またはセグメント全体がランダムアクセスメモリ(RAM)からディスクまたはドラムに「スワップアウト」(または「ロールアウト」)され、別のプログラムがスワップイン(または「ロールイン」)されました。[ 3 ] [ 4 ]スワップアウトされたプログラムは最新の状態ですが、RAMが別のプログラムによって使用されている間は実行が中断されます。スワップアウトされたセグメントを持つプログラムは、そのセグメントが必要になるまで実行を継続できますが、そのセグメントが必要になると、スワップインされるまで実行が中断されます。

プログラムには、異なるタイミングで同じメモリを占有する複数のオーバーレイが含まれる場合があります。オーバーレイはRAMを二次記憶装置にページングする方法ではなく[ a ]、単にプログラムのRAM使用量を最小限に抑えるものです。その後のアーキテクチャではメモリセグメンテーションが採用され、個々のプログラムセグメントが二次記憶装置とRAM間で交換される単位となりました。セグメントとは、プログラムのコードセグメント全体、データセグメント、あるいは場合によっては他の大きなデータ構造を指します。これらのセグメントはRAM上に常駐する際に連続している必要があり、断片化を解消するために追加の計算と移動が必要でした[ 5 ]

フェランティアトラスマンチェスター大学で開発されたアトラススーパーバイザ[ 6 ](1962)は、メモリページングを実装した最初のシステムでした。その後のページングをサポートする初期のマシンとそのオペレーティングシステムとしては、IBM M44/44XとそのMOSオペレーティングシステム(1964年)、[ 7 ] 、 SDS 940 [ 8 ]Berkeley Timesharing System(1966年)、改良されたIBM System/360 Model 40CP-40オペレーティングシステム(1967年)、IBM System/360 Model 67とTSS/360CP/CMSMichigan Terminal System(MTS)などのオペレーティングシステム(1967年)、 RCA 70/46Time Sharing Operating System(TSOS)(1967年)、GE 645Multics(1969年)、BBN設計のページングハードウェアとTENEXオペレーティングシステム が追加されたDEC PDP-10 (1969年)などがある。

これらのマシン、およびメモリページングをサポートする後継マシンは、ページアドレスレジスタのセットまたはメモリ内ページテーブル[ d ]のいずれかを使用して、プロセッサがRAM内の任意のページを、一見連続した論理アドレス空間として操作できるようにしました。これらのページは、二次記憶装置[ a ]とRAM間で交換される単位となりました。

ページフォールト

プロセスがRAM内のページフレームに現在マップされていないページを参照しようとすると、プロセッサはこの無効なメモリ参照をページフォールトとして扱い、プログラムからオペレーティングシステムに制御を移します。オペレーティングシステムは以下を実行する必要があります。

  1. 盗まれたページ フレームにページの変更されていないコピーがまだ含まれているかどうかを確認します。含まれている場合は、そのページ フレームを使用します。
  2. それ以外の場合は、データのコンテナとして使用するために RAM 内の空のページ フレームを取得し、次の操作を実行します。
    • ページが初期化されたかどうかを確認する
    • そうであれば、二次記憶装置上のデータの場所を決定します[ a ]
    • 必要なデータを利用可能なページ フレームに読み込みます。
  3. 新しいページ フレームを参照するようにページ テーブルを更新します。
  4. ページ フォールトの原因となった命令を透過的に再試行し、プログラムに制御を戻します。

すべてのページフレームが使用中の場合、オペレーティングシステムは、プログラムが現在必要としているページのために再利用するページフレームを選択する必要があります。追い出されたページフレームが、プログラムによってデータを保持するために動的に割り当てられたものである場合、または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年にフェランティマンチェスター大学プレッシーによって共同開発されたスーパーコンピュータ「アトラス」 [ 10 ] [ 11 ] [ 12 ]あった。このマシンは、512ワードのページごとに1つのエントリを持つ連想メモリ(連想メモリ)を備えていた。スーパーバイザ[ 13 ]は、非等価割り込み[ f ]を処理し、コアとドラム間のページ転送を管理することで、プログラムに1階層のストア[ 14 ]を提供した。

マイクロソフトウィンドウズ

Windows 3.x および Windows 9x

ページングは​​、1990年のWindows 3.0以降、Microsoft Windowsの機能です。Windows 3.xは、スワップファイルとして使用するために、またはという名前の隠しファイルを作成します。このファイルは通常ルートディレクトリにありますが、他の場所(通常はWINDOWSディレクトリ)に存在する場合もあります。このファイルのサイズは、システムのスワップ領域のサイズ(コントロールパネル→「仮想メモリ」の「拡張」でユーザーが選択した設定)によって異なります。ユーザーがこのファイルを移動または削除すると、次回Windowsを起動したときにブルースクリーンが表示され、「永続スワップファイルが壊れています」というエラーメッセージが表示されます。ユーザーは、ファイル(存在しない場合でも)を削除するかどうかを選択するように求められます。 386SPART.PARWIN386.SWP

Windows 95Windows 98Windows Meも同様のファイルを使用しており、その設定はコントロールパネル → システム → パフォーマンスタブ → 仮想メモリにあります。Windowsはページファイルのサイズを物理メモリの1.5倍から自動的に設定し、必要に応じて物理メモリの3倍まで拡張します。物理メモリの少ないシステムでメモリを大量に消費するアプリケーションを実行する場合は、これらのサイズをデフォルトよりも高い値に手動で設定することをお勧めします。

ウィンドウズNT

Windows NTファミリでページングに使用されるファイルは ですpagefile.sys。ページ ファイルのデフォルトの場所は、Windows がインストールされているパーティションのルート ディレクトリです。Windows は、ページ ファイルに使用可能なドライブの空き領域を使用するように構成できます。ただし、システムがブルースクリーン オブ デスの後にカーネル ダンプまたは完全なメモリ ダンプを書き込むように構成されている場合は、ブート パーティション (つまり、Windows ディレクトリを含むドライブ) にページ ファイルが存在する必要があります。Windows は、ページング ファイルをメモリ ダンプの一時ストレージとして使用します。システムを再起動すると、Windows はページ ファイルからメモリ ダンプを別のファイルにコピーし、ページ ファイルで使用されていた領域を解放します。[ 15 ]

断片化

Windowsのデフォルト設定では、ページファイルは必要に応じて初期割り当てを超えて拡張できます。これが徐々に進むと、ページファイルが大きく断片化され、パフォーマンスの問題を引き起こす可能性があります。[ 16 ]これを回避するための一般的なアドバイスは、Windowsがページファイルを拡張しないように、単一の「ロックされた」ページファイルサイズを設定することです。しかし、ページファイルはいっぱいになった場合にのみ拡張され、デフォルト設定では物理メモリの総量の150%になります。[ 17 ]したがって、ページファイルが拡張されるには、ページファイルでバックアップされた仮想メモリの総需要がコンピュータの物理メモリの250%を超える必要があります。

ページファイルの拡張時に発生する断片化は一時的なものです。拡張された領域が使用されなくなると(次回の再起動時、あるいはそれより早く)、追加のディスク領域割り当てが解放され、ページファイルは元の状態に戻ります。

Windows アプリケーションが物理メモリとページ ファイルの合計サイズよりも多くのメモリを要求した場合、ページ ファイル サイズのロックによって問題が発生する可能性があり、メモリ割り当て要求が失敗して、アプリケーションやシステム プロセスが失敗する可能性があります。また、ページ ファイルが順番に読み書きされることはまれなので、完全に順番にページ ファイルを読み書きすることによるパフォーマンス上の利点はごくわずかです。ただし、ページ ファイルが大きいと、通常、メモリを大量に消費するアプリケーションを使用でき、ディスク領域の使用が増える以外にペナルティはありません。ページ ファイルの断片化自体は問題にならないかもしれませんが、可変サイズのページ ファイルの断片化によって、時間の経過とともにドライブ上に断片化されたブロックがいくつか作成され、他のファイルも断片化されるようになります。このため、割り当てられたサイズがすべてのアプリケーションのニーズに対応できる大きさであれば、固定サイズの連続したページ ファイルの方が適しています。

必要なディスク容量は、より新しい仕様のシステム(例えば、750 GBのディスクドライブに6 GBの固定サイズのページファイルを持つ3 GBのメモリを搭載したシステム、または6 GBのメモリと16 GBの固定サイズのページファイル、そして2 TBのディスク容量を持つシステム)であれば簡単に割り当てることができます。どちらの例でも、ページファイルが最大まで拡張された状態では、システムはディスク容量の約0.8%を使用します。

Windowsシステムが慢性的に総物理メモリ量よりもはるかに多くのメモリを使用している場合、パフォーマンスを向上させるためにページファイルのデフラグが推奨されることもあります。 [ 18 ]この見解は、一時的な拡張効果を除けば、ページファイルは時間の経過とともに断片化されないという事実を無視しています。一般的に、ページファイルアクセスに関連するパフォーマンスの問題は、物理メモリを増設することでより効果的に解決できます。

UnixおよびUnixライクなシステム

Unixシステムやその他のUnix系オペレーティングシステムでは、物理RAMがいっぱいになった場合にディスク領域をRAMに置き換える動作を「スワップ」という用語で表現します。[ 19 ]これらのシステムの一部では、ハードディスクのパーティション全体をスワップ専用にするのが一般的です。これらのパーティションはスワップパーティションと呼ばれます。多くのシステムには、データドライブとは別に、スワップパーティションのみを含むスワップ専用のハードドライブがあります。スワップ専用のハードドライブは「スワップドライブ」または「スクラッチドライブ」または「スクラッチディスク」と呼ばれます。これらのシステムの中には、スワップパーティションへのスワップのみをサポートするものもあれば、ファイルへのスワップもサポートするものもあります。

リナックス

Linuxカーネルは、事実上無制限の数のスワップバックエンド(デバイスまたはファイル)をサポートし、バックエンドの優先度の割り当てもサポートしています。カーネルが物理メモリからページをスワップアウトする際、空き領域を持つ最も優先度の高いバックエンドを使用します。複数のスワップバックエンドに同じ優先度が割り当てられている場合、それらはラウンドロビン方式( RAID 0ストレージレイアウトに似ています)で使用され、基盤となるデバイスに効率的に並列アクセスできる限り、パフォーマンスが向上します。[ 20 ]

ファイルとパーティションのスワップ

エンドユーザーの観点から見ると、Linuxカーネルバージョン2.6.x以降のスワップファイルは、スワップパーティションとほぼ同程度の速度です。ただし、スワップファイルは、その基盤となるファイルシステム上で連続的に割り当てられる必要があるという制限があります。スワップファイルのパフォーマンスを向上させるため、カーネルはスワップファイルが基盤となるデバイス上の配置場所のマップを保持し、直接アクセスすることでキャッシュをバイパスし、ファイルシステムのオーバーヘッドを回避します。[ 21 ] [ 22 ]回転磁気媒体デバイスであるHDD上にスワップパーティションを配置する利点の1つは、スワップパーティションを連続したHDD領域に配置できることです。これにより、データスループットが向上し、シークタイムも短縮されます。ただし、スワップファイルの管理の柔軟性は、スワップパーティションの利点を上回る場合があります。例えば、スワップファイルはマウントされた任意のファイルシステムに配置でき、任意のサイズに設定でき、必要に応じて追加または変更できます。スワップパーティションはそれほど柔軟ではありません。パーティション管理ツールやボリューム管理ツールを使用せずに拡張することはできず、さまざまな複雑さとダウンタイムが発生する可能性があります。

スワッピネス

SwappinessはLinux カーネルパラメータであり、空きメモリでメモリ割り当て要求を満たすことができない場合に、システムページキャッシュからページを削除するのではなく、ランタイムメモリからスワップアウトする割合を制御する。Swappiness は 0 から 200 までの値に設定できる。[ 23 ]値が低いとカーネルはページキャッシュからページを追い出すことを優先し、値が高いとカーネルは「コールド」メモリページをスワップアウトすることを優先する。デフォルト値はである。値を大きくすると、コールドページをスワップインする必要がある場合(例えば、アイドル状態だったプログラムと対話する場合)にレイテンシが高くなる可能性がある。一方、値を小さく(0 でも)すると、キャッシュから追い出されたファイルを再度読み込む必要がある場合にレイテンシが高くなる可能性があるが、コールドページをスワップバックする必要が少なくなるため、対話型プログラムの応答性は向上する。また、スワップはランダム書き込みを多く伴うためHDD の速度をさらに低下させる可能性があるが、 SSD にはこの問題がない。確かにデフォルト値はほとんどのワークロードでうまく機能しますが、予想されるタスクを実行するデスクトップやインタラクティブシステムでは設定を下げ、バッチ処理やインタラクティブ性の低いシステムでは設定を上げる必要があるかもしれません。[ 24 ]60

スワップデス

システムメモリが現在のタスクに対して著しく不足し、メモリアクティビティの大部分が低速スワップを経由する場合、CPUがアイドル状態であっても、システムは実質的にタスクを実行できなくなる可能性があります。すべてのプロセスがスワップを待機している場合、システムはスワップデッド状態にあるとみなされます。[ 25 ] [ 26 ]

スワップの死は、メモリのオーバーコミットの設定ミスによって発生する可能性がある。[ 27 ] [ 28 ] [ 29 ]

「スワッピング・トゥ・デス」問題の最初の記述は、Xサーバーに関連しています。Xサーバーがキー入力に応答するために使用するコードまたはデータがメインメモリに存在しない場合、ユーザーがキー入力を行うと、サーバーは1つ以上のページフォールトを発生させ、キー入力を処理する前にそれらのページをスワップから読み込まなければならず、キー入力への応答が遅くなります。これらのページがメモリに残っていない場合、次のキー入力を処理するために再度フォールト処理を行わなければならず、他のタスクを正常に実行している場合でも、システムは実質的に応答しなくなります。[ 30 ]

macOS

macOSは複数のスワップファイルを使用します。デフォルト(Apple推奨)のインストールでは、スワップファイルはルートパーティションに配置されますが、別のパーティションまたはデバイスに配置することも可能です。[ 31 ]

アミーガOS4

AmigaOS 4.0では、RAMの割り当てと物理メモリのデフラグのための新しいシステムが導入されました。このシステムも、デフラグできないフラットな共有アドレス空間を使用しています。これは、スラブ割り当てとスワップを可能にするページングメモリに基づいています。ページングは​​AmigaOS 4.1で実装されました。物理メモリが使い果たされると、システムがロックする可能性があります。[ 32 ] スワップメモリ​​は有効/無効を切り替えることができ、ユーザーは物理RAMのみを使用するように選択できます。

パフォーマンス

仮想記憶オペレーティングシステムのバッキングストアは、通常、RAMよりも桁違いに低速です。例えばハードディスクは、読み取りまたは書き込みが開始されるまでに数ミリ秒の遅延が発生します。そのため、可能な限りスワッピングを減らすか、完全に排除することが望ましいです。一部のオペレーティングシステムでは、カーネルの決定に影響を与える設定が提供されています。

  • Linux には、システムページ キャッシュからページを削除するのではなく、ランタイム メモリをスワップアウトするバランスを変更するパラメーターが用意されています。/proc/sys/vm/swappiness
  • Windows 2000、XP、および Vista では、DisablePagingExecutiveカーネル モード コードとデータがページ アウトの対象となるかどうかを制御するレジストリ設定が提供されています。
  • メインフレームコンピュータでは、シーク時間を短縮するためにページおよびスワップストレージにヘッドパートラックディスクドライブまたはドラムを頻繁に使用し、回転待ち時間を削減するために同じデバイスに複数の同時要求を行ういくつかの技術[ 33 ]も使用しました。
  • フラッシュメモリの消去・書き込みサイクルには限りがあり(フラッシュメモリの制限事項を参照)、一度に消去できるデータの最小量は非常に大きくなる場合があり、[ g ]ページサイズと一致することはほとんどありません。そのため、メモリ容量が逼迫した状況でスワップ領域として使用すると、フラッシュメモリは急速に消耗する可能性があります。このため、モバイルOSや組み込みOS(Androidなど)ではスワップ領域を使用しない場合があります。フラッシュメモリの魅力的な点は、ハードディスクに比べて遅延がほとんどなく、RAMチップのように揮発性がないことです。ReadyBoostやIntel Turbo Memoryなどの技術はこれらの特性を活用するために開発されました。

多くのUnix 系オペレーティング システム ( AIXLinuxSolarisなど) では、パフォーマンスを向上させるために、スワップ領域に複数のストレージ デバイスを並行して使用できます。

スワップスペースのサイズ

一部の古い仮想メモリオペレーティングシステムでは、プログラムが実行時データ用のメモリを割り当てる際に、スワップバックアップストアの領域が予約されます。オペレーティングシステムベンダーは通常、スワップ領域をどの程度割り当てるべきかに関するガイドラインを発行しています。

物理アドレス空間と仮想アドレス空間のサイズ

ページングは​​、プロセスが使用するアドレスのサイズ (プロセスの「仮想アドレス空間」または「論理アドレス空間」) を、特定のコンピュータに実際にインストールされているメイン メモリの量 (物理アドレス空間) と異なるようにする 1 つの方法です。

メインメモリは仮想メモリより小さい

ほとんどのシステムでは、プロセスの仮想アドレス空間のサイズは利用可能なメインメモリよりもはるかに大きくなります。[ 35 ]例えば:

  • CPUとメインメモリを接続するアドレスバスに制限がある場合があります。i386SX CPU32ビット内部アドレスは4GBのアドレス指定が可能ですが、アドレスバスに接続されるピンは24本しかないため、搭載可能な物理メモリは16MBに制限されます。搭載可能なRAMの最大容量には、その他のハードウェア制限がある場合があります。
  • コストの問題、モデルの標準構成でメモリが省略されている、または購入者がそれが有利ではないと判断したなどの理由で、最大メモリがインストールされない場合があります。
  • ハードウェア アーキテクチャによって I/O やその他の機能用に大きな領域が予約されている場合があるため、すべての内部アドレスをメモリに使用できないこともあります。

メインメモリは仮想メモリと同じサイズ

真のnビットアドレッシングを備えたコンピュータには、2 n 個のアドレス指定可能なRAMユニットが搭載されている場合があります。例えば、4GBのメモリを搭載し、物理アドレス拡張(PAE)を備えていない32ビットx86プロセッサが挙げられますこの場合、 プロセッサは搭載されているRAMのすべてをアドレス指定でき、それ以上の アドレス指定はできません。

しかし、この場合でも、ページングを使用することで、物理メモリよりも多くの仮想メモリをサポートできます。例えば、多くのプログラムが同時に実行される場合、それらのプログラムがシステムにインストール可能な物理メモリよりも多くの物理メモリを必要とすることがありますが、そのすべてを一度にRAMに格納する必要はありません。ページングシステムは、どのメモリを二次記憶装置に割り当てるかを効率的に決定し、インストールされているRAMを最大限に活用します。

さらに、オペレーティングシステムは、搭載されているRAMの制限を超えてサイズが大きくなる可能性のあるファイルなど、より大きなメモリを必要とするプログラムにサービスを提供する場合があります。ファイルのすべてをプロセスのアドレス空間に同時にマッピングすることはできませんが、オペレーティングシステムはファイルの領域をアドレス空間にマッピングし、別の領域をマッピングする必要がある場合はマッピング解除することを許可する場合があります。

仮想アドレス空間よりも大きいメインメモリ

Magic-1、[ 35 ] 、一部のPDP-11マシン、物理アドレス拡張を備えた32ビットx86プロセッサを搭載したシステムなど、一部のコンピュータでは、プロセスの仮想アドレス空間よりも大きなメインメモリを備えています。これにより、単一のプロセスは仮想アドレス空間よりも多くのメインメモリを使用できないため、ページングの大きな利点が失われます。このようなシステムでは、二次的な利点を得るためにページング技術がよく使用されます。

  • 「追加メモリ」はページ キャッシュで使用して、頻繁に使用されるファイルやメタデータ (ディレクトリ情報など) をセカンダリ ストレージからキャッシュできます。
  • プロセッサとオペレーティングシステムが複数の仮想アドレス空間をサポートしている場合、「追加メモリ」を使用してより多くのプロセスを実行できます。ページングにより、仮想アドレス空間の累計が物理メインメモリを超えることが可能です。
  • プロセスは、tmpfsファイル システムやRAM ドライブ上のファイル システムなどのメモリ バックアップ ファイル システム上のメモリ マップ ファイルにデータを保存し、必要に応じてファイルをアドレス空間にマップしたり、アドレス空間からマップしたりできます。
  • 一連のプロセスは、ページベースの分離によってマルチタスク環境にもたらされる強化されたセキュリティ機能に依然として依存する場合があります。

仮想アドレス空間の累計サイズは、依然として、利用可能な二次ストレージの量によって制限されます。

参照

注記

  1. ^ a b c d e f当初はドラムが使用され、その後ハードディスクドライブソリッドステートドライブがオーバーレイとページングに使用されました。
  2. ^例: Multics OS/VS1 OS/VS2 VM/370
  3. ^例: z/OS
  4. ^一部のシステムではグローバルページテーブルがあり、一部のシステムではプロセスごとに個別のページテーブルがあり、一部のシステムではセグメントごとに個別のページテーブルがあり[ b ]、一部のシステムではカスケードページテーブルがあります。 [ c ]
  5. ^たとえば、 MVS (Multiple Virtual Storage)。
  6. ^非等価割り込みは、アドレスの上位ビットが連想メモリ内のどのエントリとも一致しない場合に発生します。
  7. ^ Intel X25-M SSDの場合128 KiB [ 34 ]

参考文献

  1. ^オペレーティングシステムの概念、第10版。2021年2月。9.3 ページング。ISBN 978-1-119-80036-1
  2. ^ 「オペレーティングシステムにおけるページング」GeeksforGeeks . 2024年12月14日閲覧
  3. ^ベルツァー, ジャック; ホルツマン, アルバート G.; ケント, アレン編 (1981). 「オペレーティングシステム」.コンピュータサイエンスとテクノロジー百科事典. 第11巻. CRC Press. p. 442. ISBN 0-8247-2261-22017年2月27日時点のオリジナルよりアーカイブ
  4. ^ Cragon, Harvey G. (1996).メモリシステムとパイプラインプロセッサ. Jones and Bartlett Publishers. p. 109. ISBN 0-86720-474-52017年2月27日時点のオリジナルよりアーカイブ
  5. ^ベルツァー, ジャック; ホルツマン, アルバート G.; ケント, アレン編 (1981). 「仮想記憶システム」.コンピュータサイエンスとテクノロジー百科事典. 第14巻. CRC Press. p. 32. ISBN 0-8247-2214-02017年2月27日時点のオリジナルよりアーカイブ
  6. ^ Kilburn, T ; Payne, RB; Howarth, DJ (1962). 「アトラス・スーパーバイザー」 .
  7. ^ RW O'Neill.動的アドレス再配置ハードウェアを備えたタイムシェアリングマルチプログラミングシステムの使用経験. Proc. AFIPS Computer Conference 30 (Spring Joint Computer Conference, 1967). pp.  611– 621. doi : 10.1145/1465482.1465581 .
  8. ^科学データシステムリファレンスマニュアル、SDS 940コンピュータ(PDF)。1966年、pp.8  9。
  9. ^ 「スワッププリフェッチ」 Linux Weekly News . 2005年9月27日.
  10. ^ Sumner, FH; Haley, G.; Chenh, ECY (1962). 「『アトラス』コンピュータの中央制御装置」. Information Processing 1962 . IFIP Congress Proceedings. Vol. Proceedings of IFIP Congress 62. Spartan.
  11. ^ 「The Atlas」マンチェスター大学:コンピュータサイエンス学部。 2012年7月28日時点のオリジナルよりアーカイブ。
  12. ^ 「Atlas Architecture」 . Atlas Computer . Chilton: Atlas Computer Laboratory. 2012年12月10日時点のオリジナルよりアーカイブ。
  13. ^ Kilburn, T.; Payne, RB; Howarth, DJ (1961年12月). 「The Atlas Supervisor」 . Computers - Key to Total Systems Control . Conferences Proceedings. Vol. 20, Proceedings of the Eastern Joint Computer Conference Washington, DC Macmillan. pp.  279– 294. 2009年12月31日時点のオリジナルよりアーカイブ。
  14. ^ Kilburn, T.; Edwards, DBG; Lanigan, MJ; Sumner, FH (1962年4月). 「ワンレベルストレージシステム」. IRE Transactions on Electronic Computers (2). Institute of Radio Engineers: 223– 235. doi : 10.1109/TEC.1962.5219356 .
  15. ^ Tsigkogiannis, Ilias (2006年12月11日). 「クラッシュダンプ解析」 .ドライバ書き込み != バス駆動. Microsoft . 2008年10月7日時点のオリジナルよりアーカイブ。 2008年7月22日閲覧
  16. ^ "Windows Sysinternals PageDefrag" . Sysinternals . Microsoft . 2006年11月1日. 2010年12月25日時点のオリジナルよりアーカイブ。 2010年12月20日閲覧
  17. ^ 「ページファイル情報」Oingo KPT . 2024年12月14日閲覧
  18. ^ 「デフラグの効果とは?」HP Tech Takes . Hewlett-Packard . 2024年12月14日閲覧。
  19. ^ Both, David (2020年3月27日). 「Linuxシステムにおけるスワップ領域の紹介」 . Opensource.com . 2021年12月8日閲覧
  20. ^ "swapon(2) – Linux man page" . Linux.Die.net . 2014年2月28日時点のオリジナルよりアーカイブ2014年9月8日閲覧。
  21. ^ "「Jesper Juhl」:「Re: ブレークを送信する方法 - フリーズした64ビットLinuxからのダンプ」。LKML。2006年5月29日。2010年11月24日時点のオリジナルからアーカイブ。 2010年10月28日閲覧
  22. ^ 「Andrew Morton: Re: スワップパーティションとスワップファイル」 LKML。2010年11月24日時点のオリジナルよりアーカイブ。 2010年10月28日閲覧
  23. ^ 「/proc/sys/vm/ の Linux カーネルドキュメント」
  24. ^ Andrews, Jeremy (2004-04-29). 「Linux: Swappinessのチューニング」 . kerneltrap.org . 2013年5月24日時点のオリジナルよりアーカイブ。 2018年1月3日閲覧
  25. ^ Rik van Riel (1998-05-20). 「swap death (as in 2.1.91) and page tables」 . 2017年12月29日時点のオリジナルよりアーカイブ。
  26. ^カイル・ランキン (2012). DevOps トラブルシューティング: Linux サーバーのベストプラクティス. Addison-Wesley. p. 159. ISBN 978-0-13-303550-6. 2017年12月29日時点のオリジナルよりアーカイブ。
  27. ^ Andries Brouwer. 「Linuxカーネル:メモリ」 . 2017年8月13日時点のオリジナルよりアーカイブ。
  28. ^ Red Hat. 「容量チューニング」 . 2017年7月23日時点のオリジナルよりアーカイブ。
  29. ^ 「メモリオーバーコミット設定」 2014年2月16日。2017年5月31日時点のオリジナルよりアーカイブ。
  30. ^ Peter MacDonald (1993年2月10日). 「swapping to death」 . 2017年3月28日時点のオリジナルよりアーカイブ。
  31. ^ John Siracusa (2001年10月15日). 「Mac OS X 10.1」 . Ars Technica. 2008年9月5日時点のオリジナルよりアーカイブ。 2008年7月23日閲覧
  32. ^ AmigaOS Core Developer (2011年1月8日). 「Re: スワップ問題はUpdate 4でも発生?」 Hyperion Entertainment. 2013年4月12日時点のオリジナルよりアーカイブ2011年1月8日閲覧。
  33. ^例:ブロックマルチプレクサチャネルでの回転位置検出
  34. ^ 「SSDの消去ブロックサイズに合わせてファイルシステムを調整する | Tedの考え」 Thunk.org、2009年2月20日。2010年11月13日時点のオリジナルよりアーカイブ。 2010年10月28日閲覧
  35. ^ a b Bill Buzbee. 「Magic-1 Minix Demand Paging Design」 . 2013年6月5日時点のオリジナルよりアーカイブ2013年12月9日閲覧。