60 votes

Qu'est-ce que le microcode exactement et en quoi diffère-t-il du firmware ?

En ce qui concerne la terminologie, qu'est-ce exactement que le "microcode" et s'il peut être mis à jour, en quoi diffère-t-il du firmware ?

Cette question n'est pas un doublon de cette question (autant que je puisse en juger) que j'ai également posée concernant la modification du microcode. Ici, je veux strictement savoir comment utiliser ces termes correctement.

Mise à jour

J'ai une réponse sélectionnée, mais je ne suis pas particulièrement satisfait. J'ai examiné beaucoup de réponses et je trouve beaucoup de ces réponses également insatisfaisantes. Permettez-moi donc de vous présenter mes deux cadres :

  1. "Le microcode du processeur est semblable au firmware du processeur." Plus je lis cela, plus je le comprends ainsi. Dans ce contexte, "microcode" est simplement un argument marketing pour "firmware du processeur". Merci de me suivre,...
  2. Ou, je me trompe, et je sais que cela arrive ! Dans ce cas, j'ai besoin d'une idée beaucoup plus approfondie de pourquoi j'ai tort. Dans les réponses que j'ai lues qui pointent vers mon erreur, j'ai du mal à les comprendre,
    • "Exécution vs données" beaucoup de réponses utilisent ce paradigme, mais pour le CPU, cela n'a pas beaucoup de sens pour moi. Certains affirment que le firmware est exécuté, mais par quoi ? Quand il s'agit du CPU, les programmes sont-ils des instructions ou des données ?
    • Si le firmware fait le pont entre le logiciel et le matériel (comprendre : la partie génie électrique des dieux), alors comment le microcode ne satisfait-il pas également cette distinction.
    • "Interprétation" au fil du temps, cela devient encore moins clair. Que signifie dire que les "instructions matérielles sont interprétées" avec le microcode. Si c'était vrai, quelque chose serait-il aussi performant s'il n'était pas interprété mais précompilé vers différentes instructions matérielles et simplement "exécuté" ? De plus, comment le General MIDI n'est-il pas interprété de la même manière ? C'est un langage interprété par le "microcode MIDI" et s'exécute sur le matériel. Ou, les terminaux idiots qui interprètent les instructions de téléscripteur pour l'affichage visuel ?
    • Le terme "microcode" s'applique-t-il au code qui s'exécute sur les cartes son, et cartes vidéo (GPU) ?

4voto

Daniel R Hicks Points 6107

"Microcode" était le terme original, et référait aux instructions qui étaient utilisées pour mettre en œuvre un interprète pour l'ensemble d'instructions "publiques" d'un processeur.

Mais avec le temps, avec de nombreuses variations dans les schémas de mise en œuvre, la distinction, telle qu'elle était, est devenue plus floue. D'abord, il y avait le microcode horizontal vs vertical, puis divers schémas pour écrire du "microcode" (pour mettre en œuvre, par exemple, les instructions E/S) dans l'ensemble d'instructions du "processeur principal". Ensuite, il a fallu distinguer entre du code qui pouvait être facilement chargé via les opérations de "run" de programme ordinaires, et du code (pour le BIOS, par exemple) qui était sauvegardé en ROM ou dans un autre stockage protégé et relativement immuable. Ainsi, le terme "micrologiciel" a été inventé pour faire référence à ces instructions qui étaient d'une manière ou d'une autre rendues plus persistantes (et moins accessibles à la modification par l'utilisateur) dans le stockage.

Mais les choses ont changé et se sont développées de nombreuses fois depuis ces premières distinctions, et de nos jours, les termes ne peuvent être définis avec précision que dans un environnement donné de processeur et de système d'exploitation.

4voto

Harry Johnston Points 5554

[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.

3voto

Le microcode ("mémoire de contrôle") est des données à résider dans une mémoire volatile ou non volatile - généralement une mémoire plutôt petite mais très large, dont les signaux de sortie de données sont câblés aux entrées des signaux de contrôle des unités fonctionnelles matérielles en parallèle, de la logique de contrôle aléatoire, etc. Les entrées d'adresse de la mémoire du microcode sont fournies par une machine à état qui parcourt un mot de mémoire ("instruction microprogramme") à la fois, pour séquence efficacement les signaux de contrôle d'un ou de nombreux blocs matériels. Cela multiplexe temporellement le matériel et permet d'implémenter des opérations complexes avec significativement moins de logique aléatoire.

Dans les microprocesseurs modernes, il peut y avoir une hiérarchie d'unités de microcode/séquençage nécessaire pour abstraire la microarchitecture physique du silicium vers une architecture plus générale avec une interface de "code machine" commune. Par exemple, il peut y avoir plusieurs couches de microcode/séquençage pour implémenter des décodeurs d'instructions et des unités à virgule flottante.

Le micrologiciel dans le sens traditionnel est tout logiciel/données résidant dans une mémoire non volatile, qui est censé être changé rarement ou jamais. Ceci contraste directement avec le logiciel stocké dans la mémoire système ou plutôt écrit dans celle-ci et exécuté à partir de la mémoire système qui change constamment. Le microcode fait référence spécifiquement aux données représentant un microprogramme pour séquencer le contrôle du matériel.

Le microcode peut être implémenté dans le micrologiciel/le micrologiciel peut contenir du microcode, mais ils ne sont pas les mêmes.

1voto

LawrenceC Points 70381

Micrologiciel est un code exécutable placé dans une ROM ou autre mémoire non volatile.

Le but original et principal du micrologiciel est d'être là quand un CPU démarre, donc il a du code à exécuter pour démarrer ou amorcer tout système dont fait partie le CPU. Dans le cas des PC, le micrologiciel est également utilisé pour fournir des services au système d'exploitation en cours d'exécution et contient également du code pour les contrôleurs embarqués qui contrôlent les ventilateurs, l'alimentation, et quelques autres choses, ainsi que du code pour le ME/PSP qui s'exécute en arrière-plan.

Les périphériques qui prennent du micrologiciel, tels que les disques durs, les périphériques USB, etc. ont un CPU embarqué.


Microcode n'est pas un code exécutable, mais un code utilisé par les installations internes d'un appareil.

Il est chargé dans les CPU Intel ou AMD avec une instruction WRMSR. Le chargement du micrologiciel dans un appareil implique la programmation d'une ROM ou d'un support flash, ou de s'appuyer sur un petit programme de chargement présent dans l'appareil pour accepter le micrologiciel.

Les mises à jour du micrologiciel et du microcode sont dans une catégorie similaire - des choses que vous devez faire pour que le matériel fonctionne et qui peuvent nécessiter des mises à jour de temps en temps - mais ce sont des choses très différentes.

Les instructions complexes dans de nombreux CPU ne sont pas câblées directement dans le matériel, mais "exécutées" par une installation plus petite de type CPU dans le CPU principal. Le microcode contrôle ces opérations. Cela remonte au moins au Motorola 68000 qui avait une "MicroROM" contenant du microcode.

Personne d'autre que les processeurs Intel ou AMD ne sait réellement ce que contrôle ou fait le microcode, car ils ne divulguent pas les détails. Il existe des tentatives pour le pirater. Référence.

Pratiquement, les mises à jour du microcode sont essentiellement utilisées pour désactiver des instructions qui posent des problèmes sur des modèles/steppings de CPU connus, et les derniers CPU d'Intel nécessitent souvent au moins une mise à jour du microcode avant de fonctionner de manière fiable.


Une certaine perspective sur ce que pourrait réellement faire/être le microcode d'un CPU pourrait être obtenue si vous lisez à propos du décodage ROM du PLA du 6502 - le 6502 est un ancien CPU 8 bits et ses instructions étaient séquencées/contrôlées par un PLA interne. Le PLA dirait essentiellement quelles parties de la puce étaient impliquées à chaque étape de chaque instruction (les instructions du 6502 varient de 2 à 7 cycles). Cela remonte bien avant des choses comme le caching, l'architecture superscalaire, la prédiction de branchement, etc. Pas sûr que le microcode sur les CPU modernes contrôlerait quelque chose comme ce PLA.

1voto

decibel Points 341

Terminologie

Je vais répondre moi-même en n'utilisant que le contexte dans ce ce pdf.

  • Firmware - Le microcode est mis à jour à travers un chemin fourni par le firmware du CPU.

    "Typiquement, un correctif de microcode est chargé dans le CPU par le firmware de la carte mère (par exemple, le BIOS ou l'UEFI) ou le système d'exploitation pendant le processus de démarrage initial."

  • Microcode - est lui-même les données utilisées par l'unité de décodage des instructions (IDU). Un IDU peut être câblé en dur ou microcodé. Microcodé dans ce contexte signifie simplement programmé. VEUT AUSSI dire "la pluralité du microcode." L'IDU

    L'IDU joue un rôle central au sein de l'unité de contrôle et génère des signaux de contrôle en fonction du contenu du registre d'instructions.

  • Macro-instruction une instruction envoyée à l'IDU pour être décodée, peut retourner n'importe quelle quantité de micro-instructions.

  • Micro-instruction un "mot de contrôle" précalculé, tout l'état et les instructions à exécuter pour un cycle d'horloge. Envoyé au CPU pour générer les signaux de contrôle.

Ainsi, dans ce contexte, vous mettriez à jour le microcode avec le firmware. Vous enverriez des macro-instructions à l'IDU microcodé pour résoudre la macro-instruction en une "micro-instruction" à exécuter sur le CPU, ce qui les transforme en signaux de contrôle.

Ma lecture de ceci

Le microcode est des données, mais la mise à jour du microcode se fait à travers le firmware. Et de manière déroutante car vous parlez de ce qui revient essentiellement à une table de recherche interne, c'est certainement aussi lui-même du firmware dans la mesure où il est stocké essentiellement sur la puce et utilisé dans le flux d'exécution de la puce. Je pense que l'on pourrait dire que General MIDI, le PostScript matériel et les signaux de contrôle pour les terminaux idiots sont également interprétés de la même manière, matériellement, et que quelque chose prend l'instruction et génère finalement des "signaux de contrôle" dans un processus d'interprétation.

Il semble que nous avons des noms spéciaux pour ces processus et composants à l'intérieur du CPU : "IDU" sur un CPU, et un nom pour la table d'entrée spécifique que l'IDU emploie et qui contient toutes les "microinstructions" : le "microcode". Les informations sur ce processus sont propriétaires et fermées. Je supposerais que c'est analogue à toute autre technologie des modems (avec ATDT et similaires sur un modem Hayes), aux cartes MIDI mais nous ne nommons pas la table de recherche spécifique "microcode", et utilisons plutôt le terme générique "firmware" pour le processus de flashage et l'ensemble de la charge utile stockée sur la puce.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X