仮想メモリとは?
仮想メモリという言葉は今では紛らわしいのですが、2つの意味があります。
1つは仮想記憶とも呼ばれる、スワップ等で使われる技術を指します。もう1つは仮想サーバ上のメモリのことを指します。しかしこの記事では仮想サーバ上のメモリの話はしません。
仮想記憶の本質
1つ目の「仮想記憶」に関してですが、「仮想記憶=スワップ」と勘違いされる方もいますが、本質は違います。
アプリケーションを作成する際に、メモリを意識したプログラミングが必要になりますが、物理メモリのアドレスをアプリケーション開発者が扱うのは極めて困難です。
そこで、アプリケーション開発者が扱いやすいように、物理的にバラバラなアドレスを、連番でのアドレスとして扱えるようにしたのが仮想記憶です。
仮想記憶の概念を使うことで、アプリケーション開発者は欲しい量だけを要求するプログラミングにすればよく、どこから払い出せば良いかはOS側で対処します。OSは解放された物理アドレスをかき集め、連番の仮想記憶へ振り直し、アプリへ払い出します。
その副次的な拡張機能として、HDDの一部の領域も仮想記憶のアドレスとして考えてしまうスワップが考案、実装されたのです。
仮想記憶のアドレスと物理メモリのアドレスの変換は MMU (Memory Management Unit: メモリ管理ユニット) が行います。MMU は仮想アドレスと物理アドレスをどう変換するかが記載されている"ページングテーブル"を使い変換するのです。このページングテーブルは、刻一刻と変化しますので、随時更新が行われます。
MMU はかつてはメモリコントローラに存在し、CPU とメモリの間に挟まれていましたが、今やメモリコントローラは CPU に内蔵されるようになり、MMU も CPU 内蔵となっています。
MMU では仮想アドレスを物理メモリのアドレスにマッピングしますが、それ以外に、HDDのスワップ領域にマッピングすることもできます。これにより物理メモリ以上に仮想メモリの領域を確保することができるようになります。この仕組みをスワップと言います。
物理メモリが不足し、アクセス頻度の少ないメモリ領域を HDD のスワップ領域へ追い出すことを『スワップアウト』と呼び、逆に、必要となった領域がスワップアウトにより追い出されていたのをまた物理メモリへ戻すことを『スワップイン』と呼びます。
仮想メモリとスワップはなぜ混同される?
Windows ではスワップ領域のことを『仮想メモリ』と表現していることが原因だと思われます。
まとめ
仮想記憶は本来はアプリケーションに対して連番のアドレスを提供する機能、その副次的な拡張機能としてスワップがあり、「仮想記憶のうち、HDD を使う領域=スワップ」なのです。
IT/インフラエンジニアの地位とスキル向上のために


コメント