仮想記憶の仕組み
Windowsを含む現在のOSは、CPUが持つ仮想記憶機能を使ってメモリーを管理している。仮想記憶機能を使うことで、実装されているメモリー全体である「物理メモリー空間」と、プログラムが扱う「論理アドレス空間」を分離できる(図2)。これにより、すべてのアプリケーションプログラムに、まったく同じ仮想メモリー空間を提供できる。
仮想記憶機能の元では、プログラムは自分に割り当てられた仮想メモリー空間しかアクセスできないので、ほかのプログラムの領域には手を出せない。そのためあるプログラムがクラッシュしたとしても、ほかのプログラムに与える影響を最小限にできる。
x86系32bit CPUでは、仮想メモリー空間の最大サイズは4GBで、物理メモリー空間のサイズも4GBである。仮想記憶機能は割り当てテーブルを使い、4KBの「ページ」を組み合わせてアプリケーションに仮想メモリー空間を提供する(図3)。
“仮想”メモリー空間とは言っても、実際にアクセスするのは物理メモリーだ。それが仮想と呼ばれるゆえんは、メモリーが必要になったときに、すでにほかのプログラムに割り当てたメモリー領域を取り返して、メモリーを要求するプログラムに割り当てることができる点だ。これを「スワップ」という。止まっているプログラムは自分のメモリーが取られたことがわからないし、割り当てられた側も、それがさっきまでほかのプログラムが使っていたメモリーとはわからない。
32bit版のWindowsでは管理を簡単にするために、4GBの仮想メモリー空間のうち、上側の2GBをカーネルなどのシステム用とし、残り2GBをアプリケーションが自由に使える空間としている(図4)。
この連載の記事
-
第13回
PC
ARM版Windows 8実現の布石となったWindows 7の「MinWin」 -
第12回
PC
アプリがWindowsの機能を使うには? APIとDLLの仕組み -
第11回
PC
マルチコアCPUの消費電力はスケジューリングで変わる? -
第10回
PC
AMD FX向けにパッチで修正 スケジューラーが抱える難題 -
第9回
PC
マルチコアCPUを賢く使いこなす スケジューリングの秘密 -
第8回
PC
意味の違いがわかる? タスクとプロセスとスレッド -
第7回
PC
Windowsのメモリー管理をx86の仕組みから読み解く -
第5回
PC
Windows 8でMetro Styleアプリを動かす「WinRT」 -
第4回
PC
Windowsを動かすデバイスドライバーの仕組み 前編 -
第3回
PC
OSの仕事はハードウェアをアプリから「隠す」こと? - この連載の一覧へ