Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

X64

In der Informatik ist x64 eine 64-Bit-Befehlssatzarchitektur, die auf der x86-Architektur basiert und bei PCs seit 2003 Verbreitung findet.

Inhalt5 Abschnitte
  1. 1. Grundprinzip und Einordnung
  2. 2. Entstehung und Verbreitung
  3. 3. Betriebsmodi und Betriebssysteme
  4. 4. Register, Adressraum und technischer Nutzen
  5. 5. Weiterentwicklung und neue Profile

Grundprinzip und Einordnung

x64 ist eine 64-Bit-Befehlssatzarchitektur, die auf x86 basiert und sich bei PCs seit 2003 verbreitet. Sie erweitert die 32-Bit-Architektur IA-32 (Intel Architecture 32-Bit) um einen 64-Bit-Betriebsmodus. Wegen der Rückwärtskompatibilität bleiben auch die bisherigen 32-Bit- und ursprünglichen 16-Bit-Modi erhalten. Ein x64-Prozessor kann daher grundsätzlich ältere x86-Software ausführen.

x64 darf nicht mit IA-64 verwechselt werden. IA-64 bezeichnet die inkompatible Itanium-Architektur von Intel und Hewlett Packard. x64 ist dagegen eine Erweiterung der bestehenden x86-Architektur: Ein Prozessor mit x64-Befehlssatz ist zugleich ein vollwertiger 32-Bit- und 16-Bit-x86-Prozessor. Die erste Itanium-Generation bot lediglich eine langsame und überwiegend unbrauchbare IA-32-Emulation.

Die Erweiterung wird von AMD als AMD64 und von Intel als Intel 64 implementiert. AMD64 ist seit 2003 verfügbar, Intel 64 seit 2005; Intel verwendete zuvor auch die Bezeichnungen IA-32e und EM64T. Die technischen Unterschiede zwischen AMD- und Intel-Implementierungen haben in der Praxis kaum Auswirkungen. Deshalb werden neben x64 auch amd64 und x86-64 für beide Varianten verwendet. x86_64 ist eine alternative Schreibweise, die unter anderem von Linux und XNU genutzt wird, weil ein Bindestrich dort teilweise als Trennzeichen interpretiert wird.

Entstehung und Verbreitung

x86-64 entstand als weniger radikaler Gegenentwurf zur von Intel und Hewlett Packard entwickelten Itanium-Architektur IA-64. Intel stellte die ersten IA-64-Prozessoren am 4. Oktober 1999 vor. Am folgenden Tag kündigte AMD seine eigene Erweiterung an und veröffentlichte im August 2000 die Spezifikation x86-64. Anders als Intel setzte AMD auf eine Erweiterung des vorhandenen Befehlssatzes. Dadurch blieben die Befehlssatzarchitektur und die Kompatibilität zu bestehender Software erhalten.

Intel brachte die erste Itanium-Generation im Juni 2001 und die zweite Generation noch 2002 heraus. AMD stellte im April 2003 die ersten Opteron-Prozessoren mit der nun AMD64 genannten Erweiterung bereit. Wegen ihrer guten Marktaufnahme begann Intel ab Juni 2004, die kompatible EM64T-Erweiterung in Xeon-Prozessoren der Baureihe „Nocona“ einzusetzen. Im Juli 2006 folgten die ersten Desktop- und Mobilprozessoren der Core-2-Reihe mit der Bezeichnung Intel 64. Seitdem sind alle folgenden IA-32-kompatiblen Prozessorgenerationen von AMD und Intel als 64-Bit-Architekturen ausgelegt; bei Intel gehörten dazu auch die Atom-Prozessoren ab 2008. Der 64-Bit-VIA-Nano war ab Januar 2008 verfügbar.

Die Bezeichnung x64 wurde von Microsoft und Sun in Anlehnung an x86 eingeführt. Teilweise wurde IA-32 daraufhin auch als x32 oder x86-32 bezeichnet. Unter Linux und FreeBSD kennzeichnet amd64 meist 64-Bit-x86. Für ältere 32-Bit-Varianten gibt es Bezeichnungen wie i386, i586, i686 und i686-pae. Bei amd64 ist die SSE2-Erweiterung des Prozessors in jedem Fall nutzbar.

Betriebsmodi und Betriebssysteme

Bei x64 werden zwei grundsätzliche Betriebsmodi unterschieden. Der Legacy Mode umfasst die älteren x86-Modi Real Mode, Protected Mode und System Management Mode. Der Long Mode bei AMD64 beziehungsweise IA-32e Mode bei Intel 64 besteht aus zwei Submodi:

  • Im 64-Bit Mode laufen 64-bittige Anwendungen auf einem 64-Bit-Betriebssystem.
  • Der Compatibility Mode ermöglicht 32-bittige Anwendungen auf einem 64-Bit-Betriebssystem. Die Anwendung sieht dabei eine Umgebung, die dem Protected Mode ähnelt, tatsächlich werden aber weiterhin Mechanismen der AMD64-Architektur verwendet, etwa eine vierstufige Seitentabellen-Hierarchie. Auch 16-Bit-Protected-Mode-Programme werden unterstützt, nicht jedoch Real-Mode-Programme. Der Compatibility Mode muss vom Betriebssystem unterstützt und kann für ein einzelnes Codesegment aktiviert werden.

Beim Start befindet sich jeder x86-Prozessor zunächst im 16-Bit-Real-Mode. Bei BIOS-Systemen bleibt er dort, bis das Betriebssystem startet; BIOS-Bootloader sind deshalb 16-Bit-Programme. Das Betriebssystem beziehungsweise sein Kernel schaltet anschließend in den 32-Bit- oder 64-Bit-Modus. UEFI startet entweder im 32-Bit-Protected Mode ein 32-Bit-EFI-Programm oder im 64-Bit-Long Mode ein 64-Bit-EFI-Programm. Daher kann ein 32-Bit-UEFI normalerweise kein 64-Bit-Betriebssystem starten. Bei manchen Systemen ermöglicht ein passend konfigurierter Cross-Bit-Depth-Bootprozess dennoch den Start eines 64-Bit-Kernels aus einem 32-Bit-EFI.

Linux bot als erstes Betriebssystem eine funktionierende Unterstützung für den 64-Bit-Modus von AMD64; die offizielle Einführung in den Linux-Kernel erfolgte am 1. März 2002. Microsoft veröffentlichte im April 2005 Windows XP Professional x64 Edition als Zwischenlösung bis Windows Vista im Januar 2007. Mac OS X unterstützt x64 seit dem Übergang von PowerPC zu Intel-Prozessoren im Jahr 2006. Der erste 64-Bit-Kernel wurde mit Snow Leopard Ende 2009 verfügbar; seit Mountain Lion, veröffentlicht Mitte 2012, existiert dort nur noch ein 64-Bit-Kernel. Auch FreeBSD, NetBSD und OpenBSD unterstützen AMD64; OpenBSD ab Version 3.5.

Register, Adressraum und technischer Nutzen

Die allgemeinen Register der AMD64-Architektur sind 64 Bit breit. Im 32-Bit-Kompatibilitätsmodus werden die obersten 32 Bit jedes Registers auf 0 gesetzt. Im 64-Bit-Modus kommen je acht zusätzliche Integer- und SSE-Register hinzu. Zu den allgemeinen Registern gehören RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP sowie R8 bis R15. RAX bis RSP entsprechen den früheren EAX bis ESP. Außerdem gibt es den 64-Bit-Befehlszeiger RIP und das 64-Bit-Flagregister RFLAGS. Die zusätzlichen Register R8–R15 und XMM8–XMM15 sind nur im 64-Bit-Modus verfügbar.

Die Registererweiterung ist unabhängig von 64-Bit-Datentransfers, wird bei AMD64 aber immer gemeinsam implementiert. Compiler können dadurch mehr Zwischenwerte in Registern halten, statt sie im Hauptspeicher abzulegen. Zusätzlich übergibt die neue Aufrufkonvention beziehungsweise ABI Funktionsparameter in der Regel über Register statt überwiegend über den Programmstack. Das kann rechenintensive Programme beschleunigen.

Ein Hauptvorteil ist der größere Adressraum. Bei 8086 waren physisch 1 MiB (2^20 Byte) und linear beziehungsweise logisch 64 KiB (2^16 Byte) möglich. Beim 80286 waren es 16 MiB (2^24 Byte) physisch und 64 KiB (2^16 Byte) linear. Der 80386SX konnte 16 MiB (2^24 Byte) physisch und 4 GiB (2^32 Byte) linear adressieren; ab 80386DX waren es 4 GiB (2^32 Byte) in beiden Bereichen. Pentium Pro und AMD Athlon unterstützten physisch 64 GiB (2^36 Byte), aber weiterhin nur 4 GiB (2^32 Byte) linear. CPUs mit AMD64 können 1 TiB (2^40 Byte) oder 256 TiB (2^48 Byte) physisch sowie 256 TiB (2^48 Byte) virtuell adressieren. Die bei der Einführung üblichen K8-Prozessoren besaßen 40 Adressier-Pins und konnten daher physisch 1 TiB nutzen; die Generation K10 verfügte über 48 Adressier-Pins und konnte physisch 256 TiB adressieren.

Die klassische IA-32-Grenze von 2 beziehungsweise 4 GiB Hauptspeicher pro Prozess entfällt. Bei großen Datenmengen erleichtert die größere Adressbreite außerdem das Einblenden von Dateien in den Hauptspeicher (virtual file mapping). Integeroperationen mit Zahlen größer als 32 Bit werden ebenfalls deutlich effizienter; für 64-Bit-Ganzzahlen benötigen 32-Bit-Systeme etwa das 2,5-Fache an Rechenzeit.

Dem stehen Nachteile gegenüber: Adresswerte sind 64 statt 32 Bit breit und benötigen bei Speicherung und Übertragung mehr Platz. Programmdateien sind dadurch ungefähr 25 bis 30 Prozent größer. Eine IP-relative Adressierung mit vorzeichenbehafteten 32-Bit-Offsets verhindert jedoch eine allgemeine Zunahme der Befehlslänge. Linux bietet deshalb die x32-ABI an: Sie verwendet 32 Bit breite Adressen, behält aber Vorteile wie die zusätzlichen Register.

SSE-Register waren bereits 128 Bit breit, daher verändern 64-Bit-ALU-Register die Vektoroperationen selbst nicht. Die Verdoppelung der Registerzahl betrifft aber auch SSE-Mediaregister. Alle AMD64-fähigen Prozessoren unterstützen mindestens SSE2, sodass 64-Bit-Software diese Erweiterung voraussetzen kann. Für Gleitkommaoperationen empfiehlt der Hersteller grundsätzlich SSE. Die x87-FPU bleibt aus Kompatibilitätsgründen vorhanden, unterstützt je nach Einstellung des FPU Control Words jedoch bis zu 80-Bit-Gleitkommaarithmetik und weiterhin transzendente Funktionen wie Sinus, Cosinus, Arcustangens und Logarithmus, die SSE nicht beherrscht. Moderne Compiler verwenden im 64-Bit-Modus dennoch meist nur SSE-Befehle. Für Systemaufrufe wurde außerdem der schnelle Maschinenbefehl SYSCALL eingeführt; er vermeidet im 64-Bit-Modus das Speichern und Wiederherstellen von Segmentierungsinformationen.

Weiterentwicklung und neue Profile

x86-64 wird seit seiner Einführung 2003 aktiv weiterentwickelt. Dadurch war Code, der ursprünglich für die AMD-K8-Architektur optimiert wurde, in den 2010er Jahren nicht mehr unbedingt für aktuelle x64-Systeme geeignet. AMD, Intel, Red Hat und SUSE definierten deshalb 2020 mehrere Binärschnittstellen-Profile (ABIs), mit denen optimierter Code erzeugt werden kann. Für Unix- und unixartige Systeme auf Grundlage von System V werden sie als psABI zusammengefasst; „ps“ steht für „Processor Supplement“.

Die Profile bauen schrittweise auf zusätzlichen Befehlssatzerweiterungen auf:

  • x86-64: ursprüngliche 64-Bit-x86-Architektur auf Grundlage der AMD-K8-Mikroarchitektur, einschließlich SSE2.
  • x86-64-v2: zusätzlich SSE4.2, SSSE3, POPCNT und CMPXCHG16B.
  • x86-64-v3: zusätzlich AVX2 und MOVBE für Daten in der Byte-Reihenfolge „big-endian“.
  • x86-64-v4: zusätzlich AVX-512.

In Mikroarchitekturen entspricht x86-64 K8 ab 2003, Prescott von Intel ab 2004 und Isaiah von VIA/Centaur ab 2008. x86-64-v2 wird mit Nehalem von Intel ab 2008 und Bulldozer von AMD ab 2011 verbunden, x86-64-v3 mit Haswell ab 2013 beziehungsweise Excavator ab 2015 und x86-64-v4 mit Skylake-X und -SP ab 2017 beziehungsweise Zen 4 ab 2022. Unter Linux wurde in der ersten Hälfte der 2020er Jahre diskutiert, auf x86-64-v2 zu wechseln; teilweise wurde dies verworfen, um ältere Prozessoren nicht auszuschließen. Die Geschwindigkeitssteigerungen sind nur bei ausgewählten Anwendungen deutlich.

Für Windows gibt es keine vergleichbaren Profile. Windows legt indirekt selbst eine Basis-Optimierung fest: Die ursprüngliche x86-64-Generation wurde nur bis Windows 7 unterstützt. Seit Windows 8, das Ende 2012 veröffentlicht wurde, sind CMPXCHG16B, PrefetchW und LAHF/SAHF Voraussetzung.

Intel stellte im Mai 2023 außerdem x86S beziehungsweise x86-S vor. Das Konzept sieht vor, die nicht mehr benötigten 16-Bit- und 32-Bit-Altlasten zu entfernen: Ein solcher Prozessor hätte weder den 16-Bit-Real-Mode noch den 16- oder 32-Bit-Protected-Mode. Moderne 64-Bit-Systeme nutzen ohnehin den 64-Bit-Long Mode und können darin unter einem 64-Bit-Betriebssystem weiterhin 32-Bit-Software ausführen. Der Wegfall alter Bestandteile könnte die Architektur effizienter und sicherer machen. Wann solche Prozessoren erscheinen, ist noch offen; vermutlich vergehen noch einige Jahre.

Weiterlesen

Informatik Als einfache Rechengeräte leisteten Abakus und später der Rechenschieber unschätzbare Dienste. 1641 konstruierte Blaise Pascal eine mechanische … 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 … Befehlssatz Der Befehlssatz, auch Instruktionssatz (englisch instruction set), eines Prozessors ist in der Rechnerarchitektur die Menge der Maschinenbefehle, die ein … Register (Prozessor) Register in Prozessoren sind Speicherbereiche für Daten, auf die Prozessoren besonders schnell zugreifen können. Sie befinden sich direkt in der Nähe der … Synonym Wörter mit gegensätzlicher Bedeutung sind Antonyme. Inhaltsverzeichnis. 1 Begriff der Synonymie; 2 Strikte und partielle Synonymie. 2.1 Strikte Synonymie … Viertelgeviertstrich Ein Viertelgeviertstrich (‐), auch Kurzstrich, ist in der Typografie ein kurzer waagerechter Strich. In der Rechtschreibung kann er verschiedenen Zwecken dienen … Kernel (Betriebssystem) Ein Kernel (englisch [ˈkɝːnəl], übersetzt Kern), auch Betriebssystemkern (oder verkürzt Systemkern), ist der zentrale Bestandteil eines Betriebssystems. Betriebssystem Betriebssysteme bestehen in der Regel aus einem Kernel (deutsch: Kern), der die Hardware des Computers verwaltet, sowie speziellen Programmen, die beim Start … Unified Extensible Firmware Interface Das Unified Extensible Firmware Interface (kurz UEFI, englisch für einheitliche erweiterbare Firmware-Schnittstelle) ist eine von Intel 1998 veröffentlichte … Gerätetreiber Dazu kommuniziert der Treiber auf der einen Seite meist direkt mit dem Gerät und tauscht Steuersignale und Daten mit dem Gerät aus, über den Kommunikationsbus ( … Opcode Ein spezielles Programm, der Assembler, erzeugt Maschinencode, indem es im Wesentlichen die Mnemonics durch ihre jeweiligen Opcodes ersetzt. Die meisten … Logarithmus Der diskrete Logarithmus ist in endlichen Körpern und darauf definierten elliptischen Kurven erheblich aufwändiger zu berechnen als seine Umkehrfunktion, die …