- ベストアンサー
32ビットOSのメモリ空間認識
- 32ビットOSが認識できるメモリ空間は、4Gバイトということはあちこちの質問や回答で見受けられます。では、16ビットOSは1Mバイトしかないかというと、そうではありません。WINDOWS3.1やMEでさえも大きく拡張されています。
- サーバー用のOSなら超えてるそうですが、では、こういった拡張が、なぜサーバー以外の通常の32ビットOSでは、採用されないのでしょうか。なぜ、かたくなに、4Gバイトを守っているのでしょうか。
- 互換性がなくなるということはあるかとおもいますが、それはアプリケーションのほうだと思います。64ビット0Sのほうが、OS自体も、もっと互換性がないのではないでしょうか。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
>サーバー用のOSなら超えてるそうですが サーバー専用機で使用されている様な、Alpha,MIPS,SPARCなどの 多くのRISCアーキテクチャでは、アドレスバスが64ビットのCPUが 出ているからです。 CPU側で4GB以上のメモリに対応できているので、OSでも対応可と なります。 また、32ビットCPUでも、CPUチップ毎に専用のメモリを割り当てた CPUボードを数十枚増設する事で、コンピュータ全体として4GB越え を実現しているサーバー機も有ります。 個人使用目的での購入が容易にできる様になるには、量産による 価格低下が不可欠です。 しかし、既に64ビットCPUが出ている今、32ビットでアドレスバス が64ビットの4GB以上のメモリが使用できる32ビットCPUを出しても 64ビットCPU及びOSの売上と普及による価格低下の邪魔になるだけ でしょう。
その他の回答 (7)
- don_go
- ベストアンサー率31% (336/1059)
メモリ空間のどこに対して、読み書きを行うは、アドレスバス が使われます。 これは、マザーボード上の配線(信号線)を使って行われ、その ON/OFF(電流が流れる/流れない)の組み合わせによって、指定 されます。 4GBを越えるメモリを扱うには、33本以上が必要とされます。 既存の32ビット用のマザーボード上には、最大でも32本の信号 線(32ビットのアドレスバス)しか有りませんので、4GB以上の メモリを使う事はできません。 32ビット用OSというには、32ビット単位までの計算・処理を行う レジスタを複数持ったCPU用に作られた物ですが、32ビットまでの アドレスであれば、32ビットのレジスタ1本で処理できますが、 33ビット以上の場合には、アドレスが1つ増えただけでもレジスタ を2本使う必要が出てきます。 この事は、既存のOSでのアドレス計算処理を行っている箇所の全面 的な変更が必要であるばかりでなく、他の目的で使用していたレジ スタが使えなくなる事への対応も必要という事を意味します。 それに、OS以外の一般の32ビット用アプリーションも同様な変更が 必要になります。 これらのリスクを考えた場合、32ビット用OS(Windows)で4GB以上の メモリに対応するメリットはありません。 #64ビットCPUの場合は、64ビットまでの演算ができるので、アド #レスバスが32ビットから33ビットに増えたとしても、まだ31ビット #残っているので余裕で対応可
- rinkun
- ベストアンサー率44% (706/1571)
x86系の32bitCPUではPentiumPro以降36bitの物理アドレス空間を持ちチップセットが対応すれば64GBまでのメモリを認識できます。一部32bitサーバーOSで4GB以上のメモリを使えるのはこのためです。 ただし複数セグメントを使ってのアクセスになるのでリニアな空間にはならず扱いが面倒です。 サーバー用OSでは64bit対応CPUができる前に4GB以上のメモリが必要になったために仕方なくこれを使ったのであって、64bit対応CPUと64bitOSが使えるようになってからは急速に64bit環境に移行しています。 パソコンレベルでは4GB以上の物理メモリが現実的になった時点で既に64bit環境があったので、時代遅れで扱いにくい32bitOSの拡張はしなかっただけです。 ちなみに16bitCPUでは8086はアドレス空間1MBですが、80286では24bit16MBまで扱えました。しかしこれを活用しているOSは少なく、Windows3.1でも80386の4GBリニア空間を利用しています。
- 486HA
- ベストアンサー率45% (1013/2247)
:>32ビットOSが認識できるメモリ空間は、4Gバイトということはあちこちの質問や回答で見受けられます。 :>では、16ビットOSは1Mバイトしかないかというと、そうではありません。 OSの16/32/64ビットはCPUの命令長であって、管理するメモリ空間とは別物です。 かつて、MS-DOSやWindows3.1の時代に私はEPSON PC-486HAというPCに64MBのメモリーを搭載していました。 MS-DOS 6.2上でDOS Extenderというものを利用して[R:BASE4]というMS-DOS用の32bit版のソフトを走らせていました。 その当時、64MBのメモリーを搭載するだけで100万円ほど必要でした。 また、メモリー空間を任意のサイズに分割して、それぞれ独立したMS-DOSプログラムを同時に走らせるドライバーもメガ・ソフトから発売されていました。
- PXU10652
- ベストアンサー率38% (777/1993)
「16ビットOSは1Mバイトしかないかというと、そうではありません。」 MS-DOSが扱えるメモリ空間は1MBで、640KB以上はシステム予約されていたので、実質640KBしか使用できませんでした。そのため、MS-DOSやWindows3.1等ではEMS(Expanded Memory Specification)という仕掛けでシステム予約の640KB~1MBの空いている空間を使って、32MBまで拡張していました。もっとも、O/Sは16bitでも途中からCPUが32bitになったので、ソフトウェアEMSや仮想86EMSで誤魔化してきました。↓ http://ja.wikipedia.org/wiki/Expanded_Memory_Specification では、CPUが64bitになったのにO/Sは32bitのままで、4GBの制限を受けるのか? それは、そこまでのメモリを必要とするアプリがほとんど存在せず、4GB(実質3.3GB程度)あれば困らないことと、アプリの64bit化が進んでいないことが要因だと思います。例えば、64bit版のWindows7でもIE8は32bit版が標準で起動します。これは、プラグインソフト(Flash,QuickTime,Adobe Reader等)が64bitに対応していないからです(Microsoft Updateも32bitにしか対応していない)。 ハードウェアのドライバはかなり64bit対応が進んできています。アプリの64bit化が進めば、32bitのO/Sを使う必要性もなく、そうなれば自動的に4GBの壁を越えられます。それまでの過渡期は、「4G以上使いたかったら64ビットOSにしろ」という状態なのです。
- mudamuda546
- ベストアンサー率27% (37/136)
>4GBまでしか、使用できないのは、アドレスバス幅の問題でしょう。 >INTELは、ソフトウェアの互換性を維持するために、一挙にアドレスバスを大きく出来なかったでしょうねえ。 インテルとしてはPentium Pro以降でサポートされている機能。 ただし、PentiumMなどの一部のアーキテクチャーのCPUではPAEは利用できない。 (個人的にはこれでXEN動かそうとして駄目じゃんって経験がある)
- mudamuda546
- ベストアンサー率27% (37/136)
>WINDOWS3.1やMEでさえも大きく拡張されています。 まずWindows3.1の話からこの当時はOSは16ビットOSだったけど 上位メモリを利用することによって640KBの壁以上のメモリが扱えるようになっていました。 後重要なのがCPUの動作モード。 プロテクトモード 386エンハンスドモード MEを含むWin9x系は16bitのコードもあれば32bitの部分もある混合OS。 基本的には32bitだけど昔の資産も使えるように16bitの部分もあえて残した。 >サーバー用のOSなら超えてるそうですが、では、こういった拡張が PAEの事か? http://support.microsoft.com/kb/888137/ja だったらここら辺の「PAE モードにより発生するドライバー互換性の問題」がものすごく関係しそうだね。 >昔と違ってより簡単に、より高性能に拡張できるような気がするのですが、4G以上使いたかったら64ビットOSにしろ、という内容しか見たことがありません。 メモリが多くて64bitアプリでも今世に出回っている多くのアプリは32bitアプリなので 64bitOSの恩恵はあまり受けられません。
4GBまでしか、使用できないのは、アドレスバス幅の問題でしょう。 INTELは、ソフトウェアの互換性を維持するために、一挙にアドレスバスを大きく出来なかったでしょうねえ。 ■8BIT CPU (CP/M) 16本のアドレスバスでアドレッシングできるのは、65536(64K) 通りです。 ■16BITの8086CPU(MS-DOS/CPM-86) 20本のアドレスバスでアドレッシングできるのは、1048576(1M) 通りです。 ■32本のアドレスバスでアドレッシングできるのは、4294967296(4G) 通りです。 だから、4GBになるのです。
お礼
みなさん、いろいろな回答ありがとうございます。 失礼とは思いますがまとめてお礼申し上げます。 表現の違いはあるものの、いろいろ小手先でごまかすより、せっかくある64ビットOSを使ったほうが手間がかからない、ということだと感じました。 自分自身は64ビットOSを使う必要性はないのですが、流れとしてはそういう方向になるのでしょうね。 様々な意見を拝見し、勉強になりました。