仮想メモリ:なぜどのプログラムも、自分だけがマシン全体を独占していると思い込むのか
写真:Wikipedia

仮想メモリ:なぜどのプログラムも、自分だけがマシン全体を独占していると思い込むのか

各プロセスは、それぞれ独自の連続したアドレス空間を認識します。この仮想化レイヤーが、セキュリティと安定性の基盤となっています。

プログラムがアドレスを読み込む際 0x400000、それはRAM上の実際の位置ではありません。それは仮想アドレスであり、CPUのメモリ管理ユニットが実行中にそれを物理アドレスに変換します。

中間層のメリット

  • 分離:プロセスAはプロセスBのメモリにアクセスできない。なぜなら、Aのマッピングテーブルには、そこへのパスがそもそも存在しないからである
  • 仮想連続性:プログラムからは連続したメモリ領域として見えるが、実際にはページがRAM全体に散在している
  • スマート共有:10個のプロセスが1つのライブラリを共有する場合、そのライブラリのコードはRAM上に1つのコピーしか存在しない

ページ、ページエラー、および入れ替え

メモリはページに分割されており、通常は1ページが4KBです。プログラムがまだ読み込まれていないページにアクセスすると、CPUはページフォールトを発生させ、処理をカーネルに引き継ぎます。カーネルはデータ(ディスク上にある場合もあります)を探し出し、読み込んだ後、何事もなかったかのようにプログラムの実行を再開します。

これが、RAMが不足するとマシンがひどく遅くなる理由でもあります。メモリにアクセスするたびに、ディスクの応答を待たなければならない場合があり、その処理速度はRAMに比べて数千倍も遅いからです。

トップにランクインした数字にはどのような意味があるのか

  • VIRT — 登録済みの仮想空間の総容量。通常は非常に大きく、実用的な意味はほとんどない
  • RES — 実際にRAM上に存在している部分。これこそが注目すべき数値である
  • SHR — 他のプロセスと共有されている部分

すべてのプロセスの RES すべてのプロセスの合計は、共有領域が複数回カウントされるため、実際のRAM容量よりも大きな数値となることがよくあります。

Chia sẻ

Thảo luận