オペレーティングシステムのこれらの2つの用語の違いは何ですか:スワップとページ?
これら2つの用語の歴史的な交換にもかかわらず、それらは異なることを示しています。どちらも、メモリ内のデータをバッキングストア(多くの場合、ハードドライブ)と呼ばれる別のストレージデバイスに移動する方法を管理しますが、方法は異なります。
スワッピングには、メモリ内のプロセスのコレクションデータ全体をバッキングストアの一定範囲のスペースに移動することが含まれ、多くの場合、スワップファイルまたはスワップパーティションに移動します。プロセスは、メモリ内にある状態から完全にスワップアウトされる状態になります。間にはありません。明らかに、スワッピングが価値のあるものになるには、プロセスが完全にアイドル状態である必要があります。これの利点は、把握するのが比較的簡単で、プログラムのメモリが常に連続して割り当てられることです。欠点は、システムが常にスワップしている状態になると、マシンのパフォーマンスが完全に低下する可能性があることです。このアルゴリズムには、予見可能な将来使用されないデータのスワップインとスワップアウトの繰り返しも含まれます。
ページングは、物理メモリを取得し、固定サイズの「フレーム」と呼ばれるものに分割することにより、これらの問題を解決しようとします。また、実行中の各プロセスのメモリ領域を取得し、ページ(フレームと同じサイズ)に分割します。これは、物理アドレスを使用してメモリの各ブロックにアクセスする必要があるため、物理アドレス空間と呼ばれます。
各プログラムはOSによって環境が提供され、最新のハードウェアによってサポートされているため、プログラムのメモリフットプリントは非常に大量のメモリの単一の連続したブロックのように見えます。これは論理アドレス空間と呼ばれます。
ただし、この連続したブロックの各ページはメモリ内にある場合と、バッキングストア上にある場合があります。オペレーティングシステムは、「ページテーブル」と呼ばれるものを参照して、各ページの場所を決定します。プログラムが要求したページがメモリのどこかにあることが判明した場合は、そのメモリのページに移動して、要求されたデータを取得します。
ページがメモリ内にないことが判明した場合。これにより、「ページ違反」が発生します。 OSは、要求されたページをバッキングストアからロードしている間、プロセスを一時停止し、いくつかの置換アルゴリズムに基づいて、別のページをメモリからバッキングストアに移動し、空きを作ります。バッキングストアはページファイルと呼ばれることも、スワップファイルまたはスワップパーティションと呼ばれることもあるため、どのシステムが使用されているかについて混乱が生じます。それが別のパーティションであるか、単なるファイルであるかは、オペレーティングシステムによって異なります。
ページアウトされないメモリの特定の部分があります。これらの1つは、ページングコード自体と、ページフォールトなどを処理するカーネルの部分です。 MacOSなどの一部のオペレーティングシステムでは、このメモリを「有線」と呼びます。
現代のハードウェアには、オペレーティングシステムがページングをより効果的にサポートできるようにするいくつかのデバイスがあります。これらの中で最も一般的なのは、Translation Lookaside Buffer(TLB)です。これは一種のハードウェアページテーブルキャッシュを格納するので、プログラムが論理アドレスから物理アドレスへの変換を行う必要があるときはいつでも、毎回オペレーティングシステムに問い合わせる必要はありません。
最新のオペレーティングシステムでは、実行中のプロセスの一部を遅延読み込みすることでページングを利用しています。たとえば、Microsoft Wordを起動した場合、プログラム全体をメモリに読み込むのではなく、オペレーティングシステムは必要なプログラムの部分のみをメモリに読み込み、プログラムの他の部分は必要なときにのみ取得します。これには、メモリフットプリント、ブート速度、および新しいパーツをロードする必要があるときにプログラム内で遅延が発生する頻度の間のトレードオフもあります。
とにかく、おそらくあなたが探している以上のものですが、うまくいけば面白いです。
スワッピングとページングは直交する概念です。ページングでは、(物理)メモリは「フレーム」と呼ばれる小さなブロックに分割され、各プログラムの(論理)メモリは「ページ」と呼ばれるブロックに分割されます。ページとフレームは同じサイズです。次に、各ページがフレームにマップされます。このマッピングは、ページテーブルを介して実行されます。ページングは、以前のメモリ管理スキームに存在していた断片化の問題を解決します。
スワッピングでは、使用されていないメモリの一部がディスクに書き込まれます。これにより、総メモリ消費量が物理メモリの量よりも多い複数のプログラムを実行できます。プログラムがディスクに書き込まれたメモリの一部を要求する場合、その部分をメモリにロードする必要があります。そのためのスペースを作るために、別の部分をディスクに書き込む必要があります(事実上、2つの部分が場所を入れ替えます-したがって名前です)。この物理メモリの「拡張」は一般に「仮想メモリ」と呼ばれます。
最近のシステムはページングとスワッピングの両方を使用しており、ページはメモリとの間でスワップされるものです。
Linuxでのスワップは、仮想メモリに使用されるパーティションです。これには、実メモリとの間で交換できるメモリのブロックであるページが含まれています。
ほぼ同じことについては、用語が異なるだけです。どちらも(通常)ハードドライブに格納されている仮想メモリの領域を参照します。
* nix、et al。それを「スワップ」と呼びますWindowsの呼び出しはページファイルです
Linuxなどでは、スワップ領域は通常、独立したパーティションです。 Windowsでは、通常、OSのファイルシステムのどこかに保存されているファイルです。
ページは、OSによって管理されるメモリのブロックです。 Linuxでは、次のように入力して、OSバージョンのカーネル割り当てを確認できます。
$ getconf PAGESIZE 4096
4KBはかなり一般的な割り当てです。
ページはサイズの割り当てを指しますが、スワップは「移動」を指します。詳細を知りたい場合は、 Linuxスワップスペースのすべて を参照してください。
参照: ページングとスワッピング
スワッピングとページングの問題は、しばしば誤解されています。スワッピングとページングは2つのまったく異なるものです。
スワッピングは、問題のあるプロセスで物理メモリがいっぱいになるため、Unix System Vで使用された最初のテクノロジーでした。システムが完全にRAMを使い果たすとどうなりますか? 「止まる」
RAM=の保存と正しい管理は非常に重要です。CPUがRAM内のデータを操作できるのは、カーネルによってハードディスクから読み込まれた後のみです。マウント数とプロセスのサイズが物理メモリを超えていますか?この状況を許容するために、また(UniProcessorシステムでは)一度に1つのプロセスしか実行できないため、実際にはそのプロセスのみをRAMに置く必要があります。複数の実行中のプロセスがプロセッサで非常に頻繁に実行されるようにスケジュールされているため(「スケジューラ」と呼ばれるセクションを参照)
これらの問題に対処するために、カーネルは、物理メモリをはるかに超える仮想アドレス空間をアプリケーションにアドバタイズすることによって、アプリケーションに抽象的なメモリ使用を通知します。アプリケーションはより多くのメモリを要求するだけで、カーネルはそれを許可します。
システム内にRAM)が64MBしかない場合でも、単一のプロセスが100MBのメモリを割り当てている可能性があります。プロセスは、これが仮想メモリであると同時に、100MB全体にアクセスする必要はありません。 [...]