質問: メモリ管理方式として、ページング方式が採用された初期の頃は、プロセスの全ページをメモリにロードしていたようです。 その後オンデマンドページング方式が発案され、現在はこちらが主流のようです。 仮想記憶という言葉には2つの意味があると思います。(ここすごく紛らわしいです。) 1、プロセスが持つ論理アドレス空間 2、スワップなどのHDD内にある記憶領域 スワッピングの機能は、仮想記憶2の方で、メモリ不足になった時に、プロセスが使用していない領域を補助記憶装置に戻しますよね。 (スワップアウト、スワップインの単位はページ単位とプロセス単位があるようです。OSによって異なるそうです。) ここでは、ページ単位に絞ります。 スワップイン、スワップアウトがページ単位で行われる場合・・・ 確認です。 ページインとスワップインは同じような意味ですよね? ページアウトとスワップアウトは同じ意味ですよね? よくメインメモリにかなりの容量(32GBなどなど)を搭載している方とかは、windowsでもlinuxでも仮想記憶(スワップ機能)を無効にしていると思います。自分も無効にしています。 (windowsではコントロールパネルから、linuxではスワップパーティションを持たないといことです。) 自分は、長い間、スワップ機能を無効にすると「スワップアウトの方だけが無効になる」と思っていましたが、 スワップイン・・・すなわちオンデマンドページング(ページイン)の方も無効になるのでしょうか? (実際に、スワップ機能を無効にするとスワップアウトは無効になりますよね。)(こちらの理解は正しいはずです。) メインメモリが大容量であるなら、オンデマンドページング方式でなくても、昔のプロセスの全ページをロードする方式でも問題ないので、スワップ機能を無効にするとオンデマンドなページインの方が無効になるのか気になりました。 用語が同じなので、前提の部分の理解が間違っているかもしれません。 ページングファイルとスワップファイルは同じでスワップ領域(HDD)のこと ページ単位でのスワップアウトとスワップインを行う場合は、 ページイン=スワップイン、ページアウト=スワップアウトと考えていますが・・・ 現在では、スワップイン、スワップアウトはプロセス単位で行うのが主流なのですか? スワップ機能がプロセス単位だった場合、スワップインとページイン及びスワップアウトとページアウトはそれぞれ別物ですよね? となるとページングファイルとスワップファイルも別物ということですよね? 長いのですが、分かる方教えてください。
回答: > > ページング方式が採用された初期の頃は、プロセスの全ページをメモリにロードしていたようです。 > > > プログラムの全体を、実行前に、プログラムファイルからメモリにロードしていた。 > > スワップイン、スワップアウトがページ単位で行われる場合・・・ > > ページインとスワップインは同じような意味ですよね? > > ページアウトとスワップアウトは同じ意味ですよね? > > > はい。同じ意味です。 > > 自分は、長い間、スワップ機能を無効にすると「スワップアウトの方だけが無効になる」と思っていましたが、 > > スワップイン・・・すなわちオンデマンドページング(ページイン)の方も無効になるのでしょうか? > > > ページファイル(スワップファイル)が無い場合、ページイン(スワップイン)は起こりようが無いです。 ページファイルから物理メモリに内容を読み込むのがページインです。 オンデマンドページングというのは、プログラムの未割り当ての論理ページにアクセスがあった時点で物理ページを割り当ててプログラムファイルからロードするということであり、ページインとは別物です。ページファイルの有無とは関係ないです。 > > 現在では、スワップイン、スワップアウトはプロセス単位で行うのが主流なのですか? > > > ページングが主流だと思います。 > > スワップ機能がプロセス単位だった場合、スワップインとページイン及びスワップアウトとページアウトはそれぞれ別物ですよね? > > > 別物ですね。 > > となるとページングファイルとスワップファイルも別物ということですよね? > > > プロセス単位のスワッピングと、ページ単位のページングの両方を行うOSの場合、共用して1つのファイル(ディスク、パーティション)でしょうね。