- ベストアンサー
WindowsXP32ビットのPCIアドレス空間について
初めて質問させていただきます。 他の回答を拝見したのですが、 WindowsXP32ビット版でRAMメモリ4GBの時、 PCIアドレス空間用メモリを1GB位使用するため、 アプリケーション用メモリは、3GB位とありました。 そこでご質問なのですが、 仮に、WindowsXP32ビット版でRAMメモリ1GBの時は、 PCIアドレス空間用だけで、1GBを使用したら、 アプリケーション用メモリが不足すると思います。 本条件では、PCIアドレス空間用メモリとアプリケーション用メモリは どのように割り当てられるのでしょうか? ご回答の程よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
通常のアプリケーションが見る仮想メモリ空間と OSが認識する物理メモリ空間を混同しています 32ビットアプリケーションが見れるのは物理搭載量と無関係に常に4GB(ユーザー空間2G~3G)固定です またPCIアドレス空間用メモリが使用するのはメモリアドレスであって搭載した実メモリを使うわけではありません RAMメモリ1GBの時は0~1Gのアドレスがメモリ割り当て用、3G~4GのアドレスがPCIアドレス空間用となります(あくまで一例)
その他の回答 (1)
- parts
- ベストアンサー率62% (6366/10151)
メモリの壁ですね。 これは、OSの仕組みに伴うものです。 WindowsNTでは、最初の設計において2GBの壁があったのです。64bitのWindowsが本来ならハードウェア*で16EB(16エクサバイト)まで対応可能なのに対して、16GBから128GBまでしかサポートしないのとある意味似ています。 *ちなみに、現段階では64bitのx86CPUにも本来の上限より前にアドレス処理の制限があり、x86-64(x64)がサポートするメモリ量は最大256TBまでとなっている。 最初のWindowsNT3,1(現在のXPやVistaのベースコア)が登場したのは、94年です。それがWindowsで発のマイクロカーネルと32bit専用設計のコアを採用したのです。この当時の主力パソコンのメモリ容量は4-8MBでした。即ち今の1000分の1~500分の一程度の容量だったのです。 そのため、開発の段階で、上位マップと呼ばれる3GB(確か当時は2GBをアプリケーション層に残りを管理層<IRQなど>に割り当てていた)を越える領域は、ハードウェア用として設計していたのです。ただ、これはあくまでプログラム設計上の便宜としてであり、当時から考えると当分は使わないという前提にあったためです。3GBに達しなければ割り込み要求(IRQ)は、OSが持つ保護領域(システムサービス)の一部を割り当てられるようになり必要最小限を取るように設計されていました。即ち、保護領域は最大800MB程度を上限にそれ以下で設定するようにという設計をしているのです。 即ち、最初から3GBを越えることはないだろうという前提で、アプリケーション割り当ての上限を3GB(約3,25GB)と決め、逆にIRQなどのハードウェア関連は最大を1GB程度確保するようにしたのですよ。 まあ、その考えは正しく10年経ってもデスクトップコンピュータの多くは、3GBを越えることがありませんでした。 ただ、先にサーバーなどは上限に迫ったため、PAEやPSEといったアドレス拡張技術をサーバーOSなどに導入し、32bit環境でも3GBを越え、4GBの壁をも越えられるOSを販売し次のステップアップである64bitOSを待つという方法を取りました。(尚、アドレス拡張はサーバOS専用の技術ですが、アプリケーション1つ一つが使える上限が増えるわけではなく、ある種の仕組みを与えたソフトであれば恩恵を受けられるという限定的な技術です) カーネルを見直せば、34GBを上手く使い切ることは32bitWindowsでも可能かも知れません。他のOSでは現実に可能ですからね。 ただ、64bitOSを開発した方が先がないWindowsの32bitを使うより良いのです。これは、仕様が全く違うので参考にはなりませんが、WindowsMEなどのような末期の9xシリーズが参考になるでしょう。 尚、計画ではマイクロソフト社はこの問題を既に解決していたはずでした。2005年から8年頃までに移行完了するはずだったと言えば察しのいい人なら分かるでしょう。WindowsVista(当時のLonghorn Windows)が世代交代させる予定だったのですが、結果はご存じでしょう。Vistaだけではなく、もう一つハードウェアの要素としてインテルも同時期に Net Burst Micro Architecture(Pentium4)やIA-64で転けたことも加わり、64bit化が遅れこの問題は、ここに来て誰もが知るものとなりました。 いかがでしょうか?
お礼
早速、お答えいただきありがとうございました。 なぜ今WindowsXPに仮想アドレス空間に制限があるのか?が 過去の経緯などをご説明いただいたのでよく理解できました。 PC98の世代なので、当時はGBの単位は一生あり得ないと思っていました。(^^; コンベンショナルメモリ640バイトが懐かしいです。 とても詳しいご回答をありがとうございました。 またよろしくお願いいたします。
お礼
早速、お答えいただきありがとうございました。 仮想アドレス(アプリケーションが使う空間)と、 実アドレス(物理RAM)の違いがわかりました。 PCIアドレス空間は、仮想アドレス上にあることがわかりました。 さきほどは、PCIアドレス空間が物理RAMに1対1の関係で マッピングされるものと勘違いしていました。 頭の中がすっきりしました。 ありがとうございました。m(_ _)m