今回は、OSのメモリー管理について解説しよう。メモリー管理はOSの基本機能のひとつと言ってもいいぐらい、重要な機能だ。というのも、近代的なOSはすべてマルチタスク、つまり複数のアプリケーションが並行して動作するため、それぞれのアプリケーションが利用するメモリーを、OSが正しく管理しなければならないからだ。
プログラムはメインメモリーに置かないと実行できないが、別々のプログラムをメモリー内の同じ位置に置くわけにはいかない。だからプログラムを起動するときには、以前に起動したプログラムとは別の場所に置かねばならない。プログラムをどこにおいて、どれだけのメモリーを使わせるのかを把握することを「メモリー管理」という。
コンピューターの歴史はメモリー管理の歴史でもある。それぐらいコンピューターにとっては、メモリーを管理することは重要だ。かつてメモリーは高価な部品だった。また、プログラムは機能が増えることなどで、メモリーを使う量が増えていく。メモリー管理は増大していくプログラムのメモリー要求に対して、貴重なメモリーをどうやって有効に使うかということでもある。
なぜ32bit版では4GB未満の
メモリーしか扱えないのか?
32bit CPUであるx86系プロセッサーは、物理メモリーのアクセスに32bitのアドレスを使うため、アクセス可能なメモリーは最大4GBになる。ただし、これらをすべてメモリーとして使うのではなく、その一部は「メモリーマップドI/O」に使われる。メモリーマップドI/Oとは、メモリー空間の一部にI/Oデバイスにアクセスするための領域を割り当てるものだ。例えばGPUの場合、ビデオメモリーをメモリー空間に割り当てることで、CPUからの高速なアクセスを可能にしている(CPU内蔵グラフィックスの共有メモリーとは別の話)。
x86アーキテクチャーでは、I/Oアクセスには専用の「I/Oアドレス空間」があるのだが、これはとっくの昔に足りなくなっていた。さらに、I/O命令では高速なデータ転送ができないという問題もあり、今では多くのデバイスがメモリーマップドI/Oを使うようになっている。
Windows Vistaの登場以前に、メモリーの実売価格が大きく下がり、4GBのメモリーは比較的簡単に入手できるようになった。ところが、パソコンにメモリーを4GB装着しても、Windowsが4GBすべてを認識してくれないという問題が話題になった。その後マイクロソフトはやり方を変えて、「実装メモリ量」は4GBと表示する一方で、「アプリケーション等から利用できる領域は3.5GB」というような表示方式に変更した。
4GBのメモリーを搭載しても全部が利用できないのは、前述のメモリーマップドI/Oのために、利用できるメモリー空間が減ってしまうからだ(図1)。
この連載の記事
-
第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の仕事はハードウェアをアプリから「隠す」こと? - この連載の一覧へ