3GBの壁についてのまとめ(後編)
PCのメモリを4GB搭載(or増設)したのに、4GBフルに認識しない現象のまとめの続きです。
ご注意
これは私が様々なWebsite、Blog、掲示板等をあくまで個人的に回って集めた情報なので、内容等を保証するものではありません。書いてある情報通りに行動して何かしらのトラブル等が起こったとしても、当方では責任はもてません。あくまで自己責任でお願いします。(でも間違っている部分があったら指摘してくださると幸いです。)
なお、記述してある内容は一般的な(x86アーキテクチャの)Windowsマシンを対象にしています。
「3GBの壁」FAQ その2
いわゆる「3GBの壁」問題のまとめの後半になります。今回は少し技術的な話を簡単にまとめて終わります。一般的な話は前編を読んでください。
なぜ32bit版Windowsでは4GBのすべてを認識することができないのですか?
一般的なPCがWindows・ハードウェア共に制御の方法として、「メモリマップドI/O」(以下MMIO)という仕組みを利用しているからです。
まず前提として、32bit Windowsが扱えるアドレス空間は32bit=4GB[4,294,967,296Byte](2の32乗)です。Windowsは扱うことができるアドレス空間にメインメモリを割り当てて、初めてメモリを使用することができます。逆にPCに搭載されていても、アドレス空間に割り当てられていないメモリは存在しないのと同じです。4GBの壁はここが原因となって発生しています。
要するに「32bitのWindowsはアドレス空間を4GBしか持っていない=使用できるメモリは4GBまで」ということです。ここまでの話ならば、単純にアドレス空間=メモリ容量と考えることができます。
そこで最初のMMIOの話に戻りましょう。
MMIOは有限であるアドレス空間に、メモリと様々なデバイス制御用の空間を共有させる仕組みです。接続しているデバイスの制御(使用)をするには、アドレス空間が必要になるということです。
PCはまずデバイス制御用に必要な空間をアドレス空間に予約し、残りをメインメモリに割り当てます。領域を被って使用することはできないからです。デバイス制御用に割り当てられる領域が多ければ、その分使用できるメインメモリは少なくなります。
アドレス空間(4GB)−デバイス制御用予約分(1GB前後)=使用できるメモリ量(3GB前後)
32bit Windowsの場合は上記のような形となります。つまり、一般的なWindowsの「4GBメモリサポート」というのは、「4GBのアドレス空間サポート」ということになるのです。
なぜ64bit版Windowsならば4GBをフルに使用できるのですか?
64bit OSの名前のとおり、アドレス空間が64bitに拡張されているからです。(64bit=16EB(エクサバイト)=17,179,869,184GB)アドレス空間が絶対的に広がっているため、デバイス予約用にアドレス空間が割り引かれても問題にはなりません。
ただし、実際は64bit OSなら16EBのメモリを搭載できるということにはなりません。現実的な限界量はハードウェアとWindowsのエディションによって決まっています。(Vistaの例)Vistaの日本での最低グレードであるHome Basicは、64bitでもメモリサポートは8GBまでです。
つまり、64bit OSだからといって物理アドレスを64bit=16EB持っているわけではないのです。上記のとおり、具体的に物理アドレスをどれだけ持っているかは、OSのバージョンやエディションによって仕様として決められています。
例えばXP 64bit Editionの物理アドレス量は128GBですから、37bitということになります。上限が64bitとしても、実際にどれだけの物理アドレスを使用可能にするかはマイクロソフトのさじ加減ということです。
一部の32bit版Windowsはなぜ4GB以上のメモリが扱えるのですか?
OSのアドレス空間を32bit以上に拡張してあるからです。メモリを拡張されたアドレス部分に再割り当てすることによって、MMIOでデバイスが予約している領域を回避してメモリを使用することができます。例えば36bitまで拡張してあれば、64GB[68,719,476,736byte]のアドレス空間を持ちます。
使えない部分のメモリをRAMディスクに割り当てることはできませんか?
断言することはできませんが、現状では不可能な模様です。RAMディスクを作るためのユーティリティやアプリケーションがメモリを3GBまでしか認識しないため、その部分をRAMディスクを割り当てることができないようです。無理矢理アドレスを書き換えて割り当ててみたという情報もありましたが、やはり使うことはできなかったという結論のようでした。
[追記]
Gavotte Ramdiskというソフトで使用可能なようです。
- ダウンロードサイト
- まとめWiki
64bit版Windowsを入れましたが、4GBフルに認識しません
ハードウェアがきちんと対応しているなら、BIOS設定の可能性があります。マザーボードのメーカやBIOSによって名前は違うようですが、「Memory Hole Remapping」や「Memory Remap Feature」などの項目をEnableにすると解決するとのことです。項目が存在しないようならばBIOSを最新のものにアップデートして、それでも存在しないならマザーボードを買い換えるしかないかもしれません。
[追記 - 2007年 12/16]
後編の続きの補足を書きました。
[追記2]
アドレス空間がよくわからないという方は下記へ
あなたは混同していませんか? 複雑な「アドレス空間」のお話
- 参考サイト
: ![]()
※スパム対策のためリンクのないトラックバックは受信されません。






このエントリへのコメント
blog comments powered by Disqus