webentwicklung-frage-antwort-db.com.de

Was ist Intel-Mikrocode?

Nach dem, was ich gelesen habe, wird es verwendet, um Fehler in der CPU zu beheben, ohne das BIOS zu ändern. Aus meinen Grundkenntnissen in Assembly weiß ich, dass Assembly-Anweisungen von der CPU intern in Mikrocodes aufgeteilt und entsprechend ausgeführt werden. Aber Intel gibt irgendwie Zugriff auf einige Updates, während das System läuft.

Hat jemand mehr Infos dazu? Gibt es eine Dokumentation darüber, was mit Mikrocodes gemacht werden kann und wie sie verwendet werden können?


BEARBEITEN: Ich habe den Wikipedia-Artikel gelesen: Ich habe nicht herausgefunden, wie ich selbst welche schreiben kann und welchen Nutzen sie haben würde.

75
Quamis

In früheren Zeiten wurde der Mikrocode in der CPU häufig verwendet: Jeder einzelne Befehl wurde in Mikrocode aufgeteilt. Dies ermöglichte relativ komplexe Befehlssätze in einer bescheidenen CPU (bedenken Sie, dass ein Motorola 680 mit seinen vielen Operandenmodi und acht 32-Bit-Registern in 40000 Transistoren passt, wohingegen ein moderner x86-Single-Core über mehr verfügt als hundert Millionen ). Das stimmt nicht mehr. Aus Leistungsgründen sind die meisten Befehle jetzt "festverdrahtet": Ihre Interpretation erfolgt durch unflexible Schaltungen außerhalb eines Mikrocodes.

In einem aktuellen x86 ist es plausibel, dass einige komplexe Befehle wie fsin (der die Sinusfunktion für einen Gleitkommawert berechnet) mit Mikrocode implementiert werden, aber einfache Befehle (einschließlich ganzzahliger Multiplikation mit imul) sind nicht. Dies begrenzt, was mit benutzerdefiniertem Mikrocode erreicht werden kann.

Allerdings ist das Mikrocode-Format nicht nur sehr spezifisch für das jeweilige Prozessormodell (z. B. können Mikrocode für einen Pentium III und einen Pentium IV nicht frei miteinander ausgetauscht werden - und die Verwendung von Intel-Mikrocode für einen AMD-Prozessor ist natürlich nicht mehr möglich die Frage), aber es ist auch ein streng geschütztes Geheimnis. Intel hat die Methode veröffentlicht, mit der ein Betriebssystem oder ein Motherboard-BIOS den Mikrocode aktualisieren kann (dies muss nach jedem Hard-Reset durchgeführt werden; das Update wird im flüchtigen RAM gespeichert), aber der Inhalt des Mikrocodes sind undokumentiert. Das Intel® 64- und IA-32-Architekturen-Software-Entwicklerhandbuch (Band 3a) beschreibt die Aktualisierungsprozedur (Abschnitt 9.11 "Mikrocode-Aktualisierungsfunktionen"), gibt jedoch an, dass der tatsächliche Mikrocode "verschlüsselt" und taktvoll ist von Prüfsummen. Die Formulierung ist vage genug, dass so gut wie jede Art von kryptografischem Schutz verborgen sein kann, aber unter dem Strich ist es derzeit nicht möglich, dass andere als Intel einen benutzerdefinierten Mikrocode schreiben und ausprobieren.

Wenn die "Verschlüsselung" keine digitale (asymmetrische) Signatur enthält und/oder wenn die Leute bei Intel das Schutzsystem irgendwie verpfuscht haben, ist es denkbar, dass ein bemerkenswerter Reverse-Engineering-Aufwand dies könnte Ermöglicht möglicherweise die Herstellung eines solchen Mikrocodes. Angesichts der wahrscheinlich eingeschränkten Anwendbarkeit (da die meisten Anweisungen fest verdrahtet sind) besteht jedoch die Möglichkeit, dass dies in Bezug auf die Programmierleistung nicht viel bringt.

76
Thomas Pornin

Stellen Sie sich eine virtuelle Maschine oder einen Simulator vor, bei dem beispielsweise qemu-arm einen Armprozessor auf einem x86-Host simulieren kann. Idealerweise hat die Software, die auf dem simulierten Arm ausgeführt wird, keine Ahnung, dass es sich nicht um einen echten Arm handelt. Nehmen Sie diese Idee auf die Ebene, auf der der gesamte Chip so konzipiert ist, dass er immer wie ein x86 aussieht. Die Software weiß nie, dass sich einige programmierbare Elemente im Chip befinden. Und dass ein anderer Prozessor im Inneren etwas für den Zweck des Implementierens/Simulierens eines x86 entwickelt wurde. Angeblich ist die beliebte AMD 29000-Produktlinie einfach verschwunden, weil das Hardwareteam und möglicherweise der Prozessor/Core die Eingeweide eines frühen x86-Klons waren. Transmeta, in dem Linus arbeitete, verfügte über einen vliw-Prozessor, der für x86 mit geringem Stromverbrauch ausgelegt war. In diesem Fall war die Übersetzungsschicht kein Geheimnis. Vliw, sehr langes Unterrichtswort, RISC auf das Äußerste gebracht, ist die Art von Dingen, die Sie für diese Art von Aufgabe bauen.

Nein, es handelt sich nicht so sehr um eine Emulationsebene, wie ich vermute, da läuft dort kein Linux mit einem QEMU-Programm in jedem Chip. Es ist irgendwo zwischen festverdrahtet, wo es keine Software/Mikrocode in der Mitte gibt und einer vollständigen Emulation. Die programmierbaren Bits können wie ein FPGA oder programmierbare Gatter sein, oder es kann sich um Software oder programmierbare Zustandsmaschinen handeln, was nicht programmierbare Gatter bedeutet, nur was auf den Gattern läuft, ist programmierbar.

Ihre Nicht-x86-Prozessoren ohne großen Eisentyp. Nehmen wir an, ARM sind fest verdrahtet, kein Mikrocode. Mikrocontroller, PIC, MSP430, AVR, nehmen an, dass diese nicht mikrocodiert sind. Grundsätzlich wird nicht davon ausgegangen, dass alle Prozessoren mikrocodiert sind, wenige, wenn es Prozessorfamilien gibt. Es ist nur so, dass diejenigen, mit denen wir in PCs zu tun haben, waren und sind, und es kann sich so anfühlen, als wären sie alle.

So unterhaltsam es auch klingen mag, mit diesem Mikrocode zu spielen, es ist wahrscheinlich sehr spezifisch für die Prozessorfamilie, und Sie werden wahrscheinlich nie Zugriff darauf bekommen, wie er funktioniert, es sei denn, Sie arbeiten für Intel oder AMD, von denen jeder wahrscheinlich seine eigenen Interna hat. Sie müssten also einen Job bei einem der beiden bekommen und sich dann durch die Gräben arbeiten, um eines der wahrscheinlich Elite-Teams zu werden, das diese Arbeit erledigt. Und wenn Sie erst einmal so weit sind, dass Ihre Karriere in der Falle ist, können Ihre Fähigkeiten auf einen Job in einem Unternehmen beschränkt sein. Möglicherweise macht es mehr Spaß, einzelne GPUs auf einer Grafikkarte zu programmieren, die dokumentiert ist oder zumindest über Tools verfügt. Dies können Sie heute tun, ohne 10 Jahre bei AMD oder Intel zu verbringen, um möglicherweise nichts mehr zu erreichen.

17
old_timer

Normalerweise schreibt man keinen Mikrocode. Um dies zu tun, sind genaue Kenntnisse der CPU-Mikroarchitektur erforderlich. Intel veröffentlicht keine allgemeinen Informationen zu ihrer Mikroarchitektur oder ihrem Mikrocode.

9
Paul R