仮想メモリとスワップスペースの違いを教えてください。
また、32ビットマシンの場合、アクセス可能な最大仮想メモリは4 GBのみであると言うのはなぜですか?
仮想メモリとスワップスペースの違いを教えてください。
また、32ビットマシンの場合、アクセス可能な最大仮想メモリは4 GBのみであると言うのはなぜですか?
回答:
仮想メモリという用語に関しては混乱がありますが、実際には次の2つの非常に異なる概念を指します。
スワップスペースOTOHは、使用されていないときに追加のRAMページを格納するために使用されるディスクの部分の名前です。
重要な認識は、後者のハードウェアとOSのサポートにより、前者が透過的に可能であるということです。
これらすべてをよりよく理解するために、「仮想メモリ」(定義2のように)がCPUとOSによってどのようにサポートされているかを考慮する必要があります。
32ビットポインタがあるとします(64ビットポイントは似ていますが、わずかに異なるメカニズムを使用します)。「仮想メモリ」が有効になると、プロセッサはこのポインタを3つの部分と見なします。
ここで、CPUがポインタの内容にアクセスしようとすると、最初にページディレクトリテーブル(1024エントリで構成されるテーブル)を参照します(X86アーキテクチャでは、その場所はCR3レジスタによってポイントされます)。10ビットのページディレクトリエントリは、このテーブルのインデックスであり、ページテーブルの物理的な場所を指します。これは、1024エントリの別のテーブルであり、各エントリは物理メモリ内のポインタであり、いくつかの重要な制御ビットです。(後でこれらに戻ります)。ページが見つかると、最後の12ビットがそのページ内のアドレスを見つけるために使用されます。
詳細(TLB、ラージページ、PAE、セレクター、ページ保護)は他にもたくさんありますが、上記の簡単な説明で要点を説明します。
この変換メカニズムを使用すると、OSはプロセスごとに異なる物理ページのセットを使用できるため、各プロセスにすべてのメモリがあるように見せることができます(各プロセスが独自のページディレクトリを取得するため)。
この仮想メモリに加えて、OSはページングの概念を追加することもできます。前に説明した制御ビットの1つを使用すると、エントリが「存在する」かどうかを指定できます。存在しない場合、そのエントリにアクセスしようとすると、ページフォールト例外が発生します。OSはこの例外をキャプチャし、それに応じて動作できます。したがって、スワッピング/ページングをサポートするOSは、スワップスペースからページをロードし、変換テーブルを修正してから、メモリアクセスを再度発行することを決定できます。
ここで2つの用語が組み合わされ、仮想メモリとページングをサポートするOSは、スワップ領域の内外でページをページング(スワップ)することにより、実際に存在するよりも多くのメモリを持っているような錯覚をプロセスに与えることができます。
最後の質問について(32ビットCPUが4GB仮想メモリに制限されていると言われているのはなぜですか)。これは、定義2の「仮想メモリ」を指し、ポインタサイズの直接の結果です。CPUが32ビットポインタしか使用できない場合、異なるアドレスを表現するための32ビットしかないため、2 ^ 32 = 4GBのアドレス可能なメモリが得られます。
これが物事を少し明確にすることを願っています。
私見では、スワップスペースの概念を仮想メモリと同等のものとして使用することはひどく誤解を招きます。VMは、スワップスペースよりもはるかに一般的な概念です。特に、VMを使用すると、プロセスは実行中に仮想アドレスを参照できます。仮想アドレスは、ハードウェアとページテーブルのサポートにより物理アドレスに変換されます。したがって、プロセスは、システムにある物理メモリの量や、命令またはデータが実際に物理メモリ階層のどこにあるかについては関係ありません。VMはこのマッピングを許可します。参照されるアイテム(命令またはデータ)は、L1、L2、RAM、または最終的にディスクに常駐する場合があります。その場合、メインメモリにロードされます。
スワップスペースは、ページが非アクティブのときにページが保存されるセカンダリメモリ上の場所です。十分なRAMがない場合、OSは、他のプロセスページ用のスペースを確保するために、プロセスのページをスワップアウトすることを決定する場合があります。プロセッサは、スワップスペースから直接命令を実行したり、データの読み取り/書き込みを行ったりすることはありません。
VMのないシステムにスワップスペースがある可能性があることに注意してください。つまり、物理アドレスに直接アクセスするプロセスでも、その一部がディスク上にある可能性があります。
スレッドはかなり古く、すでに回答済みですが。これは私がこれまでに見つけた最も簡単な説明なので、まだこのリンクを共有したいと思います。以下のリンクは、より良い視覚化のための図を持っています。
主な違い:仮想メモリはメインメモリを抽象化したものです。コンテンツRAMの非アクティブな部分をディスクに保存することにより、コンピュータの使用可能なメモリを拡張します。コンテンツが必要なときはいつでも、RAMにフェッチして戻します。スワップメモリまたはスワップスペースは、仮想メモリに使用されるハードディスクドライブの一部です。したがって、両方とも同じ意味で使用されます。
仮想メモリは、物理メモリとは異なり静かです。プログラマーは、物理メモリではなく仮想メモリに直接アクセスできます。仮想メモリは、メインメモリを抽象化したものです。これは、システムの実際の物理メモリの情報を隠すために使用されます。RAMのコンテンツの非アクティブな部分をディスクに保存することにより、コンピュータの使用可能なメモリを拡張します。コンテンツが必要な場合は、RAMにフェッチして戻します。仮想メモリは、アドレスがゼロで始まるアドレス空間全体の錯覚を作り出します。これは主に、必要なスペースを削減する最適化機能のために好まれます。これは、使用可能なRAMとディスク容量で構成されています。
スワップメモリは一般にスワップスペースと呼ばれます。スワップスペースとは、一時的な保存場所として予約されている仮想メモリの部分を指します。スワップスペースは、使用可能なRAMがシステムのメモリの要件を満たすことができない場合に使用されます。たとえば、Linuxメモリシステムでは、カーネルは各ページを物理メモリまたはスワップスペースに配置します。カーネルは、スワップアウトされたページと物理メモリ内のページに関する情報が保持されるテーブルも保持します。長い間アクセスされていないページは、スワップスペース領域に送信されます。このプロセスは、スワップアウトと呼ばれます。同じページが必要な場合は、別のページをスワップアウトすることにより、物理メモリでスワップされます。したがって、