# 4-GB-Grenze

Die 4-GB-Grenze – umgangssprachlich bzw. historisch gewachsen „Vier-Gigabyte-Grenze“, fachsprachlich genauer „4-Gibibyte-Grenze“ – bezeichnet die maximale Größe des verfügbaren Adressraums bei einer 32-Bit-Architektur. Bei der byteweisen Adressierung können mit 32 Bit großen Speicheradressen höchstens 4 Gibibyte (GiB) direkt angesprochen werden, zum Beispiel durch die virtuelle Speicherverwaltung eines 32-Bit-Betriebssystems oder durch einen 32-Bit-Prozess auf einem 64-Bit-Betriebssystem. Mittels Segmentierungstechniken kann der verfügbare Adressraum vergrößert werden, was teilweise auch in diversen 32-Bit-Architekturen in Hardware umgesetzt ist.

## Vorgeschichte

Bei Computern, die weit weniger als 4 GiB Arbeitsspeicher zur Verfügung haben, ist die 4-GB-Grenze normalerweise kein Problem. So war das auch bei den meisten Computern der 1990er Jahre, die damals den Sprung von 16 oder 24 Bit für die Speicheranbindung hin zu 32 Bit vollzogen. Das PC-Betriebssystem Windows 95 läuft auf IBM-PC-kompatiblen Rechnern mit nur 8 MB RAM. PCs mit 32 MiB waren 1995 also gut ausgerüstete Heimcomputer. Macs liefen damals mit ähnlich viel (bzw. wenig) RAM. Die Speicherverwaltung von System 7, dem späteren Mac OS (ab Version 7.6), war zwar bereits auf 32 Bit ausgelegt, jedoch auf älteren Motorola 68000-Prozessoren durch deren 24-Bit-Speicheranbindung begrenzt.
In den 1990er Jahren kamen einige 64-Bit-Systeme auf den Markt, die vor allem auf Servern oder für Rechen- und Speicher-intensive Anwendungen u. a. die Grenze des nutzbaren Arbeitsspeichers lösten, beispielsweise der Alpha-Prozessor von DEC ab 1992. Auf PCs fand jedoch keine dieser Architekturen Verwendung.
Bei PCs lag die Standard-Ausstattungen bei RAM um die Jahrtausendwende noch durchwegs unter einem GiB. Noch Anfang der 2000er wurden z. B. Power Macs mit rund 128 MiB RAM verkauft: Mac OS 9 benötigt als Mindestanforderung 32 MB RAM. In vielen PCs dieser Zeit kann oft grundsätzlich nicht mehr als z. B. 2 GiB RAM verbaut werden, wie beispielsweise beim Power Mac G4: die meisten G4-Modelle unterstützen maximal 512 MiB große Speichermodule, und da in den Power Macs je nach Modell nur drei bis vier DIMM-Steckplätze vorhanden sind, ergibt sich ein maximaler RAM zwischen 1 und 2 GiB.
Die damals modernen 32-Bit-Betriebssysteme Mac OS X 10.0 und Windows XP von 2001 empfahlen noch 128 MB RAM für einen flüssigen Betrieb. Für die virtuelle Speicherverwaltung steht diesen Systemen jedoch per Paging und Swapping bereits bis zu 4 GiB an virtuellem Speicher zur Verfügung.

## Problembeschreibung

Das Problem trifft insbesondere Rechnerarchitekturen, die zur Adressierung von Daten im Arbeitsspeicher 32 Bit lange Adressen (unsigned Integer) verwenden. Durch diese Beschränkung ist es den betroffenen Prozessoren nicht möglich, mehr als 2$^{32}$ Byte, also 4 GiB, anzusprechen. Diese Einschränkung gilt sowohl für den logischen (virtuellen) Adressraum, den das Programm anspricht, als auch für den physischen Adressraum – den im System tatsächlich installierten Arbeitsspeicher. Selbst wenn der real installierte Arbeitsspeicher eines Computers kleiner als 4 GiB ist, kann die 4-GiB-Grenze auf einige Programme Auswirkungen haben, etwa auf Anwendungen, die große memory-mapped Dateien verwenden.

### 3-GB-Barriere

Für Anwendungen auf einem 32-Bit-Betriebssystem verschärft sich das Problem real auf eine 3-GB-Barriere oder eine 2-GB-Barriere, was auf den sog. 3G/1G- bzw. 2G/2G-Split des Adressraums durch den Betriebssystemkern (Kernel) zurückzuführen ist.
Realer Adressraum
Der verwendbare Bereich des realen Adressraums kann durch weitere Einflüsse von Hardware (Hauptplatine, I/O-Geräten ~ insbesondere die Größe des Video-RAM) und/oder das Betriebssystem weiter eingeschränkt werden. Gängige Computerarchitekturen zweigen realen Adressraum für die Einblendung von System-ROM und IO-Bereichen ab, z. B. Onboard- und Erweiterungshardware wie Grafik- und Soundkarten (Shared Memory/Unified Memory Architecture). Im x86-Umfeld sind 2,0 bis 3,75 GiB RAM üblicherweise nutzbar, die genauen Werte hängen vom Mainboard und dem Ausbau an internen Erweiterungskarten sowie von den BIOS-Einstellungen ab. Auch steht der verwendbare Bereich mitunter nicht lückenlos zur Verfügung, sondern ist zwischen 2,0 und 4,0 GiB fragmentiert.
Virtueller Adressraum
Außerdem kann unter üblichen 32-Bit-Betriebssystemen ein einzelner 32-Bit-Prozess nicht mehr als 2 GiB (Windows) bzw. 3 GiB (Linux) virtuellen Adressraum belegen, da der obere Teil des direkt adressierbaren Adressraums, der bei 32 Bits eben maximal 4 GiB umfassen kann, fest dem Betriebssystem zugeordnet ist und nicht durch Anwendungsprogramme alloziert werden kann. Diese Aufteilung in user space für Anwendungen und kernel space für den Kernel wird dementsprechend auch 3G/1G-Split (3 GiB verfügbar für Anwendungsprogramme, 1 GiB reserviert für Kernel und Treiber) oder 2G/2G-Slit (50:50-Aufteilung) genannt. Während z. B. Linux nur 25 % des Adressraums für den Kernel reserviert, ist die Aufteilung unter Windows aus Gründen der Kompatibilität mit bestehender Software standardmäßig 50:50.
Unter 32-Bit-Windows kann diese feste Zuteilung von 2 GiB an den Kernel mit dem /3GB switch auf 1 GiB reduziert werden. Um dies zu nutzen, muss außerdem das IMAGE_FILE_LARGE_ADDRESS_AWARE-Flag im Header der jeweiligen Anwendung aktiviert sein. Ist beides gegeben, sind mit einer 32-Bit-Anwendung bis zu 3 GiB auf einem 32-Bit-Windows nutzbar.
64-Bit-Betriebssysteme bieten teilweise ein 32-Bit-Subsystem, um abwärtskompatibel zu bleiben. Damit laufen 32-Bit-Programme auch weiterhin auf einem 64-Bit-Betriebssystem derselben Plattform, etwa 32-Bit-Windows-Programme auf einem 64-Bit-Windows oder 32-Bit-Linux-Programme auf 64-Bit-Linux. Dies ist u. a. auf der x86-Architektur auch „in Hardware“ abgebildet, denn im 64-Bit-Long Mode gibt es weiterhin einen 32-Bit-Compatibility Mode. Dieser erscheint bestehenden 32-Bit-Programmen wie der Protected Mode, allerdings steht jedem Programm darin ein 4 GiB großer virtueller Adressraum zur Verfügung. Eine ähnliche Technik gab es bereits zuvor im 32-Bit-Betriebsmodus Protected Mode, in dem mit dem Virtual 8086 Mode weiterhin ein 16-Bit-Betriebsmodus zur Verfügung stand. Dieser fehlt allerdings im Compatibility Mode, sodass ein 16-Bit-Programm (oder 16-Bit-Bestandteile älterer 32-Bit-Software) im 64-Bit-Betriebsmodus nicht mehr in Hardware ausführbar ist. Teils ist es jedoch möglich, 16-Bit-Software per Emulation weiterhin auszuführen.

## Problembehebung

Die 4-GiB-Grenze ist nicht vorhanden, wenn ein 64-Bit-System (Betriebssystem und Anwendung) zum Einsatz kommt. Hier liegt die theoretische Grenze des Adressraums bei 2$^{64}$ Byte, also 16 Exbibyte. Viele Prozessoren, wie die der AMD64-Architektur (64-Bit-x86-Architektur), verfügen zwar über mehr als 32, aber weniger als 64 Adressleitungen, der physische Adressraum ist daher kleiner. Eine Problematik der Verbreiterung der Adressen ist, dass 64-Bit-Betriebssysteme nur 64-Bit-Kernel-Treiber verwenden können, weil in diesem Fall der Betriebssystemkern 64-bittig implementiert ist und Kernel-Treiber direkt im Adressraum des Betriebssystemkerns ausgeführt werden, der eine Mischung von 32- und 64-Bit-Software in sich selbst nicht zulässt. Abgesehen von Kernel-Treibern gibt es unter aktuellen Betriebssystemen noch User-Mode-Treiber, die dann im Prinzip normale Anwendungssoftware sind und je nach Betriebssystem auch als 32-Bit-Version funktionieren. Für Geräte wie Grafikkarten usw. sind solche Treiber derzeit aber nicht nutzbar. 64-Bit-Kernel-Treiber waren nach der Einführung dieser Betriebssysteme selten und sind es heute für alte, spezielle und seltene Hardware immer noch. Diese Problematik betrifft praktisch hauptsächlich proprietäre Software, weil Hersteller insbesondere bei preiswerten Geräten wie Druckern, Scannern usw. Treiber nicht länger als unbedingt nötig pflegen und normalerweise kein Interesse haben, anderen die Pflege älterer Treiber zu überlassen. Grundsätzlich aber muss auch freie Software an 64-Bit angepasst sein, um korrekt zu funktionieren, mit einer einfachen Neukompilation der Software kann, muss es aber nicht getan sein. Ob eine Software für 64-Bit geeignet ist oder nicht, hängt also vollständig von der Software und nicht direkt ihrem Entwicklungsmodell ab, freie Software hat nur den theoretischen Vorteil, dass sie leichter angepasst werden könnte. Moderne 64-Bit-Betriebssysteme führen Anwendungen, die nur für 32-Bit kompiliert wurden, in aller Regel weiterhin aus, Windows-Systeme z. B. durch WOW64. Ihnen steht aber je nach Anwendung nur maximal 2 bis 4 GiB Speicher zur Verfügung.
Auf 32-Bit-Systemen gibt es mit PSE-36 und PAE verschiedene Möglichkeiten, die 4-GiB-Grenze zu überwinden. Diese Prozessorerweiterungen vergrößern allerdings nur den adressierbaren physischen Speicher, jeder Prozess für sich kann weiterhin nur 4 GiB Daten gleichzeitig adressieren. Unter Windows existiert außerdem die Möglichkeit, über eine AWE genannte Schnittstelle physische Speicherseiten jenseits der 4-GiB-Grenze in den logischen Adressraum des Prozesses einzublenden, womit ein 32-Bit-Prozess insgesamt mehr als 4 GiB ansprechen kann. Allerdings erlauben nur einige spezielle Versionen von Windows 2000 und Windows Server 2003 die Verwendung von RAM jenseits der 4-GiB-Grenze auf einem 32-Bit-System; die Verbraucher-Betriebssysteme Windows XP (ab SP2), Windows Vista und Windows 7 erlauben dies in ihren 32-Bit-Versionen gewollt nicht, um Inkompatibilitäten mit diversen Treibern von Fremdfirmen zu vermeiden. Für Normalanwender von Windows bleibt daher nur der Wechsel auf eine 64-Bit-Version des Betriebssystems als Problemlösung.