Windowsに4 GBのRAMのうち約3.5 GBしか表示されないのはなぜですか?


90

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



3
これは2000票のように増やす必要があります。毎日のように、「私の記憶はどこにあるの?」Microsoftはそれをダイアログボックスから削除するだけです。。。
surfasb

2
おい、64ビットOSが必要です。真剣に、今あなたのお金を節約してください。マザーボードに搭載できるすべてのメモリを実際にサポートするシステムがある場合、この質問は重要なポイントになります。
Fiasco Labs

1
湿気や湿気がないか、システムユニットの周囲を慎重に感じてください。「メモリリーク」の可能性があります。
EleventhDoctor

@ala:カーネルメモリが分割されているため...(1Gbはカーネルによって割り当てられます)。...あなたは既に/ 3GBスイッチを使用しているようだ
user2284570

回答:


71

できません:

4ギガバイトのRAMはどこですか?」

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

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


わかりません-2 ^ 32 4ギガバイトではありませんか?
マット

6
ああ、まったく気にしないで、リンクされた記事を実際に読んでください。
Matt

これを知っておくといい
LiuYan刘研

@VonC:これはどうですか?
user2284570 14

@ user2284570 true、PAEは役立ちますが、まだWXpを使用しているのは誰ですか?;)
VonC 14

8

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

3ギガバイト-ない-4GBのRAMの問題(マイクロソフトMSDNのブログ):

かなり前に行われたアーキテクチャ上の決定により、4GBの物理RAMがインストールされている場合、Windowsは物理4GBのRAMの一部しかレポートできません(インストールされているデバイス、マザーボードのチップセット、 BIOS)。

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

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

  • BIOS – ACPIおよびレガシービデオサポートを含む
  • ブリッジなどを含むPCIバス
  • PCI Expressサポートは、グラフィックカードがインストールされているメモリに応じて、少なくとも256MB、最大768MBを予約します

これが意味することは、OSがアクセスできないハードウェア使用のために予約された4GB未満のアドレス空間が〜256MBから1GBの間である典型的なシステムであるということです。Intelチップセットの仕様は、デフォルトでどのアドレス範囲が予約されるかを説明するのに非常に優れており、場合によっては1.5GBが常に予約されており、したがってWindowsにアクセスできないことを示しています。

ソースをチェックアウトすると、詳細情報があります。ただし、これらの指示に従えば、インストールされた8 GBをフルに活用できる場合があります。

個人的な経験から言えば、これは新しい問題ではありません。数年前、Vistaが最初にリリースされたときに4 GBの32ビットWindows Vistaシステムを構築したときに、この同じ問題に出くわしました。この同じトピックに関連するオンラインのフォーラム投稿が無数にありました。

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


Microsoft は、基盤となるアーキテクチャが64ビットである場合、Windows XPは最大128GBのRAMをサポートすることをここに文書化します。回答を更新してください。
ダンダスカレスク

@SgtOJ:これはどうですか?
user2284570 14

1
@SgtOJ:4 GBのRAM制限は、「すべての32ビットオペレーティングシステム」には適用されません。PAE(Windows Server 2003など)を完全にサポートする32ビットOSは、4 GB以上のRAMを喜んで使用できます。「32ビット」は、物理アドレスではなく仮想アドレススペースを制限します。
ジェイミーハンラハン14

@JamieHanrahanは、1つのプログラムが4GBを超える容量を使用できないことを意味しています。そして、彼はIO予約のオーバーヘッドがOSに依存しないことを意味したと思う。
ジグガンジャー

@jiggunjer私がコメントした質問や回答のどこにも、「単一のプログラム」が使用できるものは何なのかと言われたり暗示されたりしませんでした。I / O予約は厳密にOSに依存しません。
ジェイミーハンラハン

3

32ビットWindows XPを使用している場合、それは不可能です。追加のRAMを利用するのに十分なアドレス空間が利用できないため

最適なソリューションは、4 GB以上のRAMをサポートする64ビットバージョンのWindowsにアップグレードすることです。


2^324 GiBに適合するのに十分な「アドレス空間」です。アドレス空間と物理メモリを間違えます。仮想アドレス空間のUM / KMパーティション化により、通常は2 GiBしか使用できませんが、最新のWindowsバージョンのすべてのプロセスは4 GiBの完全なアドレス空間を参照します。
-0xC0000022L

@ 0xC0000022L:ここで議論されている問題ではありません。
ベンフォークト

Microsoftよると、Windows 7のほとんどのリリース(32ビットを含む)は、最大192GBのRAMをサポートしています。唯一の要件は、基礎となるアーキテクチャが64ビットであることです。したがって、最善の解決策はXPからWindows 7にアップグレードすることです。答えを更新してください。
ダンダスカレスク

@Shaharyar:これはどうですか?
user2284570 14

3

他の人が言ったように、それは不可能です。

説明:

各メモリにはアドレスがあります。オペレーティングシステムは、アドレスの長さを指定します。古いオペレーティングシステムの場合、アドレス長は32ビットで、2 ^ 32(4 294 967 296)のアドレスのみを許可します。今、その数を見ると、オペレーティングシステムが4 GBをサポートしているように見えるかもしれませんが、内部メモリを持つ他のすべてのハードウェア(最も重要なのは、ビデオカードのビデオRAM)もそのアドレス空間にマッピングされます。

1,600,000桁の6桁の電話番号を配布しようとしているようです。


RAMとアドレス空間を混同しています。
0xC0000022L

@ 0xC0000022L:いいえ、そうではありません。彼は物理アドレス空間について話しているが、RAMは使用可能にマップする必要がある。
ベンフォークト

@BenVoigt:これはどうですか?
user2284570

PAEは、すべてのカーネルコードがそれを使用するように記述されている場合、素晴らしいです。残念なことに、多くのカーネルコードはサードパーティによって書かれたドライバーであり、フラットメモリーモデルでほとんど物事を安定させることができません。PAEを有効にするには、既存のすべてのドライバーをフラットモデルの仮定で破棄する必要があります。これが、WindowsサーバーがPAEを有効にし、クライアントが有効にしない理由です。stevebの答えをご覧ください。
ベンフォイト14

@BenVoigt:1997年以降、すべてのWDMドライバーをWindows 2000/2003にインストールできるため、メモリ<4GBを前提とするドライバーはまれです...
user2284570 14

3

古いマザーボードは4Gbの物理RAMのみをサポートしていましたが、最新のマザーボードはさらに多くをサポートしています。Intel P4 CPUは常に4Gb以上をアドレス指定できます(Physical Address Extension、またはPAEと呼ばれるものを使用して)

Microstoftは、オペレーティングシステムのすべての32ビットバージョンの「クライアント」バージョンで4Gbを超える物理アドレス空間をサポートしない「マーケティングの決定」を行いました。これには、w2kから32ビットWindows 8までのすべてが含まれます(MS KB 32ビットサーバーバージョンがより多くをサポートできることに注意してください-32ビット「Enterprise Edition」で最大128Gbと信じています)-それがまったく同じハードウェア上の「適切な」32ビットOS(Linuxなど)が常にすべてにアクセスできる理由です物理RAM。

(サイドノート-32ビットのWin7ユーザーはこの「愚かな」制限にうんざりして、Kernalを「ハッキング」して完全な物理RAMにアクセスできるようにしました..言うまでもなく、これはライセンスを破り、米国では実際に違法です(DCMA )

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

XP SP2では、MSはBSODを排除するためにドライバー用に予約されたアドレススペースの量をほぼ3倍にし、それ以来ずっと(MSはドライバーを「デバッグ」したくない==彼らはあなたに64ビットを売りたい代わりにOS)。実際のハードウェアは、この「予約済み」スペースにほとんど影響しません。

そのため、4Gb以上の物理RAMがある場合、XP Pro sp2 +で最も多く表示されるのは約3.25Gbです。残りはさまざまなRAMディスクドライバー(もちろんMSではなく)を使用してアクセスできます= XP Proでは「Invisible Address space」または「high 4gb space」を使用します)..「missing」.75Gbを「virtual memory」の一部として使用すると、システムを高速化できます...

/ 3Gスイッチを使用すると、32ビットアプリケーションで32ビットOSで最大3Gbにアクセスできることに注意してください(.exeヘッダーにLargeAddressAwareフラグが設定されている場合-この場合、64ビットOSで最大4Gbにアクセスできません) XPでは、/ USERVAも指定して、OSがRAMから「絞り出される」のを止める必要があります:-)


Windows XP SP1のサポートは、> 4GBのRAMあなたはboot.iniファイルに/ PAEスイッチを追加した場合
user2284570

0

完全な4GBを使用する場合、唯一のオプションは64ビットオペレーティングシステムにアップグレードすることです。

  • Windox XP 64
  • Windows Vista 64
  • Linux
  • Max OS / X(OK、そのためには新しいPCも必要になるかもしれません)

通常のWindows XPは32ビットのみであり、これによりメモリが最大3.5GBに制限されます。このトピックの詳細については、投稿されたリンクVonCを確認してください。


32ビットであっても、メモリは最大3.5Gbに制限されません。他のデバイスが使用可能なアドレススペースを使用しているため、3.75Gbも可能です。-1
MaxVT 2009

だからこそ、「詳細についてはリンクをチェックしてください」と言ったのです:
FrankS 09


0

統合グラフィックスを使用する場合は、それを無効にすることができます。これは、システムがシステムRAMのより多くに対応できることを意味します。

しかし、最善の解決策は、x64 OSを入手することです。

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


1
Windows XP Pro x64のx64ドライバーは不要ですが、Vistaおよび7 x64ドライバーはしばらくの間非常に成熟しています。
MDマーラ2009

0

解決するにはいくつかのコンポーネントが必要なので、かなり複雑な質問です。それらのコンポーネントは次のとおりです。

  • 中央処理装置
  • メモリコントローラーユニット
  • BIOS /(U)EFI
  • オペレーティング・システム
  • 応用

最後の項目は問題に直接関係しませんが、完全を期すために追加しました。

簡単に言えば、上記のコンポーネントはすべて、成功するために4 GB以上のメモリをサポートする必要があります。

中央処理装置

CPUから始めましょう。しかし、最初に注意することが重要です。CPUには、メモリ使用する魔法の能力がまったくありません。代わりに、アドレス可能なスペース内の任意のアドレスにアクセスできます。さあ、ここからがビットネスです。32ビットCPUは、0〜4 GiBの範囲のアドレスアクセスできます。ただし、この範囲は、使用可能なRAM、ROM、SMRAMグラフィックアドレス再マッピングテーブルだけでなく、必要なすべてのメモリマップI / Oにも対応する必要があります。 その他、このアドレス範囲のかなりの部分が必要になる場合があります。結果として、一部のメモリアドレスがこれらの使用によってシャドウイングされたため、RAMでの操作に使用できない可能性があります。隠しメモリを取り戻すには、CPU アクセス可能なアドレス空間を拡張する必要があります。32ビットCPUの場合、Physical Address Extensionが役立ちます。最大64 GiBのアドレス指定が可能です。ネイティブ64ビットモードで動作する64ビットCPUはデフォルトでアクセス可能最大16 EiB。これはかなり大きく、そのようなトリックは必要ありません。しかし一方で、64ビットCPUが64ビットアドレッシングを使用することは非実用的であるため、実際にはアドレスバスによって16 EiB未満の範囲に制限されています。

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

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

BIOS /(U)EFI

BIOS /(U)EFIも重要です。これは、実際に動作する前にハードウェアを構成することが彼らの義務であるためです。特に、ハードウェアデバイス、バス、RAMなどのメモリ範囲でプロセッサのアドレス可能なスペース全体をマッピングする役割を担っています。おもしろいことに、RAM全体が断片的に分割され、いくつかの利用可能な非隣接スポットにマッピングされることがあります。BIOSの問題は、開発者がシステム内で3 GiBを超えるRAMの使用を期待していない可能性があり、そのためBIOSが使用するすべてのメモリを適切にマップしないことです。ほとんどの場合、これは(U)EFIには発生しません。

オペレーティング・システム

オペレーティングシステムは、4 GiBを超えるメモリのアドレス指定もサポートする必要があります。具体的には、PAEを使用するようにCPUを構成する必要があります。一部の32ビットOSはPAEを完全に使用し、4 GiB以上にアクセスできますが、セキュリティを強化するためにPAEを有効にしている場合でも(Windows XPなど)、最大メモリにソフトウェア制限があります。ここでも、64ビットOSには当然このような問題はなく、通常4 GiBを超えるメモリをサポートします。

応用

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

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

インテル®82945Gメモリコントローラーを検討してください。Intel Webサイトでは、PAEをサポートせず、4 GBのRAMに制限されていると述べています。9 System Address Mapデータシートの段落を参照してください。たくさんの情報があります。最も興味深いのはFigure 9-3. Main Memory Address Range図9-3。 メインメモリアドレス範囲 および段落で9.2 Main Memory Address Range (1 MB to TOLUD)、次のとおりです。

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

言うように、PAEをサポートしていないため、4 GiBを超える PCIおよびその他すべてのMMIO を最終的に再マップすることはできません。したがって、メモリの一部はシャドウイングされ、使用されません。つまり、36ビットアドレッシングをサポートするCPUで使用した場合でも、4 GiBを超えるメモリは引き続き使用できず 4 GiBの制限に近いメモリの一部も使用されません。

逆に、Intel®82955X Memory Controllerを考えてみましょう。これは以前のものと関連していますが、以前のものとは反対に8 GBをサポートするように指定されています。データシートの段落2.1 Host Interface Signalsは、CPUへの36ビットアドレスバスを使用することを示唆しています。これは良い兆候です。パラグラフに 7 System Address Mapはさらなる洞察があります。Figure 7-1. System Address Ranges前に見たものと比較して: 図7-1。 システムアドレス範囲 これは、36ビットアドレス指定が可能なCPUで使用される場合、4 GiB以上のRAMを使用できることを明確に示唆しています。段落で7 System Address Map述べていることも注目に値するMCH supports 64 GB of addressable memory space。ただし、最大使用可能 RAMは8 GBに制限されていることがさらに明確になります。これは、アドレス可能使用可能な私はCPU部に伝えるためにしようとしていたとして。

これを結論付けるために、2つの関連するチップセットには実際にメモリ処理に大きな違いがあることに注意したいと思います。

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

次に、より最近のCPUを調べてみましょう。インテル®Core™i7-7700プロセッサーを例に取ります。最大64 GBのRAMをサポートするようにアドバタイズされます。次に、そのデータシートを確認します。パラグラフでは、39ビットのアドレスバスにより2.3 System Address Map、このCPUのアドレス可能範囲は0〜512 GiBであると確信しています。64ビットCPUの理論的な16 EiBの範囲からはまだほど遠いことに注意してください。驚くべきことに、このCPUは最大32 GiBの使用可能な RAM をサポートしていることがさらに明確になっています(Webサイトでは64 GBとは対照的です)。ここにも興味深い画像がありますFigure 2-2. System Address Range Example図2-2。 システムアドレス範囲の例 PCIデバイスなどによるメモリシャドウイングの問題を説明する良い仕事をします。また、マッピングによってこの問題を克服する方法を提案します。実際のRAMからCPUでアドレス指定可能な範囲内の上位アドレス範囲までの範囲。したがって、使用のためにその隠されたメモリを回収します。この再マッピングは、ハードウェアの初期化時にBIOS /(U)EFIによって行われることに注意してください。これがまさに上記の箇条書きにBIOS /(U)EFIを含めたためです。

Intel製品を例として取り上げましたが、AMDについても同じことが言えます。

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

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


-4

これは3574MBのRAMと表示されます。これは、コンピューターがいつでも使用できるRAMの空き容量です。この図は、PCにプリインストールされているプログラムと設定が、場合によっては426mbのRAMを使用するため、コンピューターが完全にアクセスできるRAMです。私の6GB 64ビットPCは、6GBの5.8GBのRAMが利用可能であることを示しています。あなたの最善の策は、PCのアップグレードを検討することです


3.5 GBが空きRAMである場合、なぜWindowsはそれを空きRAMと使用済みRAMに分割しているのですか?これはオペレーティングシステムです。特に、何かが0.5 GBのメモリを消費している場合は、すべてを知っている必要があります。インストールされたプログラムは、起動されるまでRAMを消費しません。
グローノスタジ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.