メモリ – なぜWindowsは私の4GBのRAMの約3.5GBしか表示されないのですか?

32-bit community-faq memory windows

私は最近、コンピュータのRAMを4GBにアップグレードしました。私の32ビットWindowsのインストールでは、3574 MBのメモリしか表示されていません。どうすればWindowsにRAMをフルに使わせることができますか?

  89  ala  2009-08-21


ベストアンサー

You can’t:

おい、4 ギガバイトの RAM はどこだ?

メモリやデバイスを32ビットのアドレス範囲に収める場合:使用可能な4GBのアドレス空間のすべてをメモリに割り当てることができるわけではありません。 では、PC用に4GBのメモリを買いに行った場合、実際にはどうなるのでしょうか? IO用のメモリマップに穴があいてしまいます。(今ではアドレス空間全体の25%に過ぎませんが、それでも大きな穴です。) そのため、メモリの一番下の3GBは利用可能になりますが、最後の1GBには問題があります

現実的な解決策は、64ビットのオペレーティングシステムをインストールすることだけです。Windows Vista以降では、32ビットと64ビットのライセンスキーは互換性があります。お使いのオペレーティングシステムの64ビットバージョン用のWindowsインストールメディアを入手できる場合は、元のライセンスキーを使用して再インストールすることができます

71  VonC  2009-08-21


まず、Windows XP(32bit)は4GBしかサポートしていません。これは Windows XP にだけ適用されるわけではありません。代わりに、32bit デスクトップ Windows – PAE を搭載した 32bit Linux システムや多くの 32bit Windows Server エディションは、リンク先の記事にあるように 4GB 以上をサポートしています。32ビットWindows XPを使用している場合は、4GBを超えることはありません。しかし、私はあなたのシステムが実際にインストールされているものよりも少ない利用可能なRAMを示しているより詳細な理由を見つけました

3GBではない4GB RAM問題(Microsoft MSDNブログ)より

ずっと前に行われたアーキテクチャ上の決定により、4GBの物理RAMがインストールされている場合、Windowsは物理的な4GBのRAMの一部のみを報告することができます(~2.75GBから3.5GBの範囲で、インストールされているデバイス、マザーボードのチップセット& BIOSに依存します)

この動作は、「メモリマップされた IO 予約」によるものです。これらの予約は物理アドレス空間をオーバーレイし、それらの物理アドレスをマスクアウトして、ワーキングメモリに使用できないようにします。これは、マシン上で実行されている OS に依存しません

4GB(32 ビットでアクセス可能な最も高いアドレス)以下のアドレス空間の重要なチャンクは、システムハードウェアで使用するために予約されます

  • BIOS – ACPIとレガシービデオのサポートを含む
  • ブリッジなどを含むPCIバス
  • PCI Expressのサポートは、グラフィックスカードに搭載されているメモリに応じて、256MB以上、最大768MBを確保する

これは何を意味するかというと、典型的なシステムでは、〜256MBと1GBの間でOSがアクセスできないハードウェアの使用のために予約された4GB以下のアドレス空間が表示される可能性があります。インテルのチップセットの仕様は、デフォルトで予約され、いくつかのケースでは、1.5GBは常に予約されているため、Windowsにアクセスできないことを呼び出すことをどのようなアドレス範囲を取得する説明でかなり良いです

ソースを調べればもっと情報があります。しかし、これらのinstructionsに従えば、8GBのフルインストールを活用できるかもしれません

個人的な経験から言えば、これは新しい問題ではありません。私は数年前、Vistaがリリースされたばかりの頃、4GBの32ビットWindows Vistaシステムを構築した時に同じ問題に遭遇しました。この同じトピックに関連したフォーラムの書き込みがオンライン上に無数にありました

Microsoft KB 929605もお読みください – Windows Vistaのシステム情報ダイアログボックスで報告されているシステムメモリは、4GBのRAMがインストールされている場合、期待したよりも少ないです

8  SgtOJ  2011-08-29


32BitのWindows XPを使っているのであれば、それは不可能です。余分なRAMを利用するためのアドレススペースが不足しています

最良の解決策は、4GB以上のRAMをサポートしているWindowsの64ビット版にアップグレードすることでしょう

3  Shaharyar  2009-08-21


他の方もおっしゃっているように、無理です

Explanation:

メモリの各部分にはアドレスがあります。オペレーティングシステムは、アドレスの長さを指定します。古いオペレーティングシステムでは、アドレスの長さは2 ^ 32(4 294 967 296)のアドレスだけを可能にする32ビットです。今、その数を見て、それはあなたのオペレーティングシステムが4ギガバイトをサポートする必要があるように思えるかもしれませんが、内部メモリを持っている他のすべてのハードウェア(最も重要なのは、ビデオカードのビデオラム)も、そのアドレス空間にマップされます

6桁の電話番号を120万件配布しようとしているようなものだ

3  drby  2009-08-21


古いマザーボードは4Gbの物理RAMしかサポートしていませんでしたが、現代のものはもっと多くのことをサポートしています。Intel P4 CPUは常に4Gb以上をアドレスすることができます(物理アドレス拡張、またはPAEと呼ばれるものを使用して)

Microstoftは、32ビット版のオペレーティングシステムのすべての「クライアント」バージョンで4Gb以上の物理アドレス空間をサポートしないように「マーケティング上の決定」をしました – これには、w2kから32ビット版のWindows 8までのすべてが含まれています(MSのKBページを見れば、32ビット版のサーバーバージョンはもっと多くのことをサポートできることに気づくでしょう – 32ビット版の「エンタープライズ版」では128Gbまでだと思います) – これが、まったく同じハードウェア上の「適切な」32ビットOS(Linuxなど)が常にすべての物理RAMにアクセスできる理由です

(サイドノート – 32ビットWin7のユーザーは、彼らが完全な物理RAMにasccesを許可するためにカーネルを “ハック “することをこの “愚かな “制限にうんざりしました…言うまでもなく、これはあなたのライセンスを壊し、実際には米国(DCMA)で違法である

Windows XP 32bit はドライバ使用のために lo 4Gb のアドレス空間の一部を「予約」します。(PAE を使用して) 4Gb を超える物理 RAM を「アドレス」できない理由はありませんが、Windows XP Pro の頃の多くの古いドライバはそうしなかったため、「BSOD」エラーが発生します (現代のドライバは PAE を正しく使用しており、理論的には 2Gb のグラフィックスカードをサポートするためにも、合計で約 32Mb の「lo」スペースページ (「ウィンドウ」として) を超える必要がある理由はありません (2gb は「こんにちは」スペース、つまり 4Gb マークより上のスペースになります)

XP SP2では、MSはBSODを排除するために、ドライバのために「予約された」アドレス空間の量をほぼ3倍にしました。実際のハードウェアは、この「予約された」スペースにほとんど影響を与えません

残りの部分は、様々な異なる RAM ディスクドライバを使ってアクセスすることができます (もちろん MS のものではありません) = XP Pro の「インビジブルアドレス空間」または「高 4gb 空間」を使用するものを探してください) … 「仮想メモリ」の一部として「不足している」.75Gb を使用することで、システムを高速化することができます

3Gスイッチは、32ビットのアプリケーションが32ビットOS上で3Gbまでアクセスできることに注意してください(.exeヘッダにLargeAddressAwareフラグが設定されている場合、64ビットOS上では4Gbまでアクセスできます)

3  steve b  2013-09-24


それは、いくつかの構成要素が必要なので、かなり複雑な質問です。それらの構成要素は以下の通りです

  • 中央処理ユニット
  • メモリコントローラユニット
  • BIOS / (U)EFI
  • Operating System
  • Application

最後の項目は、この問題とは直接関係ありませんが、完全性のために追加しました

一言で言えば、上記のコンポーネントは全て4GB以上のメモリをサポートしていないと成功しないということです

中央処理ユニット

まずはCPUから始めましょう。しかし、最初に注意しなければならないのは、CPUはメモリを使用する魔法のような能力を持っていないということです。その代わりに、そのアドレス可能な空間内の任意のアドレスにアクセスすることができます。ここでビットネスの問題が出てきます。32ビットCPUは、0~4GiBの範囲のアドレスにアクセスできる。しかし、この範囲は、利用可能な RAM、ROM、SMRAMGraphics Address Remapping Tableだけでなく、必要な Memory-maped I/O など、このアドレス範囲のかなりの部分を必要とする可能性のあるすべてのものを収容しなければなりません。結果として、いくつかのメモリアドレスがこれらの用途によって影になってしまい、RAM上での操作に利用できなくなってしまうことが完全にあり得るかもしれません。隠れたメモリを取り戻すためには、CPUがアクセス可能なアドレス空間を拡張する必要があります。32ビットCPUの場合、物理アドレス拡張が役立ちます。これは64GiBまでのアドレス指定を可能にします。ネイティブ64ビットモードで動作する64ビットCPUは、デフォルトでは16GiBまでアクセスできますが、これはかなり巨大であり、そのようなトリックを必要としません。しかし、一方で64ビットCPUが64ビットアドレッシングを使うのは非現実的なので、実際にはまだアドレスバスによって16EiBよりも少ない範囲に制限されている

メモリコントローラユニット

当初はノースブリッジにありましたが、AMDがAMD64プロセッサから、IntelがNehalemプロセッサからプロセッサダイに移動しました。PAEを搭載したCPUが単体で64GiBにアクセスできたとしても、RAMにアクセスするためにはMCUが必要です。簡単に言えば、特定のアドレスにアクセスするCPUは、要求されたアドレスがRAMに存在する場合、PCIデバイス、BIOS ROMフラッシュ、MCUのいずれかからその応答を取得します。しかし、MCU(ノースブリッジであれCPUであれ)が、例えばマーケティング上の理由から64GiBよりもはるかに少ないアドレスをサポートしていることは珍しくありません

BIOS / (U)EFI

BIOS / (U)EFIは、実際に何かが動作する前にハードウェアを設定する義務があるため、重要な役割を果たします。特に、BIOSは、ハードウェアデバイスのメモリ範囲、バス、RAMなどとプロセッサ全体のアドレス可能な空間をマッピングする役割を担っています。興味深いことに、全体のRAMがバラバラに分割され、いくつかの利用可能な連続しない場所にマッピングされることが起こるかもしれません。BIOSの問題は、開発者がシステム内で3GiB以上のRAMを使用することを想定していない可能性があり、そのようなBIOSは使用するすべてのメモリを適切にマッピングしないということです。ほとんどの場合、これは(U)EFIには起こらないでしょう

Operating system

オペレーティングシステムは、4GiB以上のメモリのアドレス指定にも対応している必要があります。より具体的には、PAEを使用するようにCPUを設定する必要があります。いくつかの32ビットOSは完全にPAEを使用して4 GiB以上にアクセスすることができますが、他のものは、セキュリティを強化するためにPAEを有効にしても、最大メモリにソフトウェアの制限があります(Windows XPが例である)。再び64ビットOSは自然にそのような困難を持っていないし、通常は4GiB以上のメモリをサポートしています

Application

最後の点は別世界の話ですが、アプリケーションは一般的に仮想アドレス空間で動作するので、完全性のために追加しました。それにもかかわらず、アプリケーションがより多くのメモリを使用できるようにするために、コンパイル中にいくつかの追加の手順が必要です。デフォルトでは32ビットアプリケーションは2GiBのメモリしか使えません。同じ32ビットアプリケーションでも、OSがサポートしていてCPU PAEを有効にしていれば、最大4GiBのメモリを使用することができます。具体的には、最大3GiBのメモリを使用することができ、残りの1GiBは共通ライブラリやOSカーネルとしてアドレス指定できますが、書き込みはできません(これは最終的にはアプリケーション自体ではなく、OSのアーキテクチャに依存します)。繰り返しになりますが、64ビットアプリケーションはネイティブで4GiB以上のメモリのアドレッシングに対応しており、そもそもそのようなトラブルはありません

これらすべてを考慮に入れるために、いくつかの例を考えてみましょう

Intel® 82945Gメモリコントローラを検討してみてください。Intelのウェブサイトによると、PAEをサポートしておらず、4GBのRAMに制限されています。データシートの段落9 System Address Mapを見てみましょう。それは多くの情報を持っています。最も興味深いのはFigure 9-3. Main Memory Address Rangeです。Figure 9-3. Main Memory Address Range と段落 9.2 Main Memory Address Range (1 MB to TOLUD) は次のように読みます

このアドレス範囲は、(G)MCHによってアクセスが許可されている物理メモリの先頭から1MBまでです(TOLUDレジスタでプログラムされています)。この範囲内のアドレスへのすべてのアクセスは、オプションのTSEG、オプションのISAホール、またはオプションのIGD盗用VGAメモリに該当しない限り、(G)MCHによってメインメモリに転送されます。(G)MCH は、4GB (82945GC/82945GZ/82945PL は 2GB) の最大メインメモリアドレスデコードスペースを提供します。(G)MCHはAPICやPCI Expressのメモリ空間をリマップしません。これは、システム内の物理メモリが4GB(82945GC/82945GZ/82945PLでは2GB)に達すると、存在していてもアドレス指定ができない物理メモリが存在し、システムで使用できなくなることを意味します

書いてある通り、PAEをサポートしていないため、最終的にはPCIや4GiB以上の全てのMMIOをリマップすることができず、そのためメモリの一部がシャドーイングされて未使用になってしまう。つまり、36ビットアドレッシングに対応したCPUで使用しても、4GiB以上のメモリは使用できず、4GiB制限に近いメモリの一部も未使用になるということだ

逆に、Intel® 82955X メモリコントローラを考えてみましょう。データシートの段落2.1 Host Interface Signalsによると、CPUとの間に36ビットのアドレスバスを使用しているとのことで、これは良い兆候です。段落7 System Address Mapにはさらなる洞察があります。Figure 7-1. System Address Rangesを前に見たものと比較してみてください。Figure 7-1. System Address Ranges これは明らかに4GiB以上のRAMを利用できることを示唆している。また、段落7 System Address MapにはMCH supports 64 GB of addressable memory spaceと記載されていることも注目に値する。しかし、最大使用可能なRAMは8GBに制限されていることがさらに明確にされています。これは、私がCPUの項で伝えようとしていたように、アドレス指定可能と使用可能の違いを再び宣言しています

結論から言うと、関連する2つのチップセットは、実際にはメモリの扱いに大きな違いがあることに注意したい

Intel® Pentium® Processor Extreme Edition 840を調べてみましょう。64ビット命令セットはサポートしていますが、PAEはサポートしていません。つまり、32ビットモードで実行した場合、4GiB以上のRAMを使用することができないということです(この仮定が間違っていたら訂正してください)。データシートと表Table 4-3. Signal Descriptionを確認してみましょう。64ビットに対応しているとはいえ、アドレスバスの幅が36ビットなので、アクセス可能なアドレス範囲は0~64GiBに制限されています

今では、より最近のCPUを調べることができます。Intel® Core™ i7-7700 プロセッサーを例に挙げてみましょう。それは、最大 64 GB の RAM をサポートするように宣伝されています。今、それのデータシートを確認することができます。段落 2.3 System Address Map は、この CPU のアドレス可能範囲が 0 から 39 ビットのアドレスバスのために 512 GiB までであることを私たちに納得させます。64ビットCPUの理論上の16GiBの範囲にはまだ程遠いことに注意してほしい。驚くべきことに、このCPUは最大32GiBの使用可能なRAMをサポートしていることがさらに明らかにされている(ウェブサイト上では64GBとは対照的)。ここにも気になる画像があるFigure 2-2. System Address Range ExampleFigure 2-2. System Address Range Example これは、PCIデバイスなどによるメモリシャドウイングの問題をうまく説明しています。また、この問題を克服する方法として、実RAMからCPUがアドレス可能な範囲内の上位アドレスに範囲をマッピングする方法を提案しています。このようにして、使用のために隠されたメモリを取り戻すことができます。このリマッピングはハードウェアの初期化時にBIOS/(U)EFIによって行われることに注意してください

Intel製品を例に挙げましたが、AMDも同じです

ここで、オペレーティングシステムがどのように関係しているかを説明します。Linux カーネルはバージョン 2.3.23 から PAE モードを完全にサポートしており、32 ビットシステム上で 4 GiB 以上のメモリを Linux カーネルで使用することは完全に可能です。しかし、いくつかのハードウェア上で 4 GiB 以上の RAM を持つシステム上で 32 ビット Linux カーネルを使用する際には、確定していない問題があることに注意してください (私の経験では、TLB の撃墜に関係しています)。とにかくウィキペディアには、PAE サポートに関する良い情報があります。興味深いのは、Windows XPが4GBに制限されているのに対し、Windows Server 2003 Enterprise/Datacenter SP2は64GBまで対応していることです。他のデスクトップとサーバーのWindowsペアも同様です

ご覧のように、リストアップされたコンポーネントの間には多くの組み合わせがあり、場合によってはCPUやOSを交換することで解決することもあります。BIOS/(U)EFIやMCUは、前者はプロプライエタリでシステムに組み込まれていて簡単には変更できないため、後者はCPUに組み込まれているか、ボード上にハンダ付けされているため、対処するのははるかに困難です

1  PF4Public  2017-10-17


完全な4GBを活用したいのであれば、64bitのOSにアップグレードするしかありません

  • ウィンドックスXP 64
  • ウィンドウズビスタ64
  • Linux
  • Max OS/X(OK、そのためにも新しいPCが必要になるかもしれません)

通常のWindows XPは32bitのみで、これではメモリが最大3.5gbに制限されてしまいます。このトピックの詳細については、VonCさんが投稿したリンクをチェックしてみてください

0  FrankS  2009-08-21


統合グラフィックスを使用している場合は、それを下げることができ、それはシステムがあなたのシステムのRAMのより多くをアドレスすることができることを意味します

しかし、最良の解決策は、確実にx64 OSを取得することです

そうでない理由はありません。ほとんどのプログラムはx64で動作し、XP/Vista/7はx86エミュレーション層を持っています。問題はドライバだけかもしれません

0  Blam  2009-08-21


と表示された場合、3574MBのRAMが表示されます。この数字は、PCにプリインストールされているプログラムや設定は、設定された量のRAMを使用しているため、コンピュータが総アクセス可能なRAMであり、あなたの場合は426MBとなります。私の6GB 64bit PCでは、5.8GBのRAMが利用可能ですが、6GBのRAMは利用できません。最善の策は、PCのアップグレードを検討することでしょう

-4  user235193  2013-07-02


タイトルとURLをコピーしました