「仮想メモリ」と「スワップスペース」の違いは何ですか?


85

仮想メモリスワップスペースの違いを教えてください。

また、32ビットマシンの場合、アクセス可能な最大仮想メモリは4 GBのみであると言うのはなぜですか?



@startblueあなたが与えたリンクが私の質問への答えである方法..–
algo-

@ algo-geeks-確かにそれは答えではありませんが、このトピックに非常に役立つかもしれない答えにリンクしていると思います。そしてコメントに書かれている、まさにそれがあるべき場所、imho。:)
MuhamedHuseinbašić

回答:


113

スーパーユーザーには、仮想メモリの優れた外植があります

簡単に言うと、仮想メモリは、実行中のプロセスが使用できるRAMとディスクスペースの組み合わせです。

スワップスペースは、RAMがいっぱいになったときに使用される、ハードディスク上の仮想メモリの部分です。

32ビットCPUが4GBの仮想メモリに制限されている理由については、ここで詳しく説明します

定義上、32ビットプロセッサは32ビットを使用してメモリの各バイトの場所を参照します。2 ^ 32 = 42億、つまり32ビット長のメモリアドレスは42億の一意の場所(つまり4 GB)しか参照できません。


1
では、実際のRAM =仮想-スワップですか?
user48956 2017

4
この答えは完全に間違っています。人は1GBのファイルを100回メモリマップし、1GBのRAMを搭載したマシンで100GBの仮想メモリを使用できます。使用中の100GBの仮想メモリを取得するためにRAMとディスクスペースを追加する方法はありません。
David Schwartz 2017

@DavidSchwartzはそうではありません。ファイルをメモリマッピングしても、ファイルはメモリにロードされません。そのため、1GBのファイルを100回mmapするだけでは、100GBのファイルは使用されません。
フェリックス

1
@Felixあなたは間違っています。「メモリにロードしない」と言うときは、「メモリ」という言葉を使用して、物理メモリ、つまりRAMを意味します。物理メモリではなく、仮想メモリについて話しています。仮想メモリは通常、物理メモリのように固定プールから取得されるのではなく、必要に応じて作成されます。
デヴィッド・シュワルツ

それでは、それは単なる報告の質問ですか?どれだけのメモリがmmapされているかを数えることさえ意味がありますか?実際にはそれほど多くを使用することはないので、RAMまたはスワップで使用します。
フェリックス

60

仮想メモリという用語に関しては混乱がありますが、実際には次の2つの非常に異なる概念を指します。

  1. ディスクページを使用してコンピュータが持つ物理メモリの概念的な量を拡張する-これの正しい用語は実際にはページングです
  2. さまざまなOS / CPUが使用する抽象化で、別々の連続したアドレス空間で実行されている各プロセスの錯覚を作成します。

スワップスペースOTOHは、使用されていないときに追加のRAMページを格納するために使用されるディスクの部分の名前です。

重要な認識は、後者のハードウェアとOSのサポートにより、前者が透過的に可能であるということです。

これらすべてをよりよく理解するために、「仮想メモリ」(定義2のように)がCPUとOSによってどのようにサポートされているかを考慮する必要があります。

32ビットポインタがあるとします(64ビットポイントは似ていますが、わずかに異なるメカニズムを使用します)。「仮想メモリ」が有効になると、プロセッサはこのポインタを3つの部分と見なします。

  • 上位10ビットはページディレクトリエントリです
  • 次の10ビットはページテーブルエントリです
  • 最後の12ビットはページオフセットを構成します

ここで、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のアドレス可能なメモリが得られます。

これが物事を少し明確にすることを願っています。


12

私見では、スワップスペースの概念を仮想メモリと同等のものとして使用することはひどく誤解を招きます。VMは、スワップスペースよりもはるかに一般的な概念です。特に、VMを使用すると、プロセスは実行中に仮想アドレスを参照できます。仮想アドレスは、ハードウェアとページテーブルのサポートにより物理アドレスに変換されます。したがって、プロセスは、システムにある物理メモリの量や、命令またはデータが実際に物理メモリ階層のどこにあるかについては関係ありません。VMはこのマッピングを許可します。参照されるアイテム(命令またはデータ)は、L1、L2、RAM、または最終的にディスクに常駐する場合があります。その場合、メインメモリにロードされます。

スワップスペースは、ページが非アクティブのときにページが保存されるセカンダリメモリ上の場所です。十分なRAMがない場合、OSは、他のプロセスページ用のスペースを確保するために、プロセスのページをスワップアウトすることを決定する場合があります。プロセッサは、スワップスペースから直接命令を実行したり、データの読み取り/書き込みを行ったりすることはありません。

VMのないシステムにスワップスペースがある可能性があることに注意してください。つまり、物理アドレスに直接アクセスするプロセスでも、その一部がディスク上にある可能性があります。


5

スレッドはかなり古く、すでに回答済みですが。これは私がこれまでに見つけた最も簡単な説明なので、まだこのリンクを共有したいと思います。以下のリンクは、より良い視覚化のための図を持っています。

主な違い:仮想メモリはメインメモリを抽象化したものです。コンテンツRAMの非アクティブな部分をディスクに保存することにより、コンピュータの使用可能なメモリを拡張します。コンテンツが必要なときはいつでも、RAMにフェッチして戻します。スワップメモリ​​またはスワップスペースは、仮想メモリに使用されるハードディスクドライブの一部です。したがって、両方とも同じ意味で使用されます。

仮想メモリは、物理メモリとは異なり静かです。プログラマーは、物理メモリではなく仮想メモリに直接アクセスできます。仮想メモリは、メインメモリを抽象化したものです。これは、システムの実際の物理メモリの情報を隠すために使用されます。RAMのコンテンツの非アクティブな部分をディスクに保存することにより、コンピュータの使用可能なメモリを拡張します。コンテンツが必要な場合は、RAMにフェッチして戻します。仮想メモリは、アドレスがゼロで始まるアドレス空間全体の錯覚を作り出します。これは主に、必要なスペースを削減する最適化機能のために好まれます。これは、使用可能なRAMとディスク容量で構成されています。

スワップメモリ​​は一般にスワップスペースと呼ばれます。スワップスペースとは、一時的な保存場所として予約されている仮想メモリの部分を指します。スワップスペースは、使用可能なRAMがシステムのメモリの要件を満たすことができない場合に使用されます。たとえば、Linuxメモリシステムでは、カーネルは各ページを物理メモリまたはスワップスペースに配置します。カーネルは、スワップアウトされたページと物理メモリ内のページに関する情報が保持されるテーブルも保持します。長い間アクセスされていないページは、スワップスペース領域に送信されます。このプロセスは、スワップアウトと呼ばれます。同じページが必要な場合は、別のページをスワップアウトすることにより、物理メモリでスワップされます。したがって、

仮想メモリとスワップメモリ​​の違い


このリンクは質問に答えることができますが、ここに答えの本質的な部分を含めて、参照用のリンクを提供することをお勧めします。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。-レビューから
コートレス

おかげで、投稿を改善しました。
ram619 2016年

0

「仮想メモリ」は総称です。Windowsでは、ページングまたはページネーションと呼ばれます。Linuxでは、スワップと呼ばれます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.