Eine prozessorexterne Architektur oder Befehlssatzarchitektur ( ISA , englisch Architecture Instruction Set ) oder einfach Architektur (Prozessor) ist die funktionale Spezifikation eines Prozessors aus der Sicht der Programmierer-Sprachmaschine. Die Architektur umfasst insbesondere die Daten eines Befehlssatzes , eines für den Programmierer sichtbaren Registersatzes , einer Organisation des Speichers und der Ein- und Ausgänge, die Modalitäten einer möglichen Mehrprozessorunterstützung usw.
Der hier verwendete Begriff extern ermöglicht eine klare Abgrenzung von Mikroarchitektur oder interner Architektur , die sich mit der praktischen Umsetzung des von einer externen Architektur vorgegebenen Verhaltens beschäftigt. Eine gegebene externe Architektur kann in Form mehrerer Mikroarchitekturen implementiert werden.
Eine prozessorexterne Architektur ist das Modell des Prozessoräußeren, also vom Programmierer in Maschinensprache , dem Compiler oder dem Kern des Betriebssystems . Dies ist die Schnittstelle zwischen Hardware und Software.
Diese Schnittstelle kann in verschiedenen Prozessoren implementiert werden. Die praktische Organisation dieser wird als Mikroarchitektur oder interne Architektur bezeichnet . Im Gegensatz zu einer Architektur, die dem vom Programmierer gesehenen Modell der Maschine entspricht, sind die Besonderheiten einer Mikroarchitektur für diesen unsichtbar. Beispielsweise kann die Mikroarchitektur die Existenz von Caches , die Umbenennung von Registern , Pipelines , Verzweigungsvorhersage usw. spezifizieren . Eine Mikroarchitektur kann dann zu einer oder mehreren materiellen Realisierungen führen.
Zusammenfassend unterscheidet Andrew Tanenbaum drei Hardware-Ebenen in einem Computer:
Beispiel (fiktiv):
Für eine gegebene Architektur kann es mehrere Mikroarchitekturen geben, und eine gegebene Mikroarchitektur kann als Grundlage für mehrere Realisierungen dienen. Zum Beispiel war die System 360- Architektur von IBM von Anfang an in fünf verschiedenen Mikroarchitekturen verfügbar, die natürlich unterschiedliche Leistungen und unterschiedliche Kosten aufwiesen (die obige Nomenklatur wurde außerdem im Rahmen der Definition dieser Architektur verfeinert). Bei Intel hat die IA-32- Architektur , die zuerst im 80386 implementiert wurde , sehr unterschiedliche nachfolgende Implementierungen: Zum Beispiel führte der Pentium eine Pipeline-Mikroarchitektur vom Superskalartyp mit Verzweigungsvorhersage ein . Darüber hinaus wurde die IA-32-Architektur von anderen Gründern, insbesondere AMD, implementiert .
Natürlich sind die Wechselwirkungen zwischen den drei Ebenen komplex. Konstruktionsbeschränkungen schränken die Auswahl der Mikroarchitektur ein, und der Wunsch, eine bestimmte Mikroarchitektur auswählen zu können, beeinflusst die Definition der Architektur. Wenn die Vorteile der Kompatibilität dazu zwingen, die Architektur konstant zu halten, drängt der Wunsch nach einer Mikroarchitektur und einer effizienten Realisierung zu einer Evolution, entweder durch kompatible Erweiterung (zum Beispiel Hinzufügen von Befehlen), oder durch die Angabe von Fuzzy-Zonen oder sogar durch das Ungültigmachen von was früher erlaubt war.
In den meisten Architekturen, zu manipulieren Programme Arbeitsregister . Diese sind somit die Basis der Architektur. Der Prozessor kann jedoch andere interne Register enthalten, die für den Programmierer nicht sichtbar sind: Diese sind nicht Teil der Architektur.
Der Zugriff auf die Daten im Speicher erfolgt nach einer bestimmten Anzahl von Adressierungsmodi, die auf Architekturebene spezifiziert sind. Letzteres definiert außerdem die logische Sichtweise der Programme auf den Speicher und die Art und Weise, wie die Verknüpfung mit dem physikalischen Speicher erfolgt. Ebenso werden die Modalitäten des Zugriffs auf die Ein -Ausgänge festgelegt : spezialisierte Register (dies ist häufig bei Mikrocontrollern der Fall), bestimmter Speicherplatz (in diesem Fall sind die Adressierungsmodi oft kleiner als in normalen Speicherbereichen), spezifische Adressen in den normaler Speicherplatz. Die Arten der vom Prozessor verarbeiteten Daten müssen angegeben werden.
Die Register, der Speicher und die I / O werden durch die Handhabung Maschine Anweisungen der Programme. Der Befehlssatz ist daher ein wesentliches Element der Architektur: Er spezifiziert sehr genau das Verhalten jedes Maschinenbefehls.
Eine Architektur definiert, wie Fehler oder Ausnahmen behandelt werden.
Bei einer Architektur, die den Multiprozessor unterstützt , muss festgelegt werden, wie die verschiedenen Prozessoren kommunizieren und sich synchronisieren.
Im Idealfall kann man sich vorstellen, dass die verschiedenen Caches, die ein Prozessor integrieren kann ( Cache-Speicher , TLB usw.), für den Programmierer transparent sein könnten, also außerhalb des Rahmens der externen Architektur. Es ist jedoch meistens erforderlich, dass Programme (normalerweise das Betriebssystem) mit Caches interagieren (z. B. um TLB-Einträge bei Bedarf ungültig zu machen). Die externe Architektur beschreibt dann die Rolle und die Schnittstelle dieser Caches.
Eine CISC- Architektur bietet viele Adressierungsmodi, von denen einige oft komplex sind. Der Befehlssatz enthält oft viele komplexe Befehle, die in mehreren Zyklen ausgeführt werden.
Beispiele: x86 erweitert auf IA-32 , selbst erweitert auf x64 ; Motorola 680x0 .
Eine RISC- Architektur bietet einen relativ kleinen Befehlssatz. Jeder dieser Befehle soll in einem einzigen Zyklus ausgeführt werden. Die Adressierungsmodi sind einfacher als in einer CISC-Architektur. Die Architektur bietet im Allgemeinen eine große Anzahl von allgemeinen Registern. Diese Eigenschaften fördern die optimale Nutzung der Pipeline auf Mikroarchitekturebene.
Beispiele: SPARC , POWER , PowerPC , MIPS und ARM .
Dieses Konzept legt einen Teil der Verwaltung der Pipeline auf den Compiler: Der Prozessor empfängt lange Befehle, die mehrere relativ einfachere Befehle zusammenfassen.
Während herkömmliche Prozessorbefehle jeweils eine Zahl (einen Skalar) verarbeiten, können Vektorprozessorbefehle mit Vektoren arbeiten.
Beispiele: Cray- Maschinen .
Um die Leistung bei der Vektorberechnung (verbunden mit der linearen Algebra ) traditioneller Prozessoren zu verbessern , können wir ihrer Basisarchitektur eine Einheit für die SIMD- Verarbeitung hinzufügen , die Berechnungen an mehreren Daten in einem einzigen Befehl durchführt.
Diese Art von Recheneinheit war eine kostengünstige Version der Vektorprozessoren, die auf Superrechnern wie dem Cray verwendet wurden . Diese Ökonomie war in den 1990er Jahren relevant, wir sehen jedoch das Wiederauftauchen von Vektorprozessoren , beispielsweise in der RISC-V- Architektur . In einem Vektorprozessor erhält die Recheneinheit Anweisungen, die an den Daten auszuführen sind, und eine Datentabelle, die mit diesen Anweisungen durchlaufen werden soll, diese werden dann auf lineare Weise ausgeführt.