web-dev-qa-db-ja.com

32ビットOSが4 GBのRAMをサポートするのはなぜですか?

OSに関する非難講義 でいくつかのメモを読むだけで、それは言う:

プログラムは、メモリをアドレス0から2 ^ 32-1(0から4GB-1)までのバイトの配列として認識します。

なぜ4 GBなのか?

27
Blankman

32ビットは2までの数を表すことができるので32 − 1 = 4294967295 = 4 GiB − 1、したがって最大2までアドレス指定32 4 GiBの場合、個々のバイト。

ただし、それを回避する方法はいくつかあります。たとえば [〜#〜] pae [〜#〜] を使用すると、32ビットオペレーティングシステムでもより多くのメモリをサポートできます。歴史的には、これはサーバーで最も一般的に使用されてきました。また、サーバー以外のWindows SKUではサポートされていません。ただし、64ビットCPU、OS、およびドライバーのサポートが一般的であることを考えると、現時点ではすべてが問題になっています。

56
Joey

メモリの各バイトにはアドレスが必要だからです。 32ビットオペレーティングシステムでは、アドレスは32ビット長です。したがって、2 ^ 32の可能なアドレスがあります。つまり、2 ^ 32バイト= 4 GBです。

26
mipadi

誰もが2 ^ 32 = 4GiBと言っていますが、これは正しいです。念のため、ここに私たちがそこに着いた方法があります:

32ビットマシンは32ビットを使用してメモリをアドレス指定します。各ビットの値は0または1です。1ビットの場合、2つの可能なアドレス:0または1があります。 2、11 = 3。 2 ^ 2 = 4。 3ビットには8つの可能なアドレスがあります。000= 0、001 = 1、010 = 2、011 = 3、100 = 4、101 = 5、110 = 6、および111 = 7です。

各ビットは潜在的なアドレス空間を2倍にします。そのため、2 ^ nは、指定されたビット数に使用するアドレス数を示します。 2 ^ 1 = 2、2 ^ 2 = 2 * 2 = 4、2 ^ 3 = 2 * 2 * 2 = 8など。

32ビットになるまでに、4GiBになります。

22
Chris Arguin

4 GB = 2 ^ 32バイト。

11
ceejayoz

4ビットシステムの場合、これは、各バイトのアドレスが4桁の2進数であることを意味し、すべてのアドレスの確率は0000から11112^4 = 16(0または1があるため2)であり、4ビットで16のゼロと1の異なる値を作成できます。別のアドレス。それぞれがbyteを表すので、最大16 bytes

4ビットシステムは次のようになります:

enter image description here

32ビットシステムの場合、最大値は2^32 = 4294967292 bytesです。

10
Mina Gabriel
2 ^ 32 = 4 * 1024 * 1024 * 1024

それは、バイトで、4 GBの定義です。つまり、メモリポインタとしての32ビットレジスタは、4 GBのメモリのみをアドレス指定できます。

9
David M

実際には、2 ^ 32 = 4294967296バイトほど単純ではありません。ページング変換メカニズムがクライアントアプリケーションに対して透過的であるとしても、ページングが有効になっている(つまり、最新のOSを使用したときに得られるもの)x86保護モードでは、メモリの場所を直接アドレス指定しません。

4Kページを使用する場合の論理32ビットメモリアドレス:

  • ビット22〜31はページディレクトリを参照
  • ビット12〜21はページテーブルを参照
  • ビット11〜0は、4096バイトページのオフセットを参照します。

ご覧のとおり、2 ^ 10(1024)ページディレクトリがあり、各ページディレクトリには2 ^ 10ページテーブルがあり、各ページの長さは2 ^ 12(4096)バイトなので、2 ^ 32 = 4294967296バイトです。メモリバスの幅は、CPUのワード長と同じであるのが便利ですが、このようにする必要はまったくありません。実際、最新のx86 CPUはPAEをサポートしており、32ビットモードでも4GB(またはGiB)以上のアドレス指定が可能です。

5
Tamas Czinege

これは、Wordに格納できるさまざまなメモリアドレス(バイト単位)の量です。

しかし、実際には、常にそうであるとは限りません(ほとんどの場合そうではありません)。OSは(PAEを使用して)それよりも多くの物理メモリを処理でき、アプリケーションは4 GB未満の仮想メモリを使用できます(その仮想メモリの一部であるため)メモリはOSにマップされます(たとえば、Linuxでは1GB、Windowsでは2GB)。

それが当てはまらないもう1つのシナリオは、メモリがバイトではなくワードによってアドレス指定されている場合、アドレス可能なメモリの合計は、たとえば16GBになります。

2
fortran
  1. 32 ビット sは数値を表すことができます0..2^32 = 0..4,294,967,296
  2. 32 ビット sは最大2 ^ 32 [〜#〜] b [〜#〜] ytesをアドレス指定できます(バイトサイズのブロックを想定)
  3. 2 ^ 32 [〜#〜] b [〜#〜] ytesは最大サイズ

2 ^ 32 [〜#〜] b [〜#〜] = 4,194,304 KiB = 4,194 MiB = 4 GiB =

1
Maryan

主に32ビットOSが2 ^ 32-1アドレスのみをサポートすることを選択したためです。

CPUがFSBに32を超えるアドレスラインを備えている場合、32ビットOSはページングメカニズムを使用して4GiBを超えるアクセスを選択できます。 (たとえば、PAEがサポートするIntel/AMDチップ上のWindows 2000 Advanced Server/Data Centerエディション)

1
Indy9000

4 GB = 2 ^ 32バイト。ただし、32ビットOSによって割り当てられた最大4 GBを覚えておいてください。実際には、OSの表示は少なくなります。 VRAM割り当て後。

0
waqasahmed

他のユーザーが以前に述べたように、32ビットWindows OSは32ビットワードを使用してメモリアドレスを格納します。

実際、最近の32ビットチップのほとんどは、Intelの物理アドレス拡張(PAE)モデルを使用した36ビットアドレス指定を使用しています。一部のオペレーティングシステムはこれを直接サポートします(Linuxなど)。

Raymond Chenが指摘するように、Windowsでは 2ビットのアプリケーションは4GBを超えるメモリを割り当てることができ、64ビットのWindowsを使用する必要はありません 。またはPAE。

さらに言えば、64ビットチップは64ビットメモリ空間全体をサポートしていません。現在、42ビットスペースに制限されていると思います... PAEが使用する36ビットスペースと上位8ビットアドレス、

0
Powerlord