PCIホールまたはPCIメモリホールは、32ビットハードウェアと32ビットオペレーティングシステムの制限であり、コンピュータに物理的にインストールされているよりも少ないメモリが使用可能であるように見えます。[1]このメモリアドレス指定の制限と、それを克服するために必要な後の回避策は、機能的には初期の8088 IBM PCメモリアーキテクチャのメモリ制限に似ています(コンベンショナルメモリを参照)。
コンピューティングの歴史において、同様の状況がしばしば発生しています。つまり、ある一定レベルのリソースを持つことを意図したハードウェアが、最大予想量の数倍を処理するように設計され、ムーアの法則により経済的に利用可能なリソースが増加するにつれて、最終的に厳しい制限となるのです。オリジナルの IBM PC は、通常 64 KB 以下のメモリを搭載しており、最大 640 KB を使用するように設計されていました。これは急速に、複雑なDOS メモリ管理で処理しなければならない制限になりました。ハード ドライブでも、同様のサイズ制限が次々と課され、克服されてきました。
使用できないメモリ
メモリマップド I/O を使用する場合、PCI ホールによって使用可能なメモリが失われるのは、物理メモリとハードウェア デバイスとの通信の両方に同じアドレス空間を使用することが原因です。したがって、インストールされているハードウェア デバイスは、プロセッサおよびシステム ソフトウェアと通信するためにアドレス空間の一部を必要とします。32 ビット ハードウェアには合計 4 GB のアドレス指定可能なメモリがあるため、[a]十分なメモリがインストールされている場合は、32 ビット マシンの実際の物理メモリの一部を犠牲にして非表示にし、デバイスが通信できるスペースを確保する必要があります。物理メモリのどの部分がデバイス通信空間に置き換えられるかはマシンによって異なりますが、通常は 2.5 GB から 3.5 GB を超える部分です。
隠されていて使用できないシステム メモリの量は、実際のマザーボードとチップセット、BIOS、物理メモリの量、グラフィック カードにインストールされているビデオ RAMの量、およびシステムにインストールされているPCI カードの数と種類によって大きく異なります。4 GB の物理メモリと大量のビデオ メモリを備えた複数の 3D カードがインストールされている場合、1 GB を超える 32 ビット システム メモリが使用できなくなる可能性があります。一部のマザーボードでは、インストールされている拡張カードに関係なく、常に少なくとも 1 GB のサイズのメモリが不足します。
物理アドレス拡張
Pentium Pro で初めて開発された回避策である物理アドレス拡張(PAE) により、個々のプログラムが 32 ビットのアドレス空間内で動作するように制限されているにもかかわらず、特定の 32 ビット オペレーティング システムは最大 36 ビットのメモリ アドレスにアクセスできます。十分なメモリがインストールされていれば、各プログラムは独自の 4 ギガバイトのアドレス空間を持つことができ、すべてのプログラムで合計最大 64 ギガバイトのメモリを使用できます。
しかし、PAE だけでは PCI ホールの問題に対処するのに十分ではありません。メモリ アドレスと I/O PCI アドレスは、3 ギガバイト目と 4 ギガバイト目の間でまだ重複しているからです。PAE 対応のオペレーティング システムと PAE 対応の CPU を組み合わせても、1 ギガバイト目から 3 ギガバイト目、そして 5 ギガバイト目から 64 ギガバイト目までのメモリ アクセス以上のパフォーマンスは得られません。PCI ホールは依然として存在します。4GB ホストで、何らかの追加の回避策がない場合、PAE は PCI I/O によって重複している約 1GB のメモリへのアクセスには役立ちません。
PAEはWindows XPのService Pack 1 (SP1)リリースまで完全にサポートされていましたが、SP2では取り消されました。これを完全にサポートするMicrosoft Windowsの32ビットバージョンは、 Windows Server 2003以前の特定のハイエンドサーバーバージョンのみです。2014年現在、これは主に32ビットLinuxディストリビューションで使用されています。Ubuntuは2013年から32ビットバージョンでこれを必須にしています。Microsoftは、標準の32ビットドライバーとそれ以降の64ビットドライバーの両方とは異なるPAE対応ドライバーを必要とするグラフィックカードやその他のデバイスとの互換性の問題が多数あったため、Windows XP SP2以降のオペレーティングシステムでサポートを無効にしました。 [2] MS Windowsの多くのバージョンは、 NXビットを使用する目的で、依然としてPAEと呼ばれるものを有効にできますが、これによってアドレス空間が拡張されることはなくなりました。
記憶の穴を埋める
前述のように、32 ビット PAE 対応システムや 64 ビット システムでも、「メモリ ホール」の上下のメモリは使用できますが、デバイスに必要なメモリ アドレスが使用されるため、3 ギガバイト前後の 512 MB ~ 1.5 GB の RAM は使用できません。メモリのコストが下がっているため、これは深刻な問題ではないかもしれませんが、失われたメモリへのアクセスを回復する方法はあります。
4 GB を超えるアドレスへのデバイスのマッピング
32 ビット PCI ホールの制限は、システム BIOS がハードウェアでサポートされているすべてのオペレーティング システムに対応する必要があるため、純粋な 64 ビット オペレーティング システムに影響する可能性があります (16 ビット、32 ビット、および 64 ビットのオペレーティング システムはすべて同じハードウェアで実行されます)。 BIOS は、4 GB 未満のすべてのデバイスをマッピングしてブートできる必要がありますが、64 ビット システムではこれは必要ありません。 多くの BIOS は、デバイス、そのドライバー、およびチップセットがすべてこれをサポートしている限り、64 ビット アドレス空間の上位にデバイスをマッピングすることで、ユーザーがメモリ ホールを埋めるように構成できます。 このように構成されたマシンは、16 ビットまたは 32 ビットのオペレーティング システムを起動できません。UEFI ブート モードのみがサポートされます。
4 GB を超えるアドレスへのメモリのマッピング
PCI ホールを削除する別の方法は、64 ビット オペレーティング システムと、上記の物理アドレス拡張方式をサポートする 32 ビット システムでのみ有効ですが、2 ギガバイトから 4 ギガバイトの制限の間のメモリの一部またはすべてを 4 ギガバイトを超えるアドレスに「再マップ」することです。これは、コンピュータのチップセットでサポートされている必要があり、通常は BIOS セットアップで有効にできます。この再マップは、CPU コア内で行われる仮想アドレスから物理アドレスへの高レベルの再マップとは異なり、物理アドレスのレベルで機能します。従来の 32 ビット オペレーティング システムでこれを有効にすると、再マップされたメモリ (多くの場合、PCI ホール自体よりも大きい) はそのようなオペレーティング システムでは使用できなくなるため、メリットよりもデメリットの方が大きくなります。ただし、たとえばWindows Vistaでは、そのようなメモリが「システム プロパティ」ページで物理的に存在することが示されます。
参照
注記
- ^ 16 ビットの場合、2 の 16 乗は 65,536 個の異なる場所をアドレス指定できることに相当します。32 ビットの場合は 4,294,967,296 個の場所、64 ビットの場合は 18,446,744,073,709,551,616 個の場所になります。
参考文献
- ^ 「大容量メモリ X86 ベース システムのメモリ ホール」(PDF) techfiles.de Sun Microsystems 2014 年 5 月 19 日。2011 年 7 月 19 日時点のオリジナル(PDF)からアーカイブ。2014 年11 月 7 日に取得。
- ^ Dansdata: 3Gb メモリの壁とは何ですか?
