La résilience des systèmes informatiques embarqués

Dans cet article, nous parlerons de systèmes informatiques embarqués, ceux-ci réalisent des tâches bien définies au sein de systèmes plus complets. Leur présence se fait sentir dans de nombreux domaines, on peut citer en exemple l’informatique embarquée dans les avions, dans les voitures, ou bien dans des appareils électroménagers.
Les systèmes embarqués sont soumis à des contraintes différentes. Souvent intégrés dans des systèmes mobiles, ils doivent être peu gourmands en énergie, avoir des temps de réponse bas mais surtout être résilients. Le fonctionnement voire l’intégrité du système complet dépend souvent du comportement du côté informatique. Nous avons tous en tête l’accident de la fusée Ariane 5 à cause d’un bug dans son logiciel de contrôle, dans le même style, vous pouvez imaginer ce qui se passerait si les calculateurs de la nouvelle Google Car tombaient en panne dans un virage sans mesures préventives.
Ces exigences de fiabilité et de performance se traduisent en contraintes sur l’architecture matérielle et logicielle. Les 2 sont intimement liés, on va chercher à minimiser les performances demandées au profit de la rapidité et de la stabilité. Les micro-processeurs sont bien adaptés à ce type de système, il faut penser aux différents composants qui seront nécessaires (afficheurs, capteurs, contrôleurs, …), à la façon dont ils seront reliés et à leur comportement dans des conditions inhabituelles (perturbations thermiques ou électromagnétiques…). Pour les composants vitaux, les concepteurs pratiquent souvent la redondance au niveau matériel, un composant de secours prendra la place de celui d’origine en cas de panne.
Au niveau logiciel, il y a différentes architectures possibles en fonction des besoins. La plus basique consiste à créer une boucle qui va appeler dans un certain ordre les routines propres aux différentes parties du système. Certains systèmes sont basés sur la réception d’événements ou d’interruptions (entrées utilisateurs, horloge, données reçues…), si les tâches à effectuer sont courtes, on peut les effectuer directement dans la boucle principale. Dans le cas contraire, on peut mettre en place un système de queue qui va gérer l’ordre et le moment d’exécution des différentes tâches. Pour rendre l’exécution plus rapide, on peut aussi essayer de les faire exécuter dans des threads différents, dans ce cas la complexité et le nombre de cas critiques augmentent beaucoup. Le système commence alors à ressembler à un système d’exploitation et on y retrouve les mêmes problématiques.
Contrairement à un ordinateur personnel par exemple, il est difficile voire impossible d’améliorer le fonctionnement d’un système embarqué une fois qu’il est déployé. Pour cette raison, il est d’autant plus important de prévoir dès la conception tous les cas critiques qui peuvent se présenter afin de créer des systèmes performants et robustes.

Sources:
Thèse sur les systèmes embarqués
Cours de Richard Grisel
Article de Barr Code
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>