ご注意
この記事は私が様々なWebsite、Blog、掲示板等をあくまで個人的に回ってまとめたものであり、内容の正確さを保証するものではありません。書いてある情報通りに行動して何かしらのトラブル等が起こったとしても、当方では責任はもてません。あくまで自己責任でお願いします。
なお、記述してある内容は一般的な(x86アーキテクチャの)Windowsマシンを対象にしています。
一般的なPCはメモリを4GBフルに使うことはできない
現在メモリの値段はどんどん下がっており、ハードウェア(マザーボード)が許す限りのメモリを搭載することは、すでに非現実的な話ではありません。メモリはあればあるだけ快適になると一般的には考えられていますし、価格の低下はそれを十分許す状況を作っています。
しかしながら、それを阻害しているのは32bit OS(Windows)の4GBの壁です。32bitのWindowsはメモリを4GBまでしか扱えず、それ以上搭載してもOSから認識することはできません。(4GBに制限される理由は2の32乗が4GB[4,294,967,296Byte]なため。)最新のWindows Vistaでも32bit版のメモリサポートは4GBまでとなっています。
と、ここまでは大概どこにでも書いてある常識的なことです。これはWindowsの「仕様」にもきちんと4GBまでのサポートと書かれているので、例えば6GBメモリを積んですべてを認識しなくても、仕様どおりの結果でしかありません。
しかしここで実際に問題になるのは、仕様の限界である4GBを搭載しても実際のWindowsからは4GBと認識してくれないことです。当然4GBフルに認識しないだけではなく、実際に使用することもできません。ハードウェアの構成によりますが、基本的に認識される容量はは3GB前後に制限されます。一般的にこれを「3GBの壁」と呼びます。
今回の「前編」では、主にその現象が起こる環境の整理と、対処方法をまとめました。
「3GBの壁」FAQ その1
メモリを4GB装着したが、Windowsからは4GBより少なく認識される(3GB+α程度)
正常な挙動です。一般的に使用されている32bitのWindows(2000、XP、Vista)ではそうなります。
特殊なドライバやソフトを入れることによって、4GBフルに認識できるようになりますか?
現状ではそのような物は提供されていませんし、される予定もないようです。つまり不可能です。
Windows Vista SP1からは4GBと表示されるようになりましたが、実際に使用することはできません。あくまで表示が4GBになるだけです。
これはハードウェアの問題ですか?ソフトウェア(OS)の問題ですか?
両方が問題の場合がありますが、主にOSの問題です。新しいミドルレンジ以上のデスクトップ自作PCを使っているなら、OS(Windows)の問題である可能性がかなり高いといえます。(詳しくは補足をご覧ください。)
OSで認識できるメモリ容量にPCごとで差があるのはなぜですか?
端的には、PCに接続(搭載)されているデバイスが多ければ多いほど使用できる容量は減ります。自作マシンの場合は、構成がシンプルなマザーボードで拡張カードが少なければ使用できるメモリは増えるでしょう。
逆に多数のLANやIEEE1394やRAID、SLIなど構成がリッチになるほど、使用できるメモリは減ります。使用可能な容量は、環境によって2.7GB~3.6GBぐらいの範囲で変動するようです。
4GBすべてを認識させるにはどうしたらいいですか?
ハードウェア(BIOS)が4GBをきちんと認識できているなら、64bit版のWindowsを使うのが一番確実です。具体的にはWindows XP Professional x64 EditionかWindows Vistaの64bit版です。VistaならHome BasicからUltimateまで64bit版が用意されています。
ただし、64bit版はハードウェア(CPU)が64bitに対応していないと使用できません。特にIntelのAtomは新しいモデルでも64bit対応になっていないので、注意が必要です。
また、現在のWindowsの主流はあくまで32bit版のため、同じWindowsでも64bitへのソフト・ハードの対応は決して良くありません。使っていたソフトが動かない、周辺機器のドライバが存在しない、Windowsが安定しないなど様々な問題が発生する可能性があります。一般的に2007年末現在では、64bitへの移行はまだ時期尚早と考えられているといっていいでしょう。
32bitのWindowsで4GBを認識させる方法は本当にありませんか?
まったく存在しないわけではありません。下記の32bit Windowsは4GB以上のメモリをサポートしており、4GBフルに使用することが可能です。(その上でWindows上やBIOSの設定が必要になるでしょう。)
-
Windows 2000 Advanced Server
- 8GBまでサポート
-
Windows Server 2003 Enterprise Edition
- 32GBまでサポート
注意点は、同じOSでもエディションで使用できるメモリ量が違うところです。
一般的なWindows 2000や2000 Serverではメモリサポートが4GBまでです。また、Windows Server 2003でもStandard Editionでは同じように4GBまでしかサポートしていません。Windows Server 2003で確実に3GBの壁を突破したいなら、Enterprise Edition以上を選択する必要があります。詳しくはマイクロソフトのページのメモリ サポートと Windows オペレーティング システムを見てください。
ただこれらのOSはあくまでサーバ&企業向けであり、一般ユーザの入手性がよいとはいえません。値段も高く、そう簡単に導入できる類の物ではないでしょう。それに一般的なエディションではないため、ソフトやドライバの互換性の問題が発生する可能性もあります。
Windows Server 2003 Standard Editionでも3GBの壁が打ち破れる(4GBすべてを認識できる)という情報もあります。技術的な情報は補足で書いていますが、現状では何ともいえません。 (4GB使えるという情報と使えないという情報量を比べた場合、圧倒的に後者の使えないという方が多い。)
現状ではあくまで4GB使うことができる「かも」しれない、という認識にしておいた方が無難だと思われます。「確実」に32bit Windowsで4GBをフルに使いたいなら、Enterprise Editionが間違いないでしょう。
ハードウェア(BIOS)上ですでに4GBと認識していません
そのハードウェア(マザーボード)が4GB以上のメモリに対応していない可能性があります。詳しくはPCやマザーボードの説明書で確認してください。
M/Bによっては全体の容量としては4GBのメモリをサポートしていても、メモリスロットが1GBのメモリまでにしか対応していないこともあります。また、BIOSの設定をデフォルトから変更して初めて4GB以上を認識できるものも存在するようです。
更新できるBIOSが提供されているなら、最新のものに更新してみるといいかもしれません。(もちろん、M/BのBIOSアップデートは自己責任でお願いします。)
OSを変更しない場合はどのような解決方法がありますか?
いずれにしても4GBをフルに使うことは不可能ですが、対応する方法は下記のものがあると思います。
3GBしか認識していないが、4GBのまま使用する
問題は解決しませんが、特にすることはないので楽です。
メモリの搭載量自体を3GBにする
今時のデュアルチャンネルシステムならば、1GB×2+512MB×2などの構成になるでしょう。ただし、場合によっては1GBメモリと512MBメモリの相性問題などが発生するかもしれません。
接続されているデバイスを減らす(or換える)
接続されているデバイスが多いほど認識するメモリが減少するので、不要な使っていないデバイスは外してしまいましょう。不要なオンボード機能をBIOSで無効にすることでも、認識するメモリを若干増やすことができるようです。
特にビデオカードは、Nvidia製のGeforceが利用可能なメモリを多く減らすとの情報もあります。他社製のビデオカードに換えることによって、認識するメモリが増やせるかもしれません。
番外編
ここまで読んだが自分が使っているWindowsが32bitか64bitかわからない
ほぼ確実に32bitのWindowsだと思われます。2007年現在では、意図的に自分で64bit版を選択しない限りは、64bit版が入っていることはまずありません。また、64bit版のOSを使っている方はフルにメモリが使えているはずですから、こんなところを読んではいないでしょう。
技術的な話は後編に続きます。
後編の続きの補足を書きました。
アドレス空間がよくわからない(区別が付かない)という方のために以下の記事を書きました。興味がある方は参照してください。
この記事へのコメント
コメント機能を利用するにはログインする必要があります。「Disqus」または「Twitter」「Google」「Facebook」などのアカウントが使用できます。
こんばんわ。3GBの壁を検索してこのページにたどりつきました。記事の内容や各種リンクがとても参考になりました。1つ教えていただきたいのですがよろしいでしょうか?MMIOというのはハードウェア(?)が、優先して物理メモリ上にて確保するアドレス領域であるため、物理メモリ4GBをつんだ場合は4GBのアドレス空間しか管理できない32bitOSでは、MMIO分約1GB分は使用できないという認識でよいかと思いますが、例えば物理メモリが2GBだった場合、MMIOはどこにアドレスを確保するのでしょうか?素人考えだと、物理メモリが何GBであろうと、MMIOが確保する分はOSが使えないのではと思うのですが・・・。
こんにちは。
>例えば物理メモリが2GBだった場合、MMIOはどこにアドレスを確保するのでしょうか?
詳しくは後編で書いているのですが、MMIOで使われる物理アドレスは後ろから確保されます。
メモリの搭載量がいくつであろうと物理アドレスの広さは4GBで変わりませんから、搭載メモリが2GBなら物理アドレスは後半から2GB残ります。
その残った2GBの物理アドレス空間がMMIOに使われるので、メモリ搭載量が2GBなら問題は起きないわけです。
こんばんわ。返信ありがとうございます。書いている内に物理メモリとアドレス空間がごちゃまぜになっていたようでした。4GBのアドレス空間を物理メモリとMMIOが分け合ってるのですね。
ところでもう一点質問があります。「4GBの壁」のため3.2GB程度しか物理メモリが認識されていないとします。この状態で1GBの仮想メモリを3つのプログラムが同時使用したとする場合、
windowsが使用できるアドレス空間が3.2GBで、OSが2GB使用するため、残りの物理メモリ1.2GB内で3つのプログラムが400MB分け合い、足りない部分はスワップする。
認識されていない800MB分の物理メモリは仮想メモリ用に使用することはできず完全な無駄。
上記のような認識でよいのでしょうか?
> 「4GBの壁」のため3.2GB程度しか物理メモリが認識されていないとします。
> この状態で1GBの仮想メモリを3つのプログラムが同時使用したとする場合、
仮想空間はプログラム(アプリケーション)ごとに作られるため、同じ仮想空間に複数のプログラムのメモリが混在することはありません。
プログラムごとに自由な仮想空間が2GBずつ割り当てられます。
> windowsが使用できるアドレス空間が3.2GBで、OSが2GB使用するため、残りの物理メモリ1.2GB内で3つのプログラムが400MB分け合い、足りない部分はスワップする。
物理アドレスと仮想アドレスを混同しているように見受けられます。
両者は同じようにOSが扱っていますが、個々に独立したものです。
確かに仮想アドレスの2GBはOSの制御部分となっていますが、実際のメモリの認識に関係がある物理アドレスには2GBの壁はありません。
http://128bit.blog41.fc2.com/blog-entry-32.html
上記を未読なら一度読んでみてください。
> 認識されていない800MB分の物理メモリは仮想メモリ用に使用することはできず完全な無駄。
この部分はその通りです。
認識していない部分のメモリは使うことができません。
当方、32bitOSで問題なく4GB認識できました。
……期待はしていなかったのですが、認識できた要因も分かりません。なぜなのでしょう。
CPU:INTEL Q6600 2.4GH BOX 常用
マザー:GA-A31-MS2L(GIGABYTE)
グラボ:WINFAST 9600GT EXTREME
HD:SATA-Ⅱ 500GB
電源:玄人志向KRPW-H750W
OSが書かれていないのでわからないのですが、Vista SP1を使用しているなら表示自体は4GBになります。ただし、本文にも書いてあるように、実際にアプリケーションやOSが3GBの壁を超える部分のメモリを使うことはできません。あくまで画面での表示が変わっているだけです。