「メモリーが不足する」とはどういうことか?
「メモリー不足」という言葉には、大きく2つの意味がある。ひとつは物理メモリー量が少なくて、多数のプログラムが動くと仮想記憶機能による割り当て直しが大量に発生してしまい、動作速度に影響が出ることをいう。これは物理メモリーを増やすことができれば、ある程度解決できる問題だ。
もうひとつは、アプリケーションに割り当てることができる2GBではメモリー空間が小さすぎて、アプリケーションが十分な速度で動作できない(ひどい場合はアプリケーションがクラッシュする)という問題だ。この問題は物理メモリーを増やしても解決せず、アーキテクチャー上の大きな変更が必要になる。
そのためにWindowsが取った最初の対策が、俗に「3GBスイッチ」と呼ばれるものだ。これは、Windowsの起動オプション「/3GB」のことで、これを指定すると4GBの仮想メモリー空間のうち、3GBをアプリケーションが利用できるようになる(図5)。
ただし、導入以前のアプリケーションはメモリーの上限が2GBであるとして開発されているので、3GBスイッチに対応したアプリケーションだけがその恩恵を受けられる。そもそもこれが実装された大きな理由は、マイクロソフトのサーバーアプリケーション製品が2GBではメモリー不足になってしまったから、という笑えない理由があった。
ただし、3GBまで拡張されるのはあくまで仮想メモリー空間であって、拡張されるのはアドレスを指定する“範囲”だけだ。物理アドレスは変わらない。これは「Exchange Server」のように、Windows上で単体のサーバーアプリケーションが動作するような場合に適した対策であり、同時にほかのプログラムを走らせると、Exchange Serverが動作するときにスワップが大量に発生するだけになってしまう。
4GBを超えるメモリーを
利用可能にした「PAE」。ただし……
もうひとつのメモリー不足対策は、インテルがCPUに追加した4GB超のメモリーを扱う機能「PAE」(Physical Address Extension)である(図6)。PAEは最大64GBまで、物理メモリー空間を拡張する機能だ。仮想記憶では、仮想アドレスを物理アドレスに変換するためのテーブル(表データ)を、メモリー上に保持している。PAEではテーブルの物理メモリーを示す部分を4bit増やして、64GBの中から割り当てるようにした。
ただし論理アドレスは32bitのままなので、プログラムからアクセスできるメモリー空間は相変わらず2~3GBのままだ。つまり、ひとつのプログラムのメモリー不足に対しては効果がない。
また、Windowsは元々4GBの物理メモリー空間を管理するように設計されているので、64GBのメモリーを自由に使えるように改良するのは、かなり大変な作業になる。当時すでに、64bit CPU用に64bit版Windowsを開発していたことを考えると、「メモリーが必要なら64bit版へ移行してほしい」というのがマイクロソフトの本音だったろう。
そうは言っても、3GBを超えるメモリーを必要とするアプリケーションは、全体からみればわずかでしかない。そのためWindowsでは、仮想メモリー空間は4GBにしたまま、残りのメモリーをアクセスするためのAPIを提供するにとどめた。これが「AWE」と呼ばれる機能だ(図7)。
AWEに対応したアプリケーションだけが、4GBを超えるメモリーを扱うことができる。ただし、メモリーアドレスを直接指定するのではなく、アプリケーションのメモリー空間に割り当てられた特別の領域(メモリウインドウ)からアクセスできる範囲を切り変えることで、結果として大量のメモリーを扱うことができるという仕組みになっている。当然ながらこの機能も、3GBスイッチとおなじく対応したアプリケーションでしか効果がない。
それでもVistaやWindows XP SP2以降では、PAE機能は標準機能となった。これは、デバイスドライバーなどの対応がかなり進んだからだ。
この連載の記事
-
第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の仕事はハードウェアをアプリから「隠す」こと? - この連載の一覧へ