仮想メモリとは何ですか?


27

「仮想メモリ」のメモを再確認しましたが、私の教科書の定義は次のとおりです。

メインメモリの一部として機能するセカンダリストレージのセクションを割り当てるプロセス

どことウィキペディアは言います:

仮想メモリは、連続した作業メモリ(アドレス空間)があるという印象をアプリケーションプログラムに与えるコンピューターシステムの手法です。

そして(ウィキペディアも言います)

「仮想メモリ」は、「ディスクスペースを使用して物理メモリサイズを拡張する」だけではありません。

どなたが正しいかについての説明を提供できますか?


ウィキペディアからのメモには、連続しているという観点で使用されるものに関するいくつかの資格が含まれていると思います。
JBキング

この質問はおそらくSOでより良い答えを得るでしょう。
キャプテンセグフォルト

2
仮想メモリとその使用方法を混同しないでください。ウィキペディアの最初の文は、それが何であるかを定義しています。あなたの本は、それが通常どのように使用されるかについて話している。人々が「ページ」について話すと、仮想メモリの特定の実装について話します。
トニーリー

2
あなたの教科書は単純に間違っています。仮想メモリがあり、セカンダリストレージがまったくない多くのマシンがあります。同様に、メインメモリの一部としてセカンダリストレージを使用できるが、仮想メモリをサポートしないマシンがかつてありました。「仮想メモリ」はメモリではなく、メモリのようにアクセスされるものです。あなたの教科書はスワッピングまたはページングを定義しています。
デビッドシュワルツ

1
教科書では完全に間違って定義されており、二次記憶装置は定義の一部ではありません。また、「ディスク容量以上」に関するウィキペディアの声明でさえ誤解を招く可能性があります。これは、ディスクがまったく関与していない可能性があるためです。
ケルビン

回答:


41
Note that "virtual memory" is more than just "using disk space to extend physical memory size"

仮想メモリは、各プロセスに提供される抽象化の層です。コンピューターには、0から2Gにアドレス指定された2GBの物理RAMがあります。プロセスは、4GBのアドレススペースを参照する場合がありますが、それは完全にそれ自体にあります。仮想アドレスから物理アドレスへのマッピングは、オペレーティングシステムによって管理されるメモリ管理ユニットによって処理されます。通常、これは4KBの「ページ」で行われます。

これにより、いくつかの機能が提供されます。

  1. プロセスは他のプロセスのメモリを見ることができません(OSがそれを望んでいない限り!)
  2. 特定の仮想アドレスのメモリが同じ物理アドレスにない場合があります
  3. 仮想アドレスのメモリをディスクに「ページアウト」し、再度アクセスすると「ページイン」できます。

教科書では、仮想メモリを#3として(誤って)定義しています。

スワッピングがなくても、DMA(ダイレクトメモリアクセス)を行うデバイス用のデバイスドライバを作成する場合は、特に仮想メモリに注意する必要があります。ドライバコードはCPUで実行されます。つまり、メモリアクセスはMMU(仮想)を介して行われます。デバイスはおそらくMMUを通過しないため、未加工の物理アドレスが表示されます。ドライバーライターとして、次のことを確認する必要があります。

  1. ハードウェアに渡すrawメモリアドレスは物理的なものであり、仮想的なものではありません。
  2. 送信するメモリの大きな(マルチページ)ブロックは物理的に連続しています。8Kアレイは(MMUを介して)実質的に連続している場合がありますが、物理的に別々の2つのページです。その配列の先頭に対応する物理アドレスに8Kのデータを書き込むようにデバイスに指示すると、最初の4Kが予想される場所に書き込まれますが、2番目の4Kはどこかのメモリを破損します。:-(

4

ゆっくり始めて、それをすべてまとめてみます。こんな感じです:

一般的に使用される仮想メモリは、「ページング」を指します。名前が示すように、ページングは​​人間のメモ帳のようなものです。

単純な合計を計算するとき、または単純な情報を学習するときは、頭の中ですべてを行います。すべての情報を読み込み、処理し、答えを得るだけです。これは、ハードドライブからファイルを読み込むコンピューターのようなものです。プログラムや画像、または作業に必要なその他の情報を「実メモリ」(または「物理メモリ」)に読み込み、「脳」で動作します(そのプロセッサ)。

ただし、複雑な情報を学習しているとき、または複雑な合計を処理しているときは、すべてを一度に頭に収めることができない場合があります。あなたは混乱し、スローダウンし始め、そこにすべてを一度に保持することに失敗し、何かを覚えるために何かを忘れなければなりません。

人間の解決策は、メモ帳を使用することです。一度に思い出せないことはすべてページに書き留めますが、合計を行う際にそれらを参照します。その月の売り上げの膨大なリストを思い出せないかもしれませんが、ページを見て、少しずつ情報を取得し、各ビットを処理できます。これは、コンピューターがメモリを「ページング」するようなものです。情報でいっぱいのページを書き込み、後で参照するために「仮想メモリ」に入れ、ページが必要であることを認識し、そのページを仮想メモリから実メモリにロードします。LinuxおよびUNIXでは、これらのページが保存される場所は文字通り「ページファイル」と呼ばれ、メモリ内のデータのページは文字通り「ページ」と呼ばれます。システムごとにこれらの名前は異なりますが、一般的な概念はほとんど同じです。

本当に、ページングは​​非常に簡単です。情報のすべてのページがメモリに収まらないため、一部のページはディスクに置かれ、後で再び読み込まれます。

現在、より複雑になっているのは、最新のシステムがメモリマッピングとメモリ保護を備えていることです。これらは通常、コンピュータ内の同じハードウェアシステムであるメモリ管理ユニット(MMU)によって処理されます。

多数のプログラムを一度に実行でき、メモリ保護を備えた(現代の)マルチタスクコンピューターでは、通常、各プログラムは同じシステムで実行されている他のプログラムから分離されています。このように、1つのプログラムはメモリにアクセスするだけでは別のプログラムを変更できません。MMUは1つのプログラムのアドレススペースを他のプログラムのアドレススペースから物理的に分離します。言い換えれば、ユーザーのプログラムは、他のユーザーのプログラムまたは他のプログラムさえも見ません。彼らは「本当の記憶」を見ません-彼らは彼ら自身の「仮想記憶」を見ます。

さて、このメモリ分離の概念とページファイルの概念は概念的に異なる2つのものであり、これがおそらくあなたが混乱している理由です。ただし、重要なことは、両方がMMUを使用して機能することです。MMUは、メモリをページに分割し、ページを仮想アドレス空間にマップするメモリ管理ユニットです。

したがって、プログラムが特定の「メモリアドレス」でメモリを要求すると、実際に起こるのは、そのプログラムのメモリページとそれらの対応するアドレス(プログラムの「アドレススペース」)が検索され、そのメモリブロックが見つかりました。そのページは、実際のメモリのどこかにロードできます。その場合、プログラムにアクセス権が付与されるか、ディスクにページアウトできます。ページアウトされた場合、「ページフォルト」をトリガーします。ディスクにアクセスし、ページがメモリにロードされます。したがって、プログラムは十分なメモリがない場合でも動作しますが、通常非常に高速なメモリアクセスのためにディスクを使用する必要がある場合、ゆっくり実行されます。

現在、そのページをメモリにロードするのに十分なスペースがない場合、問題があります。その場合、すでにメモリ内にある他のページをディスクに「スワップ」する必要があるため、最初のプログラムのページをロードできます。または、同じプログラムのページである場合もあります。これは、グラフィックプログラムで時々見られます。たとえば、負荷の大きいシステムで、画像の一部がゆっくりと読み込まれてすぐに描画され、次に次の部分が等しくゆっくり読み込まれてすばやく描画され、最初の一部、再び遅いです。それは、彼らが作業のためにロードされてから、再び交換されたためです。明らかに、これは非常に遅い方法であり、本当に必要なのはより多くの実メモリです。


私はこの答えに100%同意しません。「仮想メモリ」がページングを指す場合、ページングしないシステム(たとえば、スワップまたはページファイルが有効になっていないシステム)は仮想メモリをサポートできません。しかし、それは明らかに非常識です。
デビッドシュワルツ

@DavidSchwartz-最初はあなたと同じような反応がありましたが、答えをより詳細に読むと、それほど悪くないと思います。Wikipedia / virtual memory / Pagedが「仮想メモリのほとんどすべての実装が仮想アドレス空間をページ、連続した仮想メモリアドレスのブロックに分割する」と言っていることを考慮してください。つまり、広義の「ページング」はページファイルを必要としませが、仮想アドレスから物理アドレスへのマッピングを指します。
ToolmakerSteve

1
一方、リーは「情報のすべてのページがメモリに収まらないため、一部のページはディスクに置かれ、後で再び読み込まれます。」と言うので、デビッドは正しい。この答えは、ページングとは、ディスクへのページングだけではありません。プラス面では、リーは仮想メモリの他の利点(メモリ分離)について言及し続けています。この答えが「ディスクへのページング」で「仮想メモリのページのマッピング」を混乱させないように言い換えられている場合、それはより便利です。
ToolmakerSteve

@ToolmakerSteve問題は、これは非常に一般的な誤解であり、その誤解を強化するものはすべてIMOであるということです。この答えが非常に単純な問題で非常に基本的な概念を説明しようとしているとき、ここで特に悪いです-そこには、一般的な誤解に基づいて基礎を築かないことが最も重要です!
デビッドシュワルツ

@DavidSchwartz-同意します。彼は「仮想メモリ」を定義するのではなく、「ページファイルの仕組み」を定義するのです。最初は、問題は単に「ページング=メモリのページを仮想から物理にマッピングする」と「ページファイル=ページをディスクにマッピングする」を区別できなかっただけだと思っていましたが、読み直した後、彼は本当に話していましたディスクへのマッピングについて。(教科書の引用、キャプテン以外のすべての回答、およびグーグル検索からわかるように、この2つの概念の混合は非常に広まっています。私はそれを犯したと確信しています。)
ToolmakerSteve

0

私はそれが遅すぎることを知っています....しかし、それはまだ有用だと思いました。

  • すべてが異なる視点に基づいて正しいです。
  • 仮想メモリはメモリ管理技術であり、スワップメモリ​​はディスクドライブ上の領域です。スワップメモリ​​は通常、スワップスペースと呼ばれます。スワップ空間とは、一時記憶場所として予約されている仮想メモリの部分を指します。使用可能なRAMがシステムのメモリ要件を満たせない場合、スワップスペースが利用されます。
  • 詳細については、以下のリンクを参照してください。

-2

仮想という言葉を理解すれば、それが記憶にどのように関係しているかを理解できると思います。

Dictionary.comで定義されている「仮想」:「コンピューターソフトウェアによって一時的にシミュレートまたは拡張:RAM内の仮想ディスク、ハードディスク上の仮想メモリ」

仮想メモリの場合、システムは低速のメモリリソース(ハードドライブ、サムドライブなど)を使用してシステムメモリをシミュレートします。追加のメモリが必要な場合、システムはハードに不要なシステムメモリのデータをスワップアウトします。セットアップしたドライブまたはリソース。これにより、システムメモリが解放され、アプリケーションが実行していたタスクを続行できるようになります。

スワッピングは継続的なプロセスであるため、メモリをアップグレードする場合、システムがオフメモリとして低速のメモリにスワッピングする必要がないため、パフォーマンスが向上するはずです。


-2

仮想メモリは、オペレーティングシステム(OS)の機能であり、ランダムアクセスメモリ(RAM)からディスクストレージにデータのページを一時的に転送することにより、コンピューターが物理メモリの不足を補うことができます。

つまり、コンピューターをフォーマットせずにオペレーティングシステムを試すために仮想マシンまたは仮想ボックスで使用されるミラーまたはサンプルメモリのようなものです。


いいえ、ページングです。
デビッドシュワルツ

-4

仮想メモリは、物理RAMに加えてシステムがページングファイルとして使用するハードドライブのブロックです。

Windowsはハードドライブのこの部分を最適化しないため、注意が必要になり、時々遅くなります。

私が提供できる最高の2つのヒント:1)Virt Memは、物理メモリの約1.5倍の最小値と最大値の両方に設定する必要があります。例 2GB RAM = 3070MB Virt。2)デフラグするときは、ページングファイルをオフにします。2xをデフラグし、元の番号にリセットします。これにより、ドライブのスライスがきれいになり、ページングファイルの速度が向上します。


1
それは完全に真実ではありません-現代のメモリマネージャはすべてのシステムメモリを仮想化します。これにより、プロセスの分離が可能になります-各プロセスは、独自のメモリにのみアクセスできます。メモリマネージャは、これらの仮想ページを実際のストレージにマッピングし、オプションで固定ディスクにマッピングします。
アンソニージョルジオ

1
「Windowsはハードドライブのこの部分を最適化しません。」単にpagefile.sysを削除し、再起動し、ディスクをデフラグして、ページング、voilá、新鮮で連続したページファイルを再度有効にします!ただし、SysinternalsのPageDefragは、ページファイルをドライブ/パーティションの先頭に配置してパフォーマンスを向上させるため、より良い仕事をします。

1
この答えが正しければ、ページファイルが構成されていないWindowsシステムは、仮想メモリのサポートを提供できません。しかし、これは明らかに間違っています。このようなシステムは、たとえば、仮想メモリの例である物理RAMを超えるプロセスアドレス空間にファイルをマップできます。
デビッドシュワルツ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.