64-Bit-Architektur
Unter 64-Bit-Architektur versteht man in der EDV eine Prozessorarchitektur, deren Verarbeitungsbreite 64 Bit beträgt. Durch 64 Bit große Adressregister sind solche Prozessoren in der Lage, einzelnen Prozessen größere (nicht segmentierte) Adressräume als 4 GByte zur Verfügung zu stellen.
Einige Prozessoren unterstützen (aus Kompatibilitätsgründen) mehrere Architekturen, beispielsweise aktuelle PC-Prozessoren der x86-Architektur. Diese wird maßgeblich von Intel und AMD entwickelt und beinhaltet sowohl eine 16-Bit-Architektur (seit dem Intel 8086, dessen Weiterentwicklungen „80x86“ wie 80186, 80286, 80386 usw. der Architektur den Namen geben), eine 32-Architektur (seit dem Intel 80386) als auch eine 64-Architektur (seit dem AMD Opteron). Die 32- und 64-Bit-Architektur wird auch mit „IA-32“ bezeichnet, die 64-Bit-Architektur alleine mit „x64“.
Analog dazu werden auch Betriebssysteme und Computerprogramme, die auf eine solche Architektur ausgelegt sind, mit dem Attribut 64-Bit versehen (z. B. „64-Bit-Betriebssystem“ oder „Windows 64-Bit“).[1]
Entwicklung
Die ersten Architekturen mit vereinzelten Eigenschaften einer 64-Bit-Architektur entwickelten sich ab den 1960er Jahren im Bereich der Supercomputer. Ausschlaggebend war hier die Optimierung zur Verarbeitung mathematischer Modelle mit 64-Bit-Gleitkommaunterstützung. Im Vergleich dazu wurden Prozessoren für den PC/Workstation Bereich noch bis in die 1990er Jahre ohne Gleitkommaeinheit ausgeliefert; meist war ein separater Steckplatz für einen optionalen Koprozessor vorgesehen. Dabei erreichte der Adressraum beim IBM 7030 Stretch noch nicht mal ein Megabyte an Daten.
Die weitere Entwicklung von 64-Bit-Architekturen wurde durch immer preiswerter herstellbaren Hauptspeicher vorangetrieben, die Anfang der 1990er Jahre zu 64-Bit-Architekturen im Serverbereich (MIPS 4000, DEC Alpha, SPARC64, HP PA-RISC, IBM Power 3, Intel Itanium bzw. IA-64), Anfang der 2000er Jahre im PC/Workstation-Bereich (x64) und Anfang der 2010er Jahre selbst im Bereich von Smartphones (ARM64) führte. Einige der älteren Architekturen hatten dabei schon vor der Entwicklung zur vollen 64-Bit-Architektur die Datenpfade immer weiter verbreitert, etwa der Pentium P5 (64-Bit-Datenbus, Befehle 8 bis 120 Bit lang) oder gar der Pentium-4 (hier sogar zwei 64-Bit-Datenbusse, über die im Allgemeinen 512-Bit-Worte transferiert werden).
- Frühe Spezial-Architekturen von Supercomputern mit Busbreiten ab 64 Bit
- 1961: die IBM 7030 Stretch mit 18-Bit-Adress- und 64-Bit-Datenbus und Unterstützung von Worten variabler Bitbreite[2]
- 1974: der CDC STAR-100 (Nachfolger der 60-Bit-Rechner der Control Data Corporation), ein Vektorrechner in Harvard-Architektur. Mittels 16-Bit-Adressbus können bis zu 65536 Superworte zu je 512 Bit über einem 512-Bit-Datenbus übertragen werden. Für Befehle gab es einen separaten 128-Bit-Bus.
- 1976: Cray-1, der erste 64-Bit-Vektorrechner, Vorläufer der Cray Supercomputerlinie: 24-Bit-Adressraum, 16 oder 32 Bit lange Befehle, 16 Datenbusse mit je 64 Bit
- 1983: Elxsi 6400 sogenannter „Minisupercomputer“ mit 64-Bit-Datenpfaden, 64-Bit-Ganzzahlregistern, aber 32-Bit-Adressraum, Unterstützung von Clustern von bis zu 12 CPUs.
- 64-Bit-Architekturen für Server in Universalprozessoren
- 1991: von MIPS (später SGI) ab dem MIPS R4000 eine 64-Bit-MIPS-Architektur (32- und 64‑Bit)
- 1992: von DEC die Alpha-Prozessor-Serie
- 1995: von Sun Microsystems die SPARC-Architektur („UltraSPARC,“ 32- und 64‑Bit)
- 1995: von Hewlett-Packard die PA‑RISC-Serie (32- und 64‑Bit[3])
- 1997: von IBM die Power-Serie (32- und 64‑Bit)
- 1998: von Apple/IBM/Motorola (bzw. ab 2005 Freescale und ab 2015 NXP) die PowerPC-Serie (32- und 64‑Bit)
- 2000: von IBM die System‑z-Serie (vormals S/390)
- 2001: von Intel und Hewlett-Packard die Itanium-Architektur „IA‑64“
- 2005: von Fujitsu die SPARC64‑V-Architektur
- 64-Bit-Architekturen für Server, PCs, Tablets und Smartphones in Universalprozessoren
- 2003: von Apple/IBM/Motorola (bzw. ab 2005 Freescale und ab 2015 NXP) die PowerPC-Serie (32- und 64‑Bit)
- 2003: von AMD/Intel x64, eine Befehlssatzerweiterung für die x86-Prozessorfamilie (16- und 32‑Bit, mit x64 erweitert um 64‑Bit)
- 2013: von ARM Limited die Armv8-A-Architektur
Die Koprozessoren sind in ihrer Entwicklung jeweils durch die Datenpfade des Hauptprozessors beschränkt gewesen. Dabei hatte der Intel 8087 als erster mathematischer Koprozessor (FPU) des 16-Bit Intel 8086 sogar schon 80-Bit Register zur Verfügung. Die späteren Grafikprozessoren (GPU) optimierten für 3D-Berechnungen auf eine vierfach gepackte Darstellung der Matrizen, sodass sich diese zu 128-Bit und 256-Bit-Prozessoren entwickelten. Da sie keine eigenen Applikationen und Betriebssysteme mit dieser Bitbreite haben, handelt es sich nicht um volle Architekturen.
Hardware
Die Architektur eines Prozessors sagt nichts darüber aus, wie einzelne Funktionen konkret im Chipdesign implementiert sind. So können einzelne Befehle im Innern weiterhin als 32-Bit-Operationen ausgeführt sein (so wie z. B. Verschiebebefehle in MIPS-R4000-Prozessoren).
Die konkrete Hardware von 64-Bit-Prozessoren ist wesentlich mehr durch das Prozessordesign der Jahre bestimmt, in denen sie eingeführt wurden. Dazu zählen
- meist Multicore-Systeme
- meist mehrere 64-Bit-Busse zum Hauptspeicher
- immer Super-Pipelined-Architektur
- meist Out-Of-Order-Ausführung, superskalare Ausführung
- meist Vektorbefehle ab 128 Bit Breite
- Gleitkommaeinheit, die zum Teil mehrere Dutzend Gleitkomma-Befehle pro Core gleichzeitig ausführen können
- umfangreiche Cache-Architekturen mit 2 bis 3, teilweise 4 Hierarchien
- Virtualisierungsmöglichkeiten für Speicher und teilweise I/O-Operationen
Der Mehraufwand für die Erweiterung einer 32-Bit-Architektur auf 64 Bit lag bei etwa 10 Prozent. Der 32-Bit-Prozessor Intel Core Duo Processor T2700[4] kam mit 151 Millionen Transistoren aus, der ansonsten weitgehend identische 64-Bit-Prozessor Intel Core2 Duo Processor E4300[4] benötigte 167 Millionen. Der Hintergrund ist, dass in den Prozessoren ohnehin schon fast alles 64 Bit oder breiter war und nur die allerletzten Komponenten auf 64 Bit erweitert werden mussten.
Die PowerPC-Architektur wurde von Anfang an als 64-Bit-Architektur entworfen, da sie von der ursprünglich aus dem Bereich der Großrechner stammenden Power-Architektur abgeleitet ist. Auch für die MIPS-Architektur wurde frühzeitig als 64-Bit-Architektur entworfen. In beiden Fällen erfolgte die Realisierung in Hardware allerdings erst einige Jahre später und anfangs wurde ein 32-Bit-Subset verwendet.
Software
Kompatibilität
Computerprogramme, die auf eine 64-Bit-Architektur ausgelegt sind, verwenden 64 Bits für die Adressierung des Arbeitsspeichers (bzw. ihres virtuellen Speichers) und sind daher nicht kompatibel zu einer Prozessorarchitektur mit einer niedrigeren Bitzahl (z. B. 32-Bit-Architektur). Nur mit Virtualisierungssoftware ist es unter 32-Bit-Betriebssystemen möglich, ganze 64-Bit-Betriebssysteme (virtualisiert) laufen zu lassen – vorausgesetzt der Prozessor bietet einen 64-Bit-Betriebsmodus.
Für einen sanften Übergang von 32- auf 64-Bit können einige 64-Bit-Prozessoren weiterhin auch 32-Bit-Code ausführen, teilweise (für den Übergang von 16- auf 32-Bit) sogar weiterhin 16-Bit-Code. Wird diese Fähigkeit auch durch ein 64-Bit-Betriebssystem (das prinzipiell zur Ausführung von 64-Bit-Programmen notwendig ist) unterstützt, so ist auch dieser ältere Code unter diesen Betriebssystemen (nativ) ausführbar. Dazu muss der Prozessor einen Modus für 32-Bit-Programme bieten, der innerhalb des 64-Bit-Ausführungsmodus funktioniert, und das Betriebssystem muss eine 32-Bit-Programmierschnittstelle enthalten (API; meist als Wrapper). Beispielsweise bieten x64-Prozessoren einen 32-Bit-x86-Kompatibilitätsmodus innerhalb des 64-Bit-Betriebsmodus. Auch der 64-Bit-PowerPC-Prozessor G5 kann weiterhin nativ 32-Bit-Code ausführen und ist somit zu den früheren 32-Bit-Prozessoren bis zum PowerPC G4 kompatibel. So können weiterhin 32-Bit-Programme ausgeführt werden, was die Nutzung älterer 32-Bit-Programme ermöglicht – weil in einer Übergangszeit jedoch weiterhin viele 32-Bit-Prozessoren verwendet wurden, waren auch einige zu dieser Zeit aktuellen Programme weiterhin in 32-Bit ausgeführt.
Neben der Fähigkeit zur Interpretation des 32-Bit-Befehlssatzes im Prozessor müssen jedoch auch die Betriebssysteme den 32-Bit-Kompatibilitsmodus für die jeweiligen Prozesse unterstützten. Eine Markierung an der Programmdatei zeigt dem Betriebssystem an, ob sie im erweiterten 64-Bit-Modus oder im kompatiblen 32-Bit-Modus auszuführen sind. Vom Betriebssystem muss dann auch die Programmierschnittstelle (API, kurz für englisch Application Programming Interface) als 32-Bit-Version zur Verfügung gestellt werden. Bei Windows wird dies durch das WOW64-Subsystem realisiert.[5] Auch 64-Bit-macOS kann bis Version 10.14 Mojave 32-Bit-Programme ausführen. Unter 32-Bit-Windows war es auch noch möglich, 16-Bit-Programme zu nutzen, doch mit dem Schritt auf 64-Bit musste die 16-Bit-Kompatibilität fallen gelassen werden, weil es im 64-Bit-Ausführungsmodus eines x86-Prozessors keine Möglichkeit mehr gibt, 16-Bit-Programme nativ ablaufen zu lassen. Auf Prozessoren, die keine Rückwärtskompatibilität in Hardware anbietet, besteht auch die Möglichkeit, das Ziel der Ausführung von 32-Bit- oder 16-Bit-Programmen über eine Hardware-unterstützte Virtualisierung oder über eine vergleichsweise langsame, softwarebasierte Emulation zu realisieren. So ist z. B. der x64-Version von Windows 7 optional 16-Bit-Kompatibilität in Form von Software-Emulation vorhanden – der „Windows-XP-Modus“ ist ein emuliertes oder virtualisiertes 32-Bit-Windows-XP, mit dessen Hilfe unter 64-Bit-Windows-7 weiterhin 16-Bit-Programme ausgeführt werden können (nebst 32-Bit-Programmen, die nur unter Windows XP richtig funktionierten).
Manchmal wird jedoch nach der Übergangszeit die Unterstützung dafür seitens des Betriebssystems eingestellt, was beispielsweise Apple mit macOS Catalina (Version 10.15) gemacht hat, obwohl die in Macs verwendeten 64-Bit-Intel-Prozessoren zu dieser Zeit weiterhin einen 32-Bit-Kompatibilitätsmodus bieten. Auch bei Windows war ab Windows 8 der „Windows-XP-Modus“ (u. a. für 16-Bit-Programme) nicht mehr vorhanden.
Mit Virtualisierungssoftware oder Emulatoren ist es auf so gut wie jedem Betriebssystem jedoch weiterhin möglich, ganze (ältere) 32-Bit- oder sogar 16-Bit-Betriebssysteme auszuführen. Dadurch besteht immer die Möglichkeit, alte Software auf modernen Systemen zu nutzen, wenn auch eingeschränkt.
Programmiermodell
Unter der Programmiersprache C schlägt sich die Ausrichtung auf eine 64-Bit-Architektur sowohl bei der Größe der Zeiger-Typen (z. B. void*
) als auch der Integer-Typen (insbesondere int
und long
) nieder. Beim Übergang von einer 32-Bit-Architektur verbreitert man in der Regel Zeiger und den Datentyp long
auf 64 Bit, wogegen der Datentyp int
bei 32 Bit verbleibt. Dieses nennt man dann abgekürzt LP64. Zur Rückwärtskompatibilität mit der 32-Bit-Architektur, die meist als ILP32 ausgeführt wurde, hatte man teils auch long
identisch mit int
gelassen, was als LLP64 bezeichnet wird. Alle heutigen unixartigen 64-Bit-Betriebssysteme drücken die 64-Bit-Architektur in einem LP64-Typenmodell aus, Windows verwendet das LLP64-Modell.
Das ILP64-Datenmodell wurde eingeführt, da Quellcode von alter Software häufig unter der unzulässigen Annahme entwickelt wurde, dass ein int
einen Zeiger halten kann. Es wird auf frühen 64-Bit-Systemen vorgefunden, die schnell auf den Markt wollten, ohne vorher vorhandenen Quellcode bereinigen zu müssen.
Daten- modell |
short (integer) |
int |
long (integer) |
long long |
pointer |
Beispiel Betriebssystem/Compiler[7] |
---|---|---|---|---|---|---|
LLP64 | 16 | 32 | 32 | 64 | 64 | Microsoft Win64 (X64/IA64) |
LP64 | 16 | 32 | 64 | 64 | 64 | Unix-Systeme (zum Beispiel Solaris) und Unixoide Systeme (zum Beispiel Linux und macOS) |
ILP64 | 16 | 64 | 64 | 64 | 64 | Cray |
SILP64 | 64 | 64 | 64 | 64 | 64 | Manche Unicos-Systeme[8] |
Vorteile
Der Hauptvorteil von 64-Bit-Programmen, die unter einem 64-Bit-Betriebssystem auf einem 64-Bit-Prozessor laufen, ist im Wesentlichen der vergrößerte Adressbereich. Hinzu kommen bei manchen Architekturen (z. B. der x86-64) mehr Universalregister (15 statt 7) und das Gewährleisten von Mindestbefehlssätzen. So kann man sich auf x86-64-Prozessioren darauf verlassen, dass die Befehlssatzerweiterung SSE2 verfügbar ist. Die Verfügbarkeit von 64-Bit-Ganzzahlarithmetik ist für die Adressberechnung von Operanden notwendig.
Vergrößerter Adressbereich
Der theoretisch mögliche Adressbereich eines 64-Bit-Prozessors von 16 Exbibyte wird heutzutage meist nicht komplett unterstützt, meist werden nur 48 Bit Adressraum pro Prozess (256 Tebibyte), einige Server-CPUs unterstützen mittlerweile auch 57 Bit (128 Pebibyte). Die Einschränkung ergibt sich durch die Stufen der Seitentabellen-Adressauflösung. Ein Adressbereich von mehr als 4 GByte kann schon bei Hauptspeichern weit unterhalb von 4 GByte sinnvoll sein, da
- der Hauptspeicher durch das Paging um Speicher auf Festplatten oder SSDs erweitert werden kann,
- Festplattenspeicher direkt in den Speicherbereich von Prozessoren gemappt werden kann und
- Speicherverwaltung von einem größeren Adressbereich profitiert, weil Daten besser organisiert werden können (Stack und Heap kommen sich nicht in die Quere, die gefürchtete Heap-Fragmentierung tritt nicht auf).
Ein weiterer Vorteil gegenüber einer 32-Bit-Architektur: Es können mehr als vier Gibibyte Arbeitsspeicher direkt adressiert werden (→ 4-GiB-Grenze), wovon Anwendungen mit hohem Speicherbedarf, wie Videoverarbeitung und Datenbanksysteme, profitieren. Mit 64 Bit lassen sich bis zu 16 Exbibyte adressieren, was derzeit (2016) und auf absehbare Zeit ausreichend ist, um nicht nur den verfügbaren Hauptspeicher, sondern auch den Festplattenspeicher (z. B. über mmap) zu adressieren.
Nachteile
Was für datenintensive Programme (beispielsweise bei Datenbank- oder Datei-Servern[9]) ein Vorteil ist, kann besonders bei kleinen Programmen zu Nachteilen hinsichtlich Speicherverbrauch und Geschwindigkeit führen.[10]
Alle Adresswerte sind bei 64-Bit-Architekturen mit 64 Bit doppelt so breit (statt 32 Bit bei den 32-Bit-Architekturen). Ihre Speicherung verbraucht daher im RAM und in den Caches doppelt so viel Platz. Auch andere Datentypen (z. B. long
im LP64-Modell) beanspruchen auf 64-Bit-Architekturen doppelt so viel Platz wie auf 32-Bit-Architekturen. Offensichtlich wird dieses in den erzeugten Programmdateien, die im Vergleich zum 32-Bit-Programm typischerweise etwa 25 bis 30 Prozent größer sind[10] und dadurch auch RAM und Cache („Cache miss“) stärker belasten können. Hierdurch wird im ungünstigsten Fall die Ausführungsgeschwindigkeit der Programme um etwa den gleichen Faktor herabgesetzt, mit Ausnahme der 64-Bit-x86-Architektur x64, wo eine im Vergleich zu 32-Bit-x86 (beide gehören zu IA-32) verdoppelte Registeranzahl (welche je nach Calling-Convention auch Register-Parameter ermöglicht) entgegen wirkt. Dadurch sind auf der x86-Architektur auch ungünstige 64-Bit-Programme in der Praxis nicht wesentlich langsamer, obwohl 32-Bit-Programme im 64-Bit-Betriebsmodus (und damit mit der verdoppelten Registeranzahl; z. B. unter Linux mit dem x32-ABI) wieder um den gleichen Faktor schneller sind. Auch beherrschen viele 64-Bit-Architekturen eine IP-relative Adressierung mit vorzeichenbehafteten 32-Bit-Offsets, womit eine Zunahme der Befehlslänge verhindert werden kann.
Probleme
Ohne speziell angepasste Ausführungsumgebung kann allerdings kein Vorteil durch den Wechsel von 32-Bit- auf 64-Bit-CPUs gezogen werden. Dies wird insbesondere bei abwärtskompatiblen CPUs wie AMD Athlon 64 X2, AMD Phenom X3/X4, Intel Pentium D, Intel Pentium Extreme Edition, Intel Core 2 Duo, Intel Core 2 Quad, Intel Core i7 oder den 64-Bit-PowerPC-CPUs deutlich. Dies betrifft nicht nur die Betriebssysteme mit 64-Bit-Systemkern zur Paging-Verwaltung mit großen Adressen, sondern auch die Hilfsbibliotheken der Programme mit den darin eingesetzten Algorithmen: Viele alte Systeme verwenden 32-Bit-optimierte Algorithmen, die erst nach Anpassung durch Programmierer von der 64-Bit-Erweiterung profitieren.
Die Notwendigkeit der Anpassung betrifft im Anwendungsbereich besonders mathematische Hilfsfunktionen (auch Multimedia und Spiele), aber auch die Speicherverwaltung. Viele Programme aus dem Unix-Bereich haben hierbei einen Vorsprung, da dort 64-Bit-Architekturen schon lange üblich sind. Über die Entwicklung der Workstations wurden im Unixbereich (einschließlich Linux) auch Desktopprogramme schon langjährig auf 64 Bit angepasst, bevor die Windowsprogramme auf die 64-Bit-Editionen von Windows angepasst wurden. Bei macOS ist die Entwicklung gemischt, da der Unix-basierte Kern und die Desktopoberfläche aus verschiedenen Entwicklungszweigen stammen. Gerade letztere Systeme machen dabei Gebrauch von der Möglichkeit der abwärtskompatiblen CPUs, auf einem 64-Bit-Betriebssystemkern sowohl 32- als auch 64-Bit-Programme parallel auszuführen – diese haben jedoch das Problem, dass die Wechselwirkung der Programme auf dem Desktop gehemmt sein kann (bekannt etwa für Browser-Plugins).
Ähnlich wie bei SIMD oder AltiVec-Erweiterungen ist also auch für 64-Bit-Systeme in der Regel speziell angepasste Software nötig.
Weblinks
- Andrew Josey: Data Size Neutrality and 64-bit Support. USENIX, 4. Dezember 1997 (englisch; 32-/64-Bit-Programmierersicht).
- M. Jungowski: WoW64 Microsofts Starthilfe für 64-Bit Windows. Online-Magazin Planet 3DNow!, 14. Juli 2004 (32-/64-Bit-Mischbetrieb).
Einzelnachweise
- Harry Phillips: New Perspectives on Microsoft Windows Vista for Power Users. Cengage Learning, 2008, ISBN 978-1-4239-0603-2, S. 16 (eingeschränkte Vorschau in der Google-Buchsuche).
- Unterlagen zum IBM 7030 Stretch
- PA-RISC 2.0 Architecture Specifications, ftp.parisc-linux.org (englisch, PDF-Datei)
- Product Specifications. Abgerufen am 5. November 2021 (englisch).
- Jorge Orchilles: Microsoft Windows 7 Administrator’s Reference: Upgrading, Deploying, Managing, and Securing Windows 7. Syngress, 2010, ISBN 978-1-59749-562-2, S. 9 (eingeschränkte Vorschau in der Google-Buchsuche).
- 64-Bit Programming Models: Why LP64? The Open Group, 1998, abgerufen am 1. Januar 2016 (englisch).
- Das Datenmodell ist eine Eigenschaft des Compilers unter dem entsprechenden Target-Betriebssystems, nicht des Betriebssystems allein.
- Cray C/C++ Reference Manual. Cray Inc, abgerufen am 2. Januar 2016 (englisch).
- Mehr Performance: Linux mit 64-Bit-Programmen. Detaillierter Vergleich von 32-Bit- und 64-Bit-Anwendungsbenchmarks unter Linux.
- Are 64-bit Binaries Really Slower than 32-bit Binaries? Vergleich von 32-Bit- und 64-Bit-Programmen auf Solaris/SPARC (englisch).