Qu'est-ce que Intel microcode?

D'après ce que j'ai lu, il est utilisé pour corriger les bugs dans le CPU sans modifier le BIOS. D'après mes connaissances de base de L'assemblage, je sais que les instructions d'assemblage sont divisées en microcodes en interne par le processeur et exécutées en conséquence. Mais intel donne en quelque sorte accès à faire des mises à jour pendant que 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?


Modifier: J'ai lu l'article wikipedia: Je n'ai pas compris comment puis-je en écrire moi-même, et quelles utilisations cela aurait.

73
demandé sur edmz 2010-12-06 16:27:16

3 réponses

Dans les temps anciens, le microcode était fortement utilisé dans le processeur: chaque instruction était divisée en microcode. Cela a permis des ensembles d'instructions relativement complexes dans un processeur modeste (considérez qu'un Motorola 68000 , avec ses nombreux modes d'opérande et huit registres 32 bits, s'adapte à 40000 transistors, alors qu'un x86 moderne monocœur aura plus d'une centaine millions ). Ce n'est plus vrai. Pour des raisons de performance, la plupart des instructions sont maintenant "câblées": leur interprétation est effectué par des circuits rigides, en dehors de tout microcode.

Dans un x86 récent, il est plausible que certaines instructions complexes telles que fsin (qui calcule la fonction sinus sur une valeur à virgule flottante) soient implémentées avec microcode, mais pas des instructions simples (y compris la multiplication entière avec imul). Cela limite ce qui peut être réalisé avec le microcode personnalisé.

Cela étant dit, le format microcode n'est pas seulement très spécifique au modèle de processeur spécifique (par exemple microcode pour un Pentium III et un Pentium IV ne peuvent pas être échangés librement entre eux-et, bien sûr, l'utilisation du microcode Intel pour un processeur AMD est hors de question), mais c'est aussi un secret sévèrement 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 (cela doit être fait après chaque réinitialisation matérielle; la mise à jour est conservée dans la RAM volatile) mais le contenu du microcode sont non documentés. Le logiciel Intel® 64 et IA-32 Architectures Le manuel du développeur (volume 3a) décrit la procédure de mise à jour (section 9.11 "microcode update facilities") mais indique que le microcode réel est "crypté" et rempli de sommes de contrôle. Le libellé est assez vague pour qu'à peu près n'importe quel type de protection cryptographique puisse être caché, 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" ne comprend pas de signature numérique (asymétrique) et / ou si les gens D'Intel ont bâclé le système de protection d'une manière ou d'une autre, il peut être concevable qu'un effort remarquable de rétro-ingénierie puisse potentiellement permettre de produire un tel microcode, mais, étant donné l'applicabilité probablement limitée (puisque la plupart des instructions sont câblées), il est probable que cela n'achèterait pas beaucoup, en ce qui concerne la puissance de programmation.

74
répondu Thomas Pornin 2010-12-06 18:05:59

Pensez vaguement à une machine virtuelle ou un simulateur où par exemple qemu-arm peut simuler un processeur arm sur un hôte x86, idéalement le logiciel fonctionnant sur le bras simulé n'a aucune idée que ce n'est pas un vrai bras. Prenez cette idée au niveau où la puce entière est conçue de telle sorte qu'elle ressemble toujours à un x86, le Logiciel ne sait jamais qu'il y a des éléments programmables à l'intérieur de la puce. Et qu'un autre processeur à l'intérieur est quelque peu conçu dans le but de implémentation / simulation d'un x86. Soi-disant la populaire gamme de produits AMD 29000 vient de disparaître parce que l'équipe matérielle et peut-être le processeur/core sont devenus les tripes d'un clone x86 précoce. Transmeta, où Linus a travaillé, avait un processeur vliw qui a été fait pour être un X86 de faible puissance. Dans ce cas, la couche de traduction n'était pas (autant) un secret. Vliw, très long mot d'instruction, RISC pris à l'extrême, est le genre de chose que vous construisez pour ce genre de tâche.

Non, ce n'est pas autant d'un couche d'émulation comme je l'implique, il n'y a pas de linux qui s'exécute avec un programme qemu à l'intérieur de chaque puce. C'est quelque part entre câblé où il n'y a pas de logiciel / microcode au milieu et une émulation complète. Les bits programmables peuvent être comme un fpga, des portes programmables, ou il peut s'agir de machines logicielles ou programmables, ce qui signifie des portes non programmables, tout ce qui fonctionne sur les portes est programmable.

Vos processeurs de type fer non-x86, Non-big. Prenez le bras par exemple, sont câblé, pas de microcode. Les 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, peu ou pas de familles de processeurs le sont. Il est juste que ceux que nous traitons dans les PC ont été et peuvent encore être, donc il peut se sentir comme ils 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'aurez probablement jamais accès à son fonctionnement sauf si vous travaillez pour Intel ou AMD, chacun d'entre eux ont probablement leurs propres internes. Donc, vous auriez besoin pour obtenir un emploi dans l'un des deux, puis de travailler votre chemin à travers les tranchées pour devenir l'un de ce qui est probablement une équipe d'élite qui fait ce travail. Et une fois que vous obtenez que loin votre carrière est piégée, vos compétences peuvent être limitées à un emploi dans une entreprise. Vous pourriez avoir plus de plaisir à programmer des GPU individuels sur une carte vidéo, quelque chose qui est documenté ou au moins a des outils, quelque chose que vous pouvez faire aujourd'hui sans passer 10 ans chez AMD ou Intel peut-être aller nulle part.

16
répondu old_timer 2010-12-06 19:38:40

Vous n'écrivez normalement pas de micro-code. Pour ce faire, il faut une connaissance intime de la micro-architecture du processeur. Intel ne publie généralement aucune information sur leur micro-architecture ou leur micro-code.

8
répondu Paul R 2010-12-06 14:00:54