Windows Server 2008 R2は、すべてのエディションが64ビットでのみ提供される初めてのWindowsOSになる。64ビットでのみの提供とは、x64(AMD64)プロセッサ対応の標準のエディション群と、IA-64プロセッサ対応のWindows Server 2008 R2 for Itanium-Based Systemsが用意され、これまで主流であったx86版が一切提供されないということである。本書では特に記述がない限り、「64ビット」と言えばx64のほうを指している。IA-64は一部のハイエンド用途に限られ、一般向けではないからだ。

32ビット(x86)アーキテクチャーの限界

 プロセッサのマルチコア化やクロック数の向上、メモリの大容量化とコストダウンなどにより、32ビットOSでも現在のハードウェアから得られる恩恵は大きい。しかし、32ビットOSには、32ビットアーキテクチャーの仕様上の制約がある。32ビットOS環境において、プロセッサやメモリを増設してスケールアップを図っても、期待したほど処理能力が伸びないというのは、特にサーバー用途においてかなり以前から問題になっていた。このスケールアップが頭打ちになる要因は、32ビットアーキテクチャーの仕様上の制約からくるものである。表2は、32ビットアーキテクチャーと64ビットアーキテクチャーの仕様を比較したものだ。

表2●32ビットと64ビットのアーキテクチャーの違い
[画像のクリックで拡大表示]
表2●32ビットと64ビットのアーキテクチャーの違い

 32ビットOSは、32ビットアーキテクチャーの仕様に基づいている(図5)。OSやアプリケーションが利用可能な仮想アドレス空間は4GB(2の32乗)までで、この領域がカーネルモードのOSと、ユーザーモードのアプリケーションに均等に2GBずつに割り当てられる。仮想アドレス空間が4GBという制約は、物理メモリの上限にも影響する。通常、32ビット環境では最大で4GBの物理メモリまでしかサポートされない。実メモリ内で処理できないデータは、ページフォールトを発生させるため、ディスク I/Oがボトルネックとなり、パフォーマンスに影響する。OSを/3GBブートスイッチで起動する「アプリケーションメモリ調整」を利用することで、アプリケーションの仮想アドレス空間を最大3GBまで拡張することができるが、その場合OSが利用できる空間が1GBに削減されてしまい、カーネルモードドライバーへのメモリ割り当てが不足するなど安定性に影響する場合がある。また、3GBに拡張された仮想メモリ空間をアプリケーションが利用するためには、アプリケーションがリンカオプション/LARGEADDRESSAWAREを使用してビルドされている必要もある。

図5●32ビット(x86)アーキテクチャーにおける仮想アドレス空間
図5●32ビット(x86)アーキテクチャーにおける仮想アドレス空間
 ハイエンドのワークステーションやサーバー機では、32ビットOSでも4GB以上の物理メモリがサポートされているものもある。これは「PAE(Physical Address Extension:物理アドレス拡張)」と呼ばれるプロセッサの拡張機能を利用したもので、アプリケーションが利用できる仮想アドレス空間は2GBのままだ。32ビットの仮想アドレス空間を超える物理メモリ領域(AMEメモリマップ)にアクセスするには、AWE(Address Windowing Extensions)APIに対応したアプリケーション(SQL Serverなど)が必要になる。