ゆっくり始めて、それをすべてまとめてみます。こんな感じです:
一般的に使用される仮想メモリは、「ページング」を指します。名前が示すように、ページングは人間のメモ帳のようなものです。
単純な合計を計算するとき、または単純な情報を学習するときは、頭の中ですべてを行います。すべての情報を読み込み、処理し、答えを得るだけです。これは、ハードドライブからファイルを読み込むコンピューターのようなものです。プログラムや画像、または作業に必要なその他の情報を「実メモリ」(または「物理メモリ」)に読み込み、「脳」で動作します(そのプロセッサ)。
ただし、複雑な情報を学習しているとき、または複雑な合計を処理しているときは、すべてを一度に頭に収めることができない場合があります。あなたは混乱し、スローダウンし始め、そこにすべてを一度に保持することに失敗し、何かを覚えるために何かを忘れなければなりません。
人間の解決策は、メモ帳を使用することです。一度に思い出せないことはすべてページに書き留めますが、合計を行う際にそれらを参照します。その月の売り上げの膨大なリストを思い出せないかもしれませんが、ページを見て、少しずつ情報を取得し、各ビットを処理できます。これは、コンピューターがメモリを「ページング」するようなものです。情報でいっぱいのページを書き込み、後で参照するために「仮想メモリ」に入れ、ページが必要であることを認識し、そのページを仮想メモリから実メモリにロードします。LinuxおよびUNIXでは、これらのページが保存される場所は文字通り「ページファイル」と呼ばれ、メモリ内のデータのページは文字通り「ページ」と呼ばれます。システムごとにこれらの名前は異なりますが、一般的な概念はほとんど同じです。
本当に、ページングは非常に簡単です。情報のすべてのページがメモリに収まらないため、一部のページはディスクに置かれ、後で再び読み込まれます。
現在、より複雑になっているのは、最新のシステムがメモリマッピングとメモリ保護を備えていることです。これらは通常、コンピュータ内の同じハードウェアシステムであるメモリ管理ユニット(MMU)によって処理されます。
多数のプログラムを一度に実行でき、メモリ保護を備えた(現代の)マルチタスクコンピューターでは、通常、各プログラムは同じシステムで実行されている他のプログラムから分離されています。このように、1つのプログラムはメモリにアクセスするだけでは別のプログラムを変更できません。MMUは1つのプログラムのアドレススペースを他のプログラムのアドレススペースから物理的に分離します。言い換えれば、ユーザーのプログラムは、他のユーザーのプログラムまたは他のプログラムさえも見ません。彼らは「本当の記憶」を見ません-彼らは彼ら自身の「仮想記憶」を見ます。
さて、このメモリ分離の概念とページファイルの概念は概念的に異なる2つのものであり、これがおそらくあなたが混乱している理由です。ただし、重要なことは、両方がMMUを使用して機能することです。MMUは、メモリをページに分割し、ページを仮想アドレス空間にマップするメモリ管理ユニットです。
したがって、プログラムが特定の「メモリアドレス」でメモリを要求すると、実際に起こるのは、そのプログラムのメモリページとそれらの対応するアドレス(プログラムの「アドレススペース」)が検索され、そのメモリブロックが見つかりました。そのページは、実際のメモリのどこかにロードできます。その場合、プログラムにアクセス権が付与されるか、ディスクにページアウトできます。ページアウトされた場合、「ページフォルト」をトリガーします。ディスクにアクセスし、ページがメモリにロードされます。したがって、プログラムは十分なメモリがない場合でも動作しますが、通常非常に高速なメモリアクセスのためにディスクを使用する必要がある場合、ゆっくり実行されます。
現在、そのページをメモリにロードするのに十分なスペースがない場合、問題があります。その場合、すでにメモリ内にある他のページをディスクに「スワップ」する必要があるため、最初のプログラムのページをロードできます。または、同じプログラムのページである場合もあります。これは、グラフィックプログラムで時々見られます。たとえば、負荷の大きいシステムで、画像の一部がゆっくりと読み込まれてすぐに描画され、次に次の部分が等しくゆっくり読み込まれてすばやく描画され、最初の一部、再び遅いです。それは、彼らが作業のためにロードされてから、再び交換されたためです。明らかに、これは非常に遅い方法であり、本当に必要なのはより多くの実メモリです。