Ich habe Programmierhintergrund und habe vor kurzem begonnen, einen Computerarchitekturkurs zu belegen. Die meisten Vorlesungen, die ich sehe, verwenden eine Art Schichtung, wie im folgenden Diagramm beschrieben, das erklärt, was in dem Kurs behandelt wird.
Die Frage hier ist, dass der Compiler (Systemsoftware) sich um die Konvertierung von High-Level-/Assembler-Code in Maschinencode kümmert, der vom Prozessor verstanden werden kann. Das Betriebssystem führt diesen Code aus, indem es die Ressourcen wie Prozessorplanung, Speicherverwaltung usw. verwaltet. Welche Rolle spielt also die ISA-Schicht hier?
Bild mit freundlicher Genehmigung: http://theembeddedguy.com/2016/05/15/layers-of-abstraction/
Die ISA ist die Ebene, auf die ein Compiler abzielt (obwohl Optimierungen empfindlich auf die Mikroarchitektur reagieren, insbesondere im Hinblick auf eine optimale Planung). Die ISA ist eine vereinfachte, aber ausreichende Definition der Hardwareschnittstelle.
Die ISA beschreibt das abstrakte Verhalten der zugrunde liegenden Rechenmaschine und welche grundlegenden Operationen in Maschinencodeanweisungen codiert werden können. Es wird definiert, welche Art von Registern der Prozessor hat, wie sie mit dem Speicher interagieren und welche arithmetischen Operationen möglich sind.
Die ISA kann auch beeinflussen, wie einfach es ist, die Implementierung zu optimieren (z. B. lange Pipelines oder breite Probleme), und kann Funktionen implementieren, die auf bestimmte Hochsprachen abzielen (oder die Aufgabe eines Compilers vereinfachen).
Zusammen mit der ISA wird es architektonische Ordnungsgarantien, Ausnahmen, Leistungssteuerung und Zugriffskontrollen geben, die auch die Prozessorarchitektur definieren. Diese sind für einen Compiler nicht relevant (und erfordern häufig systeminterne Zugriffe), sind jedoch für ein Betriebssystem (und manchmal Anwendungen) von entscheidender Bedeutung.
Ihr Diagramm ist eine irreführende Abstraktion, obwohl jedes Element unterschiedlich ist, sind sie nicht auf die gleiche Weise miteinander verbunden wie ein Software-Stack. Die Mikroarchitektur wird zum Beispiel von der Merkmalsgröße beeinflusst – sowohl in Bezug auf das Timing als auch auf die Kosten – die Ansicht auf Gatterebene ist das, woran Designer denken, wenn sie an Mikrobögen arbeiten.
Um ein allgemeines Beispiel dafür zu geben, was ein ISA ist , überlegen Sie, wie ein 32-Bit-Befehl mit fester Länge aufgeteilt werden könnte.
4 Bits für den Befehlstyp (Laden/Speichern, ALU usw.) 4 Bits für die Befehlsoperation (Add/Sub oder Adressierungsmodus) 4 Bits für das Register von Operand 1 4 Bits für das Register von Operand 2 4 Bits für das Zielregister 4 Bits für die Flusssteuerung 4 Bits für konstante Eingabe (z. B. Operandenverschiebung) 4 weitere Bits spezifisch für den Befehl
Sie möchten diese auf eine Obermenge der Funktionen abbilden, die Sie für eine effiziente Drehmaschine benötigen. Somit beschreibt die ISA genau, was der Maschinencode und der Assemblercode darstellen (in einer mehr oder weniger 1:1-Beziehung). Einige Befehle (NOP ist das offensichtliche Beispiel) können unter Verwendung eines benutzerdefinierten Opcodes oder eines Befehls vom Typ A = A | A erreicht werden, wenn die Symmetrie dies zulässt.
In Bezug auf die Quelle des Diagramms würde die Mikroarchitektur in der Computerarchitektur im Allgemeinen nicht verwendet werden, um sich auf RAM, ROM und Zeitgeber in einem Mikrocontroller zu beziehen. Es würde sich darauf beziehen, wie die ganzzahlige Teilung implementiert ist, wie viele Befehle pro Zyklus ausgeführt werden können, wie viele Lasten gleichzeitig ausstehen können - die Art von Details, die in Software überhaupt schwer zu beobachten sind.
In dem Diagramm geht es überhaupt nicht um Ein- und Ausgänge, daher ist die Frage so formuliert bedeutungslos.
Jedes gegebene System kann auf verschiedenen Detailebenen beschrieben werden, und genau darum geht es bei dem Diagramm. Jede Schicht beschreibt das gleiche System , aber mit unterschiedlichen Referenzbegriffen.
Beispielsweise könnten Sie einen Webserver auf der höchsten Abstraktionsebene als einen Computer beschreiben, der HTTP-Anforderungen akzeptiert und die angeforderten Daten bereitstellt, wobei „HTTP-Anforderung“ in einem bestimmten Standarddokument als eine TCP/IP-Verbindung definiert ist, die Daten in a überträgt bestimmtes Format (die nächste Detailebene).
Das gleiche System könnte in Bezug auf die elektromagnetischen Felder beschrieben werden, die es empfängt und überträgt, zusammen mit der Art und Weise, wie sich die elektrischen Ladungen innerhalb der darin enthaltenen Metall- und Halbleitermuster bewegen. Dies wäre die Abstraktionsebene "Physik". Es bietet viele Details, aber es ist wirklich zu detailliert, um für das Verständnis des Verhaltens auf hoher Ebene nützlich zu sein.
In Computersystemen werden die höchsten Abstraktionsebenen in Software definiert. In gewissem Sinne "läuft" jede Abstraktionsschicht auf der virtuellen Maschine, die durch die nächstniedrigere Ebene definiert wird. Die ISA ist die Ebene, auf der der Übergang von Software zu Hardware erfolgt: Die ISA definiert die Hardware-Software-Schnittstelle. Auf dieser Ebene ist die „virtuelle Maschine“ sehr universell einsetzbar, da wir in den meisten Fällen keine unterschiedlichen Hardware-Maschinen für unterschiedliche Anwendungen definieren möchten.
In einigen Fällen ist die ISA selbst eine Abstraktion, die auf einem Hardwarecomputer niedrigerer Ebene ausgeführt wird. Es gibt mikrocodierte Maschinen, die verschiedene Versionen von Mikrocode laden können, um verschiedene ISAs zu implementieren. Der Mikrocodeprozessor besteht aus physikalischen Registern und Gattern.
Ich versuche, zwischen den Zeilen Ihrer Frage zu lesen und eine Frage zu beantworten, die Sie nicht wirklich gestellt haben – hilft irgendetwas davon?
Ich denke das Diagramm ist selbsterklärend. Innerhalb des Kontexts und der Partitionierung, wie sie im ursprünglichen theembeddedguy.com-Artikel und dem „Input-Output“-Paradigma dargestellt sind, ist die Eingabe für die als „ISA“ dargestellte Schicht der Binärcode, der bei „Machine-Level Code“ generiert wird. Die ISA-Schicht ruft den Binärstrom ab und parst ihn in Übereinstimmung mit der inneren Architektur eines Prozessors. In der speziellen x86-Architektur übersetzt es komplexe Befehle (CISC) in einfachere Formate vom RISC-Typ in Übereinstimmung mit der Mikroarchitektur des inneren Prozessors. Das ist die „Ausgabe“.
Das gesamte Mehrebenenmodell ist nur eine Abstraktion und in der realen Welt nicht besonders nützlich. Die Grenzen können verschwommen sein, es können mehrere weitere Abstraktionsebenen eingeführt werden, in Implementierungen können einige Ebenen kombiniert werden usw. Der gesamte theembeddedguy.com-Artikel ist eine eklektische Mischung von Begriffen, was wahrscheinlich die Verwirrung erklärt.
Chris Stratton
Vivek Maran
TEMLIB
TEMLIB
Ale..chenski
Benutzer253751
Analogsystemerf