Was genau ist Mikrocode und wie unterscheidet er sich von der Firmware?

50

Was ist in Bezug auf die Terminologie genau der "Mikrocode" und wie unterscheidet er sich von der Firmware, wenn er aktualisiert werden kann?

Diese Frage ist kein Duplikat dieser Frage (soweit ich das beurteilen kann), die ich auch zum Ändern des Mikrocodes gestellt habe. Hier möchte ich unbedingt wissen, wie man diese Begriffe richtig verwendet.

Aktualisieren

Ich habe eine Antwort ausgewählt, bin aber nicht besonders zufrieden damit. Ich habe viele der Antworten in Anspruch genommen und finde viele dieser Antworten gleichermaßen unbefriedigend. Lassen Sie mich Ihnen meine zwei Bilder präsentieren,

  1. "Der Prozessormikrocode ähnelt der Firmware des Prozessors." Wenn ich das immer mehr lese, nehme ich es so. "Microcode" ist in diesem Zusammenhang nur Marketing über "Prozessor-Firmware". Tragen Sie mit mir, ..
  2. Oder ich liege falsch und ich weiß, dass es passiert! In diesem Fall brauche ich eine viel gründlichere Vorstellung davon, warum ich falsch liege. In diesen Antworten, die ich gelesen habe, um darauf hinzuweisen, dass ich falsch liege, habe ich Mühe, sie zu verstehen.
    • "Execution vs Data" Viele Antworten verwenden dieses Paradigma, aber für die CPU ergibt das für mich keinen Sinn. Einige Assert-Firmware wird ausgeführt, aber von was? Handelt es sich bei der CPU um Programmanweisungen oder Daten?
    • Wenn die Firmware eine Brücke zwischen Software und Hardware schlägt (lesen Sie: die Elektrotechnik der Götter), kann der Mikrocode diese Unterscheidung dann auch nicht erfüllen.
    • "Dolmetschen" macht im Laufe der Zeit immer weniger Sinn. Was bedeutet es mit Microcode zu sagen "Hardwareanweisungen werden interpretiert"? Wenn das wahr wäre, wäre etwas so performant, wenn es nicht interpretiert, sondern in verschiedene Hardwareanweisungen vorkompiliert und lediglich "ausgeführt" würde? Wie wird General MIDI nicht im selben Licht interpretiert? Es ist eine Sprache, die vom "MIDI-Mikrocode" interpretiert wird und auf der Hardware ausgeführt wird. Oder dumme Terminals, die Fernschreiberanweisungen für die visuelle Anzeige interpretieren?
    • Gilt "Mikrocode" für den Code, der auf Soundkarten und Grafikkarten (GPUs) ausgeführt wird ?
Evan Carroll
quelle
Ich bin kein Experte, aber ich würde sagen, dass Mikrocode Prozessor-Firmware ist. Ich stelle mir vor, dass alle Daten darüber, wie der Mikrocode ausgeführt wird, von Intel / AMD stammen, aber ich kann mir vorstellen, wie das funktionieren würde. Sie haben einen einfachen CPU-Satz, grundlegende Dinge wie das Abrufen aus dem Speicher und mathematische Operatoren. Dann haben Sie einen komplexen Befehlssatz (wie x86 / Intel). Die CPU erhält den Befehl aus dem Speicher und verwendet den Mikrocode, um den komplexen Befehl in einfachere Befehle umzuwandeln. Ein Beispiel wäre die Multiplikation. Die meisten CPUs haben einen Multiplikationsbefehl, aber tatsächlich besteht das Multiplizieren aus mehreren Bitverschiebungen.
Programmdude
Der Begriff Microcode bezieht sich auf die Tatsache, dass er viele der CPU- „Code“ -Anweisungen verwendet bzw. diesen zugrunde liegt. Grundsätzlich wird der CPU mitgeteilt, wie Anweisungen und Funktionen zu emulieren sind. Daher der Name. Aus der Sicht eines Computerbesitzers handelt es sich um einen weiteren Satz von Code, der vom Hardwarehersteller geliefert wird, sodass er alternativ als Firmware zusammengefasst werden kann.
Eckes
IMO lautet die einfachste Antwort: "Jedes Mal, wenn ein Prozessor einen Befehl ausführt, führt er tatsächlich ein Mikrocode-Programm aus." Was Ihnen als Einzelprozessorbefehl erscheint, ist eine bestimmte Folge von Mikrocode-Befehlen, ein "Mikrocode-Programm". Jeder Befehl hat ein eigenes Mikrocode-Programm. Die einzelnen Mikrocode-Befehle aktivieren / deaktivieren / usw. die verschiedenen internen Bits des Prozessors.
Ethan Reesor

Antworten:

57

Der Ursprung des Wortes Firmware liegt in der Mitte zwischen Hardware und Software - Software, die in Hardware eingebettet ist. Es bezieht sich auf Software, die nichtflüchtig auf einem Hardwaregerät gespeichert ist. Beispiele sind EEPROM und Flash-Speicher, die in Hardwaregeräte eingebettet sind, wenn sie zum Speichern von Code verwendet werden, der vom Gerät selbst ausgeführt wird.

Bei einigen Hardwaretypen wird es immer häufiger vorkommen, dass die "Firmware" in der Treibersoftware gespeichert und beim Booten / Initialisieren auf das Gerät geladen wird, anstatt sie permanent auf dem Gerät zu belassen. Heutzutage ist es beispielsweise keine große Sache, ein paar hundert KB Firmware-Code in einem Softwaretreiber zu speichern, der auf dem Host-Betriebssystem geladen ist, und diesen beim Initialisieren durch den Treiber an das Gerät zu senden.

Dies wird oftmals immer noch als "Firmware" bezeichnet, obwohl Sie es abhängig von der von Ihnen akzeptierten Firmwaredefinition möglicherweise technisch nicht als Firmware betrachten, da es nicht auf der Hardware resident ist (wenn Sie die Hardware trennen und in ein anderes System einbinden) wird diese Version von "Firmware" nicht behalten).

Microcode ist eine Untermenge dieser letzteren Art von "Firmware". Microcode ist kein Oberbegriff für alle "Firmware", die beim Booten auf ein Gerät geladen wird. Stattdessen ist es spezifisch für CPUs, bei denen der Mikrocode im Wesentlichen die Übersetzungsschicht zwischen Standard-CPU-Befehlen höherer Ebene und den für diese CPU spezifischen Operationen niedrigerer Ebene bildet. Es wird beim Booten vom BIOS auf die CPU geladen, kann aber später in der Boot-Phase auch vom Betriebssystem ersetzt werden.

Durch eine Aktualisierung des Mikrocodes kann das Verhalten einer CPU auf niedriger Ebene geändert werden, um bestimmte, noch zu entdeckende Fehler zu umgehen, ohne dass die CPU-Hardware ausgetauscht werden muss. Der Mikrocode enthält normalerweise die effizienteste Zuordnung von Befehlen höherer bis niedrigerer Ebene, um die bestmögliche Geschwindigkeit und Energieeffizienz zu erzielen. In einigen Fällen kann eine Änderung des Mikrocodes zur Behebung eines Fehlers zu einer verringerten Leistung führen.

Beachten Sie, dass Meltdown (die Sicherheitsanfälligkeit, die nur Intel-Chips betrifft) nicht mit Mikrocode-Updates allein behoben werden kann und Änderungen an der Kernbetriebssystemfunktionalität erfordert, die die Leistung möglicherweise weiter verringern. Spectre (die Sicherheitsanfälligkeit, die Intel-, AMD- und ARM-Chips betrifft) kann möglicherweise nur mit Mikrocode-Updates umgangen werden.


So beantworten Sie einige Ihrer spezifischen Fragen seit Ihrer Bearbeitung:

  1. Ja, Mikrocode ist im Grunde eine Firmware, die auf dem Prozessor ausgeführt wird. Der Spezialbegriff "Mikrocode" bezieht sich speziell auf die Firmware auf einem Prozessor, die den Entwurf für die Übersetzung von Standard-Maschinensprache in Prozessoranweisungen auf niedriger Ebene enthält. Es ist also ein spezifischerer Begriff als Firmware.

    Beachten Sie, dass es, wie oben beschrieben, nicht im ausgeschalteten Zustand auf der CPU gespeichert, sondern bei jedem Start geladen wird, sodass es in gewisser Weise nicht wie herkömmliche Firmware funktioniert. Viele Hardware-Geräte tun dies jedoch jetzt und werden immer noch als "Firmware" bezeichnet, so dass es akzeptabel ist, sie als Firmware zu bezeichnen.

  2. Ich glaube nicht, dass du falsch liegst. Firmware muss nicht in einer bestimmten Maschinensprache geschrieben sein und ihre Ausführung muss nicht auf eine bestimmte Weise ausgelöst werden. Auf einer bestimmten niedrigen Ebene sind alle Maschinencodes "Daten", die von einem Prozessor "gelesen" und auf eine bestimmte Weise interpretiert werden.

    Der Begriff "Mikrocode" wird normalerweise nur für Haupt-CPUs und nicht für Grafikkarten oder andere Hardware verwendet, obwohl auf diese anderen Geräte möglicherweise Code auf dieselbe Weise geladen wird.

thomasrutter
quelle
1
Dein zweiter Satz ist falsch; Firmware enthält im ROM gespeicherte Software. Es war einmal ein Großteil der Firmware im ROM, bevor Alternativen erschwinglich wurden.
Harry Johnston
1
Offensichtlich ist "Mikrocode" spezifisch für eine CPU. Die Frage ist nicht spezifisch, sondern anders. Wenn Sie den Bereich ("die CPU") entfernen, erhalten Sie ein fast direktes Zitat der "Übersetzungsschicht zwischen Anweisungen höherer Ebene und Operationen niedrigerer Ebene". Das ist so ziemlich nur die Definition von Firmware. Ist das nicht das, was alle Firmware macht? Es sind viele Wörter, aber ich denke, die aussagekräftigste und knappste Beschreibung ist die oben stehende: "Prozessor-Mikrocode ähnelt der Prozessor-Firmware."
Evan Carroll
@Evan, die meisten Geräte erhalten ihre Anweisungen indirekt von Code, der auf der CPU ausgeführt wird. Nur die CPU verarbeitet direkt den vom Benutzer bereitgestellten Code. Bedenken Sie auch, dass die meisten Geräte eine eingebettete CPU enthalten, auf der die Firmware ausgeführt wird, und dass diese CPU möglicherweise über einen eigenen Mikrocode verfügt. Die Unterscheidung ist möglicherweise nur für Hardware-Designer und Kernel-Programmierer von Bedeutung, ist jedoch keine willkürliche.
Harry Johnston
"Die meisten Geräte enthalten eine eingebettete CPU, auf der die Firmware ausgeführt wird, und diese CPU verfügt möglicherweise über einen eigenen Mikrocode", meine ich. Der Code, der einen Midi-Stream auf einer Soundkarte verarbeitet, ist also auch "Microcode"? Oder der Code zum Zeichnen / Rendern von Anzeigezeichen auf einem dummen Terminal?
Evan Carroll
Nein. Der Code, der auf der Soundkarte ausgeführt wird, um einen MIDI-Stream zu verarbeiten, ist nur normale Firmware. Der Code, der den Code verarbeitet, der auf der Soundkarte ausgeführt wird, um einen MIDI-Stream zu verarbeiten, ist Mikrocode. (In der Praxis bin ich mir nicht sicher, ob die eingebettete CPU auf etwas so Einfachem wie einer Soundkarte überhaupt einen Mikrocode benötigt, aber das ist nicht der springende Punkt.) Entscheidend ist, dass ein MIDI-Stream oder die Zeichen gesendet werden Ein dummes Terminal, kein Code. Sie sind nur Daten.
Harry Johnston
23

https://wiki.debian.org/Microcode

CPU-Mikrocode

Der Mikrocode des Prozessors entspricht der Firmware des Prozessors. Der Kernel kann die Firmware des Prozessors aktualisieren, ohne sie über ein BIOS-Update aktualisieren zu müssen. Eine Mikrocode-Aktualisierung wird im flüchtigen Speicher gespeichert, sodass das BIOS / UEFI oder der Kernel den Mikrocode bei jedem Start aktualisiert.

Prozessoren von Intel und AMD benötigen möglicherweise Aktualisierungen ihres Mikrocodes, um ordnungsgemäß zu funktionieren. Diese Updates beheben Fehler / Errata, die zu fehlerhafter Verarbeitung, Beschädigung von Code und Daten sowie zu Systemabstürzen führen können.

Das BIOS (oder UEFI) aktualisiert den CPU-Mikrocode während des Startvorgangs. In den meisten Fällen stellt der Motherboard-Hersteller jedoch keine häufigen BIOS / UEFI-Aktualisierungen bereit oder der Benutzer installiert solche Aktualisierungen nicht. Aus diesen Gründen wird der Systemprozessor wahrscheinlich auf einer großen Anzahl von Systemen mit veraltetem Mikrocode ausgeführt.

Beispiele:

https://www.win-raid.com/t3355f47-Intel-AMD-amp-VIA-CPU-Microcode-Repositories.html

julianisch
quelle
9
So einfach ist das nicht: Microcode ist "eine Technik, die einen Interpreter zwischen der Hardware- und der Architekturebene eines Computers auferlegt". Als solches ist der Mikrocode eine Schicht von Anweisungen auf Hardwareebene, die in vielen digitalen Verarbeitungselementen übergeordnete Maschinencodeanweisungen oder interne Zustandsmaschinensequenzen implementieren. Quelle: en.wikipedia.org/wiki/Microcode
17
Also warten Sie ... ein "Boot" ist nur eine bestimmte Art von "Fahrzeug"? Was für ein nutzloses Wort! :-)
Harry Johnston
4
@HarryJohnston Nun, ich halte es in bestimmten Zusammenhängen für ziemlich nützlich, "ein Boot" von anderen Fahrzeugtypen zu unterscheiden ... und "Mikrocode" ist eine sehr spezifische Art von "etwas", das in vielen modernen CPUs vorhanden ist ... ( daher ist es eher wünschenswert, einen Begriff dafür zu haben).
Radovan Garabík
4
@ RadovanGarabík: Das ist genau Harrys Punkt, gemacht mit Sarkasmus.
Peter Cordes
4
Ich verstehe es nicht. Wenn der Kernel in der Lage ist, die Firmware des Prozessors zu aktualisieren, ohne sie über ein BIOS-Update aktualisieren zu müssen, bedeutet die Tatsache, dass der Motherboard-Hersteller keine häufigen BIOS / UEFI-Updates herausgibt, dass der Systemprozessor dies ist wahrscheinlich mit veraltetem Mikrocode auf einer großen Anzahl von Systemen laufen "? Warum patcht der Kernel nicht einfach den Mikrocode? Warum sollten Sie sich auf das BIOS verlassen, wenn das BIOS nie aktualisiert wird und es eine häufigere aktualisierte Alternative gibt?
Ajedi32
6

Nun, Intel "Mikrocode-Updates" sind in der Tat "Firmware" -Updates in dem Sinne, dass sie viel mehr aktualisieren als nur die Mikrocode-Übersetzungseinheit des Prozessors.

Diese einheitlichen Prozessorpaket-Updates, die wir als "Mikrocode-Updates" für Intel bezeichnen, aktualisieren auch andere On-Die-Mikrocontroller (z. B. die PMU und den Power Management Core) sowie mehrere Parametertabellen für verschiedene On-Die-Prozessorsubsysteme. Sie sind ziemlich komplex.

Diese Informationen sind in mehreren Intel-Patenten verfügbar, die sich auf Mikrocode- und Mikrocode-Updates beziehen.


quelle
4

Ich denke, der Begriff "Mikrocode" bezieht sich in erster Linie auf die Funktionsweise des Codes (er führt Anweisungen auf niedrigerer Ebene unter Verwendung von Anweisungen auf niedrigerer Ebene aus), während der Begriff "Firmware" in erster Linie darauf verweist, wie er gespeichert und verwaltet wird (weniger einfach zu aktualisieren als Software) , einfacher zu aktualisieren als Hardware). In diesem Sinne ist es eher wie die Unterscheidung zwischen einer "Anwendung" und einer "JAR-Datei" - dasselbe Programm kann beides sein, aber Sie betrachten es aus zwei verschiedenen Perspektiven.

Die Idee des Mikrocodes geht übrigens auf Maurice Wilkes im Jahr 1951 zurück, Jahrzehnte bevor Computerprozessoren in Silizium eingebettet waren.

Michael Kay
quelle
3

Firmware bezieht sich normalerweise auf Code für Geräte, die eine CPU enthalten, nicht die CPU selbst, z. B. die Firmware für ein Android-Telefon.

Der Mikrocode ist eine Übersetzungsschicht zwischen komplexen Befehlssätzen (z. B. 486, 686, AMD-64 usw.) und den Befehlen der unteren Ebene, für die die Chiphersteller Silizium entwickeln. Eine Reihe von Befehlen im CPU-Befehlssatz wird also nicht in Silizium implementiert, sondern über Mikrocode in mehrere Befehle übersetzt, die in Silizium implementiert sind.

David Waters
quelle
Aber ist das nicht bei jeder Firmware so? Anweisungen ABIs, die in Silicon implementiert werden könnten, aber nicht über Software aktualisierbar sind?
Evan Carroll
1
Die "Mikrocode-Updates" von Intel können viel mehr als nur die Dekodierung von Mikrocode-Befehlen ändern . Sie können z. B. den Schleifenpuffer deaktivieren (in Skylake, um das SKL150-Erratum zu beheben), da die CPU dies nach Möglichkeit ermöglicht, falls Hardware-Fehler entdeckt werden.
Peter Cordes
3

"Mikrocode" war der ursprüngliche Begriff und bezog sich auf Anweisungen, die verwendet wurden, um einen Interpreter für den "öffentlichen" Anweisungssatz eines Prozessors zu implementieren.

Aber mit der Zeit wurde die Unterscheidung, wie sie war, mit vielen Variationen in den Umsetzungsschemata unklarer. Zuerst gab es einen horizontalen vs vertikalen Mikrocode, dann verschiedene Schemata zum Schreiben von "Mikrocode" (um beispielsweise die E / A-Befehle zu implementieren) in den "Haupt" -Prozessor-Befehlssatz. Dann musste unterschieden werden zwischen Code, der leicht über gewöhnliche Programm- "Run" -Operationen geladen werden konnte, und Code (z. B. für das BIOS), der im ROM oder in einem anderen geschützten und relativ unveränderlichen Speicher gespeichert war. Daher wurde der Begriff "Firmware" erfunden, um auf diese Anweisungen Bezug zu nehmen, die im Speicher irgendwie beständiger (und für Benutzermodifikationen weniger zugänglich) gemacht wurden.

Seitdem diese ersten Unterscheidungen getroffen wurden, haben sich die Dinge viele Male verändert und verdreht, und die Begriffe sind nur mit einer Genauigkeit innerhalb eines bestimmten Prozessors und einer bestimmten Betriebssystemumgebung definierbar.

Daniel R Hicks
quelle
+1, der Schlüssel hier ist, dass es viele Bedeutungen des Begriffs "Mikrocode" gibt, und ich denke, dass das OP wirklich etwas über "Mikrocode-Aktualisierungen" wissen möchte, nicht über die anderen Bedeutungen.
Peter Cordes
3

[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.

Harry Johnston
quelle
1

Mikrocode ( "Steuerspeicher" ) sind Daten, die sich in einem flüchtigen oder nichtflüchtigen Speicher befinden - im Allgemeinen ein eher kleiner, aber sehr breiter Speicher, dessen Datenausgangssignale mit den Steuersignaleingängen von parallelen Hardware - Funktionseinheiten, Zufallssteuerlogik usw. Verdrahtet sind Die Adresseneingänge des Mikrocodespeichers werden von einer Zustandsmaschine bereitgestellt, die jeweils ein Speicherwort ("Mikroprogrammanweisung") durchläuft, um die Steuersignale eines oder mehrerer Hardware-Blöcke effektiv zu sequenzieren . Dieses Zeitmultiplexverfahren ermöglicht die Implementierung komplexer Operationen mit deutlich weniger Zufallslogik.

In modernen Mikroprozessoren kann es eine Hierarchie von Mikrocode- / Sequenziereinheiten geben, die erforderlich sind, um die physikalische Silizium-Mikroarchitektur zu einer allgemeineren Architekturfamilie mit einer gemeinsamen "Maschinencode" -Schnittstelle zu abstrahieren. Beispielsweise kann es mehrere Schichten von Mikrocode / Sequenzierung geben, um Befehlsdecoder und Gleitkommaeinheiten zu implementieren.

Unter Firmware im herkömmlichen Sinne versteht man alle Software / Daten, die sich in einem nichtflüchtigen Speicher befinden, von dem erwartet wird, dass sie selten oder nie geändert werden. Dies steht in direktem Gegensatz zu Software, die im Systemspeicher gespeichert oder vielmehr in diesen geschrieben und von diesem ausgeführt wird und die sich ständig ändert. Mikrocode bezieht sich speziell auf Daten, die ein Mikroprogramm zur Ablaufsteuerung von Hardware darstellen.

Mikrocode kann in Firmware implementiert sein / Firmware kann Mikrocode enthalten, aber sie sind nicht gleich.


quelle
1
Moderne x86-CPUs sind viel fester verkabelt als Sie beschreiben. Es hört sich so an, als würden Sie einen 386 ohne Pipeline beschreiben, keinen Haswell / Skylake. Die "Mikrocode-Updates" von Intel können viel mehr als nur die Dekodierung von Mikrocode-Befehlen ändern . Sie können z. B. den Schleifenpuffer deaktivieren (in Skylake, um das SKL150-Erratum zu beheben), da die CPU dies nach Möglichkeit ermöglicht, falls Hardware-Fehler entdeckt werden.
Peter Cordes
@PeterCordes 1) x86-Architektur ist für die Darstellung des Mikrocode-Konzepts irrelevant. 2) Wenn Sie meine Antwort verstanden hätten, wären wir uns einig, dass sie Steuersignale
1
Nein, Intel Uops sind keine wirklichen Steuersignale. Sie programmieren die Logikeinheiten nicht direkt wie in einer klassischen MIPS-Pipeline. uops werden vom Scheduler für nicht ordnungsgemäße Ausführung gelesen, um herauszufinden, welche uops eine Datenabhängigkeit von welchen anderen uops haben. Dies ist ein ganz anderes internes Modell als ein 6502, bei dem die mehreren Schritte zum Ausführen eines einzelnen Befehls aus einem Decodierungs-ROM gelesen werden. Was Sie beschreiben, ist eine historische Bedeutung des Begriffs Mikrocode, aber es ist nicht das, worum es bei "Mikrocode-Updates" für moderne CPUs geht.
Peter Cordes
Wo habe ich (oder die Frage dazu) Intel- oder x86-Mikrooperationen erwähnt (was NICHT mit einem "Mikroprogramm" in einem Kontrollspeicher identisch ist)? Auch ist buchstäblich alles, was von einem Kontrollspeicher geliefert wird, ein Kontrollsignal, unabhängig davon, ob das Signal sequenziert oder statisch, logisch oder drahtgebunden ist oder nicht. Was ich beschreibe, ist die wörtliche Definition von Mikrocode, auch "Mikrocode-Updates". Sie sind mit dem Sequenzierungsaspekt meiner Antwort beschäftigt, da viele der besagten Signale in einem Haswell statisch sind. Für das Protokoll, viele sind sequenziert, ist die Sequenzierung absolut nicht gegenseitig ausschließen Pipelining oder OoOE.
1
Sie beantworten also die Frage "Was ist ein Mikrocode-Befehl?" Richtig , aber ein "Mikrocode-Update" für eine CPU hat nicht die gleiche technische Bedeutung wie das Wort "Mikrocode". Dies ist ein wichtiger Punkt, der ausdrücklich erwähnt werden sollte, da er meines Erachtens die Ursache für die Verwirrung des OP ist.
Peter Cordes
0

Firmware ist ausführbarer Code, der sich in einem ROM oder einem anderen nichtflüchtigen Speicher befindet.

Der ursprüngliche und primäre Zweck der Firmware besteht darin, beim Starten einer CPU vorhanden zu sein. Daher muss Code ausgeführt werden, um das System zu starten oder zu booten, zu dem die CPU gehört. Bei PCs wird Firmware auch zur Bereitstellung von Diensten für das ausgeführte Betriebssystem verwendet und enthält Code für die eingebetteten Controller, die Lüfter, Stromversorgung und einige andere Dinge steuern, sowie Code für das ME / PSP, das im Hintergrund ausgeführt wird .

Peripheriegeräte, die Firmware enthalten, z. B. Festplatten, USB-Geräte usw., verfügen über eine integrierte CPU.


Der Mikrocode ist kein ausführbarer Code, sondern ein Code, der von den internen Einrichtungen eines Geräts verwendet wird.

Es wird mit einem WRMSR-Befehl in Intel- oder AMD-CPUs geladen. Zum Laden der Firmware in ein Gerät muss ein ROM oder ein Flash-Medium programmiert werden oder es muss ein kleines Ladeprogramm auf dem Gerät vorhanden sein, um die Firmware zu akzeptieren.

Firmware- und Mikrocode-Updates sind in einer ähnlichen Kategorie - Dinge, die Sie tun müssen, um die Hardware zum Laufen zu bringen, und die möglicherweise von Zeit zu Zeit aktualisiert werden müssen -, aber es sind sehr unterschiedliche Dinge.

Komplexe Befehle werden in vielen CPUs nicht direkt in der Hardware verkabelt, sondern von einer kleineren CPU-ähnlichen Einrichtung in der Haupt-CPU "ausgeführt". Microcode steuert diese Vorgänge. Dies geht zumindest auf das Motorola 68000 zurück, das über ein "MicroROM" mit Mikrocode verfügte.

Niemand außer Intel- oder AMD-Prozessoren weiß, was der Mikrocode wirklich steuert oder tut, da keine Details veröffentlicht werden. Es gibt Versuche, es zu hacken. Referenz .

In der Praxis werden Mikrocode-Aktualisierungen im Wesentlichen verwendet, um Anweisungen zu deaktivieren, die Probleme bei bekannten Modellen / Schritten von CPUs verursachen, und die neuesten CPUs von Intel erfordern häufig mindestens eine Mikrocode-Aktualisierung, bevor sie zuverlässig funktionieren.


Eine gewisse Perspektive darüber, was ein CPU-Mikrocode tatsächlich tun könnte / tatsächlich tun könnte, könnte sich beim Lesen des 6502-PLA-Decodierungs-ROMs ergeben - der 6502 ist eine alte 8-Bit-CPU, und seine Anweisungen wurden von einer internen PLA sequenziert / gesteuert. Die PLA würde grundsätzlich sagen, welche Teile des Chips bei jedem Schritt jedes Befehls beteiligt waren (6502 Befehle reichen von 2 bis 7 Zyklen). Dies ist weit, weit vor Dingen wie Caching, superskalarer Architektur, Verzweigungsvorhersage usw. Ich bin nicht sicher, ob der Mikrocode auf modernen CPUs so etwas wie diesen PLA steuern würde.

LawrenceC
quelle
1
Die "Mikrocode-Updates" von Intel können viel mehr als nur die Dekodierung von Mikrocode-Befehlen ändern . Sie können z. B. den Schleifenpuffer deaktivieren (in Skylake, um das SKL150-Erratum zu beheben), da die CPU dies nach Möglichkeit ermöglicht, falls Hardware-Fehler entdeckt werden.
Peter Cordes
1
Interessanter Punkt beim 6502 PLA, aber Pipeline-CPUs müssen fester verkabelt werden. Klassische MIPS verwendeten verschiedene Felder des Befehlsworts, um die interne Logik auf eine ähnliche Weise direkt zu steuern, aber natürlich hat eine Pipeline-CPU mehrere Befehle im Flug, möglicherweise einen für jede Pipeline-Stufe, wenn es keine Verzögerungen gibt. (Oder für superskalare, 2 oder mehr in jeder Pipeline-Phase und für nicht ordnungsgemäße Ausführung ist es sogar noch komplexer.) Viele der Interna moderner CPUs sind fest verdrahtet, aber mit Reglern, mit denen Mikrocode-Aktualisierungen optimiert werden können.
Peter Cordes
0

Terminologie

Ich beantworte dies selbst, indem ich nur den Verwendungskontext in diesem PDF verwende .

  • Firmware - Der Mikrocode wird über einen von der CPU-Firmware bereitgestellten Pfad aktualisiert.

    "In der Regel wird ein Mikrocode-Patch von der Motherboard-Firmware (z. B. BIOS oder UEFI) oder dem Betriebssystem während des frühen Startvorgangs auf die CPU hochgeladen ."

  • Mikrocode - sind selbst die Daten, die von der "Instruction Decode Unit (IDU)" verwendet werden. Eine IDU kann entweder fest verdrahtet oder mikrocodiert sein . Mikrocodiert heißt in diesem Zusammenhang einfach programmiert. AUCH bedeutet "die Vielzahl von Mikrocodes". Die IDU

    Die IDU spielt eine zentrale Rolle innerhalb der Steuereinheit und erzeugt Steuersignale basierend auf dem Inhalt des Befehlsregisters.

  • Makrobefehl Ein Befehl, der an die IDU gesendet wird, um dekodiert zu werden, kann eine beliebige Menge von Mikrobefehlen zurückgeben .

  • Mikro-Instruktion ein vorberechnet „Steuerwort“, die alle dem Staat und Anweisungen für einen Taktzyklus auszuführen. Wird an die CPU gesendet, um die Steuersignale zu generieren .

In diesem Zusammenhang müssen Sie den Mikrocode also mit Firmware aktualisieren. Sie würden Makrobefehle an die mikrocodierte IDU senden, um den Makrobefehl in einen "Mikrobefehl" zur Ausführung auf der CPU aufzulösen, der sie in Steuersignale umwandelt.

Meine Lektüre davon

Der Mikrocode besteht aus Daten , die Aktualisierung des Mikrocodes erfolgt jedoch über die Firmware. Und verwirrenderweise, da es sich um eine interne Nachschlagetabelle handelt, handelt es sich sicherlich auch um Firmware , da sie im Wesentlichen auf dem Chip gespeichert und im Ausführungsfluss des Chips verwendet wird. Ich denke, Sie könnten argumentieren, dass General MIDI, Hardware-PostScript und Steuersignale für dumme Terminals in Hardware ebenfalls in demselben Sinne interpretiert werden und dass etwas die Anweisung entgegennimmt und letztendlich in einer Art Interpretationsprozess "Steuersignale" erzeugt .

Es scheint, als hätten wir spezielle Namen für diese Prozesse und Komponenten in der CPU: "IDU" in einer CPU und einen Namen für die spezielle Eingabetabelle, die die IDU verwendet und die alle "Mikrobefehle" enthält: den "Mikrocode". Die Informationen zu diesem Vorgang sind urheberrechtlich geschützt und geschlossen. Ich würde annehmen, dass dies mit jeder anderen Technologie von Modems (mit ATDT und dergleichen auf einem Hayes-Modem) bis zu MIDI-Karten analog ist, aber wir nennen die spezifische Nachschlagetabelle nicht "Mikrocode" und verwenden stattdessen den Oberbegriff "Firmware" für der Flash-Prozess und die gesamte Nutzlast auf dem Chip gespeichert.

Evan Carroll
quelle
2
Linux (und Windows) können den CPU-Mikrocode völlig unabhängig von der Motherboard-Firmware aktualisieren, von der Sie sprechen. Motherboard Firmware macht das neueste CPU Mikro enthält und einen Mechanismus für sie genommen werden , bevor jeder Code von der Festplatte geladen wird, aber wenn Sie nicht Ihre Mobo Firmware für eine Weile aktualisiert haben, können Sie immer noch das neueste CPU Mikro haben lediglich durch Software - Update. Sie machen viel zu viel aus der Verbindung zwischen mobo-Firmware und CPU-Mikrocode. Es ist nützlich, dass die Firmware den Mikrocode bei jedem Start aktualisiert, dies ist jedoch nicht erforderlich (außer aus Stabilitätsgründen manchmal).
Peter Cordes
2
Außerdem werden nicht alle x86-Makrobefehle decodiert, indem sie im Mikrocode-Sequenzer-ROM nachgeschlagen werden. Auf Intel-CPUs sind Anweisungen, die auf 4 oder weniger Uops (Micro-Ops) dekodieren, in den Dekodern fest kodiert. Die meisten Anweisungen sind in diesem Sinne nicht "mikrocodiert" . Die Ganzzahldivision ist ( divund idiv), aber selbst die FP-Division ist eine einzelne UOP (da sie leistungskritischer ist, erfolgt die iterative Logik in mehreren Schritten innerhalb der Divisionseinheit anstelle von mikrocodierten UOPs).
Peter Cordes
@PeterCordes Du bist der Typ, der diese Antwort schreibt. Du kannst jede meiner Antworten bearbeiten, um sie technisch korrekter zu machen. Du hast die Carte Blanche. Obwohl ich versuchen werde, diese Änderungen in der heutigen Nacht umzusetzen, wenn Sie wenig Zeit haben.
Evan Carroll
Wenn ich dazu komme, schreibe ich die Antwort zu Ende, die ich begonnen habe. Im Moment ist Harry Johnstons Antwort wahrscheinlich die beste, um zu beantworten, was ich glaube, dass Sie wirklich wissen wollen (was ein "Mikrocode-Update" wirklich aktualisiert, was nicht dasselbe ist wie das, was "CPU-Mikrocode" tut). weil es ein stark vereinfachter Name ist, wie es bei technischen Dingen üblich ist, die einen Namen mit einem Wort benötigen, den die Öffentlichkeit nachverfolgen kann.)
Peter Cordes
0

Ich habe einen Kurs in grundlegendem ISA-Design absolviert, hauptsächlich in Studium und Design eines RISC-Prozessors, der sich an MIPS-Konzepten orientiert. Hier ist, woran ich mich erinnere

Nach meinem Verständnis benötigen die Basisblöcke eines Prozessors wie Register, ALUs, Multiplexer und Speichermodule bestimmte Signale, damit sie ihre Arbeit ausführen können. Sie würden diese Signale als "Assertion" -Signale bezeichnen, da dies die Signale sind, die zum Betreiben dieser Blöcke erforderlich sind. CPUs sind im Wesentlichen ein Spaghetti-Block aus ALUs, Speichermodulen, Registern und anderer Hardware. Das heißt, jede CPU muss eine bestimmte Folge von Steuersignalen aktivieren, um ihre Arbeit zu erledigen (ich meine grundlegende Anweisungen wie ANDI, ORI, JMP, BNE, BEQ usw.). Ich hatte gemischte Gefühle, als ich die Signale beim Testen und Debuggen eines Befehlssatzes selbst durchsetzen musste (wörtlich alle MIPS-Anweisungen durchlaufen), da mir das Tempo des Lehrplans zu diesem Zeitpunkt noch nichts über Steuergeräte beigebracht hatte.

Andererseits läuft die Assemblersprache auf Opcodes und deren Operanden im Befehlswort hinaus (im Grunde genommen die Breite Ihres Datenbusses). In Bezug auf MIPS sind die ersten 6 Bits Ihres Anweisungsworts Ihr Opcode. Schon allein durch mathematische Prüfung können Sie Ihre ALU, Register, Speicher, Multiplexer usw. nicht "behaupten". Im Grunde genommen besteht der Rest Ihrer Hardware nur aus 6 Bits.

Nicht, wenn Sie ... EIN ANWEISUNGS-DECODIERER haben. Der Befehlsdecoder nimmt im Grunde genommen Ihren Operationscode und erzeugt ALLE Ihre "Bestätigungs" -Signale, die zum Betreiben Ihrer Hardware erforderlich sind. Befehlsdecoder unterscheiden sich jedoch in der Implementierung zwischen den Architekturen und sind in einigen Fällen programmierbar. Der Mikrocode wirkt sich auf den programmierbaren Abschnitt des Befehlsdecoders aus.

Ich bin zu der Überzeugung gelangt , dass Firmware ein allgemeiner Begriff für in Hardware eingebettete Informationen ist. In einigen Fällen wird auch von Mikrocode gesprochen, da sein Bitstrom in Hardware wie EEPROM und Flash-Speicher codiert und gespeichert werden kann. Meistens handelt es sich jedoch um kompilierten Code, asm oder sogar VHDL / Verilog-Bitstreams, die in FPGAs verwendet werden. Der Mikrocode scheint mir eine Semantik zu sein, mit der die "Assertionssignale" im Prozessor der Wahl spezifiziert werden.

Jackson Young
quelle
-2

Der Mikrocode ist eine in die CPU integrierte Firmware auf Sub-Asm-Ebene.

user259412
quelle