aadl:%architecture%analysis&design% language%...2017/06/04 · subprogram prog1 features i : in...
TRANSCRIPT
Page 1 - SE206: AADL – partie 2
AADL: Architecture Analysis & Design Language Généra&on de code et annexe comportementale
E"enne Borde e"enne.borde@telecom-‐paristech.fr
Page 2 - SE206: AADL – partie 2
Objec"fs du cours
• Connaître la correspondance entre modèle AADL et code dans un langage de programma"on
• Connaître les limita"ons et challenges associées aux techniques de généra"on de code
Page 3 - SE206: AADL – partie 2
Plan du cours
1. Représenta"on de code source « legacy » ou fonc"onnel 2. Intégra"on de code legacy: comportement basique 3. Représenta"on du comportement détaillé d’un composant 4. Généra"on de code, principes et challenges
Page 4 - SE206: AADL – partie 2
Correspondance entre modèle et code: principes généraux (et approxima"fs) • Ce qui suit présentent des principes généraux et approxima"fs visant
à faciliter la compréhension (plutôt que l’exhaus"vité) • Les types et implémenta"on de composants logiciel représentent des
par"es du logiciel avant exécu"on: z Data à types de données z Subprogram à code source (C, Ada, Java…) z Thread à tâches, ou fonc"onalités z Process à fichier binaire exécutable
• Les sous-‐composants logiciels représentent le logiciel en cours d’exécu"on z Data à variables z Thread, Subprogram à code exécuté z Process à zone mémoire réservée pour l’exécu"on des fonc"ons
Page 5 - SE206: AADL – partie 2
Intégra"on de code “legacy” (patrimonial, ou fonc"onnel)
Page 6 - SE206: AADL – partie 2
#define KP 60#define KI 15int integral=0;int lastColor = 1;/** * Computes the angle the robot has to turn in * order to follow the line. */void computePID(int in_light, int colorToFollow, int *out_angle) { char error; if(in_light == 99) error = 0; else if(in_light == colorToFollow) { error = 20; if(lastColor=1)
integral=0; lastColor=0; } else { if(lastColor=0)
integral=0; error = -20; lastColor=1; } integral = integral + error; // multiply by period if(integral>90) integral = 90; if(integral<-120) integral=-120; *out_angle = (KP * error + KI*integral)/100;}
Robot suiveur de ligne
Page 7 - SE206: AADL – partie 2
Représenta"on des données en AADL
• La catégorie de composants AADL u"lisé pour décrire une donnée est de la catégorie « data », qui représente soit: z Un type de donnée simple, z Une structure de donnée, z Une instance de donnée en mémoire (i.e. sous-‐composant data).
• Des propriétés permebent de référencer des types de donnée
existant, ainsi que les propriétés non-‐fonc"onnelles (occupa"on mémoire, unités de la donnée, etc.)
• Ces propriétés sont fournis dans un ensemble de propriétés standardisé (voir extrait ci-‐après).
Page 8 - SE206: AADL – partie 2
Exemple de propriétés pour les types de donné
property set Data_Model is… Data_Representation : enumeration (Array, Boolean, Character, Enum, Float, Fixed, Integer, String, Struct, Union) applies to ( data, feature ); -- The Data_Representation property may be used to specify the -- representation of simple or composite data types within the -- programming language source code. Enumerators : list of aadlstring applies to ( data, feature ); -- The Enumerators provides the list of enumeration litterals -- attached to an enumeration data component.…end Data_Model;
Page 9 - SE206: AADL – partie 2
Données u"lisées par la fonc"on de suivi de ligne
data Intproperties Data_Model::Data_Representation => integer;end Int; data Colorproperties Data_Model::Data_Representation => Enum; Data_Model::Enumerators => ("NXT_COLOR_BLACK", "NXT_COLOR_RED",
"NXT_COLOR_BLUE"); Source_name => "COLOR_TYPE"; Source_Text => ("ecrobot_interface.h");end Color;
• Color est un type de donné, déclaré dans ecrobot_interface.h; l’iden"fiant du type est COLOR_TYPE; c’est un enum dont les valeurs possibles sont NXT_COLOR_BLACK, …
• Pour aller plus loin: regardez le contenu du property set Data_Model depuis OSATE
Page 10 - SE206: AADL – partie 2
Représenta"on du code en AADL
• La catégorie de composants AADL u"lisé pour décrire un code source sont de la catégorie « sous-‐programmes », qui représente une fonc"on (C, Ada, Java, etc.).
• Un sous-‐programme possède z Des paramètres avec une direc"on (in, out, in-‐out) et un type de donnée, et/ou
z Des data access
• Des propriétés permebent de référencer le code source existant, ainsi que les propriétés non-‐fonc"onnelles
Page 11 - SE206: AADL – partie 2
Code de la fonc"on de suivi de ligne subprogram computePIDfeatures currentColor : in parameter Int; colorToFollow: in parameter Color; angle : out parameter Int;properties Source_language => (C); Source_text => ("in_robot.h", "in_robot.c"); Source_name => "computePID";end computePID;• Représenta"on de la fonc"on computePID, codée en C, déclarée dans in_robot.h, implémentée dans in_robot.c
void computePID(int in_light, int colorToFollow, int *out_angle)
Page 12 - SE206: AADL – partie 2
Modélisa"on du comportement des threads et subprograms en AADL
Page 13 - SE206: AADL – partie 2
subprogram spg1 end spg1;subprogram spg2 end spg2;thread a_thread end a_thread;thread implementation a_thread.example
calls seq1: {
call1: subprogram spg1; call2 : subprogram spg2; call3 : subprogram spg1;
};properties Compute_Entrypoint_Call_Sequence => reference (seq1);
end a_thread.example;
Appels de sous-‐programmes
• Une implémenta"on de sous-‐programme ou de thread peut contenir des séquences d’appels à des sous-‐programmes
• L’ordre des appels correspond à l’ordre dans lequel les fonc"ons seront exécutées
Page 14 - SE206: AADL – partie 2
thread event_receiver features p_in: in event port; properties Dispatch_Protocol => Timed; Period => 200 Ms;end event_receiver;thread implementation event_receiver.impl calls call1 : { c : subprogram spg1;}; call2 : { c2 : subprogram spg2; }; properties Compute_Entrypoint_Call_Sequence => reference (call1) applies to p_in; Compute_Entrypoint_Call_Sequence => reference (call2);end event_receiver.impl;
Comportement contextuel • Une séquence d’appels peut-‐être associé à différents contextes d’ac"va"on d’un thread: sur
événement, à échéance de la période, … • Aben"on à maintenir la cohérence de la descrip"on:
z Un thread périodique n’a qu’un seul type de dispatch: périodique et pas sur évènements
• Ici, spg2 est appelé sur échéance du "mer et spg1 est appelé sur récep"on d’un évènement
Page 15 - SE206: AADL – partie 2
data a_data end a_data; subprogram prog1 features i : in parameter a_data; o : out parameter a_data; end prog1; subprogram prog2 extends prog1 end prog2; subprogram implementation prog2.impl calls seq : { c1: subprogram prog1; }; connections cnx1: parameter i-> c1.i; cnx2: parameter c1.o -> o; end prog2.impl;
subprogram prog3 extends prog1 end prog3; subprogram implementation prog3.impl calls seq : { c1: subprogram prog1; c2: subprogram prog2; }; connections cnx1: parameter i -> c1.i; cnx2: parameter c1.o -> c2.i; cnx3: parameter c2.o -> o;end prog3.impl;!
Représenter un passage de paramètres • Pour alimenter les paramètres des sous-‐programmes, on peut
z Connecter des paramètres de sous-‐programmes entre eux z Connecter des paramètres de sous-‐programmes à des ports z Connecter des data access de sous-‐programmes à des data access de threads
Page 16 - SE206: AADL – partie 2
Connec"on d’un requires data access
data dend d;subprogram spg features S : requires data access d;end spg;thread t features S : requires data access d;end t;!
thread implementation t.example calls seq: { call1 : subprogram spg; }; connections cnx : data access S -> call1.S;end t.example;!
• Séman"que: l’adresse de la variable partagée est passée en paramètre de spg
Page 17 - SE206: AADL – partie 2
Connec"ons paramètre à port subprogram sender_spg features result : out parameter d; properties source_name => "send"; source_language => (C); source_text => ("user_code.h","user_code.c"); end sender_spg;thread data_sender features p_out: out data port d; properties Dispatch_Protocol => Periodic; Period => 2000 Ms; end data_sender; thread implementation data_sender.impl calls call : { c : subprogram sender_spg;}; connections cnx: parameter c.result -> p_out; properties Compute_Entrypoint_Call_Sequence => reference (call); end data_sender.impl;
• Séman"que: à la fin de l’exécu"on du programme send, une donnée est envoyé à travers le port p_out du thread.
Page 18 - SE206: AADL – partie 2
Connec"ons data port à paramètre
• Séman"que: la valeur associée au port p_in est copiée dans une variable locale en début d’exécu"on du thread, puis passée en paramètre du sous-‐programme.
subprogram receiver_spg features input : in parameter d; properties source_name => "receive"; source_language => (C); source_text => ("user_code.h","user_code.c"); end receiver_spg; thread data_receiver features p_in: in data port d; properties Dispatch_Protocol => Periodic; Period => 1000 Ms; end data_receiver; thread implementation data_receiver.impl calls call : { c : subprogram receiver_spg;}; connections cnx: parameter p_in -> c.input; properties Compute_Entrypoint_Call_Sequence => reference (call); end data_receiver.impl;
Page 19 - SE206: AADL – partie 2
Connec"ons event data port à paramètre
• Séman"que: la séquence de valeurs disponibles sur la file d’abente associée au port p_in est « gelée » au moment du dispatch du thread (i.e. inaccessible au producteur) et 1 valeur est passé à chaque appel dans l’ordre FIFO. Si aucune valeur n’est disponible, le sous-‐programme n’est pas appelé.
thread eventdata_receiver features p_in: in event data port d; properties Dispatch_Protocol => Periodic; Period => 1000 Ms; end eventdata_receiver; thread implementation eventdata_receiver.impl calls call : { c : subprogram receiver_spg;}; connections cnx: parameter p_in -> c.input; properties Compute_Entrypoint_Call_Sequence => reference (call); end eventdata_receiver.impl;
Page 20 - SE206: AADL – partie 2
Con"nuons l’intégra"on de code legacy dans le robot Lego
• Nous avons représenté le code legacy, (computePID) en AADL
• Pour intégrer ce code, il va falloir z L’ac"ver à u"lisa"on de thread AADL z Lui fournir les valeurs d’entré et u"liser ses sor"es
o int in_light, à fourni par la plate-forme d’exécution
o int colorToFollow, à fourni par une autre tâcheo int *out_angle à à transmettre à la plate-forme d’exécution
Page 21 - SE206: AADL – partie 2
• Aller d’un point X à un point Y dans une carte représentée par un ensemble de points reliés par des chemin de couleurs différentes.
• Exemple: Aller de C à J dans la carte (ini"alement le robot est sur le point noir C) z Calculer un chemin (séquence de couleurs) z Chercher la prochaine ligne à suivre z Détecter l’abeinte de la ligne à suivre z Suivre une ligne de couleur z Détecter l’abeinte d’un point noir z Détecter des obstacles sur la trajectoire z Arrêter le robot en cas d’obstacle
Mission du robot
B CA
D
G
E
H
J
F
I
K
Page 22 - SE206: AADL – partie 2
Intégra"on du code dans une architecture temps-‐réel (architecture incomplète)
FollowThread Subprogram_Call: { getColor; computePID; setSpeedLep; setSpeedRight }
ComputePath Subprogram_Call: { setColor }
MAIN_PROCESS
Color_To_Follow
100 ms
1000 ms
Question: que représente, en termes de code C, ���le sous-composant Color_To_Follow?
Réponse: Une variable globale!
Page 23 - SE206: AADL – partie 2
Représenta"on du support d’exécu"on du robot en AADL
Sonar
Light sensor
nxt_cpu
Motor Right
bus
bus
bus
bus
Motor Left
NXT_PORT_S1
void ecrobot_init_nxtcolorsensor(U8 port_id, U8 mode)���U16 ecrobot_get_nxtcolorsensor_id(U8 port_id)
Page 24 - SE206: AADL – partie 2
Représenta"on de l’architecture intégrée du robot
Sonar
Light sensor
nxt_cpu
Motor Left
bus
bus
bus
bus
Motor Right
NXT_PORT_S1
FollowThread Subprogram_Call: { getColor; computePID; setSpeedLep; setSpeedRight }
ComputePath Subprogram_Call: { setColor }
MAIN_PROCESS
Colo_To_Follow
100 ms
1000 ms
Page 25 - SE206: AADL – partie 2
Correspondance Exécu"on de code C ßà modèle AADL
Page 26 - SE206: AADL – partie 2
Variables
• Data subcomponent dans un process = variable globale
• Data subcomponent dans un thread = variable locale au thread (instanciée sur la pile du thread); durée de vie = tant que le thread existe.
• Data subcomponent dans un sous-‐programme = variable locale au sous-‐programme (instanciée sur la pile de la fonc"on correspondante); durée de vie = tant que le thread existe
Page 27 - SE206: AADL – partie 2
Threads
• La représenta"on des threads AADL en code C n’est pas standardisée z Dans RAMSES: thread = fonc"on C qui u"lise l’API de l’OS + configura"on de l’OS pour l’ac"va"on de la tâche
z Les sous composants data sont stockés sur … ?
• Cebe représenta"on est complexe du fait de la présence des ports z Mapping d’un port = ensemble de variables qui permebent d’accéder au contenu du port
Page 28 - SE206: AADL – partie 2
Représenta"on du fonc"onnement des communica"ons (data ports) • Sampling (structure)
Task T1 Task T2 Data d
Process P
Data d2 Data d1
Task T1 Task T2
Process P
f1 f2
f1 f2
Page 29 - SE206: AADL – partie 2
Task T1 Task T2 Data d
Data d2 Data d1
f1 f2
Représenta"on du fonc"onnement des communica"ons (data ports) • Sampling (écriture)
Process P
Copie en fin de T1
Task T1 Task T2
Process P
f1 f2
Page 30 - SE206: AADL – partie 2
Task T1 Task T2 Data d
Data d2 Data d1
f1 f2
Représenta"on du fonc"onnement des communica"ons (data ports) • Sampling (lecture)
Process P
Copie en fin de T1 Copie en début de T2
Note: les subprograms exécutés par T1 (resp. T2) travaillent avec d1 (resp.d2). Le code généré ���à partir de P s’assure de réaliser le transfert vers (resp. depuis) d « au bon moment »
Task T1 Task T2
Process P
f1 f2
d est … ? d1 est … d2 est …
Page 31 - SE206: AADL – partie 2
Représenta"on du fonc"onnement des communica"ons (data ports) • Immediate
Task T1
Data d
Task T1 Task T2
Process P
f1 f2
f1 f2
Page 32 - SE206: AADL – partie 2
Représenta"on du fonc"onnement des communica"ons (data ports) • Delayed (TODO)
Page 33 - SE206: AADL – partie 2
Représenta"on du fonc"onnement des communica"ons (event data ports) • TODO …
Page 34 - SE206: AADL – partie 2
Ges"on des modes de fonc"onnement, exemple du robot mobile
Page 35 - SE206: AADL – partie 2
• Défini"on: un mode de fonc"onnement représente un état du système dans lequel celui-‐ci fournit un sous-‐ensemble de ses fonc"onnalité.
• Exemple: Aller de C à J dans la carte (ini"alement le robot est sur un point noir) z Calculer un chemin (séquence de couleurs) z Chercher la prochaine ligne à suivre z Détecter l’abeinte de la ligne à suivre z Suivre une ligne de couleur z Détecter l’abeinte d’un point noir z Détecter des obstacles sur la trajectoire z Arrêter le robot en cas d’obstacle
Modes de fonc"onnement
B CA
D
G
E
H
J
F
I
K
Page 36 - SE206: AADL – partie 2
Fonc"onnalités par mode
• Modes 1. Calculer un chemin 2. Chercher la prochaine ligne 3. Suivre une ligne
• Fonc"onnalités par mode 1. Calculer un chemin (séquence de couleurs). 2. Chercher la prochaine ligne à suivre, Détecter l’abeinte de la
ligne, Détecter des obstacles sur la trajectoire, Arrêter le robot en cas d’obstacle.
3. Suivre une ligne de couleur, Détecter l’abeinte d’un point noir, Détecter des obstacles sur la trajectoire, Arrêter le robot en cas d’obstacle.
Page 37 - SE206: AADL – partie 2
Les modes en AADL
• Les modes permebent de modéliser la reconfigura"on du système en fonc"on d’événements z définis au niveau des composants z seuls les événements (event ports) peuvent déclencher un changement de mode
z certains sous-‐composants, connexions, etc. ne sont ac"vés que dans certains modes
z la défini"on des propriété peut dépendre du mode courant • Les changements de modes permebent de représenter des
architectures (pseudo) dynamiques (reconfigura"ons) z évolu"on (dynamique) de la configura"on de l’architecture z ensemble déterminé (sta"quement) de configura"ons possibles
Page 38 - SE206: AADL – partie 2
Mise en œuvre avec le robot
Page 39 - SE206: AADL – partie 2
Architecture par mode
• Mode compute path: 1 tâche de calcul de la séquence de lignes à suivre.
• Mode follow line: 4 tâches z suivi de ligne (avec computePID) z détec"on d’abeinte d’un point noir (changement de mode) z détec"on d’osbtacle z MàJ de la couleur (tâche background requise par la plate-‐forme d’exécu"on)
• Mode search next line: 4 tâches z suivi de point noir z détec"on d’abeinte de la prochaine ligne (changement de mode) z détec"on d’osbtacle z MàJ de la couleur (tâche background requise par la plate-‐forme d’exécu"on)
• L’architecture instanciée dans chaque mode est décrite en u"lisant « in modes » (voir plus loin)
Page 40 - SE206: AADL – partie 2
Transi"ons de mode
• Compute path à Search next line z Une fois le chemin calculé, on cherche la première ligne à suivre
• Search next line à Mode follow line z Une fois la ligne abeinte, on la suit
• Mode follow lineà Search next line z Une fois le point noir abeint, on cherche la prochaine ligne
• L’envoi de l’événement peut se faire depuis le code C des fonc"ons exécutées via une api dédiée (en cours de standardisa"on, donc pas encore dans l’UE)
Page 41 - SE206: AADL – partie 2
Code AADL
process implementation proc.impl subcomponents backgroung_inst : thread backgroung.impl in modes (follow_line_mode,
search_next_line_mode); follow_line_inst : thread follow_line.impl in modes (follow_line_mode); color_lookup_inst : thread color_lookup.impl in modes (follow_line_mode); … modes follow_line_mode : mode; compute_color_mode : initial mode; search_next_line_mode : mode; follow_line_mode -[color_lookup_inst.reached]-> compute_color_mode; compute_color_mode -[compute_next_color_inst.computed]->
search_next_line_mode; search_next_line_mode -[search_next_line_inst.found]-> follow_line_mode; … end proc.impl;
Page 42 - SE206: AADL – partie 2
Remarques sur AADL
• Langage très riche (beaucoup de concepts) et verbeux (la no"on de propriétés y est pour beaucoup)
• La syntaxe n’est que le support à des concepts fondamentaux dans les systèmes embarqués: z Resources fournies (plate-‐forme) vs. Resources demandées (logiciel)
z Calcul de temps de réponse et calcul de temps de latence z Intégra"on de code legacy/fonc"onnnel (sépara"on des préoccupa"ons
z Descrip"on du comportement des fonc"ons z Modes de fonc"onnement et reconfigura"ons z … (annexes non étudiées dans ce cours)
Page 43 - SE206: AADL – partie 2
Conclusions sur la généra"on de code
• Offre la capacité de « porter » des applica"ons existantes sur différentes plates-‐formes d’exécu"on (celles supportés par les ou"ls)
• Limita"ons: z Nécessite de s’assurer que les résultats d’analyse obtenu sur le modèle sont préservés après généra"on de code
z Difficulté de faire évoluer le code généré z Si système cri"que: confiance dans l’ou"l de généra"on de code?
Page 44 - SE206: AADL – partie 2
Pour aller plus loin: analyse de temps de réponse et annexe comportementale
Page 45 - SE206: AADL – partie 2
Représenta"on des sec"ons cri"ques
• Données partagées z Si protégée, il faut prendre en compte les interférences dues aux sec"ons cri"ques (temps de blocage).
z Il faut donc représenter plus finement le comportement du thread
• Annexe comportementale (voir slides suivants)
Page 46 - SE206: AADL – partie 2
Annexe comportementale
• Annexe standardisée • Modéliser le comportement logiciel (thread, sous-‐programmes) par le biais de machines à état
• Une clause comportementale AADL est composée de trois par"es: z Déclara"on des états z Déclara"on des transi"on entre ces états z Déclara"on des variables
Page 47 - SE206: AADL – partie 2
Les états dans l’annexe comportementale
• Ini@al, correspond à l’état dans lequel se trouve le composant après ini"alisa"on
• Final, correspond à l’état dans lequel se trouve le composant après finalisa"on (retour d’un appel de fonc"on ou finalisa"on d’une tâche)
• Complete, u"lisable pour les threads seulement: correspond à un état dans lequel le thread n’u"lise pas la ressource d’exécu"on (préempté, abente passive, etc…)
• Une clause comportementale doit contenir un état ini"al et au moins un état final z L’état final et ini"al peuvent être le même
Page 48 - SE206: AADL – partie 2
Les transi"ons dans l’annexe comportementale
• Un Etat source • Une ensemble de condi"ons
z condi"ons d’exécu"on, correspondant à un switch/case dans l’exécu"on d’une fonc"onnalité o Une condi"on peut porter sur le contenu d’un port, d’un paramètre, d’une donnée, d’une
propriété, etc…
z condi"ons de dispatch, correspondant aux condi"ons de réveil d’un thread à par"r d’un état complete donné o à mebre en regard de la propriété dispatch_protocol du thread (Periodic, Sporadic, Aperiodic,
Timed ou Hybrid)
• Un état cible • Un ensemble d’ac"ons
z Séquence d’ac"ons pouvant contenir une structure de contrôle (if/then/else; while; do … un"l) et des interac"ons avec l’environnement d’exécu"on
z Les condi"ons dans les structures de contrôle des ac"ons sont similaires à des condi"ons d’exécu"on
Page 49 - SE206: AADL – partie 2
Interac"on des clauses comportementales avec l’environnement d’exécu"on AADL • Appel de sous-‐programmes: sub!(v1, v2, r1); • Computa"on (10 ms); représente un calcul de 10 ms • p! sur un port de sor"e p permet d’envoyer le message contenu dans
p; p!(v) permet d’envoyer le message v à travers p • p? sur un port d’entrée permet de lire les message contenus dans le
buffer associé à p; z Le contenu de la valeur retourné dépend du protocole associé au port
(propriété Dequeue_Protocol)
• p'count et p’fresh pour connaitre l’état d’un buffer correspondant à un port p z p'count retourne le nombre d’éléments dans le buffer z p'fresh retourne true si la valeur a été mise à jour depuis sa dernière u"lisa"on;
false sinon
Page 50 - SE206: AADL – partie 2
Exemple d’u"lisa"on de l’annexe comportementale
thread implementation controller_task.impl properties Dispatch_Protocol => Timed; Period => 1000 ms; annex Behavior_Specification {** states idle: initial complete final state; detect_P: state; transitions idle -[on dispatch A_i]-> detect_P {
while (P_i'count != 0) {P_i?}; A_i?;
A_o!; Computation(20 ms)};
detect_P -[P_i'count > 0]-> idle { while (P_i'count != 0) {P_i?}; };
detect_P -[P_i'count = 0]-> idle {P_o!}; idle -[on dispatch Period]-> idle {A_o!};
**};end controller_task.impl;
Thread controller_task features P_i: in event port; P_o: out event port; A_i: in event port; A_o: out event port;end controller_task;
Page 51 - SE206: AADL – partie 2
Exemple: analyse d’ordonnançabilité (2/2)
Page 52 - SE206: AADL – partie 2
Code AADL (1/3)
PACKAGE shared_data_PkgPUBLICPROCESSOR CPUPROPERTIES Scheduling_Protocol => (RMS);END CPU; SYSTEM shared_dataEND shared_data; SYSTEM IMPLEMENTATION shared_data.othersSUBCOMPONENTS my_platform : PROCESSOR CPU; my_process : PROCESS my_process.others;PROPERTIES Actual_Processor_Binding => ( reference(my_platform) ) applies to my_process;END shared_data.others;PROCESS my_processEND my_process;
PROCESS IMPLEMENTATION my_process.othersSUBCOMPONENTS T1 : THREAD T.i1; D1 : DATA D { Concurrency_Control_Protocol => Priority_Ceiling; }; D2 : DATA D { Concurrency_Control_Protocol => Priority_Ceiling; }; T2 : THREAD T.i2;CONNECTIONS C1 : DATA ACCESS D1 -> T1.D1; C2 : DATA ACCESS D2 -> T1.D2; C3 : DATA ACCESS D1 -> T2.D1; C4 : DATA ACCESS D2 -> T2.D2;END my_process.others;
Page 53 - SE206: AADL – partie 2
Code AADL (2/3)
THREAD TFEATURESD1 : REQUIRES DATA ACCESS D;D2 : REQUIRES DATA ACCESS D;END T;DATA DEND D;
THREAD IMPLEMENTATION T.i1PROPERTIESDispatch_Protocol => Periodic;Compute_Execution_Time => 5ms..5ms;Period => 15 ms;ANNEX Behavior_Specification {**States s : initial complete final state;Transitions t : s -[on dispatch]-> s { D1 !<; computation(3 ms); D2 !<; D2 !>; D1 !>};**};END T.i1;
Page 54 - SE206: AADL – partie 2
Code AADL (3/3)
THREAD IMPLEMENTATION T.i2PROPERTIESDispatch_Protocol => Periodic;Compute_Execution_Time => 5ms..5ms;Period => 25 ms;ANNEX Behavior_Specification {**States s : initial complete final state;Transitions t : s -[on dispatch]-> s { D2 !<; computation(5 ms); D1 !<; D1 !>; D2 !>};**};END T.i2; END shared_data_Pkg;
Page 55 - SE206: AADL – partie 2
Exploita"on avec AADL Inspector
Page 56 - SE206: AADL – partie 2
Exercice: calcul de temps de réponse
thread Task1features l: requires data access lock; d1: requires data access d; d2: requires data access d;annex behavior_specification {** states s_init: initial complete final state; s_comp: state; transitions t1: s_init -[on dispatch]-> s_comp; t2: s_comp -[true]-> s_init { computation(1 ms .. 2 ms); l!<; computation(0 ms .. 1 ms); l!>; computation(1 ms .. 2 ms) }; **}; end Task1;
thread Task2 features l: requires data access lock; d1: requires data access d; d2: requires data access d; annex behavior_specification {** states s_init: initial complete final state; s_comp: state; transitions t1: s_init -[on dispatch]-> s_comp; t2: s_comp -[d1 = d2]-> s_init { computation(0 ms .. 1 ms); l!<; computation(3 ms .. 8 ms); l!>; computation(4 ms .. 1 ms) }; t3: s_comp -[otherwise]-> s_init { computation(12 ms .. 15 ms); l!<; computation(2 ms .. 2 ms); l!>; computation(9 ms .. 13 ms) }; **}; end Task2;
On suppose que : ��� Task1 et Task2 sont connectées aux mêmes données ��� via l, d1, et d2 respectivement. Period (Task1) = 40 ms; Period(Task2) = 80 ms; Ordonancement = RMS ���
Quel est le pire temps de réponse de Task1 et Task2?
Page 57 - SE206: AADL – partie 2
Pire temps de réponse • Méthode 1, rapide mais pessimiste: approxima"on
z WCET (Task1) = 5 z WCET (Task2) = 30 z WCET (l) = 8
WCRT(Task1) = 13; WCRT(Task2) = 56
• Méthode 2, lente mais moins pessimiste: produit croisé des branches de l’automate
WCRT(Task1) = 13; WCRT(Task2) = 37
I 2ms
1ms
lock(l)
2ms
unlock(l)
F
Task1 I
1ms
8ms
lock(l)
1ms F
Task2
unlock(l)
I 2ms
1ms
lock(l)
2ms
unlock(l)
F
Task1 I
15ms
2ms
lock(l)
13ms F
Task2
unlock(l)
Page 58 - SE206: AADL – partie 2
Représenta"on du fonc"onnement des communica"ons • Delayed