En quoi consiste exactement le microcode et en quoi diffère-t-il du micrologiciel?

50

En ce qui concerne la terminologie, qu’est-ce exactement que le "microcode" et s’il peut être mis à jour, en quoi est-ce différent du micrologiciel?

Cette question n'est pas une copie de cette question (à ma connaissance) à laquelle j'ai également posé des questions sur la modification du microcode. Ici, je veux strictement savoir comment utiliser ces termes correctement.

Mise à jour

J'ai choisi une réponse, mais je n'en suis pas particulièrement satisfaite. J'ai retenu beaucoup de réponses et je trouve que beaucoup d'entre elles sont également insatisfaisantes. Alors laisse-moi te présenter mes deux cadres,

  1. "Le microcode du processeur s'apparente à un microprogramme de processeur." Alors que je lis cela de plus en plus, c'est comme ça que je le prends. "Microcode" est dans ce contexte juste un marketing sur "microprogramme de processeur". Ours avec moi, ..
  2. Ou alors je me trompe et je sais que cela arrive! Dans ce cas, j'ai besoin d'une idée beaucoup plus approfondie de la raison pour laquelle je me trompe. Dans les réponses que je lis pour indiquer que je me trompe, je ne parviens pas à les comprendre,
    • "Exécution contre données" beaucoup de réponses utilisent ce paradigme, mais pour le CPU, cela n'a pas beaucoup de sens pour moi. Certains micrologiciels d’affirmation sont exécutés, mais par quoi? S'agissant de la CPU, les programmes sont-ils des instructions ou des données?
    • Si le micrologiciel relie le logiciel et le matériel (lisez: le truc électrotechnique des Dieux), comment se fait-il que le microcode ne satisfasse pas également à cette distinction.
    • "Interpréter" au fil du temps, cela fait de moins en moins de sens. Qu'est-ce que cela signifie de dire "les instructions matérielles sont interprétées" avec Microcode. Si cela était vrai, est-ce que quelque chose serait aussi performant s'il n'était pas interprété mais précompilé avec des instructions matérielles différentes et simplement "exécuté"? De plus, comment General MIDI n'est-il pas interprété de la même manière? C'est un langage qui est interprété par "microcode MIDI" et fonctionne sur le matériel. Ou encore, des terminaux stupides qui interprètent les instructions du téléimprimeur pour l'affichage visuel?
    • Le "microcode" s'applique-t-il au code qui s'exécute sur les cartes son et les cartes graphiques (GPU) ?
Evan Carroll
la source
Je ne suis pas un expert, mais je dirais que le microcode est un microprogramme de processeur. J'imagine que toutes les données sur l'exécution du microcode seraient la propriété d'Intel / AMD, mais je peux deviner comment cela fonctionnerait. Vous avez un ensemble de processeurs simple, des éléments de base tels que la récupération de mémoire et des opérateurs mathématiques. Ensuite, vous avez un jeu d'instructions complexe (tel que x86 / intel). La CPU extrait l'instruction de la mémoire et utilise le microcode pour convertir l'instruction complexe en une instruction plus simple. Un exemple serait la multiplication. La plupart des processeurs ont une instruction de multiplication, mais la multiplication consiste en plusieurs décalages de bits.
Programmdude
Le terme Microcode désigne le fait qu’il utilise / sous-tend de nombreuses instructions de «code» de la CPU. En gros, il indique au processeur comment émuler les instructions et les fonctionnalités. D'où son nom. Du point de vue du propriétaire de l'ordinateur, il s'agit d'un autre ensemble de code fourni par le fournisseur du matériel. Il peut donc être résumé sous forme de microprogramme.
eckes
OMI, la meilleure réponse simple est: "Chaque fois qu'un processeur exécute une instruction, il exécute en fait un programme de microcode." Ce qui vous semble être une instruction à processeur unique est une séquence particulière d'instructions de microcode, un "programme de microcode". Chaque instruction a son propre programme de microcode. Les instructions individuelles du microcode activent / désactivent / etc. les différents bits internes du processeur.
Ethan Reesor

Réponses:

57

L'origine du mot firmware se situe à mi-chemin entre matériel et logiciel - logiciel intégré au matériel. Cela fait référence aux logiciels qui sont stockés dans une mémoire non volatile sur un périphérique matériel. Des exemples sont la mémoire EEPROM et la mémoire flash intégrée à des périphériques matériels, lorsqu'elles sont utilisées pour stocker du code exécuté par le périphérique lui-même.

Il est de plus en plus courant dans certains types de matériel que son "firmware" soit stocké dans le logiciel du pilote et chargé sur le périphérique lors de son démarrage / initialisation, au lieu de le laisser en permanence sur le périphérique. Par exemple, de nos jours, stocker quelques centaines de ko de code de micrologiciel dans un pilote de logiciel chargé sur le système d'exploitation hôte et l'envoyer au périphérique initialisé par le pilote, par exemple.

Ceci est souvent encore appelé "firmware" même si, en fonction de la définition du firmware que vous acceptez, vous ne pouvez pas, techniquement, le considérer comme un firmware car il ne réside pas sur le matériel (si vous détachez le matériel et le placez sur un autre ne conservera pas cette version du "firmware").

Le microcode est un sous-ensemble de ce dernier type de "firmware". Microcode n'est pas un terme générique pour tous les "microprogrammes" chargés sur un périphérique au démarrage. Au lieu de cela, il est spécifique aux processeurs, où le microcode constitue essentiellement la couche de traduction entre les instructions de processeur standard de niveau supérieur et les opérations de niveau inférieur spécifiques à ce processeur. Il est chargé au démarrage par le BIOS sur le processeur, mais peut également être remplacé ultérieurement par l’OS.

Une mise à jour vers le microcode peut permettre de modifier le comportement de bas niveau d'un processeur pour contourner certains bogues à découvrir, sans avoir à remplacer le matériel du processeur. Microcode contient généralement le mappage le plus efficace possible d'instructions de niveau supérieur à inférieur pour une vitesse et une efficacité énergétique optimales. Ainsi, lorsqu'un changement de microcode est nécessaire pour corriger un bogue, il peut en résulter des performances réduites.

Notez que Meltdown (la vulnérabilité affectant uniquement les puces Intel) ne peut pas être corrigé uniquement avec les mises à jour du microcode et nécessite des modifications des fonctionnalités du système d'exploitation principal, ce qui peut réduire davantage les performances. Spectre (la vulnérabilité des puces Intel, AMD et ARM) peut être corrigé uniquement avec les mises à jour du microcode.


Pour répondre à certaines de vos questions spécifiques depuis votre modification:

  1. Oui, le microcode est essentiellement un microprogramme exécuté sur le processeur. Le terme spécial "microcode" désigne spécifiquement le microprogramme d'un processeur contenant le plan de conversion du langage machine standard en instructions de processeur de bas niveau. C'est donc un terme plus spécifique que firmware.

    Notez que, comme indiqué plus haut, il n’est pas stocké sur le processeur tant qu’il est éteint, mais chargé dessus à chaque démarrage, il ne fonctionne donc pas comme un firmware traditionnel. Cependant, beaucoup de matériel le fait maintenant et s'appelle toujours "firmware"; l'appeler firmware est donc acceptable.

  2. Je ne pense pas que tu aies tort. Le micrologiciel n'a pas besoin d'être écrit dans un certain langage machine et son exécution ne doit pas être déclenchée d'une certaine manière. A un certain niveau bas, tout code machine est une "donnée" qui est "lue" par un processeur et interprétée d'une certaine manière.

    Le terme "microcode" est généralement utilisé pour les unités centrales principales et non pour les cartes graphiques ou autres matériels, même si le code de ces autres périphériques peut être chargé de la même manière.

thomasrutter
la source
1
Votre deuxième phrase est incorrecte. le micrologiciel comprend les logiciels stockés dans la ROM. Il était une fois la plupart des microprogrammes en ROM, avant que les alternatives ne deviennent abordables.
Harry Johnston
1
Clairement, le "microcode" est spécifique à une CPU. La question est autre que d'être spécifique, est-ce que ça fait différent. En supprimant la portée ("la CPU"), vous obtenez une citation presque directe de "couche de traduction entre les instructions de niveau supérieur et les opérations de niveau inférieur". C'est à peu près juste la définition du firmware. N'est-ce pas ce que tous les microprogrammes font? C'est beaucoup de mots, mais je pense que la description la plus descriptive et la plus concise est la suivante: "Le microcode de processeur s'apparente à un microprogramme de processeur".
Evan Carroll
@Evan, la plupart des périphériques reçoivent leurs instructions indirectement, envoyées à partir du code exécuté sur le processeur. Seul le processeur traite directement le code fourni par l'utilisateur. Notez également que la plupart des périphériques contiennent un processeur intégré exécutant le microprogramme et que ce dernier peut disposer de son propre microcode. La distinction peut ne concerner que les concepteurs de matériel et les programmeurs de noyau, mais ce n’est pas une distinction arbitraire.
Harry Johnston
"la plupart des périphériques contiennent un processeur intégré qui exécute le micrologiciel, et ce processeur peut avoir son propre microcode", c'est ce que je veux dire. Donc, le code qui traite un flux MIDI sur une carte son est aussi un "microcode"? Ou le code qui dessine / rend les caractères d'affichage sur un terminal muet?
Evan Carroll
Non. Le code en cours d'exécution sur la carte son pour traiter un flux MIDI est simplement un microprogramme ordinaire. Le code qui traite le code qui s'exécute sur la carte son pour traiter un flux MIDI serait du microcode. (En pratique, je ne suis pas sûr que le processeur embarqué sur quelque chose d'aussi simple qu'une carte son aurait besoin d'un microcode en premier lieu, mais ce n'est pas la question.) L'essentiel est qu'un flux MIDI ou les caractères envoyés à un terminal stupide, ne sont pas un code. Ce ne sont que des données.
Harry Johnston
23

https://wiki.debian.org/Microcode

CPU Microcode

Le microcode du processeur s'apparente au microprogramme du processeur. Le noyau peut mettre à jour le microprogramme du processeur sans avoir à le mettre à jour via une mise à jour du BIOS. Une mise à jour du microcode est conservée dans la mémoire volatile, ainsi le BIOS / UEFI ou le noyau met à jour le microcode à chaque démarrage.

Les processeurs d'Intel et d'AMD peuvent nécessiter des mises à jour de leur microcode pour fonctionner correctement. Ces mises à jour corrigent des bugs / errata pouvant entraîner des problèmes de traitement, de corruption du code et des données, ainsi que du blocage du système.

Le BIOS (ou UEFI) met à jour le microcode de la CPU lors du démarrage. Toutefois, le fabricant de la carte mère ne publie généralement pas de mises à jour fréquentes du BIOS / UEFI, ou l'utilisateur n'installe pas ces mises à jour. Pour ces raisons, le processeur système est susceptible de fonctionner avec un microcode obsolète sur un grand nombre de systèmes.

Exemples:

https://www.win-raid.com/t3355f47-Intel-AMD-amp-VIA-CPU-Microcode-Repositories.html

julien
la source
9
Ce n'est pas si simple: le microcode est "une technique qui impose un interprète entre le niveau matériel et le niveau architectural d'un ordinateur". En tant que tel, le microcode est une couche d'instructions de niveau matériel qui implémente des instructions de code machine de niveau supérieur ou un séquençage de machine d'état interne dans de nombreux éléments de traitement numérique. Source: en.wikipedia.org/wiki/Microcode
17
Alors attendez ... un "bateau" est juste un type particulier de "véhicule"? Quel mot inutile! :-)
Harry Johnston
4
@HarryJohnston Eh bien, j'estime qu'il est plutôt utile de distinguer "un bateau" d'autres types de véhicules dans certains contextes ... et "microcode" est un type très spécifique de "quelque chose" présent dans de nombreux processeurs modernes ... ( il est donc plutôt souhaitable d’avoir un terme pour cela).
Radovan Garabík
4
@ RadovanGarabík: C'est exactement ce que dit Harry, avec sarcasme.
Peter Cordes
4
Je ne comprends pas. Si "Le noyau peut mettre à jour le microprogramme du processeur sans avoir à le mettre à jour via une mise à jour du BIOS", pourquoi le fait que "le fournisseur de la carte mère ne publie pas de mises à jour fréquentes du BIOS / UEFI" signifie que "le processeur système est est susceptible de fonctionner avec un microcode obsolète sur un grand nombre de systèmes "? Pourquoi le noyau ne corrige-t-il pas simplement le microcode? Pourquoi faire confiance au BIOS si le BIOS n’est jamais mis à jour et qu’une alternative plus fréquemment mise à jour est disponible?
Ajedi32
6

Eh bien, les "mises à jour de microcode" d'Intel sont en fait des "mises à jour de" microprogrammes "en ce sens qu'elles mettent à jour beaucoup plus que la simple unité de traduction du microcode du processeur.

Ces mises à jour de package de processeur unifié que nous appelons «mises à jour de microcode» pour Intel mettent également à jour d'autres microcontrôleurs intégrés (tels que le PMU et le cœur de la gestion de l'alimentation), ainsi que plusieurs tableaux de paramètres pour différents sous-systèmes de processeur intégrés. Ils sont plutôt complexes.

Ces informations sont disponibles sur plusieurs brevets d'Intel liés aux mises à jour de microcode et de microcode.


la source
4

Je pense que le terme "microcode" se réfère principalement à ce que le code fait (il exécute des instructions de bas niveau en utilisant des instructions même de bas niveau), tandis que le terme "firmware" se réfère principalement à la façon dont il est stocké et géré (moins facilement mis à jour qu'un logiciel , plus facilement mis à jour que le matériel). En ce sens, cela ressemble plutôt à la distinction entre une "application" et un "fichier JAR" - le même programme peut être les deux, mais vous le regardez sous deux perspectives différentes.

Incidemment, l’idée du microcode remonte à Maurice Wilkes en 1951, des décennies avant l’installation de processeurs informatiques dans du silicium.

Michael Kay
la source
3

Micrologiciel fait généralement référence au code des périphériques contenant un processeur et non le processeur lui-même, par exemple le micrologiciel d'un téléphone Android.

Le microcode est une couche de traduction entre les jeux d'instructions complexes (par exemple, 486, 686, etc.) et les instructions de niveau inférieur pour lesquelles les fabricants de puces conçoivent du silicium. Ainsi, un certain nombre d'instructions du jeu d'instructions de la CPU ne sont pas implémentées dans le silicium, mais traduites via le microcode en plusieurs instructions implémentées dans le silicium.

David Waters
la source
Mais, n'est-ce pas le cas de tous les microprogrammes? Instructions Les ABI qui pourraient être implémentées dans Silicon mais ne sont pas et sont autrement modifiables par le logiciel?
Evan Carroll
1
Les "mises à jour du microcode" d'Intel peuvent faire beaucoup plus que modifier le décodage des instructions microcodées . Par exemple, ils peuvent désactiver le tampon de boucle (dans Skylake pour corriger l'erratum SKL150) car, lorsque cela est possible, le processeur est conçu pour rendre cela possible au cas où des bogues matériels seraient découverts.
Peter Cordes
3

"Microcode" était le terme d'origine et faisait référence aux instructions utilisées pour implémenter un interpréteur du jeu d'instructions "public" du processeur.

Mais avec le temps, avec de nombreuses variations dans les schémas de mise en œuvre, la distinction, telle qu'elle était, devenait plus vague. Il y avait d’abord le microcode horizontal par rapport au vertical, puis divers schémas pour l’écriture de "microcode" (pour implémenter, par exemple, les instructions d’entrée / sortie) dans le jeu d’instructions de processeur "principal". Il fallait ensuite faire la distinction entre le code qui était facilement chargé via des opérations "d'exécution" de programme ordinaires, et le code (pour le BIOS, par exemple) qui était enregistré dans une ROM ou un autre stockage protégé et relativement immuable. Ainsi, le terme "firmware" a été inventé pour se référer à ces instructions qui ont été rendues plus persistantes (et moins accessibles pour une modification par l'utilisateur) stockées.

Mais les choses se sont transformées et tordues à plusieurs reprises depuis que ces premières distinctions ont été faites, et les termes ne peuvent plus être définis avec précision dans un environnement de processeur et de système d'exploitation donné.

Daniel R Hicks
la source
+1, la clé ici est qu'il y a beaucoup de significations du terme "microcode", et je pense que le PO veut vraiment connaître les "mises à jour du microcode", pas les autres significations.
Peter Cordes
3

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

Harry Johnston
la source
1

Un microcode ( "magasin de contrôle" ) désigne des données qui doivent 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 de signal de contrôle des unités fonctionnelles matérielles parallèles, de la logique de contrôle aléatoire, etc. Les entrées d'adresses de la mémoire du microcode sont fournies par une machine à états qui parcourt un mot de mémoire ("instruction de microprogramme") à la fois, pour séquencer efficacement les signaux de commande d'un ou de plusieurs blocs matériels. Ce matériel multiplexe dans le temps et permet aux opérations complexes d’être implémentées avec beaucoup moins de logique aléatoire.

Dans les microprocesseurs modernes, il peut exister une hiérarchie d'unités de microcode / séquençage nécessaires pour résumer la microarchitecture de silicium physique en une famille d'architecture plus générale dotée d'une interface commune "code machine". Par exemple, il peut y avoir plusieurs couches de microcode / séquençage pour mettre en œuvre des décodeurs d'instructions et des unités à virgule flottante.

Le micrologiciel au sens classique du terme désigne tout logiciel / donnée résidant dans une mémoire non volatile, qui devrait être peu ou jamais modifiée. Cela contraste directement les logiciels stockés ou plutôt écrits et exécutés dans la mémoire système qui change constamment. Microcode fait spécifiquement référence à des données représentant un microprogramme pour commander en séquence le matériel.

Le microcode peut être implémenté dans un microprogramme / le microprogramme peut contenir un microcode, mais ils ne sont pas identiques.


la source
1
Les processeurs x86 modernes sont beaucoup plus câblés que ce que vous décrivez; il semblerait que vous décriviez un 386 non pipeliné, pas un Haswell / Skylake. Les "mises à jour du microcode" d'Intel peuvent faire beaucoup plus que modifier le décodage des instructions microcodées . Par exemple, ils peuvent désactiver le tampon de boucle (dans Skylake pour corriger l'erratum SKL150) car, lorsque cela est possible, le processeur est conçu pour rendre cela possible au cas où des bogues matériels seraient découverts.
Peter Cordes
@PeterCordes 1) L'architecture x86 n'est pas pertinente pour présenter le concept de microcode 2) si vous aviez compris ma réponse, nous serions d'accord pour dire qu'elle séquence les signaux de commande, comme vous le dites
1
Non, les processeurs Intel ne sont pas vraiment des signaux de contrôle. Ils ne programment pas directement les unités logiques comme dans un pipeline MIPS classique. Les uops sont lus par le planificateur hors service pour déterminer quels uops ont une dépendance de données par rapport à d'autres uops. Il s’agit d’un modèle interne très différent du modèle 6502, dans lequel les multiples étapes d’exécution d’une seule instruction sont lues à partir d’une ROM de décodage. Ce que vous décrivez est une signification historique du terme microcode, mais ce n’est pas ce que sont les "mises à jour de microcode" pour les processeurs modernes.
Peter Cordes
Où ai-je (ou la question d'ailleurs) mentionné les micro-opérations Intel ou x86 (qui n'est PAS identique à un "microprogramme" dans un magasin de contrôle)? De plus, littéralement, tout ce qui est fourni par un magasin de contrôle est un signal de contrôle, que le signal soit séquencé ou statique, logique ou câblé. Ce que je décris est la définition littérale du microcode, ainsi que des "mises à jour du microcode". Vous êtes suspendu à l'aspect séquencement de ma réponse, car bon nombre desdits signaux dans un Haswell seront statiques. Pour mémoire, beaucoup sont séquencés, le séquençage n’est absolument pas exclusif au pipelining ou à OoOE.
1
Vous répondez donc correctement à la question "Qu'est-ce qu'une instruction microcodée?" , Mais une "mise à jour de microcode" pour un processeur n'a pas la même signification technique que le mot "microcode". C'est un point important qui doit être explicitement souligné, car c'est à la base de la confusion du PO, je pense.
Peter Cordes
0

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

Le micrologiciel a pour objectif principal d’être présent lors du démarrage d’un CPU. Il a donc un code à exécuter pour démarrer ou amorcer le système, quel qu’il soit. Dans le cas des PC, le micrologiciel sert également à fournir des services au système d'exploitation en cours d'exécution et contient également du code pour les contrôleurs intégrés contrôlant les ventilateurs, l'alimentation, etc., ainsi que du code pour le ME / PSP qui s'exécute en arrière-plan. .

Les périphériques dotés d'un microprogramme, tels que les disques durs, les périphériques USB, etc., sont dotés d'un processeur intégré.


Le microcode n'est pas un code exécutable, mais un code utilisé par les installations internes d'un périphérique.

Il est chargé dans les processeurs Intel ou AMD avec une instruction WRMSR. Le chargement d'un micrologiciel dans un périphérique implique la programmation d'une ROM ou d'un support flash, ou bien la présence d'un petit programme de chargement dans le périphérique pour accepter le micrologiciel.

Les mises à jour de micrologiciels et de microcodes appartiennent à la même catégorie. Ce que vous devez faire pour que le matériel fonctionne et que vous pouvez avoir besoin de mettre à jour de temps en temps, mais ce sont des choses très différentes.

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

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

Dans la pratique, les mises à jour du microcode servent essentiellement à désactiver les instructions qui posent des problèmes sur les modèles / processeurs de processeurs connus, et les derniers processeurs d'Intel nécessitent souvent au moins une mise à jour du microcode avant de fonctionner de manière fiable.


Si vous avez connaissance de la ROM de décodage PLA 6502, vous obtiendrez un aperçu de ce qu’un microcode CPU pourrait réellement faire est réellement utilisé : le 6502 est un ancien processeur 8 bits dont les instructions ont été séquencées / contrôlées par un PLA interne. Le PLA indiquerait en principe quelles parties de la puce étaient impliquées à chaque étape de chaque instruction (6502 instructions vont de 2 à 7 cycles). C'est loin, bien avant les choses comme la mise en cache, l'architecture superscalaire, la prédiction de branche, etc. Je ne sais pas si le microcode sur les processeurs modernes contrôlerait quelque chose comme ce PLA.

LawrenceC
la source
1
Les "mises à jour du microcode" d'Intel peuvent faire beaucoup plus que modifier le décodage des instructions microcodées . Par exemple, ils peuvent désactiver le tampon de boucle (dans Skylake pour corriger l'erratum SKL150) car, lorsque cela est possible, le processeur est conçu pour rendre cela possible au cas où des bogues matériels seraient découverts.
Peter Cordes
1
Point intéressant sur le 6502 PLA, mais les processeurs en pipeline doivent être plus câblés que cela. Classic MIPS a utilisé différents champs du mot d’instruction pour contrôler directement la logique interne d’une manière quelque peu similaire à celle-ci, mais bien entendu, un CPU en pipeline a plusieurs instructions en vol, potentiellement une pour chaque étape du pipeline s’il n’ya pas de blocage. (Ou pour superscalar, 2 ou plus dans chaque stade de pipeline, et pour hors service, c'est encore plus complexe.) La plupart des composants internes des processeurs modernes sont câblés, mais avec les boutons que les mises à jour du microcode peuvent modifier.
Peter Cordes
0

Terminologie

Je répondrai moi-même en n'utilisant que le contexte d'utilisation dans ce pdf .

  • Micrologiciel - Le microcode est mis à jour via un chemin fourni par le micrologiciel de la CPU.

    "En règle générale, un correctif de microcode est chargé dans la CPU par le microprogramme de la carte mère (BIOS ou UEFI, par exemple) ou par le système d’exploitation au cours du processus de démarrage initial."

  • Microcode - Ce sont les données utilisées par "l'Instruction Decode Unit (IDU)". Un IDU peut être câblé ou microcodé . Microcodé dans ce contexte signifie simplement programmé. AUSSI signifie "la pluralité de microcodes". L'UDI

    L'IDU joue un rôle central dans 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 renvoyer n'importe quelle quantité de micro-instructions .

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

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

Ma lecture de ce

Le microcode est une donnée , mais sa mise à jour se fait par le biais d'un micrologiciel. Et déroutant, parce que vous parlez de ce qui constitue essentiellement une table de recherche interne, il s’agit certainement aussi du micrologiciel en ce sens qu’il est essentiellement stocké sur la puce et utilisé dans le flux d’exécution de celle-ci. Je pense que vous pouvez faire valoir que General MIDI, le matériel PostScript et les signaux de commande pour les terminaux non intelligents sont également interprétés dans le même sens, dans le matériel, et que quelque chose prend l'instruction et génère finalement des "signaux de commande" dans une sorte de processus d'interprétation .

Il semble que nous ayons un nom spécial pour ces processus et composants dans la CPU: "IDU" sur une CPU et un nom pour la table d'entrée spécifique utilisée par l'IDU qui contient toutes les "microinstructions": le "microcode". Les informations sur ce processus sont propriétaires et fermées. Je suppose que cela est analogue à toute autre technologie allant 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", mais utilisons plutôt le terme générique "firmware". le processus de clignotement et la totalité de la charge utile stockée sur une puce.

Evan Carroll
la source
2
Linux (et Windows) peuvent mettre à jour le microcode du processeur de manière totalement indépendante du microprogramme de la carte mère dont vous parlez. Firmware carte mère ne contient la dernière microcode du processeur et un mécanisme permettant de l' appliquer avant que le code est chargé à partir du disque, mais si vous ne l' avez pas mis à jour le firmware de votre mobo pendant un certain temps, vous pouvez toujours avoir la dernière microcode du processeur par un logiciel simple mise à jour. Vous accordez beaucoup trop d'importance à la connexion entre le micrologiciel mobo et le microcode CPU. Il est utile que le microprogramme mette à jour le microcode à chaque démarrage, mais que ce ne soit pas nécessaire (sauf parfois pour la stabilité).
Peter Cordes
2
En outre, toutes les instructions macro x86 ne sont pas décodées en les recherchant dans la ROM du séquenceur à microcode. Sur les processeurs Intel, les instructions qui décodent jusqu'à 4 uops (micro-ops) ou moins sont codées en dur dans les décodeurs. La plupart des instructions ne sont pas "micro-codées" dans ce sens du mot. La division entière est ( divet idiv), mais même la division FP est unique (parce que plus critique en termes de performances, la logique itérative à plusieurs étapes est effectuée à l'intérieur de l'unité de division au lieu d'utiliser des uops microcodés).
Peter Cordes
@PeterCordes vous êtes le type pour écrire cette réponse, sentez-vous éditer n'importe laquelle de ma réponse pour la rendre plus correcte techniquement. Vous avez la carte blanche. J'essaierai d'incorporer ces changements ce soir, si vous manquez de temps.
Evan Carroll
Si j'y arrive, je finirai d'écrire la réponse que j'ai commencée. Pour l'instant, la réponse de Harry Johnston est probablement la meilleure à ce jour pour répondre à ce que vous voulez vraiment savoir (ce qu'une "mise à jour de microcode" met vraiment à jour, ce qui n'est pas la même chose que ce que fait "un microcode de CPU", parce que c'est un nom trop simpliste, comme c'est souvent le cas avec des éléments techniques qui nécessitent un nom d'un mot que le grand public puisse suivre.)
Peter Cordes
0

J'ai suivi un cours sur la conception ISA de base, principalement sur l'étude et la conception d'un processeur RISC basé sur les concepts MIPS. Voici ce que je suis venu me rappeler

À ma connaissance, les blocs de base d’un processeur, tels que les registres, les ALU, les multiplexeurs et les modules de mémoire, nécessitent certains signaux pour leur permettre de fonctionner. Vous appelleriez ces signaux vos signaux "d'assertion", car ce sont les signaux nécessaires pour faire fonctionner ces blocs. Les processeurs sont essentiellement un bloc spaghetti d’ALU, de modules de mémoire, de registres et d’autres matériels. Cela signifie que chaque CPU doit appliquer une certaine séquence de signaux de commande pour pouvoir fonctionner (par exemple, instructions élémentaires telles que ANDI, ORI, JMP, BNE, BEQ, etc.). J'éprouvais des sentiments mitigés lorsque j'ai dû affirmer moi-même les signaux (en parcourant littéralement toutes les instructions de MIPS) lors du test et du débogage d'un jeu d'instructions, car le rythme du programme ne m'avait rien appris sur les unités de contrôle à cette époque.

D'autre part, le langage assembleur se résume aux opcodes et à leurs opérandes dans le mot d'instruction (essentiellement la largeur de votre bus de données). En termes de MIPS, les 6 premiers bits de votre mot d'instruction sont votre code d'opération. Par simple contrôle mathématique, vous ne pouvez pas "affirmer" votre ALU, votre registre, votre mémoire, vos multiplexes .. en gros le reste de votre matériel avec 6 bits seulement.

Non, sauf si vous avez ... UN DECODEUR D'INSTRUCTIONS. Le décodeur d’instructions prend en gros votre code opération et génère TOUS vos signaux "d’affirmation" nécessaires au fonctionnement de votre matériel. Cependant, les décodeurs d'instructions diffèrent dans la mise en œuvre entre les architectures et, dans certains cas, sont programmables. Le microcode affecte la section programmable du décodeur d'instructions.

J'ai fini par croire que le micrologiciel est un terme général pour toute information intégrée au matériel. Dans certains cas, il fait également référence au microcode dans la mesure où son train de bits peut être codé et stocké dans du matériel tel qu'une mémoire EEPROM et une mémoire flash. La plupart du temps cependant, il s’agit de code compilé, asm ou même de flux binaires VHDL / Verilog utilisés dans les FPGA. Pour moi, le microcode ressemble à la sémantique utilisée pour spécifier les "signaux d'assertion" dans le processeur de choix.

Jackson Young
la source
-2

Le microcode est un micrologiciel intégré au processeur central.

Peter dit de réintégrer Monica
la source