web-dev-qa-db-fra.com

Qu'est-ce que le microcode Intel?

D'après ce que j'ai lu, il est utilisé pour corriger des bogues dans le processeur sans modifier le BIOS. De par ma connaissance de base de Assembly, je sais que les instructions de Assembly sont divisées en microcodes en interne par la CPU et exécutées en conséquence. Mais intel donne en quelque sorte l’accès nécessaire pour effectuer des mises à jour lorsque le système est opérationnel.

Quelqu'un a plus d'informations sur eux? Existe-t-il une documentation sur ce qui peut être fait avec les microcodes et comment peuvent-ils être utilisés?


EDIT: J'ai lu l'article de Wikipédia: je ne savais pas comment en écrire quelques-uns moi-même et quelles en seraient les utilisations.

75
Quamis

Autrefois, le microcode était très utilisé dans les processeurs: chaque instruction était scindée en un microcode. Ceci a permis à des jeux d’instructions relativement complexes dans des processeurs modestes (considérons qu’un Motorola 680 , avec ses nombreux modes d’opérande et ses huit registres 32 bits, s’intègre dans 40000 transistors, alors qu’un x86 moderne monocœur aura plus que cent millions ). Ce n'est plus vrai. Pour des raisons de performances, la plupart des instructions sont désormais "câblées": leur interprétation est assurée par des circuits inflexibles, en dehors de tout microcode.

Dans un x86 récent, il est plausible que certaines instructions complexes telles que fsin (qui calcule la fonction sine sur une valeur à virgule flottante) soient implémentées avec un microcode, mais des instructions simples (y compris la multiplication d’entiers avec imul) ne sont pas. Cela limite ce que l'on peut réaliser avec un microcode personnalisé.

Cela étant dit, le format du microcode est non seulement très spécifique au modèle de processeur spécifique (par exemple, un microcode pour un Pentium III et un Pentium IV ne peuvent pas être échangés librement) et, bien sûr, l'utilisation du microcode Intel pour un processeur AMD est hors de propos. la question), mais c’est aussi un secret gravement protégé. Intel a publié la méthode par laquelle un système d'exploitation ou un BIOS de carte mère peut mettre à jour le microcode (cette opération doit être effectuée après chaque réinitialisation matérielle; la mise à jour est conservée dans une mémoire vive volatile), mais le microcode contient le contenu sont sans papiers. Le Manuel du développeur de logiciels pour les architectures Intel® 64 et IA-32 (volume 3a) décrit la procédure de mise à jour (section 9.11 "Fonctions de mise à jour du microcode"), mais indique que le microcode réel est "chiffré" et saturé. des sommes de contrôle. Le libellé est suffisamment vague pour que pratiquement toutes les protections cryptographiques puissent être masquées, mais l’essentiel est qu’il n’est actuellement pas possible, pour des personnes autres que Intel, d’écrire et d’essayer un microcode personnalisé.

Si le "chiffrement" n'inclut pas de signature numérique (asymétrique) et/ou si les employés d'Intel ont bâclé le système de protection, il est peut-être concevable qu'un effort remarquable d'ingénierie inverse puisse permet potentiellement de produire un tel microcode, mais vu l’applicabilité probablement limitée (puisque la plupart des instructions sont câblées), il est probable que cela n’aurait pas beaucoup d’achat, en ce qui concerne le pouvoir de programmation.

76
Thomas Pornin

Pensez librement à une machine virtuelle ou à un simulateur dans lequel, par exemple, qemu-arm peut simuler un processeur de bras sur un hôte x86. Idéalement, le logiciel exécuté sur le bras simulé n’a aucune idée qu’il ne s’agit pas d’un bras réel. Prenez cette idée au niveau où toute la puce est conçue de telle sorte que vous avez toujours l’impression que vous êtes un x86, le logiciel ne sait jamais qu’il contient des éléments programmables à l’intérieur de la puce. Et qu’un autre processeur interne est quelque peu conçu pour implémenter/simuler un x86. Soi-disant, la célèbre gamme de produits AMD 29000 vient de disparaître, car l’équipe matérielle et peut-être le processeur/cœur sont devenus les tripes d’un ancien clone x86. Transmeta, où travaillait Linus, disposait d’un processeur virtuel conçu pour être un x86 de faible puissance. Dans ce cas, la couche de traduction n'était pas (en grande partie) un secret. Vliw, très longue instruction Word, RISC poussé à l’extrême, est le genre de chose que vous construisez pour ce genre de tâche.

Non, ce n'est pas aussi une couche d'émulation que ce que je suppose, il n'y a pas de linux fonctionnant là-bas avec un programme qemu à l'intérieur de chaque puce. C'est quelque part entre le câblage, où il n'y a pas de logiciel/microcode au milieu et une émulation complète. Les bits programmables peuvent ressembler à des portes fpga ou programmables, ou à un logiciel ou à des machines à états programmables, c'est-à-dire à des portes non programmables. Tout ce qui s'exécute sur les portes est programmable.

Vos processeurs de type fer non x86, non gros. Prenez par exemple ARM, ils sont câblés, pas de microcode. Microcontrôleurs, PIC, MSP430, AVR, supposent que ceux-ci ne sont pas microcodés. Fondamentalement, ne supposez pas que tous les processeurs sont microcodés, mais peu de familles de processeurs le sont. C’est juste que ceux que nous traitons avec les PC ont été et peuvent encore l’être, alors on peut avoir l’impression qu’ils le sont tous.

Aussi amusant que cela puisse paraître de jouer avec ce microcode, il est probablement très spécifique à la famille de processeurs, et vous n’obtiendrez probablement jamais un accès à son fonctionnement, sauf si vous travaillez pour Intel ou AMD, qui ont probablement chacun leur propre interne. Il vous faudra donc trouver un emploi dans l’un des deux, puis vous frayez un chemin à travers les tranchées pour devenir l’une des équipes susceptibles de faire ce travail. Et une fois que votre carrière est prise au piège, vos compétences peuvent se limiter à un emploi dans une entreprise. Vous aurez peut-être plus de plaisir à programmer des gpus individuels sur une carte vidéo, quelque chose qui est documenté ou au moins qui a des outils, quelque chose que vous pouvez faire aujourd'hui sans passer 10 ans chez AMD ou Intel sans éventuellement aller nulle part.

17
old_timer

Vous n'écrivez pas normalement de micro-code. Cela nécessite une connaissance intime de la micro-architecture du processeur. Intel ne publie pas d'informations générales sur leur micro-architecture ou leur micro-code.

9
Paul R