32-Bit-Architektur

32-Bit-Prozessor

Unter 32-Bit-Architektur versteht man in der EDV eine Prozessorarchitektur, deren Verarbeitungsbreite 32 Bit beträgt. Prozessoren, die eine 32-Bit-Architektur verwenden, werden häufig auch als „32-Bit-Prozessoren“ bezeichnet. Analog dazu werden auch Computerprogramme, die auf eine solche Architektur ausgelegt sind, mit dem Attribut 32-Bit versehen (z. B. „32-Bit-Betriebssystem“).

Architekturen

… sowie diverse weitere Designs.

Design

Vereinfacht dargestellt bedeutet 32 Bit, dass die Prozessoren durch ihr ALU-Design so ausgelegt sind, dass zwei 32-Bit-Zahlen (also 4 Byte) gleichzeitig verarbeitet werden können (beispielsweise zwei 4-Byte-Zahlen addieren).[2] Das schließt die externe und interne Gestaltung von Datenbus und die Breite des Registersatzes mit ein. Dies gilt analog für die gängigen Adressierungs-Arten, wobei die Bitbreite der Recheneinheit sich grundsätzlich von der der Adresseinheit[3] unterscheiden kann (wie etwa auch bei 64-Bit-Prozessoren).

Vorteile

Die Vorteile von höherbittigen Prozessorarchitekturen liegen in der einfacheren Berechnung größerer Integer-Werte (durch die breitere ALU), was zum Beispiel Vorteile bei Verschlüsselungsalgorithmen, grafischen Berechnungen (zum Beispiel Festkommaarithmetik für Computerspiele), 32-Bit-Dateisystemen oder Multimediaformaten (MPEG-2, MP3) mit sich bringt. Auch bringt die Erweiterung zu 32 Bit die Möglichkeit mit, bis zu 4 Gigabyte Arbeitsspeicher zu arbeiten, was zum Vergleich zu 16-Bit, welches nur 16 Megabyte verarbeiten kann, eine enorme Verbesserung darstellte.[4]

Probleme

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 bei SIMD- oder AltiVec-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 breitem Datenpfad auch über einen 32 Bit breiten Adresspfad, also einen 4-GiB-Adressraum. Bei älteren IBM-Großrechnern (System/360 und System/370) wurden nur 24 Bit zur Adressierung verwendet (16-MiB-Adressraum).[6] Da das überzählige Byte von Betriebssystem und Anwendungsprogrammen für Flagbits 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 dem Pentium Pro einige x86-Prozessoren mit 36 Bit adressieren, was einem Adressraum von 64 GiB entspricht (Physikalische Adresserweiterung).

Programmiermodell

Unter der Programmiersprache C schlägt sich die Anzahl der Bits insbesondere bei der Größe der Datentypen void*, int und manchmal auch bei long, 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ürzt ILP32. 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 der Standardisierung 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 aufkommenden 64-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-Bit Large File Support, um auch in ILP32 Systemen noch große Dateien verarbeiten zu können, wurde in Single UNIX Specification Version 2 (UNIX 98) eingeführt,[9] basierend auf dem herstellerübergreifenden „Large File Summit“ von 1996.[10]

32-Bit-Datenmodelle[11]
Daten-
modell
short
(integer)
int
(integer)
long
(integer)
pointer
(integer)
long long
(integer)
Beispiel Betriebssystem/Compiler[12]
LP32 0000 16 16 32 32 Apple MacIntosh für Motorola 68k, Microsoft API für Intel x86
ILP32 0000 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 Microsoft Win32, Amdahl, Convex, Unix Systeme ab 1990
IP32 0000 16 32 64 32 64 Ultrix (1982–1995), 64-Bit long-long alias nur mit späteren GNU C

Siehe auch

Einzelnachweise

  1. Harry Phillips: New Perspectives on Microsoft Windows Vista for Power Users. Cengage Learning, 2008, ISBN 978-1-4239-0603-2, S. 16 (englisch, eingeschränkte Vorschau in der Google-Buchsuche).
  2. Grundlagen der Informatik: ALU und Speicher (PDF, ≈ 200 kB) – bei der TH-Nürnberg (veröffentlicht [oder zuletzt hochgeladen] am 28. November 2002)
  3. … auch Adresswerk (oder englisch address unit und kurz AU) genannt, siehe auch Adresseinheit (AU) & Busschnittstelle (BIU) (bei TecChannel, am 18. Oktober 1999)
  4. Das 4GB Problem – WB Wiki. Abgerufen am 2. Juli 2018.
  5. Axel Vahldiek: Kompatibilitätsprobleme: Umstieg von 32 auf 64 Bit. Abgerufen am 2. Juli 2018.
  6. chessprogramming – IBM 360. Abgerufen am 2. Juli 2018.
  7. IBM Knowledge Center. Abgerufen am 2. Juli 2018 (amerikanisches Englisch).
  8. Rationale for International Standard — Programming Languages — C. (PDF) The Open Group, April 2003, abgerufen am 13. Mai 2020.
  9. unix.org
  10. Adding Large File Support to the Single UNIX® Specification. The Open Group, 14. August 1996, abgerufen am 13. Mai 2020.
  11. Sergey Vasiliev: The forgotten problems of 64-bit programs development. 14. August 2014, abgerufen am 13. Mai 2020 (englisch).
  12. Das Datenmodell ist eine Eigenschaft des Compilers unter dem entsprechenden Target-Betriebssystems, nicht des Betriebssystems allein.
  13. h30266.www3.hpe.com