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) ?

1voto

Jackson Young Points 11

J'ai suivi un cours de conception de base de l'ISA, principalement dans l'étude et la conception d'un processeur RISC modélisé sur les concepts de MIPS. Voici ce dont je me souviens

À ma compréhension, 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 fonctionner. Vous appelleriez ces signaux vos signaux "d'assertion", car ce sont les signaux nécessaires pour faire fonctionner ces blocs. Les CPU sont essentiellement un enchevêtrement d'ALU, de modules de mémoire, de registres et d'autres matériels. Ce qui signifie que chaque CPU doit émettre une certaine séquence de signaux de contrôle pour effectuer son travail (je veux dire des instructions de base telles que ANDI, ORI, JMP, BNE, BEQ, etc.). J'ai eu des sentiments mitigés à ce sujet lorsque j'ai dû émettre les signaux moi-même (littéralement en passant par toutes les instructions MIPS) lors des tests et du débogage d'un jeu d'instructions, car le programme n'avait rien appris sur les unités de contrôle à ce moment-là.

D'autre part, le langage d'assemblage se résume à des 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 constituent votre opcode. Simplement par inspection mathématique seule, vous ne pouvez pas "activer" votre ALU, registre, mémoire, multiplexeurs.. essentiellement le reste de votre matériel avec seulement 6 bits.

À moins que vous n'ayez... UN DÉCODEUR D'INSTRUCTIONS. Le décodeur d'instructions prend essentiellement votre opcode et génère TOUS vos signaux "d'assertion" nécessaires pour faire fonctionner votre matériel. Cependant, les décodeurs d'instructions diffèrent dans leur implémentation entre les architectures et, dans certains cas, sont programmables. Le microcode affecte la section programmable du décodeur d'instructions.

J'en suis venu à croire que le micrologiciel est un terme général pour toute information intégrée dans le matériel. Dans certains cas, il ferait également référence au microcode car sa séquence de bits peut être encodée et stockée dans des matériels tels que des EEPROM et des mémoires flash. La plupart du temps cependant, il s'agit de code compilé, d'asm, voire de séquences de bits VHDL/Verilog utilisées dans les FPGA. Le microcode me semble être une sémantique utilisée pour spécifier les "signaux d'assertion" dans le processeur de choix.

1voto

user37633 Points 11

Bien que certaines entreprises comme IBM considèrent le microcode comme synonyme de firmware, je pense que le microcode et le firmware sont deux concepts orthogonaux de nos jours.

Les CPU, ou autres unités de traitement numérique, sont généralement programmés à travers des instructions machine. Ces instructions, prises dans leur ensemble, constituent le jeu d'instructions pour ce processeur.

Initialement, le jeu d'instructions était implémenté directement via des connexions matérielles. Mais cela a engendré de plus en plus de difficultés à mesure que le jeu d'instructions devenait de plus en plus sophistiqué.

Il y a un célèbre aphorisme de David Wheeler : "Tous les problèmes en informatique peuvent être résolus par un autre niveau d'indirection" ref. Je pense que cela peut également s'appliquer à la motivation du microcode.

Avec l'introduction du microcode, les instructions visibles par le programmeur ne sont pas implémentées directement au niveau matériel, mais indirectement via des micro-programmes, qui sont implémentés dans le microcode invisible pour le programmeur. Et le microcode est implémenté au niveau matériel pour accomplir certaines actions fondamentales.

Avec une couche supplémentaire de microcode, la conception/déboguage des circuits matériels peut être simplifiée. Et des instructions beaucoup plus sophistiquées peuvent être réalisées avec beaucoup moins d'efforts.

À propos, je pense que le microcode est un peu similaire au jeu d'instructions RISC en ce sens qu'ils simplifient tous deux la conception matérielle.

En ce qui concerne le firmware, je pense qu'il existe principalement du firmware de démarrage et du firmware d'exécution.

Pour le firmware de démarrage, comme le firmware UEFI sur la plateforme Intel par exemple. Il est principalement écrit en langage d'assemblage/C, ce qui est plus élevé que le microcode. Il se charge d'initialiser des éléments de plus haut niveau pour la plateforme, comme configurer chaque composant matériel sur la plateforme vers un état utilisable. Ensuite booter le système d'exploitation. Et puis quitter la scène.

Pour le firmware d'exécution, je pense que de nombreux RTOS sur les plates-formes embarquées en sont des exemples. Ils fonctionnent en continu pendant que le système est en cours d'exécution. Ils s'occupent de toute la plateforme pendant l'exécution. Leur complexité et leur conception peuvent varier.

0voto

De point de vue d'Intel, le CPU est le chipset (PCH), ce que nous appelons CPU est en réalité un "Bigcore" : juste un dispositif plug-in, ucode est pour lui et est chargé via CRBUS.

Maintenant, le firmware est simplement ce qu'il est : un système d'exploitation de type linux, Minix, qui possède des pilotes pour le framework VISA (analyseur de signaux avec horloges picosecondes), et tous les dispositifs USB/SATA/PCIE/crypto/Bigcore/etc connectés utilisant l'IOSF (Intel On-chip System Fabric). Minix fonctionne sur son propre CPU dans le chipset et contrôle le Bigcore et autres choses. Voir https://kakaroto.ca/2020/08/exploiting-intels-management-engine-part-3-usb-hijacking-intel-sa-00086/

Voir également ceci pour ce qu'il y a à l'intérieur de l'ucode (désassembleur après que l'ucode décrypté soit divulgué via CRBUS, pourtant personne n'a encore piraté le chiffrement RSA moderne, mais les deux précédents ont déjà été piratés CRBUS l'a déjà décrypté) : https://github.com/chip-red-pill/uCodeDisasm

Et voir ceci pour voir ce qu'il y a à l'intérieur du firmware, qui est en réalité beaucoup de dossiers! https://camo.githubusercontent.com/f8ffd2944bf3393b5957d02e4fa9a1558b4995c2cc3ae8aea0b782eb7332bac0/68747470733a2f2f692e696d6775722e636f6d2f444a4a505750582e706e67

-2voto

peterh Points 2332

Le microcode est un micrologiciel intégré au niveau sub-asm, au firmware intégré au CPU.

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