X86-Prozessor
- Der korrekte Titel dieses Artikels lautet „x86-Prozessor“. Leider ist dieser Titel in der Wikipedia aufgrund technischer Einschränkungen nicht möglich. X86-Prozessor
x86 bezeichnet den Befehlssatz einer von der Firma Intel entwickelten Mikroprozessor-Architektur.
Die x86-Architektur ist nach den Prozessoren der 8086/8088 Reihe benannt, mit der sie 1978 eingeführt wurde. Die ersten Nachfolgeprozessoren wurden später mit 80186, 80286 etc. benannt. Da sich Ziffernkombinationen nicht markenrechtlich schützen lassen, gingen Intel und die meisten Mitbewerber nach Einführung des Intel 80486 dazu über, Wortmarken wie Pentium zu verwenden, aber das alte Nummernschema blieb als Name der ganzen Familie erhalten. Intel selbst nennt die Architektur heute IA-32 als Abkürzung für Intel Architecture, 32-bit.
| Inhaltsverzeichnis |
Geschichte
Die x86-Architektur wurde 1978 mit der Intel 8086 CPU eingeführt, die den älteren Prozessor Intel 8008 ablöste, der seinerseits von Intels erstem Mikroprozessor, dem Intel 4004 abstammte. Drei Jahre später wurde die vereinfachte Variante Intel 8088 zur Standard-CPU des IBM-PC. Durch den enormen Erfolg des IBM-kompatiblen PCs in den letzten 20 Jahren wurde die x86-Architektur die am weitesten verbreitete und kommerziell erfolgreichste CPU-Architektur der Welt.
Auch andere Hersteller haben über die Jahre x86-kompatible CPUs produziert, darunter Cyrix (heute VIA Technologies), NEC Corporation, IBM, IDT und Transmeta. Der nach Intel zweitgrößte Hersteller dieser Prozessoren ist AMD. AMD ist inzwischen neben Intel zur zweiten treibenden Kraft bei der Weiterentwicklung des x86-Standards geworden.
Intel entwickelte die Architektur 1978 in der 16 Bit-Ära. Bis 1985 war sie mit Einführung der Intel 80386 und der IA-32-Standards zu einer 32-Bit-Architektur geworden; IA-32 ist der 32-Bit-Teil der x86-Standards. Die 32-Bit-Ära war der bis jetzt längste und lukrativste Geschichtsabschnitt, während dessen IA-32 ständig durch Intel fortentwickelt wurde. 2003 brach für x86 die 64-Bit-Ära an. Diesmal wurde die Architekturerweiterung allerdings nicht von Intel, sondern von AMD eingeführt. Der x86-Standard für 64 Bit heißt AMD64.
Die von Intel in der Itanium-Produktlinie verwendete IA-64-Architektur hat mit IA-32/x86 nichts zu tun und ist eine komplett separate Neuentwicklung, die außer einer x86-Emulation keine Spuren der x86-Technik enthält.
Design
Die x86-Architektur verwendet einen CISC-Befehlssatz mit variabler Instruktionslänge. Speicherzugriffe in Wortgröße sind auf unalignierte Speicheradressen erlaubt. Wörter werden in Little Endian-Richtung gespeichert. Rückwärtskompatibilität war eine treibende Kraft der Architekturentwicklung. Dies bedingte einige suboptimale und andernfalls nicht zu rechtfertigende Designentscheidungen. Befehle werden vor ihrer Verarbeitung von einem CISC-Dekoder in RISC-Befehle konstanter Länge übersetzt und an einen RISC-Kern zur Verarbeitung übergeben. Die Übergabe erfolgt zunächst an sogenannte Reservierungsstationen, d.h. an kleine Puffer, die den verschiedenen Rechenwerken vorgeschaltet sind. Aufgrund der beschriebenen Architektur spricht man auch von hybriden CISC/RISC-Prozessoren.
Real Mode
Die Intel 8086 und 8088 hatten 14 16-Bit-Register. Vier von ihnen (AX, BX, CX, DX) waren Mehrzweck-Register. Zusätzlich hatte jedes noch eine Sonderfunktion:
- AX (eng. accumulator register) diente als bevorzugtes Ziel für Rechenoperationen
- BX (eng. base register) diente zur Adressierung der Anfangsadresse einer Datenstruktur
- CX (eng. count register) diente als Zähler für Schleifen (loop-Instruktion) und Verschiebeoperationen
- DX (eng. data register) diente als Datenregister für den zweiten Operanden.
Auf jedes Register konnte mittels zwei separaten Bytes zugegriffen werden (das hohe Byte in BX unter dem Namen BH, das niederwertige Byte als BL). Von den zwei Zeigerregistern zeigt SP (StackPointer) auf das oberste Element des Stacks, und BP (BasePointer) kann auf einen anderen Platz im Stack oder Speicher zeigen. Die beiden Index-Register SI (SourceIndex) und DI (DestinationIndex) können für Blockoperationen oder zusammen mit SP oder BP als Index in ein Array benutzt werden. Zusätzlich gibt es die vier Segmentregister CS (CodeSegment), DS (DataSegment), SS (StackSegment) und ES (ExtraSegment) mit denen die Basisadresse für ein 64 kByte grosses Speichersegment festgelegt wird.Außerdem gibt es das Flag-Register, das Flags wie carry, overflow, zero usw. enthalten kann, und den Instruction Pointer (IP), der auf die gegenwärtige Instruktion zeigt.
Im Real Mode ist der Speicherzugriff "segmentiert". Dies geschieht, indem die Segmentadresse um 4 Bit nach links geschoben wird und ein Offset addiert wird, so dass eine 20-Bit-Adresse entsteht. Der gesamte Adressraum im Real Mode ist also 220 Bit (1 Megabyte), was 1978 sehr viel war. Es gibt zwei Adressierungs-Modi: near und far (englisch für nah und fern). Im Far Mode werden sowohl das Segment als auch der Offset angegeben. Im Near Mode wird nur der Offset angegeben, und das Segment wird einem Register entnommen. Für Daten ist dies DS, für Code CS und für den Stack SS. Wenn DS zum Beispiel A000h und SI 5677h ist, zeigt DS:SI auf die absolute Adresse DS × 16 + SI = A5677h.
In diesem Schema können unterschiedliche Segment/Offset-Paare auf dieselbe absolute Adresse zeigen. Wenn DS A111h und SI 4567h ist, zeigt DS:SI ebenfalls auf die obige Adresse A5677h. Das Schema sollte eine Abwärts-Kompatibilität mit der Intel 8085 bewahren und hat einer ganzen Generation von Programmierern Kopfschmerzen bereitet.
Zusätzlich hatte die i8086 64K von 8-Bit-I/O-Adressraum (alternativ auch 32K mit 16 Bit), und einen hardwareunterstützten Stack von ebenfalls 64K. Nur Wörter (2 Byte) können auf dem Stack abgelegt werden. Der Stack wächst zu niedrigeren Adressen hin, und SS:SP zeigt auf das zuletzt auf den Stack gelegte Wort (die niedrigste Adresse). Es gibt 256 Interrupts, die sowohl von Hardware als auch Software ausgelöst werden können. Die Interrupts können kaskadieren und benutzen den Stack, um die Rücksprungadresse zu speichern.
Protected und Enhanced Mode
Der Intel 80286 Prozessor kannte einen weiteren Arbeitsmodus, den Protected Mode. Durch Integration einer MMU (eng. MemoryManagementUnit -- Speicherverwaltungseinheit) auf dem Chip konnten im Protected Mode bis zu 16 MB Speicher adressiert werden. Ein spezielles MMU-Register zeigt dabei auf eine Segmenttabelle im Hauptspeicher in der die 24-Bit-Basisadressen der Segmente festgelegt wurden. Die Segmentregister dienten dann lediglich als Index in diese Segment-Tabelle. Zusätzlich konnte jedem Segment einer von vier Privilegien-Levels zugeordnet werden ("Ringe" genannt). Insgesamt bedeuteten diese Neuerungen eine Verbesserung. Allerdings war Software für den Protected Mode inkompatibel mit dem Real Mode des i8086-Prozessors.
Die Intel 80386 brachte den wahrscheinlich größten Sprung für die x86-Architektur. Mit Ausnahme des Chips Intel 80386SX, der nur 24-Bit-Adressierung unterstützte und einen 16-Bit-Datenbus hatte, waren alle 386er vollständig 32-Bit - Register, Instruktionen, E/A-Raum und Speicher. Bis zu 4 Gigabyte Speicher konnten angesprochen werden. Dazu wurde der Protected Mode zum 32-Bit-Enhanced Mode erweitert. Wie auf der 80286 wurden auch im Enhanced Mode die Segmentregister als Index in einer Segmenttabelle verwendet, die die Aufteilung des Speichers beschrieb. Allerdings konnten in jedem Segment 32-Bit-Offsets verwendet werden. Zusätzlich unterstützte der Enhanced Mode Paging, einen Mechanismus, durch den virtueller Speicher verwendet werden konnte. Es wurden keine neuen Mehrzweck-Register hinzugefügt. Allerdings wurden bis auf die Segmentregister alle Register auf 32 Bit verbreitert. Das erweiterte Register AX hieß fortan EAX, aus SI wurde ESI usw.
Die grundlegende Architektur des 386er-Prozessors (auch IA-32 genannt) wurde zur Basis aller weiteren Entwicklungen in der x86-Architektur. Bis heute funktionieren alle x86-kompatiblen CPUs nach dem Prinzip der i80386.
Der bis dato separate Mathe-Coprozessor 80387 wurde ab der nächsten CPU Intel 80486 direkt in den Prozessor integriert. Mit dem Mathe-Co konnten Fließkommaberechnungen durchgeführt werden, wie sie zum Beispiel in wissenschaftlichen und Grafikdesign-Anwendungen benötigt werden.
MMX
1996 führte Intel die MMX-Technologie ein (Matrix Math Extensions, besonders vom Marketing aber auch häufig Multi-Media Extensions tituliert). MMX definierte 8 neue SIMD-Register von 64 Bit Breite, die allerdings auf den Stack der FPU gemappt waren. Zwischen MMX und FPU musste aufwendig umgeschaltet werden. Dazu kam, dass MMX auf Integer-Operationen beschränkt war und lange Zeit von den Compilern nicht richtig unterstützt wurde. Insbesondere Microsoft tat sich schwer, den hauseigenen Compiler wenigstens mit Unterstützung für MMX-Intrinsics auszustatten. MMX wurde daher nur relativ selten verwendet, am ehesten noch für 2D-Videobearbeitung.
3DNow!
1997 erweiterte AMD den MMX-Befehlssatz um Fließkomma-Operationen und nannte die so entstandene Technik 3DNow!. Dies löste zwar nicht die Compiler-Probleme, aber 3DNow! ließ sich im Unterschied zu MMX für 3D-Spiele verwenden, die auf schnelle Fließkomma-Operationen angewiesen sind. Spieleentwickler und Hersteller von 3D-Grafikprogrammen verwendeten 3DNow!, um die Anwendungsperformance auf AMDs K6- und Athlon-Prozessoren zu verbessern.
SSE
1999 brachte Intel mit dem Pentium III-Prozessor den SSE-Befehlssatz. Wie AMD fügte Intel hauptsächlich Fließkomma-SIMD-Befehle hinzu. Des Weiteren schuf man für SSE eine separate Funktionseinheit auf dem Prozessor mit 8 neuen 128-Bit-Registern (XMM0 bis XMM7), so dass man nicht mehr die FPU für SIMD zweckentfremden musste.
SSE2
SSE2, von Intel 2001 mit dem Pentium 4 eingeführt, fügte erstens weitere Integer-Instruktionen für die SSE-Register hinzu und zweitens 64-Bit-SIMD-Fließkomma-Instruktionen. Erstere machten MMX fast obsolet, und letztere erlaubten auch konventionellen Compilern, SIMD-Instruktionen zu verwenden.
SSE3
Mit der Prescott-Revision des Pentium IV lieferte Intel ab 2004 SSE3 aus, das hauptsächlich Speicher- und Threadmanagement-Instruktionen liefert, um die Leistung von Intels Hyper-Threading-Technologie zu steigern.
AMD beherrscht seit den Athlon 64 Prozessoren mit den Kernen Venice und San-Diego ebenfalls den Befehlssatz SSE3.
64 Bit
Seit etwa dem Jahr 2002 begann die x86-Architektur, einige ihrer durch die 32-Bit-Wortlänge bedingten Designlimits zu erreichen. Insbesondere war es nur mit Tricks möglich, mehr als 4 GB Arbeitsspeicher anzusprechen, aber der virtuelle Speicher pro Task musste generell auf 2 bzw. höchstens 3 GB beschränkt bleiben.
Intel wollte ursprünglich den Sprung auf 64 Bit nur mit einer zu x86 inkompatiblen Architektur vollführen, die man IA-64 nannte und heute hauptsächlich im Server-Markt platziert.
Hauptkonkurrent AMD wählte dagegen den Ansatz, die vorhandene x86-Architektur auf 64 Bit zu erweitern, und nannte das Produkt AMD64. Durch den Erfolg der AMD64-Prozessoren sah sich Intel genötigt, den AMD64-Befehlssatz auch in eigene Produkte zu integrieren. Bei Intel firmiert die Technologie unter dem Namen EM64T.
Virtualisierung
Die Virtualisierung eines x86-Prozessors ist schwierig, da die Architektur nicht den Anforderungen von Popek und Goldberg genügt. Trotzdem gibt es mehrere kommerzielle Produkte, die einen virtuellen x86-Prozessor zur Verfügung stellen, darunter VMware und Microsoft Virtual PC als auch Open Source Software wie Xen. Sowohl Intel als auch AMD gaben bekannt, dass zukünftige x86-Prozessoren so verbessert werden, dass effizientere Virtualisierung möglich wird.
Hersteller
x86-kompatible Prozessoren wurden von vielen Firmen entwickelt, hergestellt und verkauft, darunter:
- Intel
- AMD
- Chips and Technologies
- Cyrix
- IBM
- IDT
- National Semiconductor
- NEC
- NexGen
- Rise Technologies
- SGS-Thomson
- SiS
- Texas Instruments
- Transmeta
- UMC
- VIA
Siehe auch
Weblinks
- INTEL
- AMD
- VIA
- Transmeta
- sandpile.org - Umfangreiches Archiv für x86-bezogene Dokumentation
Kategorie:Mikroprozessor
