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


17

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ビットから16GBすべてにアクセスできますが、32ビットでは3.21GBのみです。

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

回答:


15

それらは、システムは物理アドレス拡張(PAE)と呼ばれます。Windows OSとその最大メモリのリストは次のとおりです。4GBを超えるRAMを使用できる32ビットシステムはすべて、PAEを使用してメモリにアクセスします(たとえば、Windows 2003 R2 Datacenter 32ビットは128GBのRAMを使用できます)。


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


32ビットOSが存在する場合、RAMにアクセスできない理由に関する「気に入らない」質問に対処するには:ライセンス。彼らは、あなたが、彼らはあなたがあれば、データセンターエディションを販売する理由である(データセンター版のため支払わない限りRAMがその32ビットのOSのために4ギガバイトを超えることを許可しないように選択した必要があること多くのRAMを、あなたはおそらくもっと費やす余裕ができOS上のお金)。


ああ、PAEのことは聞いたことがありますが、調査したことはありません。W7x86のみ最大4GBできることリストが指定するようなので、Windows 7の32ビットのインストールには適用されていないようです、主にサーバ・アーキテクチャで使用されるように見える
マシュー・レイトン

1
@ 0xC0000022L公平を期して、コメントの後にライセンス部分を編集として追加しましたが、4分間の編集ウィンドウのために、コメントを投稿する前に投稿したようです。
スコットチェンバレン

1
PAEを使用するには、ページテーブルスイッチャーが必要です。これはパフォーマンスの点でコストがかかります。
フォンブランド

3
これは神話です。PAEによるオーバーヘッドはわずかです。また、PAEが嫌いな場合は、x64のページテーブル構造がPAEに似ているため、x64を本当に嫌うべきです。
ジェイミーハンラハン14年

1
PAEが「それはもはや必要とされているので、Windows 7で削除されなかっ」されなかった、それは、Windows 7のx86にまだ存在している-それはちょうどそこに、デフォルトではなく、中にオプションで用意されることよりもだ。
ジェイミー・ハンラハン

13

自分で説明するのではなく、PAEサポートでカーネルを保守しなければならない人に、魅力的な方法で話すようにさせます。LinusTorvalds

また、Windows 32ビットバージョンのPAEサポートには多額の費用がかかることにも留意してください。XPは通常、4 GiBのRAMをフルに使用することさえできません。MSがXPでPAE機能を有効にしないことを選択したためです。密接に関連するカーネルであるWindows 2003 Serverは、PAEをサポートしています。ただし、「標準エディション」でも最大4 GiBしかサポートされません(ただし、BIOSメモリホールを回避します)。一方、より高価なエディションでは最大64 GiBのRAMを使用できます。同じことが32ビットVistaにも当てはまります

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


ちょっとした注意:現在のx86ベースの64ビットプロセッサは、64ビットアドレス空間の全範囲を物理的にアドレスすることさえできません(参照については、この質問と回答を参照してください)。


うーん、なぜLinusはHIGHMEM.SYSとPAEを本当に嫌っているという印象を受けますか?:P
カラン

2
PAEは、2ギガ以上のワーキングセットを必要とするコードと、2ギガ程度の複数のタスクを管理する必要があるシステムレベルのコードの邪魔になることを理解していますが、単一のアプリケーションが2を超える必要がない限りギグ私はPAEが透明になると期待しています。さらに、3 GBの汎用RAMと大容量ディスクキャッシュまたは一時ストレージドライブが必要な場合、PAEは64ビットポインターのグローバル使用よりも優れていると思います。
supercat

Linusのコメントは奇妙です。himem.sysの動作とPAEの動作の間に関係はありません。x64ロングモードが単にPAEスキームを採用し、ページテーブルのレベルをもう1つ追加したときに、x64を主張し、PAEアドレッシングに反対する人々を見るのは非常に面白いです!
ジェイミーハンラハン14

@JamieHanrahan:...新しいシステム(仮想化による)で少なくとも2つ。彼の(Linus ')の比較は完全に正しいわけではありませんが、もしそれが外国の概念であるなら、隠helpは助けになるでしょう:) ...それが彼が彼の主張をするためにそれを選んだ理由だと思います。
0xC0000022L 14

2

通常、8ビットCPUには16ビットアドレスバスがありました。(Motorolaには統一されたアドレスバスがあり、RAMと周辺I / Oは同じアドレス空間を共有していました。Intelは2つを分割することを選択しました。Intelの場合、8088と8086のIOアドレス制限は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を使用できます。

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

現在、OSによって課せられている制限はありますが、仮想メモリを使用して過去の物理メモリの制限を拡張することがより好ましい方法です。


1

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


1
これには、ステートメントをバックアップするのに十分な情報が実際にはありません。Windows 3.1は16ビットのオペレーティングシステムです。1992年には2MBのメモリが300ドルを超えていたことを覚えておく必要があります。
ラムハウンド

あなたは2月22日のコメントです、そしてスコット・チェンバリンの説明は私が運転していたものをほとんどカバーしています。拡張可能なセグメント化されたページネーションがDOS / Win16で使用されたが、後のWindowsでは使用されなかった理由の説明は省略しています。OPの質問への回答に直接貢献しないため、これは含めませんでした。
OCDtech

答えは独立しているべきだという私の見解。あなたのコメントは、あなたの答えに関する私の問題を解決するのに十分な情報を追加します。
ラムハウンド

1
@OCDtech:8086セグメントモデルにより、オブジェクト指向言語は2バイトのオブジェクト参照を使用して16バイト境界に整列したオブジェクトを識別できますが、セグメントを効果的に使用するための言語は十分に装備されていませんでした。80286モデルは、このようなプログラムに非常に大きなオーバーヘッドを課し、80386で拡張された方法により、オブジェクトごとのセグメントスキームがまったく役に立たなくなります。
supercat

0

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

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

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

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

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

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

アドレス変換ハードウェアがなくても、マシンの「ビット幅」が最大RAMアドレスを定義するわけではありません。例:CDC「upper 3000」シリーズは36ビットマシンでした。64 GiBのRAMに対応できると思いますか?ほとんどない!これらのマシンは60年代半ばに登場しました!ちなみに、当時は64 GBのディスクスペースさえ確保できませんでした。(CDC 6000シリーズは60ビットのマシンでした。続行する必要がありますか?)


また、RAMセルごとに8ビットを使用しないシステムについても忘れないでください。(EG:16/16 = 128K MAX、32/32 = 16Gマックス、64分の32 = 32Gマックス)
SkyCharger
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.