Windows Latestは9月13日(現地時間)、「Microsoft engineer explains why 32-bit Windows was capped at 4GB RAM, and it wasn't technical」において、32ビット時代のWindowsでメモリ容量が4GBに制限されていた理由を伝えた。

当時の技術ではすでに4GBを超える物理メモリを扱うことが可能だったが、クライアント向けWindowsでは古いドライバーなどとの互換性が大きな壁となったという。Microsoftが技術的には可能だった4GB超のメモリ対応をあえて制限した背景を見ていこう。

Windows Latestが紹介したのは、MicrosoftのRaymond Chen氏が5月12日に公開したブログ記事だ。Chen氏は同記事で、32ビット版Windowsのメモリ容量が4GBに制限された経緯を解説している。

32ビットCPUで64GBメモリに対応する

一般的な物理の世界(SI単位)ではキロ以上の倍量単位を1000(10の3乗)倍していく方式を採用している。メガであれば10の6乗、ギガであれば10の9乗だ。

一方、コンピュータの世界では数値を2進数で管理するため、SI単位の10進数は都合が悪い。そこで1000の近似値と言える1024(2の10乗)を倍量単位のキロとして採用した。メガであれば2の20乗、ギガであれば2の30乗という考え方だ。

そのため、処理の単位として32ビットレジスターを搭載する旧式CPUでは、32ビット→「4*2の30乗」→4GBが必然的にアドレスの上限とされた。この制限はIntelがPentium Proで導入した物理アドレス拡張(以下、PAE)によって解決され、32ビットアーキテクチャー上で36ビット(64GB)または37ビット(128GB)のアドレスを扱えるようになった。

Microsoftの資料によれば、Windows Server 2003 SP1 Enterpriseは最大64GB、Datacenterは最大128GBの物理メモリに対応したという。

大衆向けエディションでは後方互換性を重視

CPUにPAEが搭載され、4GB以上のメモリを扱えるようになった。しかしながら、Windows XP SP2では強制的に最大容量が4GBに制限された。Chen氏によると、この制限は古いドライバーの互換性確保が理由とされる。

PAE登場前の古いドライバーなどは、メモリ空間を32ビットで管理する。このドライバーをPAE環境に持ち込むと、上位4ビットを無視した処理が走りメモリを破壊する可能性がある。

Windowsが異常を検知して動作を止めることができればよいのだが、カーネルレベルで動作するこれらドライバーの動作を防止することはできない。その結果、システム全体が不安定となり、最悪のケースではブルースクリーン(BSoD: Blue Screen of Death)に陥ることもあった。

そこでMicrosoftは安定性を優先し、あえてXP SP2に4GBの制限を追加した。より高額なエディションを買わせたかったわけではなく、古いデバイスの互換性維持に必要な決断だったとしている。

一般ユーザーは「何でもインストールする」

ここで1つの疑問が浮かび上がる。Windows Server 2003 SP1 Enterpriseには、なぜ同様の制限を加える必要がなかったのだろうか。

この疑問について、Chen氏はユーザー層の違いを指摘した。XP SP2を利用する一般ユーザーは古いデバイスを使い続ける可能性がある一方、Serverエディションを扱う管理者は、互換性に問題のあるデバイスを使用する可能性が低いという。

Windows Latestも「消費者は何でもインストールします。一方で、サーバ管理者はできるだけインストールを少なくします」と説明している。

なお、Windows Server 2003 SP1 Standard Editionは、Serverエディションでありながら4GBに制限されている。