web-dev-qa-db-ja.com

16、32、64ビットシステムのメモリ制限

16、32、64ビットマシンの理論上のメモリ制限は次のとおりです。

  • 16ビット= 65,536バイト(64キロバイト)

  • 32ビット= 4,294,967,296バイト(4ギガバイト)

  • 64ビット= 18,446,744,073,709,551,616(16エクサバイト)

DOS/Windows 3.11日から、16ビットのメモリをセグメントに分割できるため、16ビットのマシンが64キロバイトよりも多くのメモリにアクセスできることを覚えています。

16GBのメモリを搭載したマシンで、32ビットオペレーティングシステムと64ビットオペレーティングシステムをデュアルブートしています。私は64ビットからすべての16 GBにアクセスできますが、32ビットでは3.21 GBしかアクセスできません。

それで、私の質問は、16ビットのオペレーティングシステムがメモリのセグメント化により64KBを超えるメモリアクセスを許可した場合、32ビットのマシンが同じ原則に従わないのはなぜですか?

17
Matthew Layton

そうです、システムは Physical Address Extension(PAE) と呼ばれます。これが windows OS'es とその最大メモリのリストです。4GB以上のRAMを許可する32ビットシステムは、PAEを使用してメモリ(たとえば、Windows 2003 R2 Datacenter 32ビットでは128GBのRAMが可能です)。


実際、Windows 8には、PAE対応のCPUが必要です最小要件


存在する場合に32ビットOSがRAMにアクセスできない理由についての「手付かずの」質問に対処するには:ライセンス。 RAMが32ビットOSで4GBを超えることは、データセンターエディションの料金を支払わない限り(つまり、もしあなたがデータセンターエディションを販売しているのであればneed多くのRAM、OSにより多くのお金を費やす余裕がある可能性があります)。

17

自分で説明するのではなく、PAEサポートでカーネルを維持する必要がある人に、Linus Torvalds氏の魅力的な方法で話してもらいます。

また、Windows 32ビットバージョンのPAEサポートは多額の資金を必要とすることにも注意してください。 XPフル4を利用することさえできませんGiB of RAM通常、MSはその上でPAE機能を有効にします。密接に関連しているカーネルであるWindows 2003 ServerはPAEをサポートします。ただし、「スタンダードエディション」でも最大4つまでしかサポートしませんGiB(しかし、回避策一方、より高価なエディションでは最大64個のGiB RAMを使用できます。同じことが 2ビットVista にも当てはまります。

ただし、すべての場合ではありませんこの制限はWindowsによって課されます。そうであれば、PAE対応のLinuxカーネルを起動しても、4 GiB(またはそれ以上)のフルバージョンを使用できます。そうではないため、一部のハードウェアメーカーは、BIOSレベルでこの制限を課すことにしました。ただし、CPUとチップセットはPAEを処理できます。


余談ですが、現在のx86ベースの64ビットプロセッサは、物理的に64ビットアドレス空間の全範囲をアドレス指定することもできません(参照用 この質問を参照 と回答)。

13
0xC0000022L

通常、8ビットCPUには16ビットのアドレスバスがありました。 (モトローラは統一されたアドレスバスを持っていました、RAMと周辺I/Oが同じアドレス空間を共有したため、インテルは2つを分割することを選択しました。インテルの場合、IO 8088および8086のアドレス制限は、8080および8085 CPUからの制限を超えました。)

Intelの8088および8086には20ビットのメモリアドレスバス(1MB)があり、Motorolaの68000には24ビットのアドレスバス(16 MB)がありました。 IIRC、[80] 286は24ビットのアドレスバスにジャンプしました。その後、両方とも[80] 386と68020でそれぞれ32ビットアドレスバスに拡張されました。)Pentiumチップでは、アドレスバスが64ビットに拡張されました。 (私は、Motorola/IBMベンチャーのPowerPCチップも64ビットアドレスバスを使用したと思います。)

CPUから直接アクセスできる最大以下のメモリは、サポートするハードウェアチップ(チップセット)とOSによってのみ制限されていました。 Bill Gatesは、640Kを超えるRAMを必要とする人は誰もいないため、以前は有名でした。したがって、DOSが進化して、より多くのRAMに直接アクセスすることはありませんでした。 HiMem.sysとEMM386により、DOSはより「上位」のメモリにアクセスするように拡張され、EMM386は使用可能なすべてのRAMに直接アクセスするために使用されました。 HiMem.sysは柔軟性が低く、基本的に追加のRAM=ストレージに使用できます。

その制限を超えるメモリには、メモリをセグメントに分割してCPUのアドレス可能なメモリ空間にマッピングするためにMMU(メモリ管理ユニット)が必要でした。これは、CoCo 3、Commodore 128、およびその他の方法です。 8ビットコンピューターは64Kを超えるRAMにアクセスできます。

現在のところ、OSによって課された制限にもかかわらず、仮想メモリを使用して物理メモリの制限を超えて拡張することがより有利です。

2
William

そうする実用的な理由がないからです。物理アドレス拡張はほぼ同じ機能を許可し、その使用は依然としてユーザー間で非常に制限されています。 Windows 3.1の時代には、今日は存在しない制約がありました。

1
OCDtech

16、32、64ビットマシンの理論上のメモリ制限は次のとおりです...

ここでの根本的な欠陥は、通常はマシンの汎用レジスターのサイズであるプロセッサーの「ビット幅」が、RAMアドレスの幅と必然的に同じであるという概念です。

ページングが有効になっているがPAEがないx86では、プログラムとOSコードが使用するアドレスはIntelによって「リニアアドレス」と呼ばれます。通常、これらは「仮想アドレス」と呼ばれます。 32ビット幅です。これにより、4 GiB仮想アドレス空間が許可されます。

しかし、それは多かれ少なかれ偶然の一致であり、物理(RAM)アドレスのサイズも32ビットであるというのは、ページテーブルエントリのフォーマットの単なるアーチファクトです。

PAEを使用すると、後者は36ビットになります(最初は...後の実装では幅が広くなります)。したがって、たとえば「32ビットマシン」であるからといって、物理メモリアドレスが32ビットに制限されているという意味ではありません。

業界には、「ビット幅」が最大物理アドレスサイズと一致しないマシンのlong履歴があります。たとえば、VAXアーキテクチャは32ビットマシンを定義し、仮想アドレス(アドレス変換がオンになるとコードによって使用されるアドレス)は確かに32ビット幅ですが、VAXの物理アドレスは30ビット幅のみです-物理アドレス空間の半分はI/Oデバイスレジスタに割り当てられるため、最大RAMは512 MiBのみでした。

アドレス変換ハードウェアがなくても、マシンの「ビット幅」が最大のRAMアドレスを定義する)とは限りません。例:CDC「上位3000」シリーズは36ビットマシンでした。 64 GiB= RAMですか?それほど難しくありません!これらのマシンは60年代半ばに登場しました!なんと、64 GBも当時のディスク容量(CDC 6000シリーズは60ビットマシンでした。続行する必要がありますか?)

0
Jamie Hanrahan