Anweisungsset Architektur

Im Informatik, ein Anweisungsset Architektur (IST EIN), auch genannt Rechnerarchitektur, ist ein Zusammenfassung Modell von a Computer. Ein Gerät, das Anweisungen ausführt, die von diesem ISA beschrieben werden, wie z. Zentrale Verarbeitungseinheit (CPU), wird als eine genannt Implementierung.

Im Allgemeinen definiert ein ISA die unterstützten Anweisungen, Datentypen, Register, der Hardware -Support für die Verwaltung Haupterinnerung, grundlegende Merkmale (wie die Speicherkonsistenz, Adressierungsmodi, virtueller Speicher), und die Input-Output Modell einer Familie von Implementierungen der ISA.

Eine ISA gibt das Verhalten von an Maschinensprache Ausführen von Implementierungen dieser ISA in einer Weise, die nicht von den Merkmalen dieser Implementierung abhängt, sorgt binäre Kompatibilität zwischen Implementierungen. Dies ermöglicht mehrere Implementierungen eines ISA, die sich in Merkmalen unterscheiden, wie z. Leistung, physikalische Größe und Geldkosten (unter anderem), aber die in der Lage sind, denselben Maschinencode auszuführen, so dass eine niedrigere, niedrigere kostengünstige Maschine durch eine höhere kostengünstigere, höhere Performance-Maschine ersetzt werden kann, ohne zu haben Software ersetzen. Es ermöglicht auch die Entwicklung der Mikroarchitekturen von den Implementierungen dieser ISA, so dass eine neuere, höhere Performance-Implementierung einer ISA-Software, die an früheren Generationen von Implementierungen ausgeführt wird, ausführen kann.

Wenn ein Betriebssystem behält einen Standard und kompatibel Anwendung Binärschnittstelle (ABI) Für einen bestimmten ISA wird der Maschinencode auf zukünftigen Implementierungen dieses ISA und des Betriebssystems ausgeführt. Wenn ein ISA jedoch die Ausführung mehrerer Betriebssysteme unterstützt, garantiert sie nicht, dass der Maschinencode für ein Betriebssystem auf einem anderen Betriebssystem ausgeführt wird, es sei denn, das erste Betriebssystem unterstützt den für das anderen Betriebssystem erstellten laufenden Maschinencode.

Eine ISA kann erweitert werden, indem Anweisungen oder andere Funktionen hinzugefügt oder größere Adressen und Datenwerte hinzugefügt werden. Eine Implementierung des erweiterten ISA kann weiterhin den Maschinencode für Versionen des ISA ohne diese Erweiterungen ausführen. Der Maschinencode mit diesen Erweiterungen wird nur auf Implementierungen ausgeführt, die diese Erweiterungen unterstützen.

Die binäre Kompatibilität, die sie anbieten, macht ISAS zu einer der grundlegendsten Abstraktionen in Computer.

Überblick

Eine Anweisungsarchitektur unterscheidet sich von a Mikroarchitektur, was der Satz von ist Prozessordesign Techniken, die in einem bestimmten Prozessor verwendet wurden, um den Befehlssatz zu implementieren. Prozessoren mit unterschiedlichen Mikroarchitekturen können einen gemeinsamen Anweisungssatz teilen. Zum Beispiel die Intel Pentium und die AMD Athlon Implementieren Sie nahezu identische Versionen der x86 Anweisungssatz, aber sie haben radikal unterschiedliche interne Designs.

Das Konzept eines die Architektur, unterscheidet sich vom Design einer bestimmten Maschine, wurde von entwickelt von Fred Brooks bei IBM während der Entwurfsphase von System/360.

Vor NPL [System/360] konnten die Computerdesigner des Unternehmens nicht nur Kostenziele ehren, indem sie Technologien, sondern auch durch die Herstellung funktionaler und architektonischer Verfeinerungen ausgewählt hatten. Das Ziel der Spread -Kompatibilität im Gegensatz dazu postulierte eine einzige Architektur für eine Reihe von fünf Prozessoren, die eine Vielzahl von Kosten und Leistung erstrecken. Keines der fünf Ingenieurdesignteams konnte darauf abzielen, Anpassungen der architektonischen Spezifikationen herbeizuführen, um Schwierigkeiten bei der Erreichung von Kosten- und Leistungszielen zu lindern.[1]: S.137

Etwas virtuelle Maschinen diese Unterstützung Bytecode als ihre ISA wie wie Smalltalk, das Java virtuelle Maschine, und Microsoft's Gemeinsame SprachlaufzeitImplementieren Sie dies, indem Sie den Bytecode für häufig verwendete Codepfade in nativen Maschinencode übersetzen. Darüber hinaus führen diese virtuellen Maschinen weniger häufig verwendete Codepfade durch Interpretation aus (siehe: Just-in-Time-Zusammenstellung). Transmeta implementierte den X86 -Befehlssatz auf ANOP VLIW Prozessoren auf diese Weise.

Klassifizierung von ISAs

Eine ISA kann auf verschiedene Arten klassifiziert werden. Eine gemeinsame Klassifizierung ist die Architektur Komplexität. EIN Komplexer Befehlssatz Computer (CISC) hat viele spezielle Anweisungen, von denen einige nur in praktischen Programmen nur selten verwendet werden können. EIN Reduzierter Befehlssatz Computer (RISC) vereinfacht den Prozessor, indem sie nur die Anweisungen, die häufig in Programmen verwendet werden, effizient implementiert werden, während die weniger verbreiteten Vorgänge als Unterprogramme implementiert werden, wobei die resultierende zusätzliche Prozessorausführungszeit durch seltene Nutzung ausgesetzt sind.[2]

Andere Typen sind Sehr langes Unterrichtswort (VLIW) Architekturen und eng verwandte Langes Anweisungswort (Liw) und explizit parallele Anweisungsrechnung (Epische) Architekturen. Diese Architekturen versuchen zu nutzen Parallelität auf Befehlsebene mit weniger Hardware als RISC und CISC, indem Sie das machen Compiler Verantwortlich für die Anweisungsprobleme und -planung.

Architekturen mit noch weniger Komplexität wurden untersucht, wie die Minimaler Befehlssatz Computer (Misc) und Ein-Instruktions-Computer (OISC). Dies sind theoretisch wichtige Typen, wurden aber nicht kommerzialisiert.

Anweisungen

Maschinensprache ist aus diskreter gebaut Aussagen oder Anweisungen. Auf der Verarbeitungsarchitektur kann eine bestimmte Anweisung angegeben:

  • OPCODE (der Anweisungen, der ausgeführt wird), z. hinzufügen, kopieren, testen
  • Alle explizite Operanden:
Register
wörtliche/konstante Werte
Adressierungsmodi Wird verwendet, um auf Speicher zuzugreifen

Komplexere Operationen werden durch Kombinieren dieser einfachen Anweisungen aufgebaut Steuerfluss Anweisungen.

Anweisungstypen

Beispiele für Operationen, die vielen Anweisungssätzen gemeinsam sind, umfassen:

Datenhandhabung und Speichervorgänge

  • Satz a registrieren zu einem festen konstanten Wert.
  • Kopieren Daten von einem Speicherort oder einem Register zu einem Speicherort oder einem Register (eine Maschinenbefeinigung wird häufig aufgerufen Bewegung; Der Begriff ist jedoch irreführend). Sie werden verwendet, um den Inhalt eines Registers, den Inhalt eines anderen Speicherorts oder das Ergebnis einer Berechnung zu speichern, oder um gespeicherte Daten abzurufen, um eine Berechnung später durchzuführen. Sie werden oft genannt Laden und speichern Operationen.
  • Lesen und schreiben Daten von Hardware -Geräten.

Arithmetische und logische Operationen

  • Hinzufügen, subtrahieren, multiplizieren, oder teilen Die Werte von zwei Registern, die das Ergebnis in ein Register platzieren und möglicherweise einen oder mehrere festlegen Bedingungscodes in einem Statusregister.
    • Zuwachs, Abnahme In einigen ISAs wird das Sparen von Operanden in trivialen Fällen eingewechselt.
  • Ausführen Bitgewise Operations, z. B. das nehmen die Verbindung und disjunktion von entsprechenden Bits in zwei Registern, die das nehmen Negation von jedem Bit in einem Register.
  • Vergleichen Zwei Werte in Registern (z. B. um festzustellen, ob man weniger ist oder ob sie gleich sind).
  • Schwebende Punktanweisungs für Arithmetik auf Gleitkomma-Zahlen.

Steuerflussvorgänge

  • Zweig zu einem anderen Ort im Programm und führen Sie dort Anweisungen aus.
  • Bedingt Verzweigung zu einem anderen Ort, wenn eine bestimmte Bedingung gilt.
  • Indirekt Zweig zu einem anderen Ort.
  • Anruf Ein weiterer Codeblock, während er den Ort der nächsten Anweisung als Punkt speichert.

Coprozessoranweisungen

  • Laden/Speichern Sie Daten in und von einem Koprozessor oder austauschen Sie mit CPU -Registern.
  • Koprozessoroperationen durchführen.

Komplexe Anweisungen

Prozessoren können "komplexe" Anweisungen in ihren Anweisungssatz einbeziehen. Eine einzelne "komplexe" Anweisung erledigt etwas, das viele Anweisungen auf anderen Computern enthält. Solche Anweisungen sind Typifiziert Nach Anweisungen, die mehrere Schritte ausführen, mehrere Funktionseinheiten steuern oder auf andere Weise in größerem Maßstab erscheinen als der Großteil einfacher Anweisungen, die vom angegebenen Prozessor implementiert werden. Einige Beispiele für "komplexe" Anweisungen sind:

Komplexe Anweisungen sind in CISC -Anweisungssätzen häufiger als in RISC -Anweisungssätzen, aber auch RISC -Anweisungssätze umfassen sie. Die RISC -Befehlssätze enthalten im Allgemeinen keine ALU -Operationen mit Speicheroperanden oder Anweisungen zum Verschieben großer Speicherblöcke. Die meisten RISC -Befehlssätze enthalten jedoch enthalten Simd oder Vektor Anweisungen, die gleichzeitig den gleichen arithmetischen Betrieb für mehrere Datenstücke ausführen. SIMD -Anweisungen können große Vektoren und Matrizen in minimaler Zeit manipulieren. SIMD -Anweisungen ermöglichen es einfach Parallelisierung von Algorithmen, die üblicherweise an Klang, Bild und Videoverarbeitung beteiligt sind. Verschiedene SIMD -Implementierungen wurden unter Handelsnamen auf den Markt gebracht, wie z. MMX, 3dnow!, und Altivec.

Anweisungscodierung

Eine Anweisung kann mehrere Felder enthalten, die den logischen Betrieb identifizieren und auch Quell- und Zieladressen und konstante Werte enthalten. Dies ist die MIPS -Anweisung "Sofortige" Anweisung, die die Auswahl von Quell- und Zielregistern und Einbeziehung einer kleinen Konstante ermöglicht.

Auf traditionellen Architekturen beinhaltet eine Anweisung eine Opcode Das gibt den Vorgang an, wie z. B. Fügen Sie den Speicherinhalt hinzu, um sich zu registrieren- und null oder mehr Operand Spezifizierer, die angeben können Register, Speicherorte oder wörtliche Daten. Die Operand -Spezifizierer können haben Adressierungsmodi Bestimmung ihrer Bedeutung oder in festen Feldern sein. Im Sehr langes Unterrichtswort (VLIW) Architekturen, zu denen viele gehören Mikrocode Architekturen, mehrere gleichzeitige Opcodes und Operanden werden in einer einzigen Anweisung angegeben.

Einige exotische Anweisungssätze haben kein Opcode -Feld, wie z. Transport ausgelöste Architekturen (TTA), nur Operanden (en).

Die meisten Stapelmaschinen haben "0-Operand"Anweisungssätze, in denen arithmetische und logische Operationen keine Operandenspezifiziererfelder; nur Anweisungen, die Operanden auf den Bewertungsstapel schieben, die Popopands vom Stapel in Variablen Operandenspezifizierer haben. Der Befehlssatz führt die meisten ALU -Aktionen mit Postfix (Postfix (Postfix) aus ((Postfix) (postfix ().Polnische Notation umgekehrt) Operationen, die nur für den Ausdruck funktionieren Stapel, nicht zu Datenregistern oder willkürlichen Hauptgedächtniszellen. Dies kann sehr bequem sein, um hochrangige Sprachen zusammenzustellen, da die meisten arithmetischen Ausdrücke leicht in Postfix-Notation übersetzt werden können.[3]

Bedingte Anweisungen haben häufig ein Prädikatfeld - nur wenige Bits, die den spezifischen Zustand codieren, um eine Operation zu veranlassen, eher ausgeführt als nicht auszuführen. Beispielsweise überträgt eine bedingte Zweiganweisung die Kontrolle, wenn die Bedingung wahr ist, sodass die Ausführung zu einem anderen Teil des Programms verläuft und nicht überträgt, ob die Bedingung falsch ist, sodass die Ausführung nacheinander fortgesetzt wird. Einige Anweisungssätze haben auch bedingte Bewegungen, sodass der Umzug ausgeführt wird und die Daten, die im Zielort gespeichert sind, wenn die Bedingung wahr ist und nicht ausgeführt wird, und der Zielort nicht geändert wird, wenn die Bedingung falsch ist. In ähnlicher Weise IBM Z/Architektur hat einen bedingten Speicheranweis. Einige Anweisungssätze enthalten in jeder Anweisung ein Prädikatfeld. das nennt man Branchenprädikation.

Anzahl der Operanden

Anweisungssätze können nach der maximalen Anzahl von Operanden kategorisiert werden ausdrücklich in Anweisungen angegeben.

(In den folgenden Beispielen, a, b, und c sind (direkt oder berechnet) Adressen, die sich auf Gedächtniszellen beziehen, während Reg1 und so auf Verweisen auf Maschinenregister.)

C = a+b
  • 0-operand (Maschinen mit Nulladresse), sogenannt Stapelmaschinen: Alle arithmetischen Operationen finden unter Verwendung der oberen oder zwei Positionen auf dem Stapel statt: pushen a, Push b, hinzufügen, Pop c.
    • C = a+b Bedürfnisse vier Anweisungen. Für Stack-Maschinen gelten die Begriffe "0-Operand" und "Zero-Address" für arithmetische Anweisungen, jedoch nicht für alle Anweisungen, da 1-Operand-Push- und Pop-Anweisungen zum Zugriff auf Speicher verwendet werden.
  • 1-Operand (Einadressemaschinen), sogenannt AkkumulatormaschinenFügen Sie frühe Computer und viele kleine zu Mikrocontroller: Die meisten Anweisungen geben einen einzelnen rechten Operanden an (dh konstant, ein Register oder einen Speicherort) mit dem impliziten Akkumulator als linker Operanden (und das Ziel, wenn es einen gibt): Laden a, hinzufügen b, Geschäft c.
    • C = a+b Bedürfnisse Drei Anweisungen.
  • 2-Operand-Viele CISC- und RISC-Maschinen fallen unter diese Kategorie:
    • CISC - bewegen a zu C; dann hinzufügen b zu C.
      • C = a+b Bedürfnisse zwei Anweisungen. Dies "speichert" das Ergebnis ohne explizit Laden Anweisung.
    • CISC - oft sind Maschinen auf einen Speicheroperanden begrenzt pro Anweisung: Last a, reg1; hinzufügen B, Reg1; Speicherreg1, C.; Dies erfordert ein Last-/Speicherpaar für jede Speicherbewegung, unabhängig davon, ob die hinzufügen Ergebnis ist eine Augmentation, die an einem anderen Ort gespeichert ist, wie in C = a+boder der gleiche Speicherort: A = a+b.
      • C = a+b Bedürfnisse Drei Anweisungen.
    • RISC - Die Anweisungen würden ausdrückliche Speicherlasten benötigen: Last a, reg1; Last B, Reg2; Fügen Sie Reg1, Reg2 hinzu; Speicherreg2, C..
      • C = a+b Bedürfnisse vier Anweisungen.
  • 3-Operand, um eine bessere Wiederverwendung von Daten zu ermöglichen:[4]
    • CISC - Es wird entweder zu einer einzigen Anweisung: hinzufügen a, b, c
      • C = a+b Bedürfnisse eine Anweisung.
    • CISC - oder auf Maschinen, die auf zwei Speicheroperanden pro Anweisung beschränkt sind, bewegen a, reg1; Fügen Sie Reg1, B, C hinzu;
      • C = a+b Bedürfnisse zwei Anweisungen.
    • RISC-Arithmetische Anweisungen verwenden nur Register, sodass explizite 2-Operand-Last-/Speicheranweisungen erforderlich sind: Last a, reg1; Last B, Reg2; Fügen Sie Reg1+Reg2-> Reg3 hinzu; Speicherreg3, C.;
      • C = a+b Bedürfnisse vier Anweisungen.
      • Im Gegensatz zu 2-Operand oder 1-Operand bleibt alle drei Werte A, B und C in Registern zur weiteren Wiederverwendung zur Verfügung.[4]
  • Mehr Operanden - Einige CISC -Maschinen ermöglichen eine Vielzahl von Adressierungsmodi, die mehr als 3 Operanden (Register oder Speicherzugriff) ermöglichen, wie die Vax "Poly" Polynombewertungsanweisung.

Aufgrund der großen Anzahl von Bits, die zur Encodierung der drei Register einer 3-Operand-Anweisung erforderlich sind, sind RISC-Architekturen mit 16-Bit-Anweisungen ausnahmslos 2-Operand-Designs wie der Atmel AVR, Ti Msp430und einige Versionen von Armstaum. RISC-Architekturen mit 32-Bit-Anweisungen sind normalerweise 3-Operand-Designs wie die ARM, AVR32, MIPS, Macht ISA, und Sparc Architekturen.

Jede Anweisung gibt eine Reihe von Operanden an (Register, Speicherorte oder unmittelbare Werte) ausdrücklich. Einige Anweisungen geben einem oder beiden Operanden implizit Stapel oder in einem impliziten Register. Wenn einige der Operanden implizit verabreicht werden, müssen in der Anweisung weniger Operanden angegeben werden. Wenn ein "Zieloperand" das Ziel ausdrücklich angibt, muss ein zusätzlicher Operand geliefert werden. Folglich kann die Anzahl der in einer Anweisung codierten Operanden von der mathematisch erforderlichen Anzahl von Argumenten für eine logische oder arithmetische Operation abweichen (die Arity). Operanden werden entweder in der "Opcode" -Darstellung der Anweisung codiert oder als Werte oder Adressen nach dem Opcode angegeben.

Druck unterscheiden

Druck unterscheiden misst die Verfügbarkeit kostenloser Register zu jedem Zeitpunkt während der Programmausführung. Der Druckdruck ist hoch, wenn eine große Anzahl der verfügbaren Register verwendet wird. Je höher der Registerdruck ist, desto häufiger muss der Registerinhalt sein verschüttet in Erinnerung. Die Erhöhung der Anzahl der Register in einer Architektur verringert den Registerkard Druck, erhöht jedoch die Kosten.[5]

Während eingebettete Anweisungssätze wie z. Daumen leiden unter extrem hohem Registerdruck, da sie kleine Register-Sets haben, allgemeine RISC-ISAs mögen MIPS und Alpha Genießen Sie niedrigen Registerdruck. CISC-ISAs wie X86-64 bieten trotz kleinerer Register-Sets niedrigem Registerdruck. Dies ist auf die vielen Adressierungsmodi und Optimierungen zurückzuführen (z.[6]

Anweisungslänge

Die Größe oder Länge eines Anweisungen variiert stark von nur vier Bits in einigen Mikrocontroller zu vielen hundert Bits in einigen VLIW Systeme. Prozessoren verwendet in persönliche Computer, Mainframes, und Supercomputer Mindestanweisungsgrößen zwischen 8 und 64 Bit (und für RISC üblich, dass alle Anweisungen genau 32 Bit betragen). Die längstmögliche Anweisung für x86 beträgt 15 Bytes (120 Bit).[7] Innerhalb eines Anweisungssatzes können unterschiedliche Anweisungen unterschiedliche Längen haben. In einigen Architekturen, insbesondere am meisten Reduzierende Befehlsbilder Computer (RISC), Anweisungen sind eine feste Länge, normalerweise entsprechend der dieser Architektur Wortgröße. In anderen Architekturen haben Anweisungen variable Längetypischerweise integrale Vielfachen von a Byte oder ein Halbwort. Einige, wie die ARM mit Daumenverwalter haben gemischt Variable Codierung, dh zwei feste, normalerweise 32-Bit- und 16-Bit-Codierungen, wobei Anweisungen nicht frei gemischt werden können, sondern müssen zwischen einem Zweig (oder einer Ausnahmeregrandgrenze in ARMV8) umgestellt werden.

Ein RISC -Befehlssatz hat normalerweise eine feste Anweisungslänge (häufig 4 Bytes = 32 Bit), während ein typischer CISC -Befehlssatz möglicherweise Anweisungen zu einer sehr unterschiedlichen Länge (1 bis 15 Bytes für x86) enthalten kann. Anweisungen mit fester Länge sind aus mehreren Gründen weniger kompliziert als Anweisungen mit variabler Länge (nicht zu überprüfen, ob eine Anweisung eine Cache-Zeile oder eine virtuelle Speicherseite Grenze überspannt,[4] zum Beispiel) und sind daher etwas einfacher für Geschwindigkeit zu optimieren.

Codedichte

In den frühen 1960er Jahren war der Hauptspeicher teuer und sehr begrenzt, selbst bei Mainframes. Das Minimieren der Größe eines Programms, um sicherzustellen, dass es in den begrenzten Speicher passt, war oft zentral. Somit die Größe der Anweisungen, die zur Ausführung einer bestimmten Aufgabe erforderlich sind, die, die Codedichtewar ein wichtiges Merkmal für jeden Unterrichtssatz. Es blieb für die anfänglichen Erinnerungen an Minicomputer und dann für Mikroprozessoren wichtig. Die Dichte bleibt heute wichtig, für Smartphone -Anwendungen, Anwendungen, die in Browsern über langsame Internetverbindungen und in ROMS für eingebettete Anwendungen heruntergeladen wurden. Ein allgemeinerer Vorteil einer erhöhten Dichte ist eine verbesserte Wirksamkeit von Caches und den Vorgang der Unterricht.

Computer mit hoher Codedichte haben häufig komplexe Anweisungen für den Eintritt in die Prozedur, parametrisierte Rückgaben, Schleifen usw. (daher rückwirkend benannt Komplexe Befehlssatzcomputer, CISC). Typischer oder häufiger "CISC" -Beanweisungen kombinieren jedoch lediglich eine grundlegende ALU -Operation, wie z. Adressierungsmodi wie direkt, indirekt, indiziert usw.). Bestimmte Architekturen können zwei oder drei Operanden (einschließlich des Ergebnisses) direkt im Speicher ermöglichen oder in der Lage sein, Funktionen wie automatische Zeigerinkremente usw. auszuführen.

Reduzierte Anweisungscomputer, RISCwurden zuerst in einer Zeit schnell wachsender Gedächtnis -Subsysteme weit verbreitet. Sie opfern die Codedichte, um die Implementierungsschaltung zu vereinfachen, und versuchen, die Leistung über höhere Taktfrequenzen und mehr Register zu erhöhen. Eine einzelne RISC -Anweisung führt normalerweise nur einen einzelnen Vorgang aus, wie z. B. ein "Hinzufügen" von Registern oder eine "Last" von einem Speicherort in ein Register. Ein RISC -Befehlssatz hat normalerweise einen festen Anweisungslängewährend ein typischer CISC -Befehlssatz Anweisungen zu sehr unterschiedlicher Länge hat. Da RISC -Computer jedoch normalerweise mehr und oft längere Anweisungen benötigen, um eine bestimmte Aufgabe zu implementieren, nutzen sie inhärent weniger optimale Verwendung von Busbandbreiten und Cache -Erinnerungen.

Bestimmte eingebettete RISC -ISAs mögen Daumen und AVR32 Aufgrund einer Technik, die als Codekomprimierung bezeichnet wird, sind in der Regel eine sehr hohe Dichte aufweisen. Diese Technik enthält zwei 16-Bit-Anweisungen in ein 32-Bit-Wort, das dann in der Decodes-Phase ausgepackt und als zwei Anweisungen ausgeführt wird.[8]

Minimale Befehlsbetriebscomputer (Misc) sind gewöhnlich eine Form von Stapelmaschine, wo es nur wenige separate Anweisungen gibt (8–32), damit mehrere Anweisungen in ein einzelnes maschinelles Wort angepasst werden können. Diese Art von Kernen dauern oft wenig Silizium, um implementieren zu können, sodass sie leicht in einem realisiert werden können FPGA oder in a Multi-Core bilden. Die Codedichte von Misc ähnelt der Codedichte von RISC; Die erhöhte Unterrichtsdichte wird ausgeglichen, indem mehr primitive Anweisungen erforderlich sind, um eine Aufgabe zu erledigen.[9][Fehlgeschlagene Überprüfung]

Es wurde untersucht Ausführbare Komprimierung als Mechanismus zur Verbesserung der Codedichte. Die Mathematik von Kolmogorov -Komplexität beschreibt die Herausforderungen und Grenzen davon.

Darstellung

Die Anweisungen, die ein Programm ausmachen, werden selten unter Verwendung ihrer internen, numerischen Form angegeben (Maschinensprache); Sie können von Programmierern angegeben werden Montagesprache oder häufiger kann erzeugt werden aus hochrangige Programmiersprachen durch Compiler.

Entwurf

Das Design von Anweisungssätzen ist ein komplexes Problem. Es gab zwei Stufen in der Geschichte für den Mikroprozessor. Der erste war der CISC (komplexer Befehlssatzcomputer), der viele verschiedene Anweisungen enthielt. In den 1970er Jahren recherchierte Orte wie IBM jedoch, dass viele Anweisungen im Set beseitigt werden konnten. Das Ergebnis war der RISC (reduzierter Befehlssatzcomputer), eine Architektur, die eine kleinere Reihe von Anweisungen verwendet. Ein einfacherer Befehlssatz bietet das Potenzial für höhere Geschwindigkeiten, eine verringerte Prozessorgröße und einen verringerten Stromverbrauch. Ein komplexerer Satz kann jedoch gemeinsame Operationen optimieren, den Speicher verbessern und verbessern und Zwischenspeicher Effizienz oder Vereinfachung der Programmierung.

Einige Anweisungs -Set -Designer reservieren einen oder mehrere Opcodes für eine Art Systemanruf oder Software Interrupt. Zum Beispiel, MOS -Technologie 6502 verwendet 00H, Zilog Z80 Verwendet die acht Codes C7, CF, D7, DF, E7, EF, F7, FFH[10] während Motorola 68000 Verwenden Sie Codes im Bereich A000..AFFFH.

Schnelle virtuelle Maschinen sind viel einfacher zu implementieren, wenn ein Befehlssatz dem erfüllt Popek- und Goldberg -Virtualisierungsanforderungen.[Klarstellung erforderlich]

Das NOP -Folie benutzt in immunitätsbewusstes Programmieren ist viel einfacher zu implementieren, wenn der "unprogrammierte" Zustand des Gedächtnisses als interpretiert wird NOP.[zweifelhaft ]

Auf Systemen mit mehreren Prozessoren, Nicht blockierende Synchronisation Algorithmen sind viel einfacher zu implementieren, wenn der Anweisungssatz Unterstützung für etwas wie "wie z."Fetch-and-add","Load-Link/Store-Conditional"(Ll/sc) oder" Atomic vergleiche und swap".

Anweisungssatz Implementierung

Jeder bestimmte Anweisungssatz kann auf verschiedene Weise implementiert werden. Alle Möglichkeiten zur Implementierung eines bestimmten Anweisungssatzes liefern dasselbe Programmiermodellund alle Implementierungen dieses Anweisungssatzes können dieselben ausführbaren Ausführungen ausführen. Die verschiedenen Möglichkeiten zur Implementierung eines Unterrichtssatzes bieten unterschiedliche Kompromisse zwischen Kosten, Leistung, Stromverbrauch, Größe usw.

Beim Entwerfen der Mikroarchitektur In Ingenieuren eines Prozessors verwenden Ingenieure Blöcke aus "fest verdrahteten" elektronischen Schaltkreisen (oft separat entworfen) wie Addierer, Multiplexer, Zähler, Register, Alus usw. irgendeiner Art von Art von Übertragungssprache registrieren wird dann oft verwendet, um die Decodierung und Sequenzierung jeder Anweisung eines ISA unter Verwendung dieser physikalischen Mikroarchitektur zu beschreiben. Es gibt zwei grundlegende Möglichkeiten, um a zu bauen Steuergerät Um diese Beschreibung zu implementieren (obwohl viele Designs mittlere Wege oder Kompromisse verwenden):

  1. Einige Computer entwirft "Hardwire" Die vollständige Dekodierung und Sequenzierung des Befehlssatzes (genau wie der Rest der Mikroarchitektur).
  2. Andere Designs beschäftigen Mikrocode Routinen oder Tabellen (oder beides), um dies zu tun-typisch als On-Chip Roms oder Plas oder beides (obwohl getrennte Widder und Roms wurden historisch verwendet). Das Western Digital MCP-1600 ist ein älteres Beispiel, indem Sie ein dediziertes, separates ROM für Mikrocode verwenden.

Einige Designs verwenden eine Kombination aus fest verdrahtetem Design und Mikrocode für die Steuereinheit.

Einige CPU -Designs verwenden a Beschreibbarer Kontroll Store- Sie kompilieren den Befehlssatz auf ein beschreibbares RAM oder Blitz innerhalb der CPU (wie die Rekonst Prozessor und der IMSYS CJIP),[11] oder eine FPGA (Rekonfigurierbares Computer).

Ein ISA kann auch sein emuliert in Software von einem Dolmetscher. Aufgrund des Interpretationsaufwands ist dies natürlich langsamer als direkte Programme auf der emulierten Hardware, es sei denn, die Hardware, die den Emulator ausführt, ist eine Größenordnung schneller. Heute ist es für Anbieter neuer ISAs oder Mikroarchitekturen üblich, Software -Emulatoren für Softwareentwickler zur Verfügung zu stellen, bevor die Hardware -Implementierung bereit ist.

Oft haben die Details der Implementierung einen starken Einfluss auf die jeweiligen Anweisungen für den Befehlssatz. Zum Beispiel viele Implementierungen der Anweisung Pipeline Erlauben Sie nur einen einzelnen Speicherlast oder Speicherspeicher pro Anweisung, was zu a führt Last -Store -Architektur (RISC). Für ein anderes Beispiel einige frühe Wege zur Implementierung der Anweisung Pipeline führte zu a Verspätungsschlitz.

Die Anforderungen einer Hochgeschwindigkeits-digitalen Signalverarbeitung haben sich in die entgegengesetzte Richtung gedrückt und Anweisungen auf eine bestimmte Weise implementieren. Zum Beispiel, um digitale Filter schnell genug durchzuführen, die MAC -Anweisung in einem typischen digitaler Signalprozessor (DSP) muss eine Art verwenden Harvard Architektur Das kann gleichzeitig eine Anweisung und zwei Datenträger abrufen und benötigt einen Einzelzyklus multiplizieren - akkumuliert Multiplikator.

Siehe auch

Verweise

  1. ^ Pugh, Emerson W.; Johnson, Lyle R.; Palmer, John H. (1991). IBMs 360 und frühe 370 Systeme. MIT Press. ISBN 0-262-16123-0.
  2. ^ Crystal Chen; Greg Novick; Kirk Shimano (16. Dezember 2006). "RISC Architecture: RISC vs. CISC". cs.stanford.edu. Abgerufen 21. Februar, 2015.
  3. ^ Durand, Paul. "Anleitungssatz Architektur (ISA)". Einführung in Informatik CS 0.
  4. ^ a b c Die Entwicklung der RISC -Technologie bei IBM von John Cocke - IBM Journal of R & D, Band 44, Zahlen 1/2, S.48 (2000)
  5. ^ Page, Daniel (2009). "11. Compiler". Eine praktische Einführung in die Computerarchitektur. Springer. p. 464. Bibcode:2009pica.book ..... p. ISBN 978-1-84882-255-9.
  6. ^ Venkat, Ashish; Tullsen, Dean M. (2014). Nutzung von ISA-Vielfalt: Design eines heterogenen ISA-Chip-Multiprozessors. 41. jährliches internationales Symposium über die Computerarchitektur.
  7. ^ "Intel® 64 und IA-32 Architektur-Softwareentwicklerhandbuch". Intel Corporation. Abgerufen 12. Juli 2012.
  8. ^ Weaver, Vincent M.; McKee, Sally A. (2009). Codendichteprobleme für neue Architekturen. IEEE Internationale Konferenz über Computerdesign. Citeseerx 10.1.1.398.1967. doi:10.1109/ICCD.2009.5413117.
  9. ^ "Risc gegen CISC". cs.stanford.edu. Abgerufen 2021-12-18.
  10. ^ Ganssle, Jack (26. Februar 2001). "Proaktives Debuggen". embedded.com.
  11. ^ "Große Mikroprozessoren der Vergangenheit und Gegenwart (V 13.4.0)". cpushack.net. Abgerufen 2014-07-25.

Weitere Lektüre

Externe Links