32bitアーキテクチャでのメモリ環境
前からもかる~く知っていた話ですが、同僚からWinXP(32bit)にメモリ4GB置いても4GBは認識されないとか聞いたので、詳しいことについていろいろ調べてみました。

実はこれにはいろいろ深い話がついて回るみたいです。
OSの制限、アーキテクチャ自体の制限、etc..

アーキテクチャの制限
まずアーキテクチャ自体の制限からです。

前提として32bitアーキテクチャでは物理メモリは最大4GB、つまり物理メモリアドレスも4GBまでしかサポートされていません。

ところで、データの入出力、保存(ビデオカードetc)などを行う装置はおおむねIOメモリと呼ばれるデータ置き場を持っており、CPUはその装置に何かして欲しい(とソフトに書いてあった)時は装置への命令やデータを書き込みます。

このIOメモリは普通のメモリを完全に別系統にしてしまう Port Mapped IO(PMIO) と、普通のメモリアドレス空間を用いIOメモリをまるで普通のメモリの一部であるかのようにCPUに思い込ませる Memory Mapped IO(MMIO) とがあります。
(このMMIOが主流になったのはi386の時代からみたいです)

MMIOはIOを行うデバイスごとにメモリ空間を消費します。
そしてMMIOは3-4GB付近のアドレス空間を予約して使用しています。(デバイスの数や種類等でどれくらい使われているかは変わってくるらしいですが...)

つまりOS側から見ると3-4GB付近は既にデバイスへのIO用として使用されている領域になっているのです。

確かにデバイスマネージャで各でデバイスのプロパティ->リソースからリソースの種類が"メモリの範囲"という部分の予約メモリアドレス見ると4GB付近を利用していることがわかります。

Intelのサイトにはこう書いています。
http://www.intel.co.jp/jp/support/motherboards/desktop/4gb_memory_issue.htm"
---------------------------
I/O インターフェイス用に確保されたアドレスと物理メモリーのアドレスが重複して使用されるとシステムに不具合が生じるため、I/O インターフェイス用に確保されたアドレス部分のメモリー領域は、物理メモリー側では使用されません。
---------------------------
この制限があるために3GB以上のメモリがあっても3GB以上(環境によってしきい値は異なりますが)の領域は使用されない無駄な領域となってしまいます。
悲しきかな32bitとIO周りの限界。。

この制限をクリアするには32bit、64bitとも(64bitでもMMIOは4GB付近のことがある) BIOS で Memory Remap を使えれば、重複したメモリアドレスを4GB以降に押しやり (Memory Remap)、4GB以降のアドレス(/PAE)が可能となるようです。(64bitなら/PAE不要)

この場合 boot.ini への /PAE オプションが必要なのですが、それをサポートしてるのは Windows Server2003 の EnterPrise と DetaCenter だけだった気がします。
(正確には 32bit XP(SP2以降) , Vista でも PAE オプションはサポートしてるけど、OS内部のメモリアドレス空間4Gしかないため、PAE 有効にしても結局無駄ということです。32bit Windows Server 2008 については調査してないので不明ですが、おそらく32bit Vistaと同じでしょう。)

この点についてはやはりVista SP1でも3GBの壁問題は解決されないの記事を参照。
実際にVistaでPAEをONで試したことが、Windows Vista(32bit)+ 4GB RAM + PAE有効で実験の記事で書かれていますが、やはり無理だったようです。
またCPU,チップセット等の対応が必要です。
よって32bitのXPやVistaには手がありません。。

OSの制限
次にOSの制限です。。

Windows XP とかだと(Vistaは不明)、仮想アドレス空間は2Gまではユーザモード、2Gから4Gまではカーネルが使用します。
これには回避策があるらしく、boot.ini で /3GB というオプションを入れると3GBまでの空間がユーザモードで使えるようです。
ちっと調査不足な面もあると思うんで、暇があったらじっくり調べてみたい論題ですね。
特にWindowsのメモリ管理はなかなか扱っているところが少ないのが残念です。

参考URL:
Core2duo and decrease memory price
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1311721048 MMIOの説明が簡単にのってます。
メモリ サポートと Windows オペレーティング システム PAEやOSの内部メモリアドレス空間、/3GBスイッチについての公式な情報です。
[PR]
by jehoshaphat | 2008-08-22 13:27 | 豆知識 | Trackback | Comments(1)
トラックバックURL : https://jehupc.exblog.jp/tb/8502363
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。
Commented by 通りすがり at 2009-12-16 13:50 x
こちらのサイトの説明が一番わかりやすかったです!


<< (VB.Net)パラメタ使った... (Linux)vsftpdでW... >>