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 . On travaille sur Windows : utilisez donc le fichier AI-1.8.zip
Récupérer le fichier zip et l'ouvrir sur le bureau avec unzip. Puis, aller dans le répertoire AI-1.8/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. Récuperez les fichiers du projet ici .


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



Récuperez les fichiers du projet ici .

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

Le temps de réponse des tâches peut être calculé avec la méthode de Joseph et Pandia étendue avec les Jitters, ce que AADLInspector est capable de faire.

On souhaite 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. 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.
  5. 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 ?
  6. 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 et échéances 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 10, modélisation d'un système de vidéo-surveillance



    On souhaite modéliser et vérifier un logiciel embarqué dans une centrale de vidéo-surveillance. La centrale pilote un ensemble de caméras de surveillance dans un bâtiment. On vous demande de simuler et étudier le comportement temporel de la centrale sachant que cette centrale est constituée d'un ensemble de tâches périodiques s'exécutant sur un système d'exploitation temps réel.

    L'application est composée de 5 tâches. La tâche Alarme vérifie les données produites par les caméras et déclenche éventuellement une alarme. La tâche Eclairage déclenche un éclairage intermittent lorsqu'une alarme est déclenchée. La tâche Communication lance un appel téléphonique en cas d'alarme. Enfin les tâches Camera1 et Camera2 détectent des objets en mouvement via l'acquisition d'un flux d'image.
    On ne modélise qu'une partie des interactions entre les différentes tâches grâce à deux données partagées : les données partagées donnee1 et donnee2.
    Toutes les tâches caméras, c'est à dire Camera1 et Camera2 communiquent par une première donnée partagée nommée donnee1. Les tâches Alarme, Communication et Eclairage communiquent par une seconde donnée partagée nommée donnee2.

    Les paramètres des tâches périodiques sont les suivantes :


    Tâche Temps d'exécution Périodes/Echéances
    Alarme 2 ms dans certains cas, 1 ms sinon 15 ms
    Communication Alternativement 5 ms puis 6 ms 50 ms
    Eclairage Jamais plus de 1 ms 10 ms
    Camera1 Souvent 2 ms, mais parfois jusqu'à 3 ms 20 ms
    Camera2 Souvent 2 ms, mais parfois jusqu'à 3 ms 20 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 :

    On suppose que le système d'exploitation propose des priorités allant de 1 à 255 (1 est le niveau le plus faible). Proposer un modèle AADL permettant d'étudier le comportement de cette application avec AADLInspector. Vérifier avec AADLInspector si les contraintes temporelles de cette application seront respectées.

    Question 2 :

    L'application comporte pour l'instant 2 caméras. Quel est le nombre maximal de caméras que l'on peut définir dans ce système tout en respectant toutes les contraintes temporelles. Justifier votre réponse.

    Question 3 :

    Sans tenir compte des données partagées donnee1 et donnee2, proposer une nouvelle version de notre modèle AADL de sorte qu'il puisse être simulé/implanté avec Ocarina.

    Question 4 :

    On suppose maintenant que les échanges de données entre les tâches Alarme, Communication et Eclairage ne sont plus effectuées avec donnee2 mais avec des data ports. Avec des data ports, la tâche Alarme envoie une information à la tâche Communication qui la transfère finalement à la tâche Eclairage. Modifier votre modèle AADL en remplacant donnee2 par des data ports et indiquer l'impact de cette modification sur les performances et l'ordonnancement des tâches.





    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 11, modélisation d'un système de surveillance dans un bateau

    On souhaite modéliser et vérifier l'ordonnancement d'un logiciel embarqué pour gérer la sécurité dans un bateau. Ce bateau comporte un logiciel de surveillance permettant d'améliorer la sécurité des passagers. Les traitements de ce logiciel de surveillance sont implantés sur un système d'exploitation temps réel déployé sur une carte comportant un seul processeur. On souhaite simuler le fonctionnement de ces traitements afin d'établir le respect des échéances.

    Le logiciel est composé des tâches suivantes :

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



    Tâches Temps d'exécution Période/échéance
    CAPTEUR_VOIE_D_EAU Entre 1 et 2 ms 12 ms
    CAPTEUR_INCENDIE Parfois 6 ms, parfos 7 ms 24 ms
    CAPTEUR_MOTEUR Jamais plus de 1 ms 6 ms
    ALERTE_VHF Généralement 2,9 ms mais jamais plus de 3 ms 12 ms



    On suppose que toutes 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.

    Vous devez travailler seul ou à deux au maximum. Tous les supports sont autorisés. La communication entre groupe est par contre interdite. Une fois le travail terminé, vous devez envoyer votre travail par email à singhoff@univ-brest.fr et attendre la réception de votre email avant de quitter la salle.

    Question 1 :

    Donner un modèle AADL permettant d'analyser le respect des échéances de ce système avec AADLInspector. Chaque tâche devra avoir un niveau de priorité unique. Ce jeu de tâches est-il ordonnançable ?

    Question 2 :

    Dans la question précédente, nous avons une seule tâche capteur de voie d'eau. On souhaite mettre plusieurs tâches capteurs de voie d'eau afin de détecter les voies d'eau à plusieurs endroits du bateau. Chaque tâche devra avoir un niveau de priorité unique. Quel est le nombre maximum de tâches capteurs de voie d'eau qu'il est possible d'installer tout en respectant les échéances de l'ensemble des tâches ? Modifier le modèle AADL afin de représenter ce nouveau système avec l'ensemble des capteurs de voie d'eau

    Question 3 :

    Proposer une nouvelle version de notre modèle AADL de sorte qu'il puisse être simulé/implanté avec Ocarina.





    Exercice 12, modélisation et dimensionnement d'un serveur vidéo



    Cet exercice est à rendre sur ce moodle. Vous pouvez travailler à deux ou seul. Si vous travaillez à deux, indiquer le nom des 2 étudiants dans votre modèle ou dans le fichier contenant la réponse aux questions ci-dessous.

    On souhaite modéliser et vérifier un logiciel permettant de gérer le streaming de flux vidéos et audios. On vous demande de simuler et étudier le comportement temporel du logiciel sachant qu'il est constitué d'un ensemble de tâches périodiques s'exécutant sur un système d'exploitation temps réel.

    L'application est composée de 3 tâches et d'une donnée partagée : les tâches audio, video et encoder et la donnée partagée buffer.

    La tâche audio produit des données audio. A chaque exécution périodique, la tâche audio produit une trame de données audio et la stocke dans la donnée partagée buffer.

    La tâche video produit des données vidéo. A chaque exécution périodique, la tâche video produit une trame de données vidéo et la stocke dans la donnée partagée buffer.

    La tâche encoder compresse les trames vidéos et audios. A chaque exécution périodique, la tâche encoder retire une trame audio ou une video de la donnée partagée buffer pour la compresser et l'envoyer sur le réseau.

    On ne modélise pas ici l'envoie sur le réseau des trames, le code de chaque tâche (production des trames ou leur compression) mais uniquement l'ordonnancement des trois tâches par 3 threads AADL avec les paramètres ci-dessous. La donnée partagée buffer est modélisée et simulée par un composant AADL data. Pour répondre aux questions ci-dessous, il n'est donc pas nécessaire de modéliser les trames, ni leur insertion, ni leur retrait dans le buffer. Il faut néanmoins modéliser l'utilisation du buffer par les 3 tâches afin d'obtenir un ordonnancement cohérent.

    Les paramètres des tâches périodiques sont les suivants :


    Tâche Temps d'exécution Périodes/Echéances Priorité
    encoder Entre 1 ms et 2 ms 120 ms 15
    audio Entre 1 ms et 5 ms 50 ms 100
    video Entre 1 ms et 5 ms 55 ms 100





    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. On suppose que le système d'exploitation propose des priorités allant de 1 à 255 (1 est le niveau le plus faible).



    Question 1 :

    Proposer un modèle AADL permettant d'étudier le comportement de cette application avec AADLInspector. Vérifier avec AADLInspector si les contraintes temporelles de cette application sont respectées.

    Question 2 :

    A chaque fois que la tâche audio s'exécute, elle ajoute une trame audio dans le buffer. A chaque fois que la tâche video s'exécute, elle ajoute une trame vidéo dans le buffer. A chaque fois que la tâche encoder s'exécute, elle retire une trame audio ou une trame vidéo dans le buffer si le buffer contient des données (la tâche ne fait rien dans le cas contraire). En regardant l'ordonnancement du modèle AADL sur les 200 premières millisecondes, que peut on dire de l'évolution du nombre de trame dans le buffer. Proposer une modification des paramètres de la tâche encoder afin que le nombre de trame stocké dans le buffer soit borné. Indiquer la valeur de cette borne.

    Question 3 :

    L'application comporte pour l'instant 1 tâche video. On souhaite avoir plusieurs instances de la tâche video simultanément dans cette applicaiton. Quel est le nombre maximal de tâches video que l'on peut définir dans ce système tout en respectant toutes les contraintes temporelles et en conservant également une borne sur le nombre de trames dans le buffer. Justifier votre réponse.

    Question 4 :

    Sans tenir compte de la donnée partagée, proposer une nouvelle version de votre modèle AADL de sorte qu'il puisse être simulé/implanté avec Ocarina. Indiquer en particulier ce qu'il est nécessaire d'ajouter au modèle afin qu'il soit utilisable avec Ocarina.




    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 :

    On souhaite répartir les tâches sur deux processeurs (au sens coeurs, cad sans communications réseaux) :

    Question 4 :

    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. Modifier et tester avec AADLInspector votre modèle AADL de la question 1 afin de représenter la donnée partagée.
    2. 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.
    3. Etudier, générer le code avec Ocarina, compiler et tester ce modèle.
    4. Expliquer le rôle des composants tic_sequence et tac_sequence.
    5. Modifier votre modèle du réfrigérateur pour intégrer la donnée partagée entre Alarme et Thermostat afin de pouvoir générer le code avec Ocarina.
    6. Tester ce nouveau modèle avec Ocarina.



    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 .






    Exercice 14, optimisation d'une application AOCS



    Cet exercice est à rendre sur ce moodle. Vous pouvez travailler à deux ou seul. Si vous travaillez à deux, indiquer le nom des 2 étudiants dans votre modèle ou dans le fichier contenant la réponse aux questions ci-dessous. Tous les documents sont autorisés pour ce TP.

    On souhaite modéliser et vérifier le comportement d'une application AOCS embarquée dans un satellite. Le satellite est constitué d'un processeur hébergeant les tâches suivantes :


    Tâche Temps d'exécution Périodes/Echéances Priorité
    ACTION_ANTENNE 3 ms 80 ms 110
    ACTION_MOTEUR 7 ms 40 ms 160
    DECISION_AOCS 1 ms 20 ms 100
    CAPTEUR_AZIMUT 1 ms 80 ms 130
    EMISSION_TMTC 2 ms 20 ms 170
    RECEPTION_TMTC 1 ms 20 ms 90
    CAPTEUR_ALTITUDE 1 ms 5 ms 200



    L'application AOCS est composée des tâches CAPTEUR_AZIMUT, DECISION_AOCS, et CAPTEUR_ALTITUDE. Ces 3 tâches partagent une zone mémoire en exclusion mutuelle selon le protocole PCP. Les tâches CAPTEUR_AZIMUT et CAPTEUR_ALTITUDE mesurent la position du satellite. La tâche DECISION_AOCS analyse les mesures fournies par les capteurs puis détermine les actions à déclencher sur les actionneurs.

    Un ensemble de tâches moins critiques que les tâches de l'application AOCS est également hébergé par le processeur : il s'agit des tâches RECEPTION_TMTC, EMISSION_TMTC, ACTION_ANTENNE et ACTION_MOTEUR. Ces tâches n'ont rien à voir avec l'application AOCS et ne sont pas décrites ici.

    On suppose que toutes les tâches sont périodiques. 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 255.



    Question 1 :

    Proposer un modèle AADL pour simuler le système/processeur avec l'outil AADLInspector en considérant l'ensemble des tâches du tableau ci-dessus.

    Question 2 :

    Avec le modèle de la question 1:
    1. Les échéances sont elles toutes respectées ?
    2. L'application AOCS livre ses résultats aux autres composants du système quand la tâche DECISION_AOCS se termine, son temps de réponse est donc un point important des performances de l'application AOCS. Quelle est le pire temps de réponse de la tâche DECISION_AOCS ?
    3. Peut on réduire le pire temps de réponse de DECISION_AOCS en modifiant les paramètres des tâches du tableau ci-dessus ? En particulier, indiquez les paramètres des tâches qu'un architecture peut modifier et ceux qui ne peuvent pas être modifiés pour améliorer les performances de l'application AOCS. Après modification des paramètres, montrez avec un nouveau modèle AADL si le pire temps de réponse est effectivement réduit. Quel est son nouveau pire temps de réponse ?


    Question 3 :

    Plutôt que de modifier les paramètres des tâches, un architecture propose plutot d'ajouter un second processeur. Avec les paramètres initiaux du tableau ci-dessus et un second processeur, peut on réduire les pire temps de réponse de la tâche AOCS ? Justifier votre réponse avec un nouveau modèle AADL.

    Question 4 :

    Sans tenir compte de la donnée partagée, proposer une version de votre modèle AADL de la question 3 (avec 2 processeurs) de sorte qu'il puisse être simulé/implanté avec Ocarina. Indiquer en particulier ce qu'il est nécessaire d'ajouter au modèle afin qu'il soit utilisable avec Ocarina.