Die AMD64-Mikroarchitektur der AMD-K8-Generation ist AMDs Einstieg in den 64-Bit-Mikroprozessor-Markt. Früher war sie auch als x86-64 bekannt. Intel verwendet die neuen 64-Bit-Befehle unter dem Namen Intel 64 (früher: EM64T) in seinen neueren x86-basierten Prozessoren.
Anders als die von Intel komplett neuentwickelte 64-Bit-Architektur IA-64, die mit der heute in PCs meistverwendeten IA-32-Architektur nur wenig gemeinsam hat, wählte AMD einen weit weniger radikalen Ansatz: Der Chip ist ein vollwertiger 32-Bit-Prozessor, dessen Register im 64-Bit-Modus verbreitert werden. Er ist dadurch uneingeschränkt zu heutiger 32-Bit- und sogar alter 16-Bit-Software abwärtskompatibel. Zusätzlich steht nun ein 64-Bit-Modus zur Verfügung, der vor allem einen größeren Speicherbereich anzusprechen ermöglicht und teilweise auch Performance-Verbesserungen durch breite Register mit sich bringt. Mit AMD64 leitete AMD daher einen sanften Übergang von 32- auf 64-Bit-Umgebungen ein.
Inhaltsverzeichnis |
Während der Entwicklung nannte AMD die Architektur noch x86-64, kurz vor der Markteinführung der Prozessoren änderte AMD allerdings die Bezeichnung in AMD64. Neuerdings wird das Kürzel x64 von Microsoft und einigen Fachpublikationen für dieses erweiterte Programmiermodell verwendet.
Das erste Betriebssystem, das eine funktionierende Unterstützung für den 64-Bit-Modus der AMD64-Prozessoren bot, war Linux (offizielle Einführung in den Linux-Kern 1. März 2002[1]). Von Microsoft ist seit April 2005 die Windows XP Professional x64 Edition für AMD64 verfügbar, die allerdings nur eine Zwischenlösung war, bis Windows Vista Januar 2007 auf den Markt kam. Die x64-Edition von Windows XP wurde von Microsoft nur sehr zurückhaltend als OEM- und Systembuilder-Version vermarktet, um den Supportaufwand in Grenzen zu halten und die zukünftigen Vista-Verkäufe nicht zu gefährden. Es gibt keine Home-Variante, keine Schachtel-Version für den Einzelhandel und keine vollständige Lokalisierung für Sprachen außer Englisch. Allerdings ist es möglich, diese Version mit MUI-(Multi User Interface)-Packs zu „übersetzen“.
Auch die drei wichtigsten BSD-Derivate unterstützen die AMD64-Architektur: FreeBSD, NetBSD sowie OpenBSD (seit Version 3.5). Der neueste BSD-Abkömmling DragonFly BSD arbeitet derzeit (September 2005) noch an der Portierung nach AMD64.
Alle Register sind bei AMD64 64 Bit lang; wenn der Prozessor im 32-Bit-Kompatibilitätsmodus läuft, werden die obersten 32 Bit jedes Registers auf 0 gesetzt. Im 64-Bit-Modus verfügt der Prozessor außerdem über je 8 zusätzliche Integer- und SSE-Register, die im 32-Bit-Modus aus Kompatibilitätsgründen nicht verfügbar sind.
Die AMD64-Architektur besitzt folgende Anwendungsregister, die in normalen Anwendungsprogrammen zur Verfügung stehen:
|
|
||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
|
Die orange hinterlegten Register R8–R15 und XMM8–XMM15 stehen ausschließlich im 64-Bit-Modus zur Verfügung. Die Register RAX–RSP, sowie RFLAGS und RIP sind im 32-Bit-Modus nur 32 Bit groß und heißen dort EAX–ESP, EFLAGS und EIP, wie schon beim 80386. Der Zugriff auf die 64-Bit-Register erfolgt über neu eingeführte Befehlspräfixe. Hierfür werden Opcodes verwendet, welche im 32-Bit-Modus bereits für andere Befehle stehen. Aus diesem Grund sind die 64-Bit-Register – anders als die 32-Bit-Präfixe, die auch im 16-Bit-Modus zur Verfügung stehen – nur im 64-Bit-Modus verfügbar.
Für Gleitkommaoperationen ist zwar aus Kompatibilitätsgründen eine x87-FPU auf dem Prozessor vorhanden. Der Hersteller empfiehlt jedoch, für Gleitkommaberechnungen generell nur noch die performantere und problemärmere SSE-Einheit zu benutzen. Problematisch ist hierbei allerdings, dass die SSE-Einheit bis heute keine transzendenten Funktionen (Sinus, Cosinus, Arcustangens, Logarithmus) beherrscht; diese müssen weiterhin über die x87-FPU berechnet oder per Software emuliert werden. Außerdem beherrscht die SSE-Einheit nur 64-Bit-Gleitkommaarithmetik, während die x86-FPU-Einheit intern mit 80-Bit-Gleitkommaarithmetik arbeitet.
Da im 64-Bit-Modus keine Speichersegmentierung mehr unterstützt wird, können Systemaufrufe stark beschleunigt werden, da keine Segmentierungsinformationen mehr gespeichert und wiederhergestellt werden müssen. AMD trug dem durch Einführung eines neuen SYSCALL-Maschinenbefehls Rechnung. Obwohl man theoretisch auch im 64-Bit-Modus wie bisher über Interrupts oder den SYSENTER-Befehl einen Systemaufruf durchführen könnte, ist SYSCALL schneller.
Einer der Hauptgründe, AMD64 der x86-Architektur vorzuziehen, ist die Möglichkeit, mehr Arbeitsspeicher zu verwenden. Übersteigt der installierte Arbeitsspeicher den maximalen Adressraum einer CPU, dann bleibt der Arbeitsspeicher, der jenseits des Adressraums liegt, ungenutzt. Die Adressgrenzen der x86-Prozessoren:
Bei AMD64 ist die Breite einer virtuellen Adresse 48 Bit. Das heißt, ein Task kann 256 TiB adressieren. Die AMD64-Prozessoren haben zur Zeit 40 Adresspins, physisch können sie also 1 TiB Speicher adressieren. Spätere Prozessoren können über mehr Adresspins einen größeren Speicherbereich ansprechen, ohne dass Veränderungen an Betriebssystem oder gar Programmen notwendig wären.
Die Verdoppelung der Registerzahl des allgemeinen Rechenwerks ist im Befehlssatz unabhängig vom 64-Bit-Transfer vorhanden. Die Implementierung der AMD64-Erweiterung in den CPUs beinhaltet diese Erweiterung jedoch immer. Moderne Compiler können so häufiger Zwischenwerte von Berechnungen in CPU-Registern ablegen, statt in den Hauptspeicher auszulagern. Komplexe Berechnungen werden dadurch beschleunigt, so dass rechenintensive Programme davon profitieren.
Gleichzeitig wurde mit AMD64 eine neue Aufrufkonvention für Programmprozeduren (ABI) eingeführt, bei dem Parameter nicht mehr regelmäßig über den Programmstack laufen wie in den klassischen x86-Betriebsmodi, sondern in der Regel in Registern übergeben werden. Dieses registerorientierte ABI ist bei anderen Prozessorfamilien (wie PowerPC) schon länger üblich und kann zu einer Beschleunigung rechenintensiver Programme führen.
Es lassen sich zwei grundsätzliche Betriebsmodi unterscheiden:
Beim Systemstart befindet sich ein AMD64-Prozessor zunächst im Real Mode. Daher ist es ohne Probleme möglich, ein altes Betriebssystem auszuführen: Dieses würde den Long Mode respektive 64-Bit Mode niemals aktivieren (da es von dessen Existenz nichts weiß), die CPU liefe also maximal im Legacy Protected Mode. Ein 64-Bit-Betriebssystem schaltet den Prozessor während des Bootvorgangs zunächst in den klassischen Protected Mode, danach dann in den 64-Bit Long Mode.
Da AMD zwischenzeitlich viele namhafte OEM-Hersteller ins AMD64-Boot holen konnte und außerdem zur Zeit der massive Umstieg auf 64 Bit in Desktop- und Workstation-Rechnern läuft, gehen derzeit fast alle Beobachter davon aus, dass AMD64 in Zukunft die bedeutendste 64-Bit-Architektur werden wird. Dies hat inzwischen auch Hauptkonkurrent Intel anerkannt und Prozessoren mit Intel 64 (früher auch EM64T, Extended Memory 64 Technology, auch bekannt als IA-32e) im Angebot. Dies geschah hauptsächlich, da Intels hauseigene IA-64-Architektur für den Desktop-Einsatz zu teuer ist und überdies noch immer mit einigen konzeptionellen Schwierigkeiten kämpft, zum anderen hatte aber auch Microsoft signalisiert, nur eine 64-Bit-Erweiterung in Windows unterstützen zu wollen. Die Wahl fiel wegen der früheren Verfügbarkeit auf die AMD-Erweiterung.
Der letztgenannte Vorteil betrifft vor allem Datenbanken und die Videobearbeitung, die von der Aufweitung von Adressen auf 64 Bit erheblich profitiert. Bei den meisten Desktopprogrammen wird dies kaum gebraucht, und der verbliebene Vorteil zusammen mit den Vorteilen der Registerzahl wird durch die speicherintensivere Verarbeitung weitgehend aufgebraucht. Die SSE-Einheit bestimmt weitgehend die Abarbeitung von Spielen und mathematischen Programmen – soweit sie komplexe Teilberechnungen auf wenigen Speicherobjekten beinhalten, profitieren diese stärker von den Vorteilen. Das betrifft vor allem Bereiche der 3D-Modellierung.
Grundsätzlich ist der Nutzen stark spezifisch für jede Anwendung und die eingesetzten Algorithmen: Viele alte Programme verwenden 32-Bit-optimierte Algorithmen, die erst nach Anpassung durch Programmierer von der 64-Bit-Erweiterung profitieren. Das betrifft sowohl mathematische Hilfsfunktionen (auch Multimedia und Spiele) als auch die Speicherverwaltung. Viele Programme aus dem Unix-Bereich haben hierbei einen Vorsprung, da dort 64-Bit-Architekturen schon lange üblich sind.
Prozessor-Generationen: AMD K5 | AMD K6 | AMD K7 | AMD K8/K8L | AMD K9 | AMD K10
Sonstige AMD-Entwicklungen: AMD64 | AMD LIVE! | AMD Quad FX | AMD-V | QuantiSpeed
Bis AMD-K6-Generation: Am286 | Am386 | Am486 | 5x86 | K5 | K6 | K6-2 | K6-III
Athlon-Serie: Desktop: Athlon (K7) | Athlon XP | Athlon 64 | Athlon (K8) | Athlon 64 X2 | Athlon X2 | Athlon 64 FX Mobil: Athlon XP-M | Mobile Athlon 64 | Athlon 64 X2 Server: Athlon MP
Duron-Serie: Desktop: Duron Mobil: Mobile Duron Sempron-Serie: Desktop: Sempron (K7) | Sempron (K8) Mobil: Mobile Sempron
AMD K10-Desktopserie: Phenom X3 | Phenom X4
Turion-Serie: Mobil: Turion 64 | Turion 64 X2 | Turion X2
Opteron-Serie: Server: AMD Opteron (K8) | AMD Opteron (K9) | AMD Opteron (K10)