Dies ist eine ziemlich komplizierte Frage, da zum Erarbeiten mehrere Komponenten erforderlich sind. Diese Komponenten sind:
- Zentrale Verarbeitungseinheit
- Speichercontroller-Einheit
- BIOS / (U) EFI
- Betriebssystem
- Anwendung
Der letzte Punkt bezieht sich nicht direkt auf das Problem, aber ich habe es der Vollständigkeit halber hinzugefügt.
Kurz gesagt, alle oben genannten Komponenten müssen mehr als 4 GB Speicher unterstützen, um erfolgreich zu sein.
Zentrale Verarbeitungseinheit
Beginnen wir mit einer CPU. Aber zuerst ist es wichtig zu beachten, dass eine CPU hat keine magische Fähigkeit zu verwenden, jede Erinnerung an alle. Stattdessen kann es einfach auf jede Adresse in seinem adressierbaren Bereich zugreifen . Jetzt kommt das Bitness-Ding. Die 32-Bit-CPU kann auf Adressen im Bereich von 0 bis 4 GiB zugreifen . Dieser Bereich muss jedoch nicht nur die verfügbaren RAM-, ROM-, SMRAM- und Graphics Address Remapping-Tabelle aufnehmen, sondern auch alle erforderlichen E / A-Speicherplätzeund viele mehr, die möglicherweise einen erheblichen Teil dieses Adressbereichs erfordern. Infolgedessen kann es durchaus möglich sein, dass einige Speicheradressen durch diese Verwendungen abgeschattet wurden und daher nicht für Operationen im RAM verfügbar sind. Um versteckten Speicherplatz wiederzugewinnen, muss der Adressraum für die CPU erweitert werden . Im Falle einer 32-Bit-CPU kann die Physical Address Extension hilfreich sein. Damit können bis zu 64 GiB adressiert werden. Die 64-Bit-CPU, die im nativen 64-Bit-Modus betrieben wird, kann standardmäßig zugreifenbis zu 16 EiB, was ziemlich groß ist und solche Tricks nicht erfordert. Andererseits ist es für eine 64-Bit-CPU jedoch nicht praktikabel, die 64-Bit-Adressierung zu verwenden. In Wirklichkeit sind sie durch ihren Adressbus jedoch auf einen geringeren Bereich als 16 EiB beschränkt.
Speichercontroller-Einheit
Ursprünglich befand er sich in Northbridge, wurde jedoch von AMD auf den Prozessorchip verschoben, beginnend mit den AMD64-Prozessoren und von Intel mit den Nehalem-Prozessoren. Selbst wenn eine CPU mit PAE selbst auf 64 GiB zugreifen kann, benötigt sie immer noch eine MCU, um auf den RAM zuzugreifen. Einfach ausgedrückt: Eine CPU, die auf eine bestimmte Adresse zugreift, erhält ihre Antwort entweder vom PCI-Gerät, vom BIOS-ROM-Flash oder von der MCU, wenn sich die angeforderte Adresse im RAM befindet, usw. Es ist jedoch nicht ungewöhnlich, dass eine MCU (beispielsweise in Northbridge oder in der CPU) aus Marketinggründen viel weniger adressierbaren Speicherplatz als 64 GiB unterstützt.
BIOS / (U) EFI
BIOS / (U) EFI sind ebenfalls wichtig, da es ihre Aufgabe ist, die Hardware zu konfigurieren, bevor überhaupt etwas funktionieren kann. Sie sind unter anderem dafür verantwortlich, den gesamten vom Prozessor adressierbaren Raum mit Speicherbereichen von Hardwaregeräten, Bussen, RAM usw. abzubilden . Interessanterweise kann es vorkommen, dass der gesamte RAM in mehrere Teile aufgeteilt und an mehreren verfügbaren nicht zusammenhängenden Stellen zugeordnet wird. Das Problem mit dem BIOS ist, dass die Entwickler unter Umständen nicht mehr als 3 GiB RAM-Auslastung in ihrem System erwarten und das BIOS daher nicht den gesamten zu verwendenden Speicher zuordnen kann. Höchstwahrscheinlich wird dies bei (U) EFI nicht der Fall sein.
Betriebssystem
Das Betriebssystem sollte auch die Adressierung von mehr als 4 GiB Speicher unterstützen. Um genauer zu sein, sollte es eine CPU für die Verwendung von PAE konfigurieren. Einige 32-Bit-Betriebssysteme sind in der Lage, PAE zu verwenden und auf mehr als 4 GiB zuzugreifen, andere haben eine Softwarelimitierung des maximalen Arbeitsspeichers, obwohl sie PAE zur Erhöhung der Sicherheit aktivieren (Windows XP als Beispiel). Wiederum haben 64-Bit-Betriebssysteme solche Schwierigkeiten natürlich nicht und unterstützen normalerweise mehr als 4 GB Speicher.
Anwendung
Der letzte Punkt stammt aus einer anderen Welt, da Anwendungen normalerweise in einem virtuellen Adressraum arbeiten . Ich habe sie der Vollständigkeit halber hinzugefügt. Trotzdem sind beim Kompilieren einige zusätzliche Schritte erforderlich, damit die Anwendung mehr Speicher verwenden kann. Standardmäßig kann eine 32-Bit-Anwendung nur 2 GB Speicher verwenden. Die gleiche 32-Bit - Anwendung könnte adressiert bis 4 GiB Speicher, vorausgesetzt, dass das Betriebssystem jedoch zwingend nötig und hat CPU PAE aktiviert. Genauer könnte es gebrauchenBis zu 3 GiB Speicherplatz wäre der andere 1 GiB als normale Bibliotheken und Betriebssystemkern adressierbar, jedoch nicht schreibbar (dies hängt letztlich von der Betriebssystemarchitektur und nicht von der Anwendung selbst ab). Wieder unterstützen 64-Bit-Anwendungen die Adressierung von mehr als 4 GiB Speicher und haben an erster Stelle keine derartigen Probleme.
Um dies alles in die richtige Perspektive zu bringen, betrachten wir einige Beispiele.
Betrachten Sie den Intel® 82945G Memory Controller . Die Intel-Website gibt an, dass sie PAE nicht unterstützt und auf 4 GB RAM beschränkt ist. Lasst uns den Absatz 9 System Address Map
des Datenblattes konsultieren . Es hat viele Informationen. Am interessantesten ist Figure 9-3. Main Memory Address Range
: und der Absatz 9.2 Main Memory Address Range (1 MB to TOLUD)
, der wie folgt lautet:
Dieser Adressbereich erstreckt sich von 1 MB bis zum oberen Rand des physischen Speichers, auf den der (G) MCH zugreifen kann (wie im TOLUD-Register programmiert). Alle Zugriffe auf Adressen innerhalb dieses Bereichs werden vom (G) MCH an den Hauptspeicher weitergeleitet, sofern sie nicht in den optionalen TSEG-, optionalen ISA Hole- oder optionalen IGD-gestohlenen VGA-Speicher fallen. Der (G) MCH bietet einen maximalen Hauptspeicheradressdecodierungsraum von 4 GB (2 GB für den 82945GC / 82945GZ / 82945PL). Der (G) MCH ordnet den Speicherplatz von APIC oder PCI Express nicht zu. Dies bedeutet, wenn der im System bestückte physische Arbeitsspeicher 4 GB (2 GB für 82945GC / 82945GZ / 82945PL) erreicht, wird physischer Speicher vorhanden sein, der jedoch nicht adressierbar ist und daher vom System nicht verwendet werden kann.
Da es PAE nicht unterstützt, ist es letztlich nicht möglich, PCI und jedes andere MMIO über 4 GiB neu zuzuordnen. Daher wird ein Teil des Speichers abgeschattet und nicht verwendet. Dies bedeutet, dass selbst bei Verwendung einer CPU mit 36-Bit-Adressierung Speicher über 4 GiB nicht verfügbar ist und ein Teil des Speichers nahe der Grenze von 4 GiB ebenfalls nicht verwendet wird.
Umgekehrt betrachten wir den Intel® 82955X Memory Controller, der sich auf den vorherigen Controller bezieht, der jedoch nur 8 GB unterstützt. Der Absatz im Datenblatt 2.1 Host Interface Signals
weist darauf hin, dass ein 36-Bit-Adressbus zur CPU verwendet wird. Dies ist ein gutes Zeichen. Absatz 7 System Address Map
hat weitere Einsichten. Vergleiche Figure 7-1. System Address Ranges
mit dem, was wir zuvor gesehen haben: Dies legt eindeutig nahe, dass es mehr als 4 GiB RAM verwenden kann, vorausgesetzt, es wird mit einer CPU verwendet, die auch 36-Bit-Adressierung ausführen kann. Es ist auch erwähnenswert, dass der Absatz das 7 System Address Map
besagt MCH supports 64 GB of addressable memory space
. Es wird jedoch weiter klargestellt, dass der maximal nutzbare Arbeitsspeicher auf 8 GB begrenzt ist. Dies erklärt noch einmal den Unterschied zwischen adressierbar undnutzbar, als ich versuchte, in der CPU-Sektion zu vermitteln.
Zum Abschluss möchte ich anmerken, dass zwei verwandte Chipsätze große Unterschiede in der Speicherbehandlung aufweisen.
Lassen Sie uns Intel® Pentium® Prozessor Extreme Edition 840 prüfen . Es unterstützt den 64-Bit-Befehlssatz, aber nicht PAE. Das bedeutet, dass im 32-Bit-Modus nicht mehr als 4 GiB RAM verwendet werden können (bitte korrigieren Sie mich, falls ich mit dieser Annahme falsch liege). Lasst uns das Datenblatt und die Tabelle überprüfen Table 4-3. Signal Description
. Obwohl diese CPU 64-Bit-fähig ist, ist sie immer noch durch die 36-Bit-Breite des Adreßbusses begrenzt, wodurch sie auf einen zugänglichen Adressbereich von 0 bis 64 GiB beschränkt ist.
Lassen Sie uns nun eine neuere CPU untersuchen. Nehmen Sie zum Beispiel den Intel® Core ™ i7-7700-Prozessor . Es wird angekündigt, bis zu 64 GB RAM zu unterstützen. Jetzt können wir das Datenblatt davon prüfen. Absatz 2.3 System Address Map
überzeugt uns, dass diese CPU adressierbaren Bereich von 0 bis 512 GiB aufgrund 39-Bit - Adressbus. Beachten Sie, dass es immer noch weit vom theoretischen 16-EiB-Bereich für eine 64-Bit-CPU entfernt ist. Überraschenderweise wird jedoch weiter klargestellt, dass diese CPU maximal 32 GiB nutzbaren Arbeitsspeicher unterstützt (im Gegensatz zu 64 GB auf der Website). Hier gibt es auch ein interessantes Bild Figure 2-2. System Address Range Example
: Es macht gute Arbeit, um das Problem mit dem Spiegeln von Speichern durch PCI-Geräte usw. zu veranschaulichen. Außerdem wird vorgeschlagen, dieses Problem durch Mapping zu überwindenein Bereich vom realen RAM bis zum oberen Adressbereich innerhalb des CPU- adressierbaren Bereichs. Dadurch wird dieser verborgene Speicher für den Gebrauch wieder freigegeben. Beachten Sie, dass diese Neuzuordnung von BIOS / (U) EFI bei der Hardwareinitialisierung durchgeführt wird. Genau aus diesem Grund habe ich BIOS / (U) EFI in die Liste oben aufgenommen.
Ich habe Intel-Produkte als Beispiele genommen, aber das gilt auch für AMD.
Lassen Sie uns nun diskutieren, wie Betriebssysteme involviert sind. Der Linux - Kernel enthält vollständige PAE-Unterstützung ab Version 2.3.23 und es ist durchaus möglich, mehr als 4 GiB Arbeitsspeicher zu haben, verwendbar mit Linux - Kernel auf einem 32-Bit - System. Beachten Sie jedoch ein unbestimmtes Problem mit dem 32-Bit-Linux-Kernel auf einem System mit mehr als 4 GiB RAM auf etwas Hardware (meiner Erfahrung nach hat es etwas mit TLB-Shooting zu tun). Wie auch immer, Wikipedia bietet gute Informationen zur PAE-Unterstützung . Interessant ist, dass Windows XP auf 4 GB beschränkt ist, während Windows Server 2003 Enterprise / Datacenter SP2 volle 64 GB unterstützt. Gleiches gilt für andere Desktop-Server-Windows-Paare.
Wie Sie sehen, gibt es viele Kombinationen zwischen den aufgeführten Komponenten. In manchen Fällen kann es hilfreich sein, eine CPU oder ein Betriebssystem zu ersetzen. Es ist viel schwieriger, mit BIOS / (U) EFI oder MCU umzugehen, da ersterer proprietär und in das System integriert ist und nicht leicht geändert werden kann, letzterer in die CPU eingebaut oder an Bord gelötet wird.