Unter32-Bit-Architektur versteht man in derEDV eineProzessorarchitektur, derenVerarbeitungsbreite 32Bit beträgt.Prozessoren, die eine 32-Bit-Architektur verwenden, werden häufig auch als „32-Bit-Prozessoren“ bezeichnet. Analog dazu werden auchComputerprogramme, die auf eine solche Architektur ausgelegt sind, mit dem Attribut32-Bit versehen (z. B. „32-Bit-Betriebssystem“).[1]
… sowie diverse weitere Designs.
Vereinfacht dargestellt bedeutet 32Bit, dass die Prozessoren durch ihrALU-Design so ausgelegt sind, dass zwei 32-Bit-Zahlen (also 4Byte) gleichzeitig verarbeitet werden können (beispielsweise zwei 4-Byte-Zahlen addieren).[2] Das schließt die externe und interne Gestaltung vonDatenbus und die Breite desRegistersatzes mit ein. Dies gilt analog für die gängigen Adressierungs-Arten, wobei die Bitbreite derRecheneinheit sich grundsätzlich von der derAdresseinheit[3] unterscheiden kann (wie etwa auch bei64-Bit-Prozessoren).
Die Vorteile von höherbittigen Prozessorarchitekturen liegen in der einfacheren Berechnung größerer Integer-Werte (durch die breitere ALU), was zum Beispiel Vorteile beiVerschlüsselungsalgorithmen, grafischen Berechnungen (zum BeispielFestkommaarithmetik für Computerspiele), 32-Bit-Dateisystemen oderMultimediaformaten (MPEG-2,MP3) mit sich bringt. Auch bringt die Erweiterung zu 32 Bit die Möglichkeit mit, bis zu 4 Gibibyte Arbeitsspeicher zu arbeiten, was zum Vergleich zu 16-Bit, welches nur 16 Mebibyte verarbeiten kann, eine enorme Verbesserung darstellte.[4]
Bei weiterentwickelten Architekturen, die 32-Bit-Erweiterungen erhalten haben, kann allerdings ohne speziell angepasste Betriebssysteme in der Regel kein großer Vorteil aus dem Wechsel von 16-Bit- auf 32-Bit-Prozessoren gezogen werden.
Ähnlich wie beiSIMD- oderAltiVec-Erweiterungen ist also auch für 32-Bit-Systeme gewöhnlich speziell angepasste Software nötig.[5]
Allerdings verfügte nicht jedes System mit 32 Bit breitemDatenpfad auch über einen 32 Bit breitenAdresspfad, also einen 4-GiB-Adressraum. Bei älteren IBM-Großrechnern (System/360 undSystem/370) wurden nur 24 Bit zur Adressierung verwendet (16-MiB-Adressraum).[6] Da das überzählige Byte von Betriebssystem und Anwendungsprogrammen fürFlagbits genutzt wurde, war der Übergang zur 31-Bit-Adressierung (2-GiB-Adressraum) mit nur noch einem Flagbit komplex. In einigen Systemen ist der Adresspfad schmaler oder größer als 32 Bit – beispielsweise können seit demPentium Pro einige x86-Prozessoren mit 36 Bit adressieren, was einem Adressraum von 64 GiB entspricht (Physikalische Adresserweiterung).
Ein anderes Problem ist dasJahr-2038-Problem.
Unter derProgrammiersprache C schlägt sich die Anzahl der Bits insbesondere bei der Größe der Datentypenvoid*,int und manchmal auch beilong, sowie deren vorzeichenlosen Pendants, nieder. Mit der Verbreitung von 32-Bit-Architekturen hat man hierbei in der Regel die drei Typen gleichermaßen auf die Breite von 32 Bit gesetzt, so dass Daten von Int-Typ, Long-Typ und Zeiger-Typ gleich sind. Dieses nennt man abgekürztILP32. Zur Abwärtskompatibilität mit der 16-Bit-Architektur, die meist als IP16 ausgeführt wurde, hatte man teils auch den Int-Typ bei 16-Bit gelassen, genannt LP32, oder den Long-Typ auf doppelte Breite von 64-Bit gesetzt, genannt IP32.[7] Die ersten Versionen von DOS/Windows und Mac-OS arbeiteten mit jener LP32 und 16-Bit „int“, während frühe Ultrix-Versionen mit IP32 und 64-Bit „long“ arbeiteten. Derlei Programmiermodelle haben sich jedoch nicht durchgesetzt – alle heutigen unixartigen 32-Bit-Betriebssysteme drücken die 32-Bit-Architektur in einem ILP32-Typenmodell aus.
Der „long long“Datentyp in C wurde erst im Zuge derStandardisierung für C99 (ab 1995) eingeführt um den Wildwuchs vorheriger Definitionen zu ersetzen.[8] Er hatte sich im Unix-Umfeld eingebürgert um Software gleichzeitig für ILP32 und LP64 der aufkommenden64-Bit-Architekturen zu schreiben, womit „long“ und „pointer“ jeweils die gleiche Größe haben, und die 64-Bit Arithmetik gleichermaßen verfügbar ist. Der zugehörige 64-BitLarge File Support, um auch in ILP32 Systemen noch große Dateien verarbeiten zu können, wurde inSingle UNIX Specification Version 2 (UNIX 98) eingeführt,[9] basierend auf dem herstellerübergreifenden „Large File Summit“ von 1996.[10]
| Daten- modell | short (integer) | int (integer) | long (integer) | pointer (integer) | long long (integer) | Beispiel Betriebssystem/Compiler[12] |
|---|---|---|---|---|---|---|
| LP320000 | 16 | 16 | 32 | 32 | Apple MacIntosh für Motorola 68k, MicrosoftAPI für Intel x86 | |
| ILP320000 | 16 | 32 | 32 | 32 | IBM 370, VAX Unix, ältere Workstations (VAX hat long-long nur für DEC/Alpha 64-Bit[13]) | |
| ILP32 LL64 | 16 | 32 | 32 | 32 | 64 | MicrosoftWin32, Amdahl, Convex, Unix Systeme ab 1990 |
| IP320000 | 16 | 32 | 64 | 32 | 64 | Ultrix (1982–1995), 64-Bit long-long alias nur mit späterenGNU C |