[NB: Diese Antwort ist speziell für die letzte Bearbeitung gedacht und ergänzt nicht die bereits veröffentlichten Antworten.]
Um es noch einmal zu wiederholen: Mikrocode (zumindest in erster Näherung) ist eine bestimmte Art von Firmware.
"Microcode" ist in diesem Zusammenhang nur Marketing über "Prozessor-Firmware".
Nun, es ist kein Marketing. Marketing hätte es XBoost Pro (TM) oder so genannt. Es ist vielmehr ein technischer Begriff. Wenn Sie CPUs entwerfen, ist Ihnen die Unterscheidung zwischen Mikrocode und der anderen Firmware der CPU (und der für andere Geräte typischen Firmware) wichtig. Wenn nicht, ist es wahrscheinlich nicht.
Wenn Sie Motherboards entwerfen oder Betriebssysteme schreiben, verwenden Sie wahrscheinlich "Microcode Update" als Abkürzung für das unhandlichere und weniger vertraute "CPU Firmware Update". Die meisten CPU-Firmware-Updates wirken sich hauptsächlich auf den Mikrocode aus. Sie kennen wahrscheinlich den Unterschied, müssen sich aber nicht darum kümmern .
Der Endbenutzer braucht den Unterschied nicht zu kennen oder sich darum zu kümmern, und in einer idealen Welt würde er das Wort "Mikrocode" überhaupt nicht hören.
Ich vermute, dass Sie in der Presse auf die jüngsten Sicherheitslücken in Bezug auf die spekulative Ausführung aufmerksam geworden sind, obwohl Sie dies möglicherweise auch früher in einem Kontext gehört haben, der deutlich machte, dass Sie sich nicht darum kümmern mussten. Diese Sicherheitsanfälligkeiten wurden früher als geplant veröffentlicht, was möglicherweise dazu geführt hat, dass die Berichterstattung in der Presse weniger kuratiert war, als dies ansonsten der Fall gewesen wäre. Aus Sicht des Endbenutzers müssen Sie BIOS-Updates, Betriebssystem-Updates und in einigen Fällen Anwendungs-Updates installieren. Sie müssen weder wissen noch sich darum kümmern, welche davon neuen Mikrocode enthalten.
Selbst wenn Sie sich darüber im Klaren sind, dass Sie es wahrscheinlich nicht wissen oder sich darum kümmern müssen, sind Sie möglicherweise aus purer Neugier interessiert: Wie können Sie Mikrocode von anderer Firmware unterscheiden?
Nun, das erste, was zu erkennen ist, ist, dass es nicht unbedingt eine einzige harte und schnelle Definition gibt, sondern eher eine Bleggs and Rubes-Situation . Dennoch gibt es einige Dinge, die wir über Mikrocode sagen können:
Mikrocode wird im Allgemeinen in einer CPU ausgeführt und nicht in einer CPU. Das ist die übergeordnete Sichtweise.
Die Architektur des Mikrocodes unterscheidet sich normalerweise erheblich von der Architektur des normalen Codes, einschließlich der normalen Firmware. Es ist wahrscheinlich sehr parallel und wird viel näher an der Hardware implementiert. Dies wird in mehreren der vorhandenen Antworten (einschließlich Ihrer eigenen Antwort) erörtert, wobei zu beachten ist, dass die Details je nach CPU-Design variieren können.
Obwohl Hardware häufig nur für die vom Hersteller bereitgestellte Firmware entwickelt wurde, ist es nicht ungewöhnlich, dass Firmware von Drittanbietern verwendet wird - obwohl die Garantie dadurch wahrscheinlich ungültig wird! Mikrocode von Drittanbietern ist viel seltener, obwohl ich glaube, dass in früheren Zeiten (ich spreche davon, als eine CPU etwa die Größe einer Brotdose hatte) einige Endbenutzer den Mikrocode in ihren CPUs modifizierten. Soweit mir bekannt ist, ist dies bei den in PCs verwendeten CPUs nicht möglich.
Der Mikrocode übersetzt oder unterstützt in der Regel die Implementierung einer öffentlichen Befehlssatzarchitektur, dh er führt den Maschinencode aus, den der Designer des Betriebssystems und die Anwendungsprogrammierer verwenden. Mehr dazu im nächsten Abschnitt.
"Execution vs Data" - viele Antworten verwenden dieses Paradigma
Ich fürchte, auf verwirrend unterschiedliche Weise, aber ich werde auf meinen eigenen Kommentar eingehen. Dieser Abschnitt dient auch dazu, den letzten Aufzählungspunkt oben zu erweitern. Ziel ist es, zwischen der Arbeit einer CPU (durch Kombination von Hardware und Mikrocode) und der Arbeit eines typischen Geräts (durch Kombination von Hardware und Firmware) zu unterscheiden. Ich werde ein SATA-Festplattenlaufwerk wählen.
Das SATA-Laufwerk folgt den Anweisungen des Computers, die den Anweisungen "Lesen der Daten aus Sektor 5.123" und "Schreiben dieser Daten in Sektor 1.321" entsprechen. Die Firmware des Laufwerks ist dafür verantwortlich, dass die Hardware dies ermöglicht, und es handelt sich in der Regel um ganz normalen Code, der auf einer Art eingebetteter CPU ausgeführt wird. Die Anweisungen des Laufwerks gehen nacheinander ein, obwohl sie möglicherweise nicht in der Reihenfolge verarbeitet werden, in der sie eingehen. Diese Anweisungen sind kein Programm, sondern werden von einem Programm gesendet , das auf der Haupt-CPU ausgeführt wird. Insbesondere gibt es keinen Steuerungsfluss, dh keine Anweisung, dem SATA-Laufwerk mitzuteilen, welche Anweisungen als Nächstes ausgeführt werden sollen.
Die CPU ist verantwortlich für den Computer. Sobald die Initialisierung abgeschlossen ist, werden die vom Motherboard (dem BIOS, einem anderen Firmwaretyp) bereitgestellten Anweisungen ("Maschinencode") ausgeführt, die es anweisen, den vom Betriebssystem bereitgestellten Maschinencode auszuführen, der es anweist, den bereitgestellten Maschinencode auszuführen von Anwendungsanbietern. Die CPU selbst ruft den Maschinencode aus dem EEPROM (im Falle des BIOS) oder dem RAM (im Falle des Betriebssystems und der Anwendungen) ab. Insbesondere hat der Maschinencode einen Steuerungsfluss: Der Maschinencode teilt der CPU mit, welcher Maschinencode als nächstes auszuführen ist. Sie können denselben Maschinencode wiederholt durchlaufen lassen, Sie können je nach den Daten, an denen der Code arbeitet, verschiedene Codebits ausführen - die Anweisungen in einer Geräteoberflächensprache wie SATA-Code können eine begrenzte Anzahl einfacher Aufgaben ausführen, Maschinencode jedoch machenirgendetwas . (Siehe auch Vollständigkeit prüfen .)
Wir könnten diesen letzten Aufzählungspunkt wie folgt umschreiben: Der Mikrocode implementiert normalerweise eine Turing Complete-Sprache. gewöhnliche Firmware normalerweise nicht.
Was bedeutet es zu sagen, dass "Hardwareanweisungen mit Mikrocode interpretiert werden"?
Richtig, aber wahrscheinlich verwirrend. Der wichtige Punkt ist die Unterscheidung zwischen Maschinencode, der einen Kontrollfluss hat und vollständig ist, und den Anweisungen, die von einer Geräteschnittstelle wie SATA definiert werden, was nicht der Fall ist und nicht.
Wendet "Mikrocode" auf den Code an, der auf Soundkarten ausgeführt wird
Nein, Soundkarten erhalten Anweisungen, keinen Code, genau wie SATA-Laufwerke. Die Anweisungen könnten wie "A sharp abspielen" oder "Diese Daten als Wellenform interpretieren und abspielen" lauten. Immer noch sehr einfach.
und Grafikkarten (GPUs)?
Altmodische Grafikkarten (ohne GPUs) sind mit SATA-Laufwerken identisch. Die Anweisungen lauten wie "Setze dieses Pixel auf diese Farbe" oder "Schreibe ein A an diese Position".
... GPUs sind kompliziert und sitzen irgendwo zwischen den beiden Welten, die ich oben beschrieben habe. Es ist wahrscheinlich am einfachsten, sie sich als einen spezialisierten Computer vorzustellen, der sich im Hauptcomputer befindet und über eigene CPUs verfügt. Es ist richtig, dass Geräte wie SATA-Laufwerke auch eingebettete CPUs haben. Der Unterschied besteht jedoch darin, dass die eingebettete CPU in einem SATA-Laufwerk nur den vom Laufwerkshersteller bereitgestellten Code ausführt, wohingegen GPUs auch den vom Betriebssystem und / oder Anwendungshersteller bereitgestellten Code ausführen. Das ist wirklich eine ganz andere Frage.
TL; DR: Microcode ist eine spezielle Art von Firmware, mit deren Hilfe die Hardware einen Befehlssatz Turing Complete implementieren kann.