TP AADL

Frank Singhoff
Université de Brest





Exercice 1, premiers pas avec AADLInspector



Pour cette série d'exercices, nous allons utiliser AADLInspector pour éditer et manipuler nos modèles AADL. L'objectif de ce premier exercice est de prendre en main l'outil.

Afin de pouvoir utiliser AADLInspector, il faudra récupérer le logiciel et le stocker sur votre bureau. Le logiciel se trouve ici . Récupérer le fichier zip et l'ouvrir sur le bureau avec 7-zip. Puis, aller dans le répertoire AADLInspector1-8betaWindows/bin. Pour lancer l'outil, il suffit de cliquer sur le fichier AADLInspector.exe.

Pour tester cet outil, faites les manipulations suivantes:





Exercice 2, premiers modèles AADL : composants, propriétés, bibliothèques et projets

Dans ce deuxième exercice, nous allons éditer nos premiers modèles AADL.


Question 1 :

  1. Editer un modèle AADL comportant un composant process nommé application et qui contient :
  2. Vérifier la correction syntaxique et sémantique de ce modèle.
  3. Afin de vérifier l'ordonnancement de ce modèle, compléter ce modèle en supposant un ordonnanceur POSIX préemptif à priorité fixe (propriété AADL Scheduling_Protocol=>(POSIX_1003_HIGHEST_PRIORITY_FIRST_PROTOCOL)
  4. Vérifier son ordonnancement.
  5. Donner le graphe d'instance de ce modèle.


Question 2 :

  1. A partir du modèle de la question 1 et sans introduire de nouveaux types ou changer ceux existants, comment étendre ce modèle afin de déclarer 3 producteurs et 2 consommateurs dont les paramètres sont les suivants :
  2. Vérifier la correction de votre modèle en construisant le graphe d'instance et par des simulations avec Cheddar.


Question 3 :

  1. On souhaite que les threads de la question 2 communiquent grâce à un composant data partagé. On applique ici le procotole PCP pour les accès à ce composant (propriété AADL Concurrency_Control_Protocol => PCP). Tous les producteurs accèdent à cette ressource partagée pendant l'intégralité de leur exécution.
  2. Modifier votre précédent modèle et par simulation, identifier les instants de prise et de libération de la ressource.




Exercice 3, inversion de priorité, model de Mars Pathfinder



Cet exercice est extrait de [COT 00] et consiste à diagnostiquer, simuler et corriger une version simplifiée du système d'exploration de la mission Mars Pathfinder. En 1997, la mission Mars PathFinder a déployé le robot mobile Sojourner sur Mars. La mission de ce robot et de sa sonde était contrôlée par un logiciel multitâches s'exécutant sur un système VxWorks. Ce logiciel est constitué des tâches suivantes :



Nom des tâches Priorités Périodes/Echéances Temps d'exécution
ORDO_BUS 1 125 ms 25 ms
DONNEES 2 125 ms 25 ms
PILOTAGE 3 250 ms 25 ms
RADIO 4 250 ms 25 ms
CAMERA 5 250 ms 25 ms
MESURE 6 5000 ms 50 ms
METEO 7 5000 ms 50 ms ou 75 ms



  1. Pendant le déroulement de la mission Mars PathFinder, les opérateurs de la NASA ont constaté que certaines échéances de ce logiciel ont été manquées, ce qui a provoqué plusieurs redémarrages du robot ainsi que la perte de données scientifiques.
  2. Proposez un modèle AADL pour cette architecture logicielle composée de threads périodiques et d'un composant data sans propriété Concurrency_Control_Protocol. Quelles sont les échéances qui ne sont pas respectées et pourquoi ?
  3. Modifier ce modèle afin de corriger ce problème.



Exercice 4, calcul holistique

Dans cet exercice, on montre comment utiliser un outil comme AADLInspector pour calculer un pire temps de réponse de bout en bout avec la méthode holistique. On étudie un système constitué de deux processeurs. Le processeur a héberge les tâches T1 et T2. Le processeur b héberge les tâches T3, T4 et T5. Certaines tâches communiquement par échange de messages périodiques :

Les tâches et messages sont définis par les paramètres suivants :

Messages Périodes Temps de communication
M1 120 ms 3 ms
M2 50 ms 1 ms



Tâche Période Capacité Priorité Processeur
T1 120 ms 3 ms 1 a
T2 50 ms 2 ms 2 a
T3 120 ms 7 ms 2 b
T4 70 ms 1 ms 1 b
T5 50 ms 3 ms 3 b



Notez que la priorité 3 est le niveau de priorité le plus fort et 1 le niveau de priorité le plus faible. Le temps de communication inclut les temps de propagation, d'accès, de transmission et de traversée des couches. Le temps de réponse final d'un message i est obtenu par la somme de son Jitter et de son temps de communication.

Question 1

Le temps de réponse des tâches peut être calculé avec la méthode de Joseph et Pandia étendue avec les Jitters. Calculer manuellement (sans AADLInspector) les pires temps de réponse de chaque tâche avec des Jitters nuls.


Question 2

On souhaite maintenant calculer les délais de bout en bout de chaque tâche du système avec AADLInspector. Pour ce faire, nous allons appliquer la méthode Holistique :
  1. Récupérer le modèle AADL suivant. Ce modèle vous montre comment spécifier le jitter d'un thread périodique afin de calculer son pire temps de réponse. Avec AADLInspector, pour calculer ce pire temps de réponse, il vous faut appuyer sur le bouton Theoritical schedulability tests.
  2. Modifier ce modèle en ajoutant un thread AADL pour chacune des tâches T1 à T5 décrites ci-dessus.
  3. On affecte dans un premier temps les Jitters à zéro. Avec AADLInspector, quels sont les temps de réponse des tâches/threads ? Les temps de réponse des messages doivent être calculés manuellement.
  4. Vérifier que les valeurs calculées ci-dessus par AADLInspector sont identiques à celles que vous avez calculé à la main dans la question 1.
  5. Si l'on souhaite appliquer la méthode holistique, pour quelles/quels tâches/messages doit on modifier le paramètre Jitter ? Donner les valeurs du Jitter pour les tâches/messages concernés.
  6. Recalculer avec AADLInspector les pire temps de réponse après avoir modifié les Jitters dans votre modèle AADL. Quels sont les nouveaux temps de réponse ?
  7. Refaire les opérations 5 et 6 jusqu'à convergence des temps de réponse. Quels sont les délais de bout en bout des chaines de traitements T1/T3 et T5/T2 ?




Exercice 5, modèle de calcul basé sur les data ports



L'objectif de ce nouvel exercice est de découvrir l'utilisation des data ports.

Question 1 :




Un des moyens classiques de communications d'une information entre deux threads consiste à utiliser les data ports. L'utilisation de data ports permet à un ensemble de threads d'échanger des messages périodiquement tout en respectant diverses contraintes de cohérence sur les données. En particulier, les instants d'émission et de réception de messages sont fixes et connus : ainsi les messages sont émis à l'instant où le thread émetteur termine son exécution alors que les messages sont reçus à l'instant où le thread récepteur démarre son exécution.

Question 2 :




La figure ci-dessus présente l'architecture d'un logiciel composé d'un ensemble de threads périodiques. Vous avez ci-dessous les paramètres des threads :


Threads Périodes Pire temps d'exécution Priorité
T1 1000 ms 200 ms 10
T2 1000 ms 200 ms 20
T3 1000 ms 200 ms 30
T4 1000 ms 100 ms 40
T5 1000 ms 100 ms 10
T6 1000 ms 500 ms 20
T7 1000 ms 400 ms 30



  1. Proposer un modèle AADL composé d'un processus AADL comportant l'ensemble des threads de la figure et du tableau ci-dessus, puis, simuler son ordonnancement. Que constatez vous ?
  2. Pour régler le problème constaté dans la question précédente, on vous propose de répartir cette application sur deux processeurs. Sur le premier processeur, vous placerez T1, T2, T3 et T4. Sur le second processeur seront placées toutes les autres tâches. Simuler l'ordonnancement de ce nouveau modèle. En regardant l'ordonnancement calculé, quel nouveau problème constate t on ? Une solution à ce problème consiste à utiliser la propriété Dispatch_Offset. Expérimentez cette propriété en lui affectant une valeur pour les threads T5, T6 et T7. A quoi sert Dispatch_Offset lorsqu'elle est définie dans un composant thread ?




Modélisation et prototypage avec AADLInspector/Ocarina d'un système embarqué : CC UE VFS partie ordonnancement/AADL 2020/2021



Vous trouverez ici plusieurs documents décrivant différents systèmes embarqués.

Le travail à faire consiste à construire un modèle AADL d'un des systèmes ci-dessus avec AADLInspector, puis d'en faire un simulateur avec Ocarina.

Il vous est demandé :

Début janvier, une séance de TP sera planifiée afin de faire un point avec les groupes qui le souhaitent. Durant cette séance, nous pourrons regarder vos premières versions de modèle AADL afin d'éventuellement vous débloquer sur des problèmes que vous pourriez avoir.

Fin janvier, lors d'une démonstration, il vous sera demandé de livrer un rapport de 5 à 10 pages maximum décrivant les éléments ci-dessous:

La note de CC sera élaborée à partir du rapport livré, du travail fait et des réponses aux questions qui vous seront posées lors de la démonstration.







Modélisation d'un AOCS avec OSATE : CC UE VFS partie ordonnancement/AADL 2019/2020





Vous trouverez ici un document décrivant une modélisation HRT-HOOD d'un AOCS (Attitude and Orbital Control System). HOOD est un formalisme objet promut par l'Agence Spatiale Européenne. Si nécessaire, cette publication donne diverses informations complémentaires sur HRT-HOOD, informations qui peuvent vous aider à comprendre le modèle AOCS en HOOD.

Le travail à faire consiste à construire un modèle AADL d'AOCS avec l'outil OSATE. L'objectif de ce travail est de découvrir l'environnement OSATE au travers d'un composant classique : un AOCS, qui est un ensemble d'équipements et de logiciels assurant la fonction de pilotage d'un engin (ex: satellite) en vue de lui imposer l'attitude voulue et d'ajuster son orbite.

Il vous est demandé :

  • Le 5 décembre, une séance de TP sera planifiée et un point sera fait avec chaque groupe à cette occasion. Pour cette séance, il est demandé d'avoir une première version du modèle AOCS même incomplet. La notation du projet intégrera une note élaborée lors de cette séance.

  • Pour le lundi 6 janvier, il vous est demandé de livrer un rapport de 8 pages maximum décrivant les éléments de réponse pour les points ci-dessous :
  • Enfin, début janvier, il vous sera demandé de présenter votre travail lors d'une démonstration complétée par des questions.



    Exploration d'architectures : CC UE VFS partie ordonnancement/AADL 2018/2019







    L'objectif de cet exercice est de réviser les concepts clefs vus dans le cours AADL et ordonnancement. On vous demande de faire un modèle d'un système de contrôle-commande, d'analyser ses performances/son comportement et de répondre à quelques questions de compréhension.

    Un système de contrôle-commande est un logiciel qui observe et agit sur un système qui peut être un moteur, un système de climatisation, ... Un système de contrôle-commande lit des données à partir d'un ensemble de capteurs, analyse ces données, puis émet des commandes vers des actionneurs.

    Dans cet exercice, on vous demande de produire différentes solutions architecturales possibles avec AADL à partir d'une spécification. Vous pouvez travailler en binome. Pour le lundi 7 janvier, vous devez livrer :
    1. L'ensemble des modèles AADL élaborés pour chaque question ; modèles que l'on doit pouvoir analyser avec AADLInspector.
    2. Un rapport qui contient les réponses aux questions ci-dessous.


    Spécification du système à étudier






    On regarde ici le fonctionnement d'une chaudière (cf. figure ci-dessus). La chaudière est controlée par un logiciel de contrôle-commande composé de 5 traitements périodiques donc les caractéristiques sont les suivantes :


    Traitement Périodes/Echéances Pire temps d'exécution (ou capacité)
    AFFICHAGE 50 ms 10 ms
    ANALYSE 60 ms 10 ms
    LIRE_CAPTEUR 50 ms 7 ms
    ACTIVER_ARRET 200 ms 2 ms
    TRANSMETTRE_THERMOSTAT 200 ms 2 ms



    La logiciel dialogue avec 4 périphériques: En dehors des traitements décrits ci-dessus, le logiciel de contrôle-commande comporte le traitement périodique ANALYSE. ANALYSE recoit de LIRE_CAPTEUR la température mesurée dans la chaudière, vérifie cette donnée puis transmet la température vérifiée aux tâches AFFICHAGE, TRANSMETTRE_THERMOSTAT et ACTIVER_ARRET.

    A partir de cette spécification, on cherche un modèle d'architecture qui, par exemple :



    Il est fortement conseillé de lire l'intégralité des questions avant de commencer à répondre. Attention : une spécification peut conduire à plusieurs solutions architecturales, et donc certaines des questions ci-dessous peuvent être traitées plus ou moins rapidement/facilement.



    Question 1 :


    On suppose dans cette question que chaque traitement est modélisé par un thread AADL et que les échanges de données entre threads sont assurés par des données partagées. Durant ce travail de conception d'architecture, on décide arbitrairement de fixer les priorités des threads comme suit :



    Question 2


    Plutôt que d'employer des composants data partagés, il est possible de modéliser les échanges entre les traitements par des data port. On suppose les mêmes priorités concernant les threads.

    Question 3




    Question 4


    ANALYSE peut faire l'objet de panne. Une solution classique pour tolérer les pannes d'un composant consiste à executer plusieurs exemplaires de ce composant. Les données produites par l'ensemble des exemplaires sont comparés afin de détecter si l'un d'entre eux fonctionne anormalement. On parle de VOTEUR pour désigner le composant qui compare les données produites par l'ensemble des exemplaires.

    Avec cette méthode, 3 instances d'ANALYSE permettent de corriger au plus une panne. En effet, si deux instances d'ANALYSE calculent une valeur identique et si le résultat produit par la 3ème est différent, on considére que la 3ème instance est en panne.

    Ce mécanisme est appelé la redondance active.





    Projet CC UE VFS partie "ordonnancement" 2017/2018

    Vous trouverez ci-dessous différentes approches pour la conception et la vérification (généralement de l'ordonnancement) d'une architecture temps réel critique :
    1. Autosar/EAST-ADL.
    2. MARTE/UML et Mast.
    3. TASTE.
    4. Symta/S.
    5. Times.
    6. Polychrony.
    7. SCADE.
    8. UPPAAL.
    9. HRT HOOD.
    10. Giotto.


    Il vous est demandé :


    Exercice 6, modélisation et analyse d'un switch

    On souhaite modéliser et vérifier l'ordonnancement d'un logiciel embarqué dans un commutateur réseau. Le commutateur est constitué:

    Les paramètres des tâches sont donnés ci-dessous:



    Threads Priorités Temps d'exécution Périodes/Echéances
    SUPER 1 Entre 2 et 3 ms 7 ms
    STAT 2 7 ms dans certains cas, 6 ms sinon 21 ms
    PORT_1 3 Jamais plus de 4 ms 50 ms
    PORT_2 4 Jamais plus de 4 ms 50 ms
    PORT_3 5 Jamais plus de 4 ms 50 ms
    PORT_4 6 Jamais plus de 4 ms 50 ms



    Les tâches sont périodiques et indépendantes. Elles démarrent toutes à l'instant zéro. Pour toutes les tâches, les échéances sont égales aux périodes. Enfin, chaque tâche a une priorité fixe. Nous appliquons un ordonnancement préemptif à priorité fixe. Les niveaux de priorités vont de 0 à 255 sachant que le niveau de priorité le plus fort est 0. On applique ici Rate Monotonic.

    Question 1 :

    Votre responsable vous propose dans un premier temps de déployer cet ensemble de tâches sur une machine disposant d'un processeur. Compléter le modèle AADL ci-dessous afin de pouvoir simuler l'ordonnancement de ce système avec un logiciel comme AADLInspector.

    package commutateurs
    public 
    
      thread tache_periodique
        properties
             Dispatch_Protocol => Periodic;
      end tache_periodique;
    
      thread implementation tache_periodique.Impl
      end tache_periodique.Impl;
    
      process implementation Application.Impl
      subcomponents
        SUPER : thread tache_periodique.Impl;
        STAT  : thread tache_periodique.Impl;
      end Application.Impl;
    
      processor cpu
      end cpu;
    
      system commutateur
      end commutateur;
    
      system implementation commutateur.Impl
      subcomponents
        process1 : process application.Impl;
        cpu1 : processor cpu;
      end commutateur.Impl;
    
    end commutateurs;
    


    Question 2 :

    En fait, ce système n'est pas ordonnançable sur un processeur seulement. On cherche donc à ordonnancer ce jeu de tâches sur une architecture comportant deux processeurs identiques. On applique une approche par partitionnement. Proposer une affectation des tâches sur les deux processeurs qui garantisse le respect des échéances. Montrer, sans calculer l'ordonnancement des tâches, que les tâches respectent effectivement leur échéance.

    Question 3 :

    Calculer l'ordonnancement sur les 50 premières unités de temps.

    Question 4 :

    Comment doit-on modifier le modèle AADL proposé dans la question 1 afin de représenter le logiciel déployé sur deux processeurs ? Donner la nouvelle version de ce modèle.

    Exercice 7, modélisation et analyse d'un réfrigérateur



    On souhaite modéliser et vérifier l'ordonnancement d'un logiciel embarqué dans un réfrigérateur. Ce logiciel contrôle la production de froid, une alarme associée à la porte et à la température ainsi que l'éclairage de l'équipement.

    Votre responsable vous demande de vérifier le respect des contraintes temporelles de ce logiciel. On suppose que ce dernier est composé des tâches périodiques suivantes :


    Threads Temps d'exécution Périodes/Echéances
    Thermostat Jamais plus de 6 ms 15 ms
    Porte 4 ms dans certains cas, 2 ms sinon 30 ms
    Lampe Jamais plus de 1 ms 7 ms
    Alarme Souvent 2 ms, mais parfois jusqu'à 3 ms 10 ms
    Sonde Jamais plus de 2 ms 14 ms





    Les échéances sont égales aux périodes. La date de première activation de toutes les tâches est identique et est égale à zéro.

    Question 1 :

    Votre responsable vous propose dans un premier temps d'utiliser un OS disposant d'un seul processeur avec un ordonnanceur Rate Monotonic préemptif. Compléter le modèle AADL ci-dessous afin de pouvoir simuler l'ordonnancement de ce système avec un logiciel comme AADLInspector.
    package refrigerateur
    public 
    
      thread tache_periodique
        properties
             Dispatch_Protocol => Periodic;
      end tache_periodique;
    
      thread implementation tache_periodique.Impl
      end tache_periodique.Impl;
     
    
    
      process implementation Application.Impl
      subcomponents
        thermostat : thread tache_periodique.Impl;
        porte : thread tache_periodique.Impl;
        lampe : thread tache_periodique.Impl;
        alarme : thread tache_periodique.Impl;
        sonde : thread tache_periodique.Impl;
      end Application.Impl;
    
      processor cpu
      end cpu;
    
      system froid
      end froid;
    
      system implementation froid.Impl
      subcomponents
        process1 : process application.Impl;
        cpu1 : processor cpu;
      end froid.Impl;
    
    end refrigerateur;
    


    Question 2 :

    En fait, ce système n'est pas ordonnançable sur un processeur seulement. On cherche donc à ordonnancer ce jeu de tâches sur une architecture comportant deux processeurs identiques. On hésite à utiliser soit une approche par partitionnement, soit une approche d'ordonnancement global. On applique d'abord la méthode par partitionnement. On suppose que les tâches Lampe et Sonde sont placées sur un processeur et que les autres tâches sont placées sur le second. Donner le chronogramme d'ordonnancement de ce jeu de tâches sur l'hyper-période (ou encore nommée la période d'étude).

    Question 3 :

    On applique maintenant une approche par ordonnancement global. Les migrations de tâches sont autorisées à tout instant. Donner le chronogramme d'ordonnancement sur les 20 premières unités de temps.





    Exercice 9, analyse et génération de code pour la simulation d'un réfrigérateur avec Ocarina



    On souhaite modéliser et vérifier l'ordonnancement d'un logiciel embarqué dans un réfrigérateur. Ce logiciel contrôle la production de froid, une alarme associée à la porte et à la température ainsi que l'éclairage de l'équipement.

    On vous demande d'étudier le comportement de ce système. On suppose que ce dernier est composé des tâches périodiques suivantes :


    Threads Temps d'exécution Périodes/Echéances
    Thermostat Jamais plus de 2 ms 15 ms
    Porte 1 ms dans certains cas, 2 ms sinon 30 ms
    Lampe Jamais plus de 1 ms 7 ms
    Alarme Souvent 2 ms, mais parfois jusqu'à 3 ms 10 ms
    Sonde Jamais plus de 2 ms 14 ms





    Les échéances sont égales aux périodes. La date de première activation de toutes les tâches est identique et est égale à zéro. Dans un premier temps, on suppose que les threads sont indépendantes. On suppose également un processeur avec un ordonnanceur à priorité fixe préemptif et une affectation des priorités selon Rate Monotonic.

    Question 1 :

    Proposer un modèle AADL du réfrigérateur avec AADLInspector. Avec AADLInspector, vous validerez statiquement le modèle ainsi que le respect des contraintes temporelles.

    Question 2 :

    Nous regardons maintenant comment adapter le modèle de la question 1 pour une génération de code avec Ocarina.
    1. Dans un premier temps, récupérer les fichiers de ce répertoire. Il s'agit d'un exemple de modèle AADL composé de 2 threads périodiques indépendantes(threads tic et tac). Cet exemple vous montre comment ocarina génére le code de l'application. Pour ce faire, il est nécessaire de procéder de cette façon:
      • Mettre en place l'environnement de travail avec la commande :
         source ocarina.bash
      • Générer le code C à partir du modèle AADL avec :
         ocarina -x scenario.aadl
        .
      • Le code C généré est stocké dans le répertoire root_impl. Il peut être compilé par :
        make
        dans ce même répertoire.
        Vous avez alors un exécutable Linux (fichier node_a) pouvant être lancé depuis le shell.
    2. Etudier les fichiers générés activity.h et activity.c, deployment.h et deployement.c ainsi que main.c, puis indiquer leur rôle respectif.
    3. Compléter/adapter l'exemple ci-dessus afin de pouvoir générer avec Ocarina le programme C correspondant à votre modèle de la question 1. Ce programme C constitue un simulateur de l'application permettant de se rapprocher de la mise en oeuvre du système.


    Question 3 :

    Les tâches Alarme et Thermostat partagent une donnée en exclusion mutuelle pendant l'intégralité de leur temps d'exécution. Cette donnée stocke la température mesurée par Thermostat. Ainsi, Thermostat modifie cette donnée alors qu'Alarme n'y accède qu'en lecture.
    1. On vous donne un nouvel exemple de modèle AADL, disponible ici qui vous montre comment intégrer un composant data avec Ocarina. La donnée partagée est modélisée par le composant Counter.
    2. Etudier, générer le code avec Ocarina, compiler et tester ce modèle.
    3. Expliquer le rôle des composants tic_sequence et tac_sequence.
    4. Modifier votre modèle du réfrigérateur pour intégrer la donnée partagée entre Alarme et Thermostat.
    5. Tester ce nouveau modèle avec Ocarina.


    Question 4 :

    On souhaite répartir les tâches sur deux processeurs :


    Exercice 8, example d'utilisation d'OSATE





    L'objectif de cet exercice est de vous monter un autre outil AADL ; ce qui devrait vous permettre de comprendre ce qui est de l'ordre de l'outil ou du standard/langage. Pour cet exercice, nous allons utiliser les 2 logiciels qui se trouvent ici .