Sujet ter0809 verimag ka cr

De Ensiwiki
Aller à : navigation, rechercher


Adaptation de politiques d’ordonnancement à l’aide d’aspects dans les langages synchrones

Labo VERIMAG
Equipe Synchrone
Encadrants Karine.Altisen@imag.fr,Christophe.Rippert@imag.fr
Plus d'information ici

Thème général

— systèmes critiques embarqués,

— langages synchrones,

— ordonnancement,

— programmation par aspects

Compétences attendues

— programmation impérative et orientée objets + bases d’algorithmique (algo 1A)

— bases en compilation (compilation 1, 2A)

— notions de base en système (2A)

— logiciel de base et projet C (1A) pour la partie implantation final

Contexte du travail

Le développement de systèmes critiques (centrales nucléaires, avionique, etc.) nécessite l’utilisation de méthodes de conception fiables basées sur des modèles rigoureux permettant l’utilisation d’outils de validation automatique des programmes. C’est dans cette optique qu’a été conçu le langage synchrone Lustre, un langage à flot de données (i.e. on ne décrit pas le flot de contrôle à l’aide de "loop", "if then else", etc., mais plutôt la façon dont les variables dépendent les unes des autres à chaque instant), facilitant la construction et la vérification de programmes réactifs pour systèmes critiques. La caractéristique principale du langage est de proposer une programmation concurrente parfaitement déterministe grâce à un calcul statique de l’ordonnancement des tâches.

Traditionnellement, les applications développées en Lustre s’exécutent directement sur la machine cible, sans se baser sur des services systèmes classiques tel que l’ordonnancement dynamique, afin de ne pas introduire d’indéterminisme. Cependant, l’évolution récente du domaine plaide en faveur de l’introduction d’un minimum de services systèmes pour faciliter l’implantation de fonctions supplémentaires, telle que l’introduction d’une dose limitée d’ordonnancement dynamique pour permettre la gestion de tâches urgentes (e.g. interruptions) survenant de façon imprévisibles et s’exécutant pendant une durée inconnue lors de la conception du système. Ces additions ne doivent évidemment pas remettre en cause l’intérêt principal de la programmation synchrone, à savoir la prévisibilité de l’exécution.

Une autre exigence forte concerne la séparation entre le code applicatif devant être embarqué et les éléments permettant d’exprimer et de mettre en oeuvre les politiques d’ordonnancement.

La programmation par aspects est une pratique émergente, surtout dans l’orienté objets (voir par exemple AspectJ, une extension pour Java). Elle propose de factoriser et d’encapsuler des bouts de code dont l’application est transversale, dans un nouveau type de module appelé "aspect", et de faire réaliser l’application du code de façon automatique par le compilateur.

Dans notre contexte, ce paradigme pourra être utilisé pour faciliter la séparation entre le code applicatif et le code des politiques d’ordonnancement. L’intérêt d’une telle séparation est de faciliter la réutilisation du code, d’augmenter sa lisibilité, et donc de simplifier sa maintenance. Dans le cas d’un langage spécifié rigoureusement comme Lustre, un intérêt supplémentaire de cette séparation est de faciliter la validation des applications grâce à des outils de vérification automatique.

Objectifs

Le but de ce stage de TER ENSIMAG ou de magistère UFRIMAG est d’utiliser la notion d’aspect afin de permettre le paramétrage de la politique d’ordonnancement d’applications synchrones développées en Lustre. Après s’être approprié le contexte (programmation et compilation Lustre, programmation par aspects, ordonnancement dans un tel contexte), le stagiaire devra identifier et comprendre les contraintes imposées sur la politique d’ordonnancement. Ceci lui permettra de définir un petit langage permettant de les exprimer, puis de réfléchir à la façon de les intégrer dans le code. On peut énumérer trois types de contraintes sur la politique d’ordonnancement :

— des contraintes simples qui pourraient être gérées directement en Lustre dans le code applicatif : l’intégration de ces contraintes se fera par modification automatique du code Lustre ;

— des contraintes plus complexes, mais pouvant être gérées statiquement lors de la compilation de l’application : il faudra donc intégrer la gestion de ces contraintes au compilateur Lustre afin d’intervenir au niveau de la génération du code C produit à partir de l’application Lustre ;

— des contraintes ne pouvant être gérées statiquement, par exemple la gestion de tâches urgentes pouvant intervenir de façon imprévisible : pour ce type de contraintes, il est nécessaire d’intégrer au système embarqué un service d’ordonnancement dynamique capable de gérer les tâches urgentes sans remettre en cause la prévisibilité de l’exécution du système.

Ces trois types de contraintes pourront être gérées progressivement en fonction de la vitesse d’avancement du travail et du temps disponible.

Expérimentations

Une fois le travail de spécification effectué, le stagiaire pourra mettre en oeuvre ses expérimentations sur la plate-forme Lego Mindstorm NXT pour laquelle une chaîne de développement a été réalisée dans le cadre d’un TER ENSIMAG précédent.

Compétences fournies par le stage

Ce stage permettra de rencontrer les problématiques liées au développement des systèmes critiques (langages formels, spécification, vérification, test, etc.). Il permettra aussi de découvrir deux nouveaux paradigmes de programmation (flot de données et par aspects). Finalement, il permettra au stagiaire de se confronter au développement d’applications et d’un bout de système destinés à s’exécuter sur une plate-forme embarquée réaliste.