[NB: cette réponse est spécifiquement destinée à aborder la récente modification et ne s'ajoute pas aux nombreuses réponses pertinentes qui ont déjà été publiées.]
Donc, pour réitérer: le microcode (du moins à première approximation) est un type spécifique de micrologiciel.
"Microcode" dans ce contexte n'est que du marketing pour "micrologiciel du processeur."
Eh bien, ce n'est pas du marketing. Le marketing l'aurait appelé XBoost Pro(TM) ou quelque chose du genre. En fait, c'est un terme technique; si vous concevez des CPU, la distinction entre le microcode et les autres micrologiciels du CPU (et le type de micrologiciel typique pour d'autres appareils) est importante pour vous. Sinon, probablement pas.
Si vous concevez des cartes mères ou écrivez des systèmes d'exploitation, vous utilisez probablement "mise à jour microcode" pour faire court au lieu de l'expression moins familière "mise à jour du micrologiciel du CPU". La plupart des mises à jour du micrologiciel du CPU affectent principalement le microcode, donc c'est assez proche de la même chose. Vous connaissez probablement la différence, mais vous n'avez pas besoin d'y prêter attention.
L'utilisateur final n'a pas besoin de connaître ou de se soucier de la différence, et dans un monde idéal, n'entendrait jamais le mot "microcode" du tout.
Je suppose que cela a attiré votre attention dans la couverture médiatique des récentes failles d'exécution spéculative, bien que vous l'ayez peut-être également entendu plus tôt dans un contexte qui rendait évident que vous n'aviez pas besoin de vous en soucier. Ces vulnérabilités ont été publiées plus tôt que prévu, ce qui pourrait expliquer pourquoi la couverture médiatique a été moins contrôlée que d'habitude. Du point de vue de l'utilisateur final, vous devez installer des mises à jour du BIOS, des mises à jour du système d'exploitation et, dans certains cas, des mises à jour d'applications; vous n'avez pas besoin de savoir ni de vous soucier de celles qui incluent un nouveau microcode.
Donc, même en réalisant que vous n'avez probablement pas besoin de savoir ou de vous soucier, vous pourriez être intéressé par pure curiosité : comment pourriez-vous distinguer le microcode des autres micrologiciels?
Eh bien, la première chose à reconnaître est qu'il n'y a pas nécessairement une seule définition stricte, c'est plus une situation de Bleggs et Rubes. Néanmoins, il y a certaines choses que nous pouvons dire sur le microcode:
-
Le microcode s'exécute généralement à l'intérieur d'un CPU plutôt que sur un CPU. C'est la vue d'ensemble.
-
L'architecture du microcode ressemble généralement beaucoup à l'architecture du code ordinaire, y compris le micrologiciel ordinaire. Il sera probablement fortement parallèle, et mis en œuvre beaucoup plus près du matériel. Plusieurs des réponses existantes (y compris votre propre réponse) en discutent, bien que les détails puissent varier en fonction de la conception du CPU.
-
Bien que le matériel soit souvent conçu pour exécuter uniquement le micrologiciel fourni par le fabricant, il est pas particulièrement rare que du micrologiciel tiers soit utilisé - bien que cela puisse probablement invalider la garantie! Le micrologiciel tiers est beaucoup plus rare, bien que je crois qu'à l'ancienne époque (je parle quand un CPU était de la taille d'une boîte à pain) certains utilisateurs finaux modifiaient le microcode dans leurs CPU. Autant que je sache, ce n'est pas possible dans les CPU utilisés dans les PC.
-
Le microcode traduit généralement ou aide à mettre en œuvre une architecture d'ensemble d'instructions publique, c'est-à-dire, il exécute le code machine que le concepteur du système d'exploitation et les programmeurs d'applications utilisent. Plus d'informations à ce sujet dans la section suivante.
"Exécution vs données" beaucoup de réponses utilisent ce paradigme
Dans des sens différents et confus, je crains, mais je vais aborder mon propre commentaire. Cette section sert également à compléter le dernier point ci-dessus. L'objectif ici est d'essayer de distinguer entre le travail qu'un CPU accomplit (réalisé par une combinaison de matériel et de microcode) et le travail qu'un appareil typique accomplit (réalisé par une combinaison de matériel et de micrologiciel). Je vais prendre un exemple d'un disque dur SATA.
Le disque dur SATA suit les instructions de l'ordinateur, qui sont du type "lire les données du secteur 5 123" et "écrire ces données dans le secteur 1 321". Le micrologiciel du disque est responsable de faire en sorte que le matériel réalise cela, et il s'agit généralement d'un code assez ordinaire s'exécutant sur un CPU embarqué de quelque type. Les instructions du disque arrivent de manière séquentielle, bien qu'elles puissent ne pas être traitées dans l'ordre d'arrivée. Ces instructions ne sont pas un programme, elles sont envoyées par un programme s'exécutant sur le CPU principal. En particulier, il n'y a pas de flux de contrôle, c'est-à-dire qu'il n'y a pas d'instruction pour dire au disque SATA quelles instructions exécuter ensuite.
Le CPU est en charge de l'ordinateur. Une fois qu'il a terminé l'initialisation, il exécute les instructions ("code machine") fournies par la carte mère (le BIOS, un autre type de micrologiciel) qui lui indiquent d'exécuter le code machine fourni par le système d'exploitation, lequel lui indique d'exécuter le code machine fourni par les fournisseurs d'applications. Le CPU lui-même récupère le code machine de l'EEPROM (dans le cas du BIOS) ou de la RAM (dans le cas du système d'exploitation et des applications). En particulier, le code machine a un flux de contrôle : le code machine indique au CPU quel code machine exécuter ensuite. Vous pouvez boucler sur le même code machine de manière répétée, vous pouvez exécuter différentes parties de code en fonction des données sur lesquelles le code travaille - les instructions dans un langage d'interface de périphérique comme le code SATA peuvent effectuer un ensemble limité de tâches simples, mais le code machine peut faire n'importe quoi. (Voir aussi Complétude de Turing.)
Nous pourrions reformuler ce dernier point ci-dessus en disant que le microcode implémente généralement un langage Turing Complet ; le micrologiciel ordinaire ne le fait généralement pas.
Que signifie dire "les instructions matérielles sont interprétées" avec le microcode.
Vrai mais probablement confus; le point important est la distinction entre le code machine, qui a un flux de contrôle et est Turing Complet, et les instructions définies par une interface de périphérique comme SATA, qui ne le sont pas et ne le sont pas.
Le "microcode" s'applique-t-il au code exécuté par les cartes son
Non, les cartes son reçoivent des instructions, pas du code, tout comme les disques SATA. Les instructions peuvent être du type "jouer un La dièse" ou "interpréter ces données comme une forme d'onde et les lire". Toujours très simple.
et les cartes vidéo (GPU)?
Les cartes vidéo désuètes (celles sans GPU) sont semblables aux disques SATA. Les instructions sont du type "définir ce pixel à cette couleur" ou "écrire un A à cette position".
... Les GPU sont complexes et se situent quelque part entre les deux mondes que j'ai tenté de décrire ci-dessus. Il est probablement plus simple de les considérer comme un ordinateur spécialisé se trouvant à l'intérieur de l'ordinateur principal, avec ses propres CPUs. Il est vrai que des périphériques comme les disques SATA ont également des CPUs intégrés, mais la différence est que le CPU intégré dans un disque SATA ne s'exécute que le code fourni par le fabricant du disque, alors que les GPU exécutent également le code fourni par le système d'exploitation et/ou le fournisseur d'application. C'est vraiment une question toute différente.
TL;DR : le microcode est un type spécifique de micrologiciel, qui aide le matériel à mettre en œuvre un ensemble d'instructions Turing Complet.