容量の壁
一方、DOS/V機や98では、前述のような互換性のために活用はなかなか進まなかったものの、386以降のプロセッサをCPUとしたマシンの普及は、後の、MS Windowsの特に広く普及した95や、やがてそれに置き換わるNT系の普及のための地均しであり、98においては98である必要性を喪失しDOS/V機に吸収消滅という終末への序曲でもあった(また、DOS/Vの文字表示の高速化、という点でも、98を不利にしていった)。
前の節で述べたパソコンの、64ビット化の経過について述べる。
80386以降のIA-32アーキテクチャ(x86、32ビット)が一般的となった以降、CPUの64ビットアーキテクチャ導入が徐々に進められ、x64アーキテクチャ(x86-64。AMD64およびIntel 64)が普及している。PCで主流の64ビット環境、x86-64への移行はx86の16ビットから32ビットへの移行に比べれば緩やかである。
次のようなx86の制限(壁)の抜本的な解決として、x86-64への移行が進みつつある。
当初のPAEやPSE36では最大64GiBまでしか対応できなかったが、x86-64拡張の際に改定され32ビットx86であってもPSE36では1TiBまで、PAEでは同CPUをx86-64として動かした際と同じ物理アドレスまで拡張された。x86-64では、現在、48ビット物理アドレス拡張により256TiBまで対応している。
x86の32ビット環境では、32ビットフラットアドレスを採用し、1プロセス(アプリケーション)が扱えるアドレス空間(メモリ量)の限界は32ビットで表せる4GiBであることが一般的である。x86-64アーキテクチャでは48ビットで、256TiBまでのメモリを扱うことが出来る。x86-64アーキテクチャでは将来的には52ビット、4PiBまで考慮している。なお、64ビット論理アドレスは16エクサバイト。論理アドレスはレジスタアドレッシングの空間であり、仮想空間とは異なる。
OS、アプリケーション側の対応としては、x86-64対応のWindows(いわゆる「64ビット版」)で、サポートアドレス空間が16TiBに拡大されている。最近では、Adobe Photoshop CS4など、サーバ用途以外でも64ビット対応が進みつつある。
Linuxの32ビット版 (x86) では、ディストリビューションやカーネル、設定(コンフィギュレーション)によって対応がまちまちであり、1GiB・4GiB・64GiBの壁がある。64ビット版(x86-64ないしAMD64)ではこのような問題はない。
2016年現在の、主に32ビット時代の設計に由来する、64ビット環境に対する何らかの妨げになっている壁について解説する。
PAE(物理アドレス拡張)は、CPUの使用可能な物理メモリの量を増やす機構である。PSE(ページサイズ拡張)およびPSE36も同様の側面を持ち、これらによって32ビットx86で対応できる物理メモリの量は当初の4GiBから64GiB以上に拡張された。しかしマーケティング上の理由やOS側の実装上の理由により64GiB以上を使えるOSはごく僅かしか無い。
32ビットWindowsアプリケーションでは、1プロセスごとの4GiBのアドレス空間うち、カーネルが2GiBを予約しており、アプリケーションが自由に使用可能なのは2GiBである。この壁に達してくるとマイクロソフトは主に2つの対処手段を打ち出した。1つはアドレスウィンドウ化拡張 (AWE)である。4GBを超えるメモリを部分部分で切り替えながら読み書きする方法であり、MS-DOSの頃のEMSのようだという意見もある。もう1つは、4-Gigabyte Tuning (4GT) の導入である。カーネルとアプリケーションのアドレス空間の配分を通常の2GiB-2GiBから、1GiB-3GiBに変更する手法である。カーネルリソースが減少するため、サーバー用途(特にWebサーバー)には安定性の面から向かないという欠点がある。なお、64ビットWindows上では、4GT対応32ビットアプリケーションは4GiBほぼすべてアプリケーションが使用可能である。
ハードウェアのPAE対応とは無関係に、Windows XP/Vista/7の32ビット版では、カーネルのメモリマネージャーが4GiB以上の物理メモリを使用できない。すなわち、プロセスの仮想メモリ空間としても、4GiB以上の物理メモリにはアクセスしない。これはデバイスドライバの互換性を確保するための制限である。なお、Windows Server(2000と2003の一部)では同じ32ビット版でも制限が緩和されているが、対応したデバイスドライバが必須である。いずれにせよ、1プロセスのアプリケーション空間は前述の「2GiBの壁」が残る。
x86向けのデバイスドライバは、4GiB内の物理アドレス空間のうち最初の方にあるメモリマップドI/O (MMIO) 用に割り当てられた空間を使用する。そのため、3GiB以上の物理メモリを搭載する場合、MMIO空間と干渉する場合がある。これは、該当部分のアドレスを回避するようにメモリの物理アドレス自体を変換するMemory Hole Remappingなどと呼ばれる手法で対処されている。Memory Hole Remappingはハードウェア(チップセット周辺)側の対応が必要であり、未対応のハードウェアでは物理メモリ容量がその分減少などする。またMemory Hole Remapping未対応のOSでこれを有効にすると互換性の問題からOSが停止する場合がある。また、上記「4GiBの壁」に該当するOSでは、Memory Hole Remapping対応とは無関係に、搭載された4GiBの容量のうちMMIO空間分が、プロセス用には利用できなくなる。未対応であればMMIO空間のメモリが見えなくなる。対応していても、これらのOSでは4GiBの壁を超えた部分にリマップされたメモリをプロセスに利用できない。
4GiBや3GiBの壁を超えたメインメモリを、ソフトウェア方式のRAMディスクとして活用する手法がある。これは、64ビット環境に切り替えずに、既存のハードウェア及びOSの環境の上で、4GiB/3GiBの壁のため利用できないメモリを有効活用する方法として、注目を浴びている。
他にもたくさんの例があるが、ここではMacintoshの「8MiBの壁」とX68030の「12MiBの壁」を紹介する。
Macintoshでは、主にIIシリーズ(SE/30含む、IIvi・IIvx除く)でこの壁が顕著だった。IIシリーズでは、多くの機種でメモリを32MiBまで(動作保証外で128MiBまで)搭載できたが、System 6.0.xまでで使用できるのは8MiBまでであった。これは、アドレッシングモードを24ビットしかサポートしないOSの問題であるが(初代MacintoshのCPUである元祖68000MPUのアドレッシングが24ビットだったのが遠因にある)、一部機種ではSystem 7以降でも32ビットモードへの切り替えができないものがあった。これは機種搭載のROMの問題である。II・IIx・IIcxとSE/30で問題が起こり、それ以降のIIci・IIfx・IIsi(IIvi・IIvx含む)ではROMの内容が32ビットクリーンなためROMに起因する問題は起きない。なお除外したIIvi・IIvxではSystem 7.1以降でしか起動できないため、この壁はない。
その他の機種では、各機種の仕様によるものである。Portable・PowerBook 100では9MiBまで、LC・LCII・ClassicIIでは10MiBまで搭載でき、同容量がSystem 6.0.xから認識できる。
X68030では、メモリ・I/OマップをX68000と合わせるため、X68000と同様にI/OポートやVRAMを12MiB - 16MiBの範囲に配置した。そのため、メモリ空間が12MiBまでと16MiB以上で分断されてしまった(前述のMacは24ビットモードと32ビットモードを切り替えることによりメモリ・I/Oマップが変化する)。