[NB: cette réponse est spécifiquement destinée à traiter le montage récent et n’ajoute rien aux nombreuses réponses sonores déjà postées.]
Donc, pour réitérer: le microcode (au moins en première approximation) est un type spécifique de microprogramme.
"Microcode" est dans ce contexte juste un marketing sur "microprogramme de processeur".
Eh bien, ce n'est pas du marketing. Le marketing l’aurait appelé XBoost Pro (TM) ou quelque chose du genre . C'est plutôt un terme d'ingénierie; si vous concevez des CPU, la distinction entre le microcode et les autres microprogrammes de la CPU (et le type de microprogrammes typique des autres périphériques) est importante pour vous. Si non, ce n'est probablement pas.
Si vous concevez des cartes mères ou écrivez des systèmes d’exploitation, vous utiliserez probablement «mise à jour du microcode» pour désigner la «mise à jour du microprogramme du processeur», plus lourde et moins familière. La plupart des mises à jour de microprogrammes de processeur affectent principalement le microcode, il est donc assez proche de la même chose. Vous connaissez probablement la différence, mais vous n'avez pas besoin de vous en soucier .
L'utilisateur final n'a pas besoin de connaître ni de se soucier de la différence et, dans un monde idéal, il n'entendra jamais le mot "microcode".
J'imagine que cela a attiré votre attention dans la couverture par la presse des vulnérabilités d'exécution spéculatives récentes, même si vous en avez peut-être déjà entendu parler plus tôt, dans un contexte qui rend plus évident le fait que vous ne devez pas vous en soucier. Ces vulnérabilités ont été publiées plus tôt que prévu, ce qui a peut-être eu pour résultat une couverture de presse moins soignée qu’elle ne l’aurait été autrement. Du point de vue de l'utilisateur final, vous devez installer les mises à jour du BIOS, les mises à jour du système d'exploitation et, dans certains cas, les mises à jour des applications. vous n'avez besoin ni de savoir ni de soins qui, le cas échéant, incluent un nouveau microcode.
Donc, même en réalisant que vous n'avez probablement pas besoin de savoir ou de vous inquiéter, vous pouvez toujours être intéressé par pure curiosité: comment pourriez-vous distinguer le microcode des autres microprogrammes?
Eh bien, la première chose à reconnaître est qu’il n’existe pas nécessairement une définition unique et définitive, il s’agit plutôt d’une situation de Bleggs and Rubes . Néanmoins, il y a certaines choses que nous pouvons dire sur le microcode:
Le microcode fonctionne généralement à l'intérieur d'un processeur plutôt que sur un processeur. C'est la vue de haut niveau.
L'architecture du microcode est généralement très différente de l'architecture du code ordinaire, y compris du microprogramme ordinaire. Il est susceptible d'être très parallèle et d'être implémenté 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 de la CPU.
Bien que le matériel soit souvent conçu pour exécuter uniquement le micrologiciel fourni par le fabricant, il n'est pas particulièrement rare qu'un micrologiciel tiers soit utilisé - bien que cela annule probablement la garantie! Le microcode tiers est beaucoup plus rare, bien que je pense que dans les temps anciens (un processeur avait à peu près la taille d'une boîte à pain), certains utilisateurs finaux modifiaient le microcode dans leurs processeurs. Autant que je sache, cela n’est pas possible dans le type de CPU utilisé dans les PC.
Le microcode traduit ou aide généralement à mettre en œuvre une architecture de jeu d'instructions publique, c'est-à-dire qu'il exécute le code machine utilisé par le concepteur du système d'exploitation et les programmeurs d'applications. Plus à ce sujet dans la section suivante.
"Exécution vs données" beaucoup de réponses utilisent ce paradigme
Je crains bien, mais de façon très confuse, mais je vais répondre à mon propre commentaire. Cette section sert également à développer le dernier point ci-dessus. Le but ici est d’essayer de faire la distinction entre le travail effectué par la CPU (obtenu par une combinaison de matériel et de microcode) et le travail effectué par un périphérique classique (obtenu par une combinaison de matériel et de microprogrammes). Je vais choisir un disque dur SATA.
Le lecteur SATA suit les instructions de l'ordinateur, qui suivent les instructions "lire les données du secteur 5 123" et "écrire ces données dans le secteur 1 321". Le micrologiciel du lecteur est responsable de la fabrication du matériel, et il s’agit généralement d’un code assez ordinaire fonctionnant sur un processeur intégré. Les instructions du lecteur arrivent de manière séquentielle, même si elles peuvent ne pas être traitées dans l'ordre dans lequel elles arrivent. Ces instructions ne sont pas un programme, elles sont envoyées par un programme exécuté sur la CPU principale. En particulier, il n’existe aucun flux de contrôle, c’est-à-dire aucune instruction indiquant au lecteur SATA les instructions à exécuter par la suite.
Le processeur est en charge de l'ordinateur. Une fois l’initialisation terminée, il exécute les instructions ("code machine") fournies par la carte mère (le BIOS, un autre type de microprogramme) lui ordonnant d’exécuter le code machine fourni par le système d’exploitation qui lui demande d’exécuter le code machine fourni. par les fournisseurs d'applications. La CPU récupère elle-même 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 à la CPU quel code machine exécuter ensuite. Vous pouvez parcourir le même code machine à plusieurs reprises, vous pouvez exécuter différents bits de code en fonction des données sur lesquelles le code fonctionne. Les instructions dans une langue d'interface de périphérique, comme le code SATA, peuvent effectuer un ensemble limité de tâches simples, mais le code machine peut fairen'importe quoi . (Voir aussi Complétude de Turing .)
Nous pourrions réécrire le point final ci-dessus comme suit: le microcode implémente généralement un langage Turing Complete; les micrologiciels ordinaires ne le font généralement pas.
Que veut dire "les instructions matérielles sont interprétées" avec le microcode.
Vrai mais probablement déroutant; le point important est la distinction entre le code machine, qui a un flux de contrôle et Turing Complete, et les instructions définies par une interface de périphérique telle que SATA, ce qui n’est pas et n’est pas.
Le "microcode" s'applique-t-il au code qui s'exécute sur les cartes son?
Non, les cartes son reçoivent des instructions et non du code, tout comme les disques SATA. Les instructions peuvent ressembler à "jouer un dièse" ou "interpréter ces données comme une forme d'onde et les lire". Toujours très simple.
et cartes vidéo (GPU)?
Les anciennes cartes vidéo (sans GPU) sont identiques aux disques SATA. Les instructions sont comme "régler ce pixel sur cette couleur" ou "écrire un A à cette position".
... Les GPU sont compliqués 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é installé à l'intérieur de l'ordinateur principal, qui possède ses propres processeurs. Il est vrai que les périphériques tels que les lecteurs SATA ont également des processeurs intégrés, mais la différence est que le processeur intégré d’un lecteur SATA n’exécute que le code fourni par le fabricant du lecteur, alors que les GPU exécutent également le code fourni par le système d’exploitation et / ou le fournisseur de l’application. Vraiment c'est une toute une question séparée.
TL; DR: le microcode est un type de micrologiciel spécifique, qui aide le matériel à implémenter un jeu d'instructions Turing Complete.