web-dev-qa-db-ja.com

32ビットウィンドウが4GbのRAMに制限されている技術的な理由はありますか?

重複の可能性:
Windowsが4GB以上のRAMのうち約3.5GBしか表示しないのはなぜですか?
2ビットOSマシンは8GBをすべて使い切ることができますかRAM + 20GBページファイル?

この表 でわかるように、x86 Win7のすべてのバージョンは4Gbで最大になります。

これには技術的な理由がありますか、それともこれは人々にもっと高価なOSを購入させるための単なるマーケティング戦略ですか?

5
jaminto

一般にWindowsの「4GBメモリ制限」と呼ばれるものについて、業界では多くの混乱があるようです。パフォーマンスチューニングとサーバーサイジングについて話すとき、人々は32ビットWindowsシステム上のアプリケーションが4GBのメモリにしかアクセスできないという事実にすぐに言及します。しかし、これは正確にはどういう意味ですか?

定義上、32ビットプロセッサは32ビットを使用してメモリの各バイトの場所を参照します。 2 ^ 32 = 42億、つまり32ビット長のメモリアドレスは42億の一意の場所(つまり4 GB)しか参照できません。

32ビットWindowsの世界では、各アプリケーションに独自の「仮想」4GBメモリスペースがあります。 (これは、各アプリケーションがフラットな4GBのメモリを備えているかのように機能し、システムのメモリマネージャがメモリマッピング、どのアプリケーションがどのメモリを使用しているか、ページファイル管理などを追跡することを意味します。)

この4GBのスペースは、2つの部分に均等に分割され、2GBはカーネルの使用専用で、2GBはアプリケーションの使用専用です。各アプリケーションは独自の2GBを取得しますが、すべてのアプリケーションは同じ2GBのカーネルスペースを共有する必要があります。

出典: http://www.brianmadden.com/blogs/brianmadden/archive/2004/02/19/the-4gb-windows-memory-limit-what-does-it-really-mean.aspx

[編集RE:PAE]

x86プロセッサハードウェアアーキテクチャは、追加のメモリを選択するために使用される追加のアドレスラインで拡張されているため、物理アドレスのサイズは32ビットから36ビットに増加します。これにより、理論的には、最大物理メモリサイズが4GBから64GBに増加します。仮想アドレスの32ビットサイズは変更されないため、通常のアプリケーションソフトウェアは引き続き32ビットアドレスの命令を使用し、(フラットメモリモデルでは)4ギガバイトの仮想アドレス空間に制限されます。オペレーティングシステムは、ページテーブルを使用して、この4GBのアドレス空間を64GBの物理メモリにマップします。マッピングは通常、プロセスごとに異なる方法で適用されます。このように、単一の通常のアプリケーションがすべてに同時にアクセスできない場合でも、追加のメモリは便利です。

11
kobaltz

はいといいえ。

ネイティブでは、32ビットを使用して表すことができるのは4 GiBの異なる数値しかないため、32ビットプロセッサは2 ^ 32 = 4,294,967,296のRAMしか処理できません。

メモリに何かを保存するときはいつでも、それを読み取ったり操作したりできるようにアドレスを保存する必要があります。通常、CPUはこのアドレスを格納するために1つのレジスタ(サイズが32ビット)のみを使用します。 2 ^ 32の異なるアドレスしかないため、4 GiBマークを超えるものは未使用のままです。

ただし、32ビットOSが4 GiBを超えるRAMをアドレス指定できるようにする物理アドレス拡張(PAE)などの手法があります。

プロセスを大幅に単純化しすぎると、OSは各プロセスをメモリの特定の部分(ページテーブルと呼ばれる)にマップします。各プロセスは依然として4 GiBに制限されていますが、これにより、OSは4 GiBだけよりもはるかに多くのメモリをアドレス指定できます。

たとえば、32ビットバージョンのWindows Server 2003 Datacenter Editionは、最大64 GiBのRAMをサポートします。

7
Dennis