このページの本文へ

基礎から覚える 最新OSのアーキテクチャー 第6回

メモリー不足を根本的に解決する64bit OSの仕組み

2011年10月20日 12時00分更新

文● 塩田紳二

  • この記事をはてなブックマークに追加
  • 本文印刷

「メモリーが不足する」とはどういうことか?

 「メモリー不足」という言葉には、大きく2つの意味がある。ひとつは物理メモリー量が少なくて、多数のプログラムが動くと仮想記憶機能による割り当て直しが大量に発生してしまい、動作速度に影響が出ることをいう。これは物理メモリーを増やすことができれば、ある程度解決できる問題だ。

 もうひとつは、アプリケーションに割り当てることができる2GBではメモリー空間が小さすぎて、アプリケーションが十分な速度で動作できない(ひどい場合はアプリケーションがクラッシュする)という問題だ。この問題は物理メモリーを増やしても解決せず、アーキテクチャー上の大きな変更が必要になる。

 そのためにWindowsが取った最初の対策が、俗に「3GBスイッチ」と呼ばれるものだ。これは、Windowsの起動オプション「/3GB」のことで、これを指定すると4GBの仮想メモリー空間のうち、3GBをアプリケーションが利用できるようになる(図5)。

図5 2GBではメモリーが不足するアプリケーションのために、最大3GBを割り当てる「3GBスイッチ」が導入された

 ただし、導入以前のアプリケーションはメモリーの上限が2GBであるとして開発されているので、3GBスイッチに対応したアプリケーションだけがその恩恵を受けられる。そもそもこれが実装された大きな理由は、マイクロソフトのサーバーアプリケーション製品が2GBではメモリー不足になってしまったから、という笑えない理由があった。

 ただし、3GBまで拡張されるのはあくまで仮想メモリー空間であって、拡張されるのはアドレスを指定する“範囲”だけだ。物理アドレスは変わらない。これは「Exchange Server」のように、Windows上で単体のサーバーアプリケーションが動作するような場合に適した対策であり、同時にほかのプログラムを走らせると、Exchange Serverが動作するときにスワップが大量に発生するだけになってしまう。

4GBを超えるメモリーを
利用可能にした「PAE」。ただし……

図6 PAEは仮想アドレスは32bitのまま、変換テーブルに36bitアドレスを指定できるようにすることで、4GBを超えるメモリーを扱う仕組みだ。アプリケーション側はそのままだが、OS自体は32bitを超えるメモリー空間を扱えるように改良が必要

 もうひとつのメモリー不足対策は、インテルが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)。

図7 WindowsはPAEにより、4GBを超えるメモリーを管理できるようになった。しかし実際には4GBを超えた部分へのアクセスを、「AWE」API経由でアクセスする機能を提供するだけにとどまった

 AWEに対応したアプリケーションだけが、4GBを超えるメモリーを扱うことができる。ただし、メモリーアドレスを直接指定するのではなく、アプリケーションのメモリー空間に割り当てられた特別の領域(メモリウインドウ)からアクセスできる範囲を切り変えることで、結果として大量のメモリーを扱うことができるという仕組みになっている。当然ながらこの機能も、3GBスイッチとおなじく対応したアプリケーションでしか効果がない。

 それでもVistaやWindows XP SP2以降では、PAE機能は標準機能となった。これは、デバイスドライバーなどの対応がかなり進んだからだ。

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン