Enfin, début janvier, il vous sera demandé de présenter votre travail lors d'une
démonstration complétée par des questions.
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 :
- L'ensemble des modèles AADL élaborés pour chaque question ; modèles que l'on doit pouvoir analyser avec AADLInspector.
- 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:
- La chaudière comporte une sonde thermique dont l'objet est de capturer la température de la chaudière.
La température mesurée par cette sonde thermique est lue périodiquement par le traitement LIRE_CAPTEUR.
- La chaudière comporte un mécanisme d'arrêt d'urgence, utilisable par exemple, quand la température
de la chaudière dépasse un seuil donné. Ce mécanisme est implanté par un actionneur qui coupe l'alimentation
électrique de la chaudière.
Le traitement ACTIVER_ARRET envoie la commande d'arrêt de la chaudière lorsque
la situation le demande.
- La chaudière est également connectée à un thermostat dont l'objet est de régler la
température à atteindre dans le local à chauffer.
Le traitement TRANSMETTRE_THERMOSTAT a pour rôle l'envoie de la température de la chaudière au thermostat.
- Enfin un écran d'affichage permet de transmettre à l'utilisateur la température actuelle de la
chaudière. Cet écran est piloté par le traitement AFFICHAGE.
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 :
- Permet de respecter les échéances des tâches.
- Permet de minimiser certaines latences, comme celle entre le moment où une température est lue par LIRE_CAPTEUR
et le moment où le thread ACTIVER_ARRET émet la commande vers le dispositif d'arrêt d'urgence.
- Permet de minimiser, voire de supprimer le risque de perte de données.
- Permet de maximiser l'efficacité concernant l'utilisation des ressources: comme par exemple réduire
le nombre de préemption, de commutation de contexte, de messages lus plusieurs.
- Etc
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 :
- La priorité d'AFFICHAGE est 1.
- La priorité d'ANALYSE est 4.
- La priorité de LIRE_CAPTEUR est 3.
- La priorité d'ACTIVER_ARRET est 5.
- La priorité de TRANSMETTRE_THERMOSTAT est 2.
- Proposer un modèle AADL où chaque traitement est modélisé par un thread et les échanges
de données
entre threads sont assurés par un ou plusieurs composants data.
Cet ensemble de thread doit être ordonnancé selon un algorithme à priorité fixe préemptif.
- Expliquer:
- Que représente le composant AADL processor et la propriété actual_ processor_binding d'un modèle AADL ?
- En général, que peut on modéliser par un composant data ?
- Pourquoi peut il être intéressant de déclarer un composant data dans un paquetage séparé ?
- Analyser le comportement de votre modèle. Par exemple: Quels sont les pires temps de réponse des threads ?
Dans le pire cas, quelle est la latence maximale entre le moment où une température est lue par LIRE_CAPTEUR
et le moment où le thread ACTIVER_ARRET émet la commande vers le dispositif d'arrêt d'urgence? Peut on perdre
des mesures ?
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.
- Modifier votre modèle en employant des data port.
- Expliquer:
- Quelles sont les différences entre une connexion data port immediate et une connexion sampling ?
- Nous pourrions modéliser la sonde thermique et le thermostat avec des composants AADL devices
(cette modification du modèle n'est pas demandée).
En général, que représente un composant AADL device ?
- Analyser le comportement de ce nouveau modèle, d'abord quand les connextions
sont de type sampling, puis de type delayed. Que constatez vous ? Par exemple: Quels sont les pires temps de réponse des threads ?
Dans le pire cas, quelle est la latence maximale entre le moment où une température est lue par LIRE_CAPTEUR
et le moment où le thread ACTIVER_ARRET émet la commande vers le dispositif d'arrêt d'urgence?
Peut on perdre
des mesures ?
Si les résultats d'analyse sont différents de ceux de la question 1, expliquer alors ces différences.
Question 3
-
Dans les question 1 et 2, nous avons donc élaboré deux solutions architecturales différentes à partir d'une
spécification. D'après vous, quelle est celle qui vous semble la plus appropriée, du point de
vue des latences et des pires temps de réponse, mais également vis à vis de tout autre point de vue qui vous semble
important de prendre en compte.
-
Avez vous des suggestions pour améliorer ces modèles architecturaux ? On ne vous demande pas ici le modèle AADL
amélioré mais seulement d'indiquer si des pistes d'amélioration vous semble possibles.
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.
- On souhaite appliquer un mécanisme de redondance active sur le traitement ANALYSE.
Modifier votre modèle AADL de la question 1 de sorte que :
- Plusieurs instances d'ANALYSE recoivent la température mesurée et calculent donc autant de températures vérifiées.
- Un nouveau traitement nommé VOTEUR recoit les températures vérifiées par les instances d'ANALYSE
afin de détecter la présence d'une panne,
pour finalement transmettre la donnée aux traitements ACTIVER_ARRET, AFFICHAGE et TRANSMETTRE_THERMOSTAT.
Le traitement VOTEUR possède la même période qu'ANALYSE et une capacité de 1 ms.
- Comme dans les questions précédentes, analyser le comportement de ce modèle.
Quels sont les pires temps de réponse des threads ?
Dans le pire cas, quelle est la latence maximale entre le moment où une température est lue par LIRE_CAPTEUR
et le moment où le thread ACTIVER_ARRET émet la commande vers le dispositif d'arrêt d'urgence ?
-
Plus le nombre d'instance d'ANALYSE est grand, plus le système pourra tolérer de fautes d'ANALYSE.
Combien de fois au maximum
peut on instancier le composant ANALYSE sans manquer d'échéance ?
Combien de pannes d'ANALYSE cela peut il permettre de tolérer ?
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 :
- Autosar/EAST-ADL.
- MARTE/UML et Mast.
- TASTE.
- Symta/S.
- Times.
- Polychrony.
- SCADE.
- UPPAAL.
- HRT HOOD.
- Giotto.
Il vous est demandé :
- De vous organiser en groupe de 3 étudiants.
- Chaque groupe doit :
- Choisir une de ces approches sachant que chaque approche sera traitée
par un groupe et un seul.
- Lire le document choisi. Il est, par ailleurs, facile
de compléter cette lecture par d'autres documents disponibles sur Internet.
Pour trouver d'autres articles sur chacune de ces approches, vous pouvez utiliser
scholar.google.fr par exemple qui est un moteur de recherche pour les publications
scientifiques.
- Pour début janvier, il vous est demandé de livrer un rapport de 4 pages maximum
décrivant l'approche choisie en répondant aux questions suivantes :
- Quels sont les systèmes ciblés ?
- Comment les systèmes à vérifier sont il décrits/spécifiés ?
En particulier comment sont modélisées les données temps réel de ces systèmes ?
- Si une vérification d'ordonnancement est possible, comment est elle conduite ?
Quelles sont les techniques de vérification et les modèles formels utilisés ? Les outils ?
- Peut on réaliser une génération de code et pour quelles cibles ?
- Enfin, courant janvier, il vous sera demandé de présenter votre travail d'analyse lors d'une
soutenance de 10 minutes de présentation, complétée par des questions.
On souhaite modéliser et vérifier l'ordonnancement d'un logiciel embarqué dans un commutateur réseau.
Le commutateur est constitué:
- D'un ensemble de ports d'entrée et de sortie.
- Chaque port d'entrée et chaque port de sortie mémorise un message.
- Chaque port d'entrée et associé à un port de sortie où ses messages sont envoyés.
- Pour chaque port d'entrée, une tâche copie le message du port d'entrée vers le port de sortie associé toutes les 50 ms.
- Nous supposons dans un premier temps que le commutateur ne comporte que 4 ports d'entrée et de sortie, soit 4 tâches nommées PORT_1, PORT_2, PORT_3 et PORT_4 ci-dessous.
- Une tâche, dont le nom est STAT, collecte toutes les 21 ms des statistiques sur l'utilisation des ports d'entrée et de sortie.
- Enfin, une tâche de supervision, dont le nom est SUPER, permet aux utilisateurs de configurer l'équipement.
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.
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.
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.
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 :
-
La tâche CAPTEUR_VOIE_D_EAU utilise un capteur pour détecter les voies d'eau à un endroit du bateau.
-
La tâche CAPTEUR_INCENDIE détecte toute élévation anormale de température sur le bateau.
-
La tâche CAPTEUR_MOTEUR détecte les anomalies de fonctionnement du moteur.
-
La tâche ALERTE_VHF vérifie les données émises par les 3 tâches CAPTEURS ci-dessus, analyse ces données et déclenche l'envoie d'un message vers les services de secours
via la radio VHF.
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.
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.
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.
-
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.
- 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.
- 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) :
- Les tâches Alarme et Thermostat sont
déployées sur le premier processeur.
- Les tâches Sonde, porte et Lampe sont déployées sur le second processeur.
- Modifier votre modèle AADL en conséquence, puis, générer/tester le code avec AADLInspector d'abord et Ocarina ensuite.
- Quelles sont les principales différences sur le code généré entre les deux versions ?
- Quelles différences de performance peut on attendre de cette nouvelle version de l'architecure ?
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.
- Modifier et tester avec AADLInspector votre modèle AADL de la question 1 afin
de représenter la donnée partagée.
- 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.
- Etudier, générer le code avec Ocarina, compiler et tester ce modèle.
- Expliquer le rôle des composants tic_sequence et tac_sequence.
- 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.
- Tester ce nouveau modèle avec Ocarina.
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 .
- Récupérer les fichiers zip et les ouvrir sur le bureau.
- Lancer osate ; créer un projet AADL composé d'un package contenant
ce modèle AADL.
- Positionner les propriétés du property set Cheddar_Parameters_Properties afin de pointer sur
le répertoire où vous avez stocké l'exécutable de cheddar.
- Générer le modèle d'instance et vérifier l'ordonnancement de ce jeu de tâches.
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:
- Les échéances sont elles toutes respectées ?
- 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 ?
- 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.