Was ist Intel-Mikrocode?

78

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 Unterlagen darüber, was mit Mikrocodes gemacht werden kann und wie sie verwendet werden können?


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

Quamis
quelle
4
warum brauchst du es Dies könnte der beste Weg sein, um Ihre CPU dauerhaft zu beschädigen.
Ruslik
4
Es kann verwendet werden, um Fehler in der CPU zu beheben oder Fehler einzuführen. Intel erledigt das erstere für Sie. Wenn Sie also nicht das letztere tun möchten, macht es wenig Sinn, damit herumzuspielen.
Jalf
2
Das könnte Sie interessieren: downloadcenter.intel.com/… . Bitte beachten Sie die "Detaillierte Beschreibung" in diesem Link.
Yasouser
1
Warum Intel es nicht öffnet: stackoverflow.com/questions/5806589/… Die Schaltung, auf der der Mikrocode ausgeführt wird, wird auch als "RISC-Kern" bezeichnet.
Ciro Santilli 法轮功 冠状 病 六四 事件 19
1
Eine "wie man es manipuliert" -Version: security.stackexchange.com/questions/29730/…
Ciro Santilli 法轮功 冠状 病 六四 六四 法轮功

Antworten:

77

In früheren Zeiten wurde 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 68000 mit seinen vielen Operandenmodi und acht 32-Bit-Registern in 40000 Transistoren passt, während ein moderner x86 mit einem Kern mehr als hundert Millionen haben wird ). Das stimmt nicht mehr. Aus Leistungsgründen sind die meisten Anweisungen jetzt "fest verdrahtet": Ihre Interpretation erfolgt durch unflexible Schaltkreise außerhalb eines Mikrocodes.

In einem neueren x86 ist es plausibel, dass einige komplexe Befehle wie fsin(die die Sinusfunktion für einen Gleitkommawert berechnen) mit Mikrocode implementiert werden, einfache Befehle (einschließlich ganzzahliger Multiplikation mit imul) jedoch nicht. Dies schränkt ein, was mit benutzerdefiniertem Mikrocode erreicht werden kann.

Das Mikrocode-Format ist jedoch nicht nur sehr spezifisch für das jeweilige Prozessormodell (z. B. kann der 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 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 erfolgen; das Update wird im flüchtigen RAM gespeichert), aber der Inhalt des Mikrocodes ist nicht dokumentiert. Das Software-Entwicklerhandbuch für Intel® 64- und IA-32-Architekturen(Band 3a) beschreibt den Aktualisierungsvorgang (Abschnitt 9.11 "Mikrocode-Aktualisierungsfunktionen"), gibt jedoch an, dass der tatsächliche Mikrocode "verschlüsselt" und voller Prüfsummen ist. Der Wortlaut ist vage genug, dass fast jede Art von kryptografischem Schutz verborgen sein kann, aber unter dem Strich ist es derzeit für andere Personen als Intel nicht möglich, einen benutzerdefinierten Mikrocode zu schreiben und auszuprobieren.

Wenn die „Verschlüsselung“ nicht enthalten eine digitale (asymmetrische) Unterschrift und / oder wenn die Leute bei Intel das Schutzsystem verpfuschte irgendwie, dann kann es denkbar sein , dass einige bemerkenswerte Reverse-Engineering - Aufwand könnte möglicherweise ein ermöglichen , solche Mikro zu produzieren, aber Angesichts der wahrscheinlich eingeschränkten Anwendbarkeit (da die meisten Anweisungen fest verdrahtet sind) besteht die Möglichkeit, dass dies in Bezug auf die Programmierleistung nicht viel kostet.

Thomas Pornin
quelle
43
"Dies ist nicht mehr der Fall. Aus Leistungsgründen sind die meisten Anweisungen jetzt" fest verdrahtet ": Ihre Interpretation erfolgt durch unflexible Schaltkreise außerhalb eines Mikrocodes." Ich denke nicht, dass das richtig ist. Agnor Fog hat viel Reverse Engineering für moderne x86-CPUs durchgeführt und erwähnt häufig Mikrocode. Tatsächlich denke ich, dass Mikrocode anstelle von normalen Anweisungen Pipeline und OOE wird und normale Dinge wie die Verwendung einer Speicheradresse anstelle eines Registers für eine Operation generieren zusätzliche U-Ops. Agnor Nebel Handbuch hier: agner.org/optimize/microarchitecture.pdf
Joseph Garvin
5
Außerdem emuliert pltsim, das versucht, eine vollständige x86-64-CPU-Simulation durchzuführen
Joseph Garvin
2
@ JosephGarvin: Eine weitere aufschlussreiche Tatsache ist, dass der Pentium IV einen Trace-Cache anstelle eines normalen L1-Icaches hatte .
Ninjalj
5
Das liest sich wie eine Menge Spekulationen und keine Referenzen.
24sәɹoɈ
2
Es scheint, dass ptlsim.org nicht mehr existiert, aber Marss86 basiert auf ptlsim.
Jordan Miner
18

Denken Sie locker an eine virtuelle Maschine oder einen Simulator, bei dem beispielsweise qemu-arm einen Armprozessor auf einem x86-Host simulieren kann. Idealerweise hat die auf dem simulierten Arm ausgeführte Software keine Ahnung, dass es sich nicht um einen realen Arm handelt. Bringen Sie diese Idee auf die Ebene, auf der der gesamte Chip so konzipiert ist, dass es immer so aussieht, als wären Sie ein x86. Die Software weiß nie, dass sich einige programmierbare Elemente im Chip befinden. Und dass ein anderer Prozessor im Inneren etwas für den Zweck der Implementierung / Simulation eines x86 entwickelt wurde. Angeblich ist die beliebte AMD 29000-Produktlinie einfach weggegangen, weil das Hardwareteam und möglicherweise der Prozessor / Kern zum Mut eines frühen x86-Klons wurden. Transmeta, wo Linus arbeitete, hatte einen vliw-Prozessor, der als x86 mit geringem Stromverbrauch ausgelegt war. In diesem Fall war die Übersetzungsschicht kein Geheimnis. Vliw, sehr langes Anweisungswort,

Nein, es ist nicht so sehr eine Emulationsschicht, wie ich impliziere, es läuft dort kein Linux mit einem QEMU-Programm in jedem Chip. Es liegt irgendwo zwischen fest verdrahtet, wo sich keine Software / Mikrocode in der Mitte befindet, und einer vollständigen Emulation. Die programmierbaren Bits können wie ein fpga sein, programmierbare Gatter, oder es können Software oder programmierbare Zustandsmaschinen sein, was nicht programmierbare Gatter bedeutet, genau das, was auf den Toren läuft, ist programmierbar.

Ihre nicht x86, nicht großen Eisenprozessoren. Nehmen wir zum Beispiel ARM, sind fest verdrahtet, kein Mikrocode. Mikrocontroller, PIC, MSP430, AVR, gehen davon aus, dass diese nicht mikrocodiert sind. Grundsätzlich wird nicht davon ausgegangen, dass alle Prozessoren mikrocodiert sind, es gibt nur wenige Prozessorfamilien. Es ist nur so, dass diejenigen, mit denen wir uns in PCs beschäftigen, waren und immer noch sind, also könnte es sich so anfühlen, als wären sie alle.

So unterhaltsam es auch klingen mag, mit diesem Mikrocode zu spielen, er ist wahrscheinlich sehr spezifisch für die Prozessorfamilie, und Sie werden wahrscheinlich nie Zugriff darauf erhalten, 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 elitären Teams zu werden, die diese Arbeit erledigen. Und wenn Sie so weit gekommen sind, dass Ihre Karriere gefangen ist, können Ihre Fähigkeiten auf einen Job in einem Unternehmen beschränkt sein. Vielleicht haben Sie mehr Spaß daran, einzelne GPUs auf einer Grafikkarte zu programmieren, etwas, das dokumentiert ist oder zumindest Tools enthält, etwas, das Sie heute tun können, ohne 10 Jahre bei AMD oder Intel zu verbringen, um möglicherweise nichts zu erreichen.

Oldtimer
quelle
Danke für die klare Antwort. In gewisser Weise können wir also sagen, dass eine CPU eine geringere und spezialisierte Form eines FPGA ist, und wir können denken, dass Mikrocode etwas Ähnliches wie Verilog ist?
Tu Do
1
Es ist nicht so generisch im Inneren, eher wie eine CPU in einer CPU, aber das Innere ist primitiver, möglicherweise RISC, aber wahrscheinlich einfacher als das (einfacher, da es mehrere Anweisungen erfordern kann, um etwas Interessantes oder Nützliches zu tun).
old_timer
3
"Es gibt dort kein Linux mit einem QEMU-Programm in jedem Chip." Ich hätte über diese Aussicht gelacht - bis vor ein paar Tagen. Dann wurde dies gemeldet: zdnet.com/article/minix-intels-hidden-in-chip-operating-system . Die Dinge sind viel komplizierter geworden als früher.
Euro Micelli
10

Normalerweise schreiben Sie keinen Mikrocode. Dazu sind genaue Kenntnisse der CPU-Mikroarchitektur erforderlich. Intel veröffentlicht im Allgemeinen keine Informationen zu ihrer Mikroarchitektur oder ihrem Mikrocode.

Paul R.
quelle
4
Warum sollte dies zu einem CPU-Defekt führen, solange der Mikrocode nicht dauerhaft ist? (Ich spreche hier nicht über Übertakten, ich
frage
5
@ Paul R: Mikrocode ist NICHT persistent :) Lies das Wiki noch einmal. Außerdem pflegt Linux die CPU bei jedem Neustart weiter ... Außerdem wurde im Wiki angegeben, dass normalerweise das BIOS für das Pfaden der CPU bei JEDEM Init verantwortlich ist.
Quamis
4
Wenn Sie mit Mikrocode und anderen Details der CPU-Implementierung spielen möchten, sollten Sie sich mit FPGA-Softcore-Prozessoren befassen. Oder spielen Sie einfach mit Simulatoren.
Chris Stratton
12
@Paul R: Intel-Mikrocode-Updates sind bei Hard-Resets nicht dauerhaft. Bei einem Hard-Reset kehrt der Prozessor zum werkseitigen Mikrocode zurück.
Café
5
Es gibt Mikro Simulatoren, wenn Sie mehr über Mikro lernen wollen und versuchen Sie eine aus, ex: mythsim.org , en.wikipedia.org/wiki/MikroSim , forth.com/archive/jfar/vol3/no3/article1.pdf
ChuckCottrill