0

メモリ要件が急速に増大するにつれて、今日、ますます多くのシステムがさらに大きなRAMにアクセスするために64ビットマシンを必要としています。

386プロテクトモードのFWIKでは、メモリポインタは2つの部分で構成されます。セグメントセレクタによって指定されたベースアドレス(32ビット)と、ベースアドレスに追加されたオフセットアドレス(32ビット)です。

すべてのプログラムを64ビットで再コンパイルするには、多くの作業が必要です。たとえば、C / C ++プログラムの場合、マシンに依存する `int'タイプ(32ビットマシンでは32ビット、64ビット)です。 64ビットマシンの場合)正しく使用しないと問題が発生します。問題なく再構築されている場合でも、メモリ要件が継続的に増大するにつれて、たとえば、いつか128ビットマシンを使用するようになり、新しいワードサイズに準拠するためにすべてのプログラムを再構築する必要がありますか?

ベースアドレスを64ビットに拡張してRAM全体に4GBウィンドウのようなセグメントを作成すれば、64ビットOSもまったく必要ありませんね。ほとんどのアプリケーション/プロセスはサーバー側で4G+メモリにアクセスする必要はありません。たとえば、ファイルサーバーがキャッシュ目的で20GB RAMを使用する場合、アクセスごとに2GBの10プロセスに分割される可能性があるため、32ビットポインタは足りる。そして、20GBのメモリをカバーするためにそれぞれを異なるセグメントに配置します。

セグメント制限の拡張は上位層プログラムに対して透過的です。Linuxが異なる64ビットセグメントにメモリを割り当てることをサポートできる場合は、CPUとOSについてのみ実行する必要があります(現在、セグメントのベースアドレスは32ビットですが)それでも)、32ビットマシンで1TBのRAMを簡単に利用できますね。

私は正しいですか?

4

2 に答える 2

3

メモリアクセスは、アセンブリ命令を使用してCPUで実行されます。CPUにメモリセグメントをアドレス指定するための32ビットがある場合、最大4 GBをアドレス指定できますが、それ以上はアドレス指定できません。この動作を拡張するには、CPUに64ビットレジスタが必要です。

32ビットOSにも同じ制限があります。64ビットOSは、32ビットプログラムを実行して4 GBを超えるベースアドレスにアクセスさせることができますが、64ビットプロセッサが必要です。

結論として、OSが(およびそのOSで実行されているプロセスが間接的に)アクセスできるメモリウィンドウの制限は、プロセッサレジスタの幅(ビット単位)によって制限されます。

だから、あなたは正しくありません。

おそらくPAEはあなたのニーズに合っていますが、ハードウェアとオペレーティングシステムのサポートが必要です。これは私が知る限り非常に一般的です。

于 2010-08-02T09:03:16.070 に答える
0

64ビットカーネルで32ビットプロセスを実行することで、今日まさにこの効果を得ることができます。各32ビットプロセスには4GBの仮想アドレス空間しかありませんが、これらのアドレスは、カーネルにアクセス可能な物理メモリのどこにでもマッピングできます。ただし、セグメンテーションを使用して行われるわけではありません。ページングによって実行されます。

于 2010-08-03T03:59:29.397 に答える