うーん,iBook でこういう話が盛り上がっているか……
Darwin/MacOS X の話をすれば
しかしこちらを読みちょっと認識が変わりました。
極端に簡単に言えば、仮想メモリとは広い仮想のメモリ空間を想定して、……
これは違う。というか足りない。広大な仮想記憶空間を,全ての process(Mach から見ると task)毎に一つずつ用意するから,全体で見ると MAJU さんが考えているよりも多分もっと広い。そして各々の process は自分の為に用意された広大な記憶空間しか見えないので,他の process の空間を侵略しようがない。これが memory 保護に繋がる。
因みに現在の Darwin/MacOS X では32bit 長の address が割り当てられるので,大体 4G bytes 程度の大きさになる。勿論 system 用の空間などがあるから,userland の process がこの全てを使える訳ではないのだけれど,それにしてもとてつもなく広大。
その一部を物理メモリに割り当てて物理メモリ量を補う考え方のこと、
ということでよろしいでしょうか?
こちらはこの通り。唯 Darwin/MacOS X を含む今時の OS がやっているは,swapping ではなく paging。
簡単にいうと swapping というのは実記憶がなくなると,使われていない process を disk に掃出して未使用領域を作りそこに新しい process を押込む方式で非常に効率が悪く,現在ではまず使われない。
# MAJU さんの今までの感じはこちらが近いでしょう。
Paging は実記憶を小さな(例えば 4K)固定の大きさの page に分けて,この一枚一枚の page をその page に割当てられている内容の使用率を勘案しながら再配置する方式。実記憶が足りない時に必要な物が disk 上に掃出されていたりすると,使用率の低い物から順に disk に掃出されてそこに再読込みされる。短期間で見た場合記憶の使用には局所性があるので,こちらの方が効率が良い。
歴史的な理由から swap という言葉が使われるけど,実際には行われているのは paging。