Table Of ContentMatthiasMenge
ModerneProzessorarchitekturen
Matthias Menge
Moderne
Prozessor-
architekturen
Prinzipien und ihre Realisierungen
Mit163Abbildungenund12Tabellen
123
Dr.-Ing.MatthiasMenge
TechnischeUniversitätBerlin
InstitutfürTechnischeInformatikundMikroelektronik
FakultätIV,ElektrotechnikundInformatik
Franklinstr.28/29
10587Berlin
Deutschland
[email protected]
BibliografischeInformationderDeutschenBibliothek
DieDeutscheBibliothekverzeichnetdiesePublikationinderDeutschenNationalbibliografie;
detailliertebibliografischeDatensindimInternetüberhttp://dnb.ddb.deabrufbar.
ISBN3-540-24390-9 1.Aufl.SpringerBerlinHeidelbergNewYork
DiesesWerkisturheberrechtlichgeschützt.DiedadurchbegründetenRechte,insbesonderedie
derÜbersetzung,desNachdrucks,desVortrags,derEntnahmevonAbbildungenundTabellen,
derFunksendung,derMikroverfilmungoderderVervielfältigungaufanderenWegenundder
SpeicherunginDatenverarbeitungsanlagen,bleiben,auchbeinurauszugsweiserVerwertung,
vorbehalten.EineVervielfältigungdiesesWerkesodervonTeilendiesesWerkesistauchim
EinzelfallnurindenGrenzendergesetzlichenBestimmungendesUrheberrechtsgesetzesder
BundesrepublikDeutschlandvom9.September1965inderjeweilsgeltendenFassungzulässig.Sie
istgrundsätzlichvergütungspflichtig.ZuwiderhandlungenunterliegendenStrafbestimmungen
desUrheberrechtsgesetzes.
SpringeristeinUnternehmenvonSpringerScience+BusinessMedia
springer.de
©Springer-VerlagBerlinHeidelberg2005
PrintedinTheNetherlands
DieWiedergabevonGebrauchsnamen,Handelsnamen,Warenbezeichnungenusw.indiesem
WerkberechtigtauchohnebesondereKennzeichnungnichtzuderAnnahme,daßsolcheNamen
imSinnederWarenzeichen-undMarkenschutz-Gesetzgebungalsfreizubetrachtenwärenund
dahervonjedermannbenutztwerdendürften.
SollteindiesemWerkdirektoderindirektaufGesetze,VorschriftenoderRichtlinien(z.B.DIN,
VDI,VDE)Bezuggenommenoderausihnenzitiertwordensein,sokannderVerlagkeineGewähr
fürdieRichtigkeit,VollständigkeitoderAktualitätübernehmen.Esempfiehltsich,gegebenenfalls
fürdieeigenenArbeitendievollständigenVorschriftenoderRichtlinieninderjeweilsgültigen
Fassunghinzuziehen.
Satz:DigitaleDruckvorlagedesAutors
Herstellung:LE-TEXJelonek,Schmidt&VöcklerGbR,Leipzig
Umschlaggestaltung:medionetAG,Berlin
GedrucktaufsäurefreiemPapier 7/3142/YL-543210
Für Carmen
Vorwort
Ein Prozessor verarbeitet Daten, indem er sie ausgehend von einem Initialzustand
schrittweise zustandsgesteuert transformiert. Die durchzuführenden Transformatio-
nen sind in den Befehlen des zu bearbeitenden Programms codiert. Sie werden
abhängig vom aktuellen Zustand des Prozessors ausgewählt, wobei der Prozessor
mit jedem Befehl in einen neuen Zustand wechselt. In dieser theoretischen Defini-
tion sind zahlreiche Anforderungen, die man an einen realen Prozessor stellt, nicht
mit einbezogen. So sollte ein Prozessor eine hohe Geschwindigkeit aufweisen,
wenig Kosten verursachen, einen geringen Leistungsbedarf haben usw. – Ansprü-
che, die oft im Widerspruch zueinander stehen.
Zum Beispiel ist ein schnell arbeitender Prozessor meist komplexer aufgebaut und
somit teurer zu realisieren als ein langsam arbeitender Prozessor, und zwar unabhän-
gig davon, ob die höhere Geschwindigkeit durch architektonische Verbesserungen
der Struktur oder durch technologische Verbesserungen in der Chip-Fertigung
erreicht wird. (Hierbei bleibt natürlich unberücksichtigt, dass die Einzelkosten eines
Prozessors von den Fertigungsstückzahlen abhängig sind, da Markteffekte dieser
Art die Entwicklung eines Prozessors schlecht planbar beeinflussen.)
Im Folgenden werden zahlreiche Konzepte moderner Prozessorarchitekturen
beschrieben, mit denen sich die oben genannten Anforderungen erreichen lassen.
Die Betrachtungen beziehen sich ausschließlich auf Komponenten, die man einem
Prozessor logisch zuordnen kann, unabhängig davon, ob sie in einem Chip integrier-
bar sind oder nicht. Die Speicherschnittstelle zwischen Prozessor und Außenwelt
bildet dabei die Grenze. Komponenten, die nicht eindeutig dem Prozessor oder der
Außenwelt zuzuordnen sind – z.B. die Speicherschnittstelle, die Caches und die
Speicherverwaltungseinheiten – werden nur bezüglich all jener Aspekte erläutert,
die für den Prozessor von Bedeutung sind. Insbesondere finden die verschiedenen
Bussysteme, Speicherbausteine und Peripheriekomponenten, die in modernen Rech-
nern zum Einsatz kommen, hier keine Berücksichtigung. Auch Techniken, wie das
für Multimastersysteme wichtige Bus-Snooping und das MESI-Protokoll werden im
Folgenden nicht oder nur andeutungsweise beschrieben. Interessierte Leser seien zu
diesen Themen auf [46] verwiesen.
Das vorliegende Buch versteht sich ausdrücklich nicht als eine Sammlung von
Beschreibungen verschiedener Prozessorarchitekturen. Es enthält vielmehr ausführ-
liche Erläuterungen der jeweils zum Einsatz kommenden Techniken. Dabei werden
moderne Prozessoren, wie z.B. der Pentium 4 von Intel, der Athlon 64 von AMD,
der Itanium 2 von Intel, der Alpha 21264 von Compaq, der PowerPC 970 von IBM
oder der ARM9 von ARM genauso berücksichtigt, wie ältere, für moderne Archi-
viii Vorwort
tekturen oft wegweisende Prozessoren bzw. Rechner, wie z.B. die CDC6600 von
Control Data, die Cray-1 von Cray, der Trace 7/300 von Multiflow, der Transputer
T9000 von Inmos oder der MC88110 von Motorola (insgesamt mehr als 90 unter-
schiedliche Prozessoren und Rechner).
Neben den in kommerziellen Prozessoren verwendeten Verfahren werden der Voll-
ständigkeit halber auch solche beschrieben, die in Forschungsprojekten entwickelt
wurden. Zu nennen sind vor allem die im Rahmen meiner Arbeit am Institut für
Technische Informatik und Mikroelektronik der TU Berlin konzipierten Prinzipien.
Sie kommen u.a. in den Prozessoren mit Nemesis-Architektur zum Einsatz: dem
Nemesis S (simple), einem einfachen zeitseqentiell arbeitenden Prozessor, dem
Nemesis C (classic), einem skalaren in Fließbandtechnik arbeitenden Prozessor
[114, 198] und dem Nemesis X (extended), einem komplexen operationsparallel
arbeitenden Prozessor [108]. Vollständig implementiert wurde bisher nur der Neme-
sis C, und zwar ursprünglich für ein sog. FPGA von Xilinx (field programmable
gate arrays, das sind frei programmierbare integrierte Schaltungen). Er besitzt, syn-
thetisiert für ein 0.13-Micron Gatearray von TSMC, die beachtliche Komplexität
von 1176521 Gatteräquivalenten und erreicht eine Taktfrequenz von 243 MHz.
Neben den Prozessoren mit Nemesis-Architektur wird der ebenfalls als Forschung-
projekt entwickelte Zen-1 diskutiert, der nach dem Prinzip des kontrollflussgesteu-
erten Datenflusses arbeitet und ausschließlich Transportoperationen verarbeitet. Das
darin verwirklichte Konzept wurde bereits Anfang der 90er Jahre an der TU Berlin
entworfen, konnte damals jedoch nur theoretisch untersucht werden. Seit kurzem
wird an einer Implementierung mit FPGAs gearbeitet [113].
Anmerkungen zu den verwendeten Begriffen
Die in diesem Buch verwendeten Begriffe sind, sofern dies sinnvoll erschien, ins
Deutsche übersetzt worden, wobei die gebräuchlicheren, meist englischsprachigen
Begriffe bei der jeweils ersten Verwendung in Klammern angegeben sind. In einigen
Fällen wurde auf eine Begriffsübersetzung auch verzichtet, nämlich dann, wenn ent-
weder der Originalbegriff im Deutschen gebräuchlich ist, wie z.B. „Cache“, die
Übersetzung sehr unhandlich gewesen wäre, wie z.B. „vielfädige Arbeitsweise“
statt „Multithreading“ oder der Begriff nicht mehr klar als solcher erkennbar gewe-
sen wäre, wie z.B. beim „Spurencache“ als Übersetzung des „Trace-Caches“.
Unabhängig hiervon wurde darauf geachtet, dass für einen bestimmten Sachverhalt
immer nur ein einzelner Begriff Verwendung findet. Zum Beispiel wird „Befehl“
nicht durch die Synonyme „Instruktion“ oder „Operation“ umschrieben. Tatsächlich
hat ein Befehl hier sogar eine andere Bedeutung als eine Operation: Ein Befehl ist
nämlich die von einem Prozessor verarbeitete Einheit, in der mehrere Operationen,
die parallel ausgeführt werden, codiert sein können. Selbstverständlich ist eine syn-
onyme Nutzung der Begriffe immer dann möglich, wenn in einem Befehl genau
1. Zum Vergleich: Der MC68000 von Motorola enthält lediglich 68000 Transistoren, entspre-
chend 17000 Gatteräquivalenten [168].
Vorwort ix
eine Operation codiert ist. Allerdings wird auch in einem solchen Fall vorausgesetzt,
dass ein Befehl prinzipiell mehrere Operationen enthalten kann.
Eine weitere Differenzierung, die erwähnt werden soll, betrifft die Begriffe „Haupt-
speicher“, „Datenspeicher“ und „Befehlsspeicher“. Prozessoren werden normaler-
weise danach unterschieden, ob sie eine sog. von-Neumann-Architektur mit einem
für Befehle und Daten gemeinsamen Hauptspeicher oder eine sog. Harvard-Archi-
tektur mit getrennten Befehls- und Datenspeichern besitzen [58]. Diese Differenzie-
rung hat historische Gründe und ergibt in modernen Prozessoren kaum Sinn. Tat-
sächlich wird in den meisten Hochleistungsprozessoren die Harvard-Architektur
verwendet, und zwar mit getrennten Caches für Befehle und Daten. Hierbei ist es,
zumindest für die Arbeitsgeschwindigkeit eines Prozessors, von geringer Bedeu-
tung, ob die Caches ihrerseits an getrennte Befehls- und Datenspeicher oder an
einen gemeinsamen Hauptspeicher gekoppelt sind. Aus Kostengründen findet
i.Allg. letzteres bevorzugt Verwendung, weshalb sich die aus Prozessor und Caches
bestehende Einheit als von-Neumann-Architektur klassifizieren lässt. Wegen des
hier aufgezeigten Interpretationsspielraums implizieren die Begriffe „Befehlsspei-
cher“ oder „Datenspeicher“ deshalb nicht, dass hier physikalisch getrennte Kompo-
nenten zum Einsatz kommen, sondern nur, dass sich die Zugriffe entweder auf
Befehle oder Daten beziehen, die jedoch in einem gemeinsamen Hauptspeicher
abgelegt sein dürfen.
Inhaltsübersicht
Im weiteren Verlauf der Arbeit werden zunächst alle die Programmierung eines Pro-
zessors betreffenden Aspekte beschrieben. Sie sind im sog. Programmiermodell
definiert, das selbst zwar keine Details technischer Umsetzungen beinhaltet, aber oft
Realisierungsgrundlage eines Prozessors ist. Im Einzelnen wird ausgeführt, wie sich
Daten codieren, speichern oder adressieren lassen, welche Befehle definiert sein
sollten, welche Informationen in den Befehlen enthalten sein müssen und wie man
sie codieren bzw. decodieren kann. Des Weiteren wird der Begriff des Betriebszu-
stands analysiert und erläutert, wie mit Unterbrechungen oder Ausnahmeanforde-
rungen zu verfahren ist, welche Arten von Kontextwechseln möglich sind und wie
sich die für einen Kontextwechsel benötigte Zeit kurz halten lässt. In diesem Zusam-
menhang werden u.a. auch die Organisationsformen von Registerspeichern disku-
tiert. Das als Grundlage angelegte Kapitel enthält nur wenige Details, die einem
Leser, der mit der Assemblerprogrammierung unterschiedlicher Prozessoren bereits
vertraut ist, nicht bekannt sein werden. Es lässt sich daher bei Bedarf überspringen.
Im darauf folgenden Kapitel 2 finden zunächst die Strukturen skalarer, sequentiell
arbeitender Prozessoren Berücksichtigung. Dabei werden alle wesentlichen Kompo-
nenten eines einfachen Prozessors, unter anderem auch die Mikroprogrammierung,
sowie die möglichen Varianten einer Implementierung, diskutiert. Die auf diese
Weise sukzessive entwickelte Prozessorstruktur dient in Abschnitt 2.2 als Grundlage
zum Entwurf eines einfachen Fließbandprozessors, wobei auch Lösungsmöglichkei-
ten für die mit dieser wichtigen Technik im Zusammenhang stehenden sog. Daten-
fluss- und Kontrollflusskonflikte aufgezeigt werden. Im Einzelnen sind dies bezo-
x Vorwort
gen auf Datenflusskonflikte das sog. Fließbandsperren (interlocking), die Verwen-
dung von Bypässen (bypassing) und die Wertvorhersage (value prediction) und
bezogen auf Kontrollflusskonflikte die Sprungvermeidung (predication), das Fließ-
bandsperren, die verzögerte Sprungausführung (delayed branch) sowie zahlreiche
Verfahren zur Sprungvorhersage (branch prediction) bzw. Sprungzielvorhersage
(branch target prediction). Das Kapitel schließt mit einer Erläuterung der Funktions-
weise von Caches und Speicherverwaltungseinheiten.
Während sich Kapitel 2 mit Prozessoren beschäftigt, die pro Takt eine Operation
starten bzw. beenden können, stellt Kapitel 3 Architekturen vor, die in der Lage
sind, pro Takt mehrere Operationen parallel auszuführen. Zunächst werden in
Abschnitt 3.1 Konzepte beschrieben, bei denen die parallel auszuführenden Operati-
onen statisch in den Befehlen codiert sind, wie z.B. in Multimedia-Einheiten, Feld-
rechnern, Vektor-, Signal- und VLIW-Prozessoren sowie den bereits erwähnten Pro-
zessoren mit kontrollflussgesteuertem Datenfluss. Es folgen in Abschnitt 3.2 Aus-
führungen zu sog. superskalaren und superspekulativen Prozessoren, die einen
sequentiellen Befehlsstrom dynamisch parallelisieren. Dabei wird unter anderem
das sog. Scoreboarding, die Funktionsweise von Reservierungseinheiten, Reorder-
Buffern und Trace-Caches beschrieben. Das Kapitel endet mit Erläuterungen zu
Verfahren, mit denen sich Befehlsfolgen quasiparallel ausführen lassen, dem sog.
Multithreading (auch Hyperthreading genannt).
Das sich anschließende Kapitel 4 behandelt im Hardware-Software-Codesign reali-
sierte Prozessoren (wie z.B. dem Efficeon von Transmeta). Zunächst werden dort
Techniken zur programmierten Implementierung sog. virtueller Prozessoren
beschrieben. Im einzelnen sind dies die Interpretation, die Laufzeittransformation
und die Laufzeitübersetzung. Des Weiteren kommt ein im Rahmen dieser Arbeit
entwickeltes Klassifikationssystem zur Sprache, mit dem sich bestehende oder neu
entwickelte virtuelle Prozessoren bewerten lassen. In Abschnitt 4.2 folgen Ausfüh-
rungen zur sog. dynamischen Binärübersetzung (dynamic binary translation), einem
Verfahren, das zwar ebenfalls in virtuellen Prozessoren Verwendung findet, hier
jedoch vor allem wegen der Bedeutung in im Hardware-Software-Codesign ver-
wirklichten Prozessoren beschrieben wird. Das Kapitel schließt mit Erläuterungen
zur sog. Prozessorabstraktionsschicht (processor abstraction layer), bei der eine
Software-Schicht zwischen Prozessor und Betriebssystem dafür sorgt, dass man
Änderungen der Hardware nicht im Betriebssystem berücksichtigen muss.
Der Anhang A dient der exemplarischen Vermittlung konkreter Definitionen, die
Grundlage einer Prozessorarchitektur sind. In gekürzter Form ist dort eine Beschrei-
bung des vollständigen Programmiermodells der in diesem Buch oft zitierten Pro-
zessorarchitektur Nemesis enthalten. Nach einer Einführung, in der u.a. auch die
drei Umsetzungsvarianten Nemesis S, Nemesis C und Nemesis X diskutiert werden,
folgen Beschreibungen zu den verfügbaren Arbeitsregistern, den Spezialregistern,
den Adressierungsarten, den Befehlen sowie den Schnittstellen zu den Funktionen
der zur Prozessorarchitektur definierten Prozessorabstraktionsschicht.
Vorwort xi
Danksagung
Ich möchte mich an dieser Stelle bei allen bedanken, die mich bei der Ausarbeitung
dieses Buches unterstützt haben. Zu nennen sind Prof. Dr.-Ing. Hans-Ulrich Post,
Prof. Dr.-Ing. Reinhold Orglmeister, Prof. Dr.-Ing. Klaus Waldschmidt, besonders
aber Prof. Dr.-Ing Hans Liebig, die sich die Zeit nahmen, mein Werk zu begutachten
und mir viele Hinweise zum Inhalt und zur Form der Monographie gaben. Ich hoffe,
es hat ihnen nicht zu viele Mühen bereitet. Unterstützt wurde ich auch von meinen
Kollegen Dr.-Ing. Thomas Flik und Dr.-Ing. Carsten Gremzow, die mir mit wertvol-
len inhaltlichen Diskussionen zur Seite standen. Vor allem jedoch meinem Kollegen
Till Neunast dürfte ich Nerven gekostet haben. Er hatte das Pech, mit mir ein Zim-
mer zu teilen und wurde deshalb häufig in fachliche Dispute verwickelt. Einige Bil-
der verdanken ihm ihren letzten Schliff.
Für die moralische Unterstützung danke ich vor allem meiner Freitagsgruppe Uncle
Fester, Butch und John Doe, ohne deren Mithilfe einige Simulationen nicht hätten
durchgeführt werden können. Schließlich möchte ich mich noch bei meiner gesam-
ten Familie, besonders bei meiner Ehefrau Carmen Menge für die Geduld und das
Verständnis bedanken, das sie mir entgegengebracht haben.
Berlin, den 26.12.2004
Inhaltsverzeichnis
1 Programmiermodell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1
1.1 Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1
1.1.1 Binärziffern (Bits) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2
1.1.2 Vorzeichenlose Dualzahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2
1.1.3 Zweierkomplementzahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3
1.1.4 Binärcodierte Festkommazahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . .5
1.1.5 Gleitkommazahlen (floating point numbers). . . . . . . . . . . . . . . . . . .6
1.1.6 Binärcodierte Dezimalzahlen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8
1.1.7 Bedingungscode (condition code) . . . . . . . . . . . . . . . . . . . . . . . . . . .9
1.2 Adressen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14
1.2.1 Byteordnung (byte ordering) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15
1.2.2 Ausrichtung (alignment) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18
1.2.3 Adressierungsarten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19
1.3 Befehle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29
1.3.1 Operationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30
1.3.2 Operanden und Ergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33
1.3.3 Befehlssätze. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44
1.3.4 Befehlscodierungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46
1.4 Zustände . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49
1.4.1 Ausnahmebehandlung (exceptions, interrupts) . . . . . . . . . . . . . . . .50
1.4.2 Kontextwechsel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
1.4.3 Betriebsmodi (Privilegebenen) . . . . . . . . . . . . . . . . . . . . . . . . . . . .60
2 Skalare Prozessoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63
2.1 Streng sequentiell arbeitende Prozessoren . . . . . . . . . . . . . . . . . . . . . . . . .63
2.1.1 Theoretische Betrachtungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64
2.1.2 Grundstruktur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
2.1.3 Speicherung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68
2.1.4 Datenadressierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
2.1.5 Befehlsadressierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71
2.1.6 Datenwerke und Datenregister. . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
2.1.7 Befehlsdecoder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77