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.
Antworten:
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 mitimul
) 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.
quelle
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.
quelle
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.
quelle