TIPS:32bitクライアントOSで利用できる物理メモリは最大4Gbytesまで32bitのクライアントOSでは、利用可能な最大物理メモリ・サイズは4Gbytesまでに制限されている。実際には、さらにデバイスなどのためにいくらかアドレス空間が削られるので、最大でも3Gbytesとか3.5Gbytes程度までしか利用できない。システムのプロパティには、物理メモリ・サイズではなく、OSが認識しているメモリ・サイズが表示されるので、いくらか少なくなる。最近ではメモリも安価になっているので、4Gbytesやそれ以上のメモリをシステムに搭載することは簡単だろう。使用するOSによってはそのすべてを利用することはできない(関連記事参照)。OS)では、サポートされている最大物理メモリ・サイズが4Gbytesに制限されているため、4Gbytesよりも多くのメモリを搭載しても、システムからは4Gbytes分しか認識されず、それ以上のメモリは無駄になる。この4Gbytesという数値も、OSが扱うことが可能な理論的な最大サイズであり、4Gbytes分の物理メモリをすべてこの空間に割り当てて利用できるわけではない。実際のシステムではシステム・デバイス(グラフィックス・カードなど)のために、数百Mbytes〜1Gbytes程度のアドレス空間が消費されるため(グラフィックス・デバイスはアドレス空間にマッピングして利用される)、4Gbytesからそのデバイスのためのアドレス空間を除外しなければならない。OSでは、メモリをいくら搭載しても、3〜3.5Gbytes程度しか利用できないということになる。この結果、例えば1Gbytes程度のメモリを消費するプログラムがあるとすると、3つまではすべてメモリ中に配置できるが、4つ目を動作させようとすると、ほかのプロセスはディスクへスワップアウトしながら動作させなければならない(実際にはOSカーネルやキャッシュなどもオンメモリに置く必要があるので、ユーザー・プロセスで利用可能なメモリは2.5〜3Gbytes程度になるだろう)。OSを導入するといった対策を考慮する必要がある。●4Gbytes以上のメモリを搭載した場合のメモリ・マップ32bit版のクライアントOSは4Gbytesの物理メモリしか扱えないが、たいていのPCでは、もっと広い物理アドレス空間をサポートしている。Pro以降のCPUでは36bit分(64Gbytes)とかそれ以上のアドレス・ライン(アドレス空間)をサポートしており、チップセットやマザー・ボードなどが適切に設計されていれば、8Gbytesや16Gbytesといった、より多くの最大物理メモリをサポートすることができる。以下は、4Gbytesの物理メモリを装着したPCにおける、システム起動直後のメモリ・マップの例である。システムが起動すると、BIOSはシステムに装着されているメモリのサイズを調査し、それを物理アドレスの0の場所から順番にアドレスの上方に向かって割り当てていく。途中、いくつかデバイスのためにもアドレス空間を割り当てるので、メモリのサイズと、このメモリ・マップの最後のアドレスは一致しない。kernel.......(以下省略)......※これはCPUから見た物理アドレスのメモリ・マップ。Linux」のカーネル・メッセージから取得したが、この部分はOSによらず同じである(OS起動前に設定されている情報だから)。アドレスは16進数16桁(64bitアドレス)で表現されている。」はRAMが割り当てられている領域、「(reserved)」はデバイスなどが割り当てられている領域。「BIOS-e820」は、メモリ・マップを返すBIOSの機能の名称(番号)。OSは起動時に、このAPIなどを呼び出してメモリ・マップを作成し、どこにメモリが存在するかを把握している。メモリやデバイスをCPUの物理アドレス空間に割り当てるのはシステムBIOSの責任だが(システム起動後、OSのロード前にこの作業を行う)、そのBIOSが返すメモリ・マップが上のリストである。システムに搭載しているメモリは4Gbytesなので、物理メモリ・アドレスがすべて連続しているとすると0〜ffff_ffff(16進数表示)になりそうだが、そうなっていない。分かりやすく書き直すと次のようになる。メモリ領域アドレス範囲(サイズ)領域10000_0000〜0009_f800(640Kbytes)領域20010_0000〜bfed_0000(3Gbytes)領域31_0000_0000〜1_4000_0000(1Gbytes)システム起動直後のメモリ・アドレスこのシステムでは4Gbytesのメモリが3つの領域に分かれて物理アドレスにマップされている。領域2と領域3の間にはデバイスなどがマップされている。最新のグラフィックス・カードではなく、VGA程度の機能しか持たない場合は、デバイス用領域がほとんど存在せず、領域2が4Gbytes近くなることもある。OSでもほぼ4Gbytesのメモリを利用できる。システムによっては、メモリが連続しておらず、さらに細分化されている可能性もある。領域1は1Mbytes以下の領域(いわゆるDOS用のアドレス空間)に割り当てられたメモリである。DOSなどとの互換性のために存在する。領域2は4Gbytes以下のアドレス空間に割り当てられたメモリである。32bitアドレスでアクセスできる。領域3はそれ以外の残りのメモリである。このシステムでは、デバイス用に(4Gbytesのうち)1Gbytesのアドレス空間が予約されているので、領域3には1Gbytesのメモリが存在する。一般的には、領域1と領域2で割り当てた残りの物理メモリは、すべてこの領域にまとめて割り当てられる。この部分をアクセスするには、33bit以上のアドレス・ライン・サポートと、それを考慮したプログラム・コードが必要になる。Vistaの32bit版OSでは、上記のメモリ領域のうち、領域1と領域2にしかアクセスしないため、利用できるメモリは最大でも4Gbytesに限定されることになる。領域3の部分(オーバー4Gbytesの空間)にアクセスしない理由ははっきりとは公開されていないが、互換性のためであろうと推測される。領域3の部分をアクセスするには33bit以上のアドレス・ラインとそれを考慮したコードが必要になるが、そのようなシステムをサポートしない(対応していない)デバイスもあるし(特に古いデイバスやコンシューマ向けのデバイスの場合)、デバイス・ドライバも十分テストされておらず、動作しないことがあるからだ。トラブルを避けるため、4Gbytes以上をサポートしていないものと思われる(そのような用途では、64bit版OSを推奨しているという事情もある)。OSであっても8Gbytesとかそれ以上のメモリがサポートされている。VistaのSP1以降では、システムに装備されている物理メモリのサイズをプロパティ画面で報告するようになっている。これは、実際に装着した物理メモリのサイズと異なるという問い合わせなどに対応したものと思われる。SP1では、システムに実際に装着されているメモリのサイズがこの画面に表示されるようになっている。(1)メモリ・サイズは4Gbytes。SP未適用では、物理サイズではなく、4Gbytes以下の空間にあるメモリ・サイズが表示されていた(3Gbytesとか、3.5Gbytesなどとなっていた)。これはあくまでも、搭載されているメモリのサイズを表しているだけである。実際にOSが認識しているメモリ・サイズ、つまりOSカーネルやユーザー・プロセスなどで利用可能なメモリ・サイズは4Gbytes以下の領域にある部分に限定される。この値はタスク・マネージャなどで確認できる。ツール]−[システム情報]ツールなどで確認できる。OSが認識しているメモリ・サイズ。実際の物理メモリとの差である1Gbytes分は、通常のアプリケーションからは利用できない。管理外メモリを利用するRAMディスクなどでのみ利用可能。OSが認識している以外のメモリ(4Gbytes以上のアドレス空間に存在するメモリ)は、管理外メモリとなる。これは例えば「RAMディスク導入ガイド」で紹介したRAMディスクのようなソフトウェアを使えば活用できる。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。