Kurzfassung:
32-Bit:
- Ein 32-Bit Programm kann niemals mehr als 4GiB RAM adressieren, weil nur 32-Bit Datentypen und Adressbus nutzbar sind.
- "Richtige" Betriebssysteme teilen den Speicher in Kernel Space und User Space, aus Sicherheitsgründen. Das schränkt den für Userprogramme verfügbaren Speicher weiter ein.
- Üblicherweise ist die Aufteilung 1:1: 2GiB für User, 2GiB für Kernel. Man kann das Verhältnis beeinflussen, z.B. zu 3GiB User, 1GiB Kernel, auch mit Windows, per Boot-/Kernelparameter.
- Um die Bitness zu erhöhen (Kernel wie User) müßte alle Software komplett neu gebaut und evtl. umgeschrieben werden. Einem 32-Bit Programm "einfach so" mehr RAM als theoretisch 4GiB zu geben ist vollkommen unmöglich.
PAE:
- PAE fügt 4 weitere Adressbusbits hinzu, also 36 Bits statt 32 Bits. Programme sind aber weiterhin 32-bittig, die Limitierung bleibt. Nur 232 Elemente (Bytes) sind für so ein Programm adressierbar.
- Was also tun diese 4 Bits? Sie bilden einen "sekundären" Adressbus, der 24=16 Elemente ansprechen kann. Userprogramme wissen davon nichts und können davon nichts wissen. Nur die Hardware und ein entsprechend angepaßter Kernel "kennen den Trick". Ein Kernel der kein PAE beherrscht bedeutet im Endeffekt, daß PAE nicht funktioniert (z.B. Windows NT 4 und früher).
- Diese 16 Elemente bilden "Speicherfenster", die von einem Kernel dynamisch zugewiesen werden können. Mittels der 4 Bits "mapped" der Kernel den User- und Kernel-RAM einzelner Prozesse in unterschiedliche Bereiche des virtuellen, und letztendlich physikalischen Speichers.
- Applikation A kann also 2GiB fressen, Applikation B kann 2GiB fressen, Applikation C und D, E und F ebenso. Das macht z.B. 16GiB in Summe.
- Weder Applikation A, noch B noch sonst eine kann individuell mehr RAM als im Userspace Adressfenster verfügbar fressen, üblicherweise 2GiB unter Windows und Linux.
- Auf einem 64-Bit System kann eine 32-Bit Applikation (unter Windows: nur eine, die mit LAA Bit kompiliert ist) volle 4GiB fressen. Das ist allerdings mehr oder weniger ein "Sonderfall", nur auf einem 64-Bit System kann ein 32-Bit Programm seinen vollen Speicherbereich wirklich ausreizen (Das ist auch der Grund, warum es 32-Bit Spiele gibt, die dennoch ein 64-Bit Betriebssystem voraussetzen).
Sprich: 4 Bits, die maximal 64GiB RAM in 16 × 4GiB 32-Bit Fenster aufteilen. Der Sinn dahinter: Daß 32-Bit Server länger überleben können, weil nun mehrere größere Serverdienste (SQL Server, Webserver, usw.) nebeneinander leben können, ohne sich ein einzelnes 4GB Fenster noch dazu mit dem Kernel teilen zu müssen.
Wie Tweakstone schon sagte ändert das aber nichts an den fundamentalen Limitierungen von 32-Bit Binärcode. Maschinencode der nur 32 Bits kennt, kann über diesen Tellerrand eben nicht hinausschauen. Man kann mehrere von denen nebeneinander im selben Land leben lassen (=PAE), aber das war's dann auch schon.
Das beleuchtet noch lange nicht, wie der Adressbus bzw. das virtuelle Speichersystem wirklich arbeiten, aber es macht evtl. ein bißchen was klar.
Edit: [Wikipedia zum Thema PAE].