スワップスペースに物理メモリよりも大きなデータがある可能性がある

スワップスペースに物理メモリよりも大きなデータがある可能性がある

引用:centos.org の導入ガイドあれは、

スワップスペースLinux では、物理メモリ (RAM) の量がいっぱいになったときに使用されます。

そしてそれはウィキペディアまた、

「スワップ」という用語は、RAM とディスク間でメモリ ページを移動する動作と、ページが保存されるディスクの領域の両方を説明するために使用されます。

さて、特定の状況では、スワップ スペースに物理メモリよりも大きなデータが格納されるのはなぜでしょうか。システムが物理的に使用可能なメモリよりも多くのメモリを必要とする場合、カーネルは使用頻度の低いページをスワップ アウトし、メモリをすぐに必要とする現在のアプリケーション (プロセス) にメモリを割り当てると考えられます。したがって、スワップ スペースには RAM よりも大きなデータが保存されてはいけません。

これが私の出発点です。下記のスクリーンショットを参照してください。

ここに画像の説明を入力してください

答え1

あなたは仮想メモリを誤解しています。プログラムとオペレーティング システムは常に仮想メモリで動作します。10 バイト、1000 万、100 億の malloc を実行すると、仮想メモリが割り当てられます。コード、スタック スペース (自動ストレージ、alloca など)、グローバル ストレージ (ある場合) もすべて仮想メモリに存在します。のように何かのアドレスを取得すると、&myVariable結果は仮想アドレスになります。仮想メモリ OS では、物理メモリ アドレスを「決して」使用しません。

OSに必要な仮想アドレス空間の合計と、実行中のすべてのプログラムの合計は、日常的に今日のシステムでも、RAM のサイズを超えることがあります。これは単一のプログラムの場合にも当てはまります。したがって、単一のプロセスの RAM 使用量 + 「スワップ領域」は簡単に RAM を超える可能性があります。

実際のところ、仮想メモリの全体的なポイント (つまり重要なポイントの 1 つ) は、RAM よりも多くの「メモリ」(コード用、データ用など) を必要とするコードを記述できるようにすることです。

他のコメントで述べたように、仮想アドレス空間全体 (OS とすべてのプロセス用) のうち、どの部分を RAM に保持し、どの部分をディスク (「スワップ」空間) に保持するかは、オペレーティング システムによって決定されます。仮想アドレス空間の RAM にないページ (x86/x64 システムでは通常 4 KB) を参照すると、OS がそれを「スワップ イン」します (「ページ フォールト」によって発生するため、「ページ イン」または「フォールト イン」とも言います)。しばらくすると、OS が RAM が不足していると判断し、最も古く参照された、または最も頻繁に参照されないものを RAM から削除する場合があります。その内容が最後に RAM に取り込まれてから変更されている場合、変更されたバージョンをディスクに保存する必要があります。そのため、内容は「スワップ スペース」(Windows 用語ではページ ファイル) に配置されます。

ちなみに、ページファイル/スワップファイル/スワップ領域は、RAM にない場合、仮想メモリの内容が保持される唯一の場所ではありません。通常、すべてのコード ファイルを含むマップされたファイルは別の場所です。コードは RAM にある間は変更されることはほとんどないため、通常はスワップインされるだけで、スワップアウトされることはありません。RAM から失われる必要がある場合は、単にドロップされ、必要に応じて元のファイルから再度スワップインできます。

関連情報