Augmentation de la robustesse de systèmes et logiciels embarqués

Augmentation de la robustesse de systèmes et logiciels embarqués

18 avril 2014 LIP, salle B2, 14h30

Salma Bergaoui

Résumé:

Les systèmes critiques, parmi lesquels les systèmes embarqués construits autour d’un microprocesseur mono-cœur exécutant un logiciel d’application, ne sont pas à l’abri d’interférences naturelles ou malveillantes qui peuvent provoquer des fautes transitoires. Ces
travaux portent sur des protections qui peuvent être implantées pour détecter les effets de telles fautes transitoires sans faire d’hypothèses sur la multiplicité des erreurs générées.
Tout d’abord, une nouvelle méthode de vérification de flot de contrôle est proposée. Elle permet de vérifier, sans modifier le système initial, que les instructions du programme d’application sont lues sans erreur et dans le bon ordre. Les erreurs sur les données sont également prises en compte par une extension de la vérification de flot de contrôle. La méthode proposée offre un bon compromis entre les différents surcoûts, le temps de latence de détection et la couverture des erreurs. Les surcoûts peuvent aussi être ajustés aux besoins de l’application. La méthode est mise en œuvre sur un prototype, construit autour d’un microprocesseur Sparc v8.

Les fonctions d’analyse de criticité développées dans le cadre de la méthodologie proposée sont également utilisées pour évaluer l’impact des options de compilation sur la robustesse intrinsèque du logiciel d’application. Et enfin, une technique d’augmentation de la robustesse des systèmes d’exploitation par recouvrement au niveau processus a été conçue. Elle se base sur l’encapsulation des tâches dans des transactions, avec l’API RTSM, pour la récupération d’un état cohérent en cas de problème logiciel ou matériel.

Allocation mémoire et ordonnancement partiel

Allocation mémoire et ordonnancement partiel

Vendredi 29 mars 2013 14h, B1, LIP

Alexandre Isoard, Compsys

Résumé:

Le retour récent vers le parallélisme pour la programmation des accélérateurs matériels fait resurgir de vieux problèmes sous de nouvelles formes. L’allocation mémoire sur des programmes comportant une part de sémantique parallèle en est un exemple, la dépendance vis à vis de l’ordonnancement étant différente de celle d’un programme séquentiel ou à parallélisme synchrone. En effet, un ordonnancement non déterministe (c’est-à-dire qui n’induit pas un ordre total sur les opérations), que ce soit pour des raisons matérielles (parallélisme à l’exécution), des raisons sémantiques (ordonnancement non totalement déterminé), ou des raisons d’optimisation (permettre un réordonnancement a posteriori), pose le problème d’optimisation de l’allocation mémoire dans un cadre plus général.

On se propose d’étudier le problème de l’allocation mémoire de taille minimale pour un ordonnancement partiel. Ce problème peut aussi bien s’appliquer à l’allocation de registres dans des blocs de base concurrents, au double buffering de tableaux avec communications asynchrones sur un code tuilé (logiciel Chuba), ou à l’allocation mémoire dans un code parallèle (un programme X10 par exemple). L’ordonnancement sera représenté par un ordre partiel de type “happens before” sur les instructions, dont on extraira une relation de conflits mémoire qui permettra d’effectuer l’allocation mémoire de taille minimale (autant que faire se peut) et ne présentant aucun conflit sous toutes les traces d’exécution possibles.

Si le temps le permet, nous montrerons également comment les principes mis en évidence s’applique au cas de Chuba (pipeline logiciel de tuiles) et ce, même dans le cas de tuiles dont la taille est paramétrée.