質問: linux:「ページ違反のページング」と「手動で有効にしたスワップ」の違い linuxマシンでは、次のようなコマンドでスワップを有効にできますsudo fallocate -l 500m /data/swapfile sudo chmod 600 /data/swapfile sudo mkswap /data/swapfile sudo swapon /data/swapfile ただし、これが有効になっていない場合でも、ページがメモリにない場合、カーネルはページングを実行します。これを確認するには、sar -b 1 30コマンドは、スワップファイルを設定せずにマシン上で実行します。03:08:40 am pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff 03:08:41 am 0.00 0.00 3.00 0.00 44.00 0.00 0.00 0.00 0.00 03:08:42 am 0.00 0.00 19.00 0.00 30.00 0.00 0.00 0.00 0.00 03:08:43 am 0.00 0.00 0.00 0.00 3.00 0.00 0.00 0.00 0.00 03:08:44 am 24.00 0.00 2.00 1.00 7.00 0.00 0.00 0.00 0.00 03:08:45 am 364.00 60.00 18.00 3.00 4.00 0.00 0.00 0.00 0.00 03:08:46 am 140.00 0.00 392.00 2.00 243.00 0.00 0.00 0.00 0.00 トリガーするmajfltがまだあります ディスクへのデータのページング ディスクからのデータのページング。私の質問は: osのスワッピングには2つのタイプがあると言えますか? 2つのメカニズムはどのように異なるのですか? 常にページングメカニズムが機能しているのに、なぜ手動でスワップを有効にする必要があるのですか? 私は知っています 一部の人々は言った : スワッピングとは、プロセスアドレス空間全体をコピーすること、またはいずれにしても、共有できないテキストデータセグメントをスワップデバイスにコピーすること、または一度にコピーすること(通常はディスク)を指します。 一方、ページングとは、アドレススペースの1つ以上のページをコピーイン/コピーアウトすることを指します。特に、これははるかに細かい粒度です。たとえば、1 gb ramアドレス空間に〜250,000の4 kbページがあります。 ただし、本 linux virtual memory managerの理解 では、linuxではこのようには見えません。 厳密に言えば、「スワップ」とはプロセスのアドレス空間全体をディスクにコピーし、「ページング」で個々のページをコピーすることを指しているため、linuxはスワップしません。 linuxは、最新のハードウェアがページングをサポートしているため、実際にはページングを実装していますが、従来、ディスカッションやドキュメントではスワッピングと呼ばれていました。 linuxでのwordの使用と整合性を保つために、私たちもwordをスワッピングと呼びます。 誰かがこれに光を当てることができますか?ありがとう!
回答: あなたの2つの引用は、スワップの歴史的/元の意味を持っています。ウィキペディアページング: 1960年代、スワッピングは初期の仮想メモリ技術でした。 プログラム全体はram)からディスクに「スワップアウト」(または「ロールアウト」)され、別のプログラムがスワップイン(またはロールイン)されます。 intelマニュアルは明確です: オペレーティングシステムまたはエグゼクティブでページングが適切に実装されている場合、物理メモリとディスク間のページのスワッピングは、プログラムの正しい実行に対して透過的です。 (16ビット仮想8086モードでも透過的に機能することを説明し続けます...)amdには、非常に読みやすいパーツもあります。 最後に、システムソフトウェアはページングメカニズムを使用して複数の大きな仮想アドレススペースをはるかに少ない物理メモリにマッピングできます。各アプリケーションは、32ビットまたは64ビットの仮想アドレス空間全体を使用できます。システムソフトウェアは、最も頻繁に使用される仮想メモリページを物理メモリページの使用可能なプールにアクティブにマップします。最も使用頻度の低い仮想メモリページは、ハードドライブにswapped outです。このプロセスはデマンドページング仮想メモリと呼ばれます。 ハードドライブにスワップアウトしないセットアップは考慮しません。その場合、lfuはファイルに(もしあれば)書き戻すか、削除(クリーンの場合)する必要があります。少し関連しているのは、この新しい64命令です。 swapgs命令は、システムソフトウェアがシステムデータ構造へのポインタをロードするための高速な方法を提供します。 swapgsは、syscall命令の結果として、または割り込みや例外の結果としてシステムソフトウェアルーチンに入るときに使用できます。 ... この交換により、システムカーネルソフトウェアはメモリ参照中にgsセグメントオーバーライドプレフィックスを使用してカーネルデータ構造にすばやくアクセスできます。 それは常にこれに戻りますsegmentation: セグメンテーションはソフトウェアとデータの再配置と保護に大きな柔軟性を提供しますが、メモリの分離と再配置をソフトウェアとハードウェアのページングの組み合わせサポートで処理する方が効率的であることがよくあります。このため、最新のシステムソフトウェアのほとんどは、セグメンテーション機能をバイパスしています。ただし、セグメンテーションを完全に無効にすることはできませんであり、セグメンテーションメカニズムを理解することは、ロングモードシステムソフトウェアの実装に重要です。 つまり、このページ単位のramからのスワッピングと、スワッピングのコンテキストスイッチ側は、60年代の実装だけでなく、最新のswapgs命令にも反映されていると言えます。