Comment se déroule l'exécution du programme dans le firmware?

9

J'ai entendu des gens travaillant dans le domaine du micrologiciel qu'il n'y a pas de système d'exploitation contrôlant le micrologiciel (par exemple, le micrologiciel dans une clé USB). Il n'y a qu'un seul thread s'exécutant dans une boucle while en attente d'une commande externe, et c'est le point de départ pour qu'une interruption se produise, suivi d'un ISR et du contrôle qui coule jusqu'au matériel. Mais fondamentalement, quelle est la partie du matériel qui exécute le code du micrologiciel? Y a-t-il un CPU ou est-ce un code basé sur ASIC qui est déclenché tant que l'appareil est alimenté. Je n'arrive pas à comprendre le changement de paradigme d'un système basé sur CPU-OS classique vers un firmware.

Abhijit K Rao
la source
Si possible, quelqu'un peut-il prendre un exemple de micrologiciel, indiquant la marque du processeur et tout autre détail matériel et logiciel. Des exemples pourraient être le micrologiciel des cartes SD, USB, contrôleurs HDD, etc.
Abhijit K Rao

Réponses:

13

Il n'y a pas de changement de paradigme; dans les deux cas, une CPU exécute le logiciel / firmware.

Le micrologiciel et le logiciel sont la même chose; la seule distinction réside dans la façon dont il est stocké. Le logiciel est généralement stocké sur un périphérique de stockage de masse (par exemple, un lecteur de disque) et chargé dans une mémoire volatile (par exemple, DRAM) avant d'être exécuté. Il est facile de changer de logiciel, en remplaçant simplement le fichier qui le contient par un autre.

Le micrologiciel est généralement stocké dans une mémoire non volatile (par exemple, FLASH) connectée plus ou moins directement au CPU. Il est plus difficile à modifier (d'où la «firme») et il peut ou non être transféré vers une autre mémoire pour exécution.

Vraiment, le fonctionnement d'un ordinateur avec un "système d'exploitation" n'est fondamentalement pas différent de votre description du firmware. N'oubliez pas que le système d'exploitation lui-même n'est qu'un autre logiciel - ou, plus probablement, une énorme collection de logiciels mutuellement dépendants. Au niveau le plus bas, le CPU est toujours assis dans une boucle quelconque, attendant que les choses se fassent. C'est juste que cette boucle est enterrée à l'intérieur du système d'exploitation.

Dave Tweed
la source
9

Même un CPU "normal" avec un OS doit exécuter le firmware ... il est généralement appelé BIOS dans un PC générique. Le micrologiciel de n'importe quel processeur n'est que le logiciel qui est toujours disponible lorsque l'alimentation est allumée, que le processeur soit connecté à des périphériques (lecteurs de disque, USB, etc.) ou non. Si vous avez un système d'exploitation complet, le micrologiciel détermine simplement quel périphérique (disque, clé USB, etc.) contient le code pour le système d'exploitation, copie le code dans la RAM et l'exécute. Pour les petits appareils intégrés, il n'est pas nécessaire d'avoir un système d'exploitation complet, car vous n'allez pas charger différentes applications ou connecter une variété d'appareils, de sorte que les petits processeurs utilisent simplement un système d'exploitation très simple ou peut-être un "planificateur de tâches". Différentes tâches peuvent être de prendre des lectures de capteur, d'attendre que les boutons soient pressés et de mettre à jour un affichage. Pour les applications très simples, le processeur dispose de beaucoup de temps pour effectuer toutes les tâches, il ne fait donc que chacune en séquence, ce qui est également connu comme une approche "round robin". Les planificateurs plus sophistiqués considèrent la priorité des tâches.

Le point de base est que chaque CPU doit avoir du code qui est toujours disponible pour s'exécuter à la mise sous tension. Ce code est généralement stocké dans une mémoire relativement petite "en lecture seule", ou ROM, bien que les processeurs modernes placent le firmware dans une ROM Flash qui est "lue principalement". Le code stocké de cette manière est le "firmware" de la CPU.

Joe Hass
la source
6

Il semble y avoir des idées fausses dans votre question.

Le micrologiciel est simplement un logiciel sous une forme fixe, utilisé pour être dans une ROM simple (à écriture unique ou même programmée par masque), maintenant principalement dans une ROM flash (réinscriptible). Sur certains systèmes, ce micrologiciel est le seul logiciel présent, sur d'autres (comme un PC ordinaire), sa fonction principale est de charger les autres logiciels.

Une application peut s'exécuter sous le contrôle d'un système d'exploitation ou s'exécuter sans système d'exploitation. Cette dernière situation est souvent appelée «bare metal»: l'application s'exécute sans rien entre elle et le matériel «metal». Les fonctions en situation de système d'exploitation exécutées par le système d'exploitation, par exemple la gestion du système de fichiers et les dispositions pour le multithread, peuvent toujours être présentes dans un système nu, mais sous la forme de bibliothèques liées à l'application. .

Les logiciels peuvent avoir de nombreuses architectures différentes. Une forme très simple est la boucle "get input, do processing, write output". Les formulaires plus compliqués peuvent inclure l'interrogation, les interruptions ou le multithread. Les applications dépendantes du système d'exploitation et du métal nu peuvent utiliser toutes ces architectures.

Ces trois problèmes sont indépendants: par exemple, le micrologiciel peut fonctionner sans système d'exploitation et utiliser une architecture multithread. Ou le firmware doit être un système d'exploitation qui charge une application à partir d'une disquette (désolé, carte flash ..) qui utilise la simple architecture de boucle get-do-write.

Wouter van Ooijen
la source
5

OS et CPU sont des concepts différents. Oui, il y a un CPU, qui est l'élément clé du matériel au cœur de la machine. Il récupère les instructions du firmware dans la mémoire du firmware et les exécute. (De nos jours, même les petits systèmes ont souvent plusieurs processeurs pour une exécution parallèle, soit dit en passant; il est donc quelque peu dépassé de parler exclusivement du processeur.)

Le micrologiciel est un logiciel qui est stocké dans une mémoire non volatile (ou peut-être même en lecture seule). Parce qu'il est dans une telle mémoire, le micrologiciel est disponible lorsque la machine est allumée. La machine peut presque immédiatement commencer à exécuter le micrologiciel lorsqu'elle est allumée, ou un petit programme de démarrage (lui-même le micrologiciel) peut extraire le micrologiciel le plus volumineux d'un stockage électronique tel que le flash et le mettre dans la RAM, puis l'exécuter. L'utilisation moderne du stockage flash de nos jours est la raison pour laquelle vous pouvez parfois entendre l'expression "flasher le nouveau firmware", se référant à une procédure de mise à niveau. Le micrologiciel n'a pas besoin d'être facilement évolutif comme celui-ci. Il peut provenir d'une puce de circuit intégré, de sorte que la mise à jour d'un périphérique vers un nouveau micrologiciel peut impliquer de retirer un circuit intégré ("puce EPROM") d'une prise et d'en brancher un nouveau. BIOS PC » s utilisé pour être mis à jour de cette façon, et des myriades d'autres appareils. C'est vraiment de là que vient le mot. Certaines personnes étaient mal à l'aise d'appeler un programme "logiciel", si elles devaient échanger une puce ou une carte de circuit imprimé pour la remplacer, ce qui ressemble plus à une mise à jour matérielle. C'est ainsi que le «firmware» a été inventé: quelque chose de «plus difficile» à changer qu'un logiciel.

Le micrologiciel peut être un système d'exploitation «complet». Par exemple, Tomato est un micrologiciel basé sur Linux pour les routeurs sans fil:

http://www.polarcloud.com/tomato

Nous pouvons nous connecter à Tomato via ssh et obtenir une invite Linux. C'est donc un système d'exploitation avancé, et c'est un firmware. Mais si le routeur avait un disque dur et si le même système d'exploitation devait être chargé à partir de ce disque au démarrage, il ne pourrait plus être légitimement appelé firmware. Le micrologiciel doit être dans un stockage électronique accessible au processeur immédiatement à la mise sous tension, comme une mémoire flash ou des puces EPROM.

De nombreux appareils grand public disposent aujourd'hui d'un firmware évolutif. Si vous avez un appareil photo numérique, par exemple, vous devriez trouver son site Web et voir si une version plus récente du firmware n'est pas disponible, ce qui résout certains problèmes qui peuvent être présents dans le firmware installé en usine. Il est facile de mettre à jour le firmware de nos jours, même pour les utilisateurs finaux relativement non techniques. La tomate susmentionnée est un exemple de firmware open source tiers qui remplace le firmware d'usine.

Le mot "système d'exploitation" se réfère simplement à un programme de contrôle qui a un certain degré de sophistication et d'exhaustivité dans la gestion des ressources de la machine et la fourniture de services de niveau raisonnablement élevé aux programmes: des fonctionnalités telles que les systèmes de fichiers, les protocoles réseau, la mémoire et la gestion des processus, un accès de haut niveau aux appareils, et peut-être à un certain modèle d'utilisateur ainsi qu'à la sécurité. Tous ces éléments ne doivent pas nécessairement être présents dans un système d'exploitation. La mémoire, la gestion des processus et les E / S sont généralement la clé. Si le programme de contrôle permet à d'autres programmes de s'exécuter, en donnant à ces programmes une identité par laquelle ils sont associés à leurs propres ressources, et s'il leur fournit des services pour gérer le processeur et la mémoire, et faire des E / S, nous pouvons appeler ce contrôle programmer un système d'exploitation.

Puisque vous êtes curieux, vous pourriez vraiment apprécier certains manuels sur les architectures informatiques, comme ceux de William Stallings, ou de Hennesy et Patterson.

Kaz
la source
4

Au niveau le plus fondamental, un processeur n'est qu'une machine à états parcourant une séquence d'instructions qui modifient son propre état interne et / ou produisent une sortie. Résumé et affinez ce concept à un niveau très élevé et vous obtenez les dernières offres de processeurs de bureau et mobiles pour Intel. Mais le principe sous-jacent est assez simple - vous pouvez construire un processeur très basique avec une douzaine de circuits intégrés TTL, et les microprocesseurs du début au milieu des années 1970, conçus pour être utilisés dans les calculatrices de bureau et les contrôleurs de feux tricolores, n'étaient pas terriblement plus compliqués que cela. . De toute évidence, la loi de Moore a fait passer cela à un tout autre niveau, et les processeurs modernes hautes performances ont peu de ressemblance avec leurs ancêtres d'il y a 35 ans.

Malgré cela, il existe toujours un énorme marché pour les processeurs (généralement appelés microcontrôleurs) qui sont nettement moins complexes que les derniers; ce sont les types de processeurs que vous pourriez trouver sur votre clé USB, par exemple. Pour répondre à votre question - il est possible que certaines fonctions des périphériques que vous mentionnez soient gérées par un ASIC, mais si vos collègues parlent de threads et d'interruptions, cela indique généralement qu'il y a un processeur d'un certain temps, probablement sur un microcontrôleur . Ce sont en effet des ordinateurs à part entière dans le sens où ils ont une ALU, des registres, un compteur de programme, une pile, etc., mais ils sont de très faible puissance et très peu coûteux, et peuvent ne comporter que quelques dizaines d'instructions, plutôt que le des centaines d'architecture x86.

Il n'est pas nécessaire que ces appareils disposent d'un système d'exploitation de tout type ou de tout concept de changement de contexte (bien que cela soit possible dans certains cas), tout ce qui est requis pour son application est de parcourir les instructions de son programme un après l'autre, et comme vous le dites, ce peut être un programme très simple.

Bitrex
la source
1

Sans certaines autorisations, un processeur ne saura pas si son code d'exécution provient d'un système d'exploitation ou de tout autre type de programme. Pour un processeur, il s'agit simplement d'exécuter des instructions extraites de la mémoire.

N'oublions pas ce qu'est un système d'exploitation: un programme qui est toujours en mémoire et qui est responsable de la gestion et de la planification en toute sécurité de plusieurs tâches. La terminologie que nous utilisons pour décrire une tâche indépendante est un «processus». Les systèmes d'exploitation permettent aux processus de partager les ressources (le matériel, la mémoire, etc.) en toute sécurité et planifient et hiérarchisent leur exécution, il fournit également des fonctionnalités telles que la communication inter-processus. Tout cela découle de la nécessité de prendre en charge plusieurs tâches simultanées. Moins certains niveaux d'autorisation, pour le processeur, il s'agit simplement d'exécuter des instructions OS ou pas d'OS - cela ne fait pas la différence.

Lorsque nous écrivons le micrologiciel d'un microcontrôleur, nous n'avons généralement pas ce programme supplémentaire (le système d'exploitation) toujours en mémoire pour gérer les tâches pour nous. Pourquoi? Parce que nous n'avons pas besoin de plusieurs tâches simultanées - les systèmes embarqués sont généralement conçus et programmés pour bien faire une seule application. Comparez cela à un PC qui devrait être très flexible et capable d'exécuter toutes sortes d'applications à la fois.

Il n'y a plus de souci qu'un processus occupe et écrase l'espace mémoire d'un autre processus ou qu'un processus monopolise tout le temps CPU. C'est parce que nous écrivons un seul programme qui a accès à toutes les ressources à tout moment car c'est le seul programme en cours d'exécution sur le système et donc nous n'avons pas besoin d'un autre programme comme un OS pour le gérer. Encore une fois, pour le CPU, il s'agit simplement d'exécuter des instructions extraites de la mémoire, il ne peut pas faire la différence, OS ou pas d'OS.

Jon L
la source