Examen durée 2h Notes de cours et de TP autorisées
Transcription
Examen durée 2h Notes de cours et de TP autorisées
UPMC Master Informatique Parcours “Systèmes et Applications Répartis” (SAR) Module “Langages Synchrones” Année universitaire 20122013 E. Encrenaz 12 novembre 2012 Examen durée 2h Notes de cours et de TP autorisées L'examen comprend 4 exercices indépendents. Le barême, sur 23 points, est donné à titre indicatif. Exercice 1. Modélisation d'une montre/chronomêtre en Lustre (7 points) On souhaite modéliser une montre disposant de deux fonctionalités : l'affichage de l'heure courante et un chronomêtre Ces deux fonctionalités se partagent un même écran d'affichage. Par défaut, la montre affiche l'heure. On s'intéresse dans un premier temps à la détermination de l'heure courante. Le noeud horloge dont l'interface est donnée cidessous calcule l'heure courante en incrémentant les flots h (heure), m (minute) et s (seconde) à chaque évaluation du noeud. node horloge(tt : bool) returns (h,m,s : int); Question 1 (0,5 point) : Quels doivent être l'instant d'initialisation et la fréquence d'évaluation du noeud horloge pour que celuici présente une mesure exacte ? Réponse : La fréquence d'évaluation du noeud doit être de 1 Hz, et les compteurs doivent être initialisés à 0 à minuit. Question 2 (2 points) : Programmez en Lustre le noeud horloge. Réponse : node horloge(tt : bool) returns (h,m,s : int); let s = 0 -> if pre s = 59 then 0 else pre s +1 ; m = 0 -> if pre s = 59 then if pre m = 59 then 0 else pre m +1 else pre m ; h = 0 -> if pre m = 59 then if pre h = 23 then 0 else pre h +1 else pre h ; tel; On s'intéresse maintenant à la fonction de chronométrage. Le chronometre produit 0:0:0 tant qu'il n'est pas déclenché. Le chronomètre est déclenché sur une pression du bouton ON; il compte (en heure, minute, seconde) le temps écoulé depuis lson dernier déclenchement. Une seconde pression du bouton ON arrête le comptage du temps et maintient le délai écoulé entre les deux pressions de ON jusquà une pression du bouton ON, qui réinitialise le chronomêtre et active le comptage. L'interface du noeud chrono est la suivante : les signaux d'entrée sont le bouton ON et les flots h,m,s provenant de l'horloge. La sortie est composée des flots heure, minute, seconde calculés par le chronomètre : c_h, c_m et c_s; l'affichage du flot provenant de l'horloge ou du chronomêtre est réalisé par le noeud montre et n'est pas considéré ici. node chrono(ON : bool; h,m,s : int) returns (c_h,c_m,c_s : int); Question 4 (3 points) : Programmez le noeud chrono. On supposera qu'il existe un noeud diff calculant la différence de deux dates données chacune sous la forme des flots heure, minute, seconde. Réponse : node chrono(on : bool; h,m,s : int) returns (c_h,c_m,c_s: int); var init_h, init_m, init_s : int; decompte : bool; let (init_h, init_m, init_s) = (0,0,0) -> if not pre decompte and on then (h,m,s) else if pre decompte then pre (init_h,init_m,init_s) else (0,0,0); decompte = 0 -> if not pre decompte and on then true else if pre decompte and on then false else pre decompte; (c_h,c_m,c_s) = (0,0,0) -> if decompte then diff(h,m,s,init_h,init_m,init_s) else pre (c_h,c_m,c_s); tel Le noeud montre a l'interface suivante : le signal d'entrée CH permet la commutation de l'afficheur entre le mode horloge et le mode chronomêtre, et le signal d'entrée ON permet l'activation/arrêt du décompte du temps du noeud interne chronomètre. Le noeud montre affiche sur les signaux de sortie aff_h, aff_m, aff_s les valeurs des signaux heure, minute, seconde provenant soit de l'horloge, soit du chronomêtre. Il instancie les noeuds internes horloge et chrono. node montre(CH,ON : bool) returns(aff_h,aff_m,aff_s : int); Un exemple de fonctionnement du système est schématisé sur le diagramme cidessous : Sur ce diagramme, on indique les affichages réalisés en fonction des commandes des boutons CH et ON et les périodes de comptage du chronometre. Pendant la période d'affichage des sorties du chronometre, on distingue l'affichage de sa valeur initiale (1), l'affichage de la valeur courante du chronometre (2) et l'affichage de la valeur finale du chronometre (3). Pendant l'affichage de l'heure, l'action sur le bouton ON peut réinitialiser le chonometre et lancer son comptage (4), qui sera affiché lors de la prochaine action sur CH (5). Question 5 (1,5 points) : Programmez le noeud montre en supposant qu'il est évalué sur une horloge de base de 1 Hz. Réponse node montre(CH,ON : bool) returns(aff_h,aff_m,aff_s : int); var horl : bool; h,m,s : int; let horl = 1 -> if CH then not pre horl else pre horl; (h,m,s) = horloge(true); (aff_h,aff_m,aff_s) = if horl then (h,m,s) else chrono(ON,h,m,s); tel; Exercice 2. Analyse des exécutions d'un programme Lustre (6 points) On considère le programme Lustre décrit ciaprès. node EX2(a:bool) returns (x,y:int); let x = 0 -> if a then pre x + 2 else 0; y = 0 -> if a then pre x - 1 else pre x + 1; tel On souhaite construire le graphe des états accessibles du programme. Ce graphe comprend dans chaque état, la valeur courante des variables x et y. Chaque transition menant d'un état au suivant représente une réaction du programme et est étiquetée par la valeur de la variable d'entrée a pour la réaction représentée. Question 1 (2 points) : Complétez la structure (partielle) du graphe des états accessibles fourni sur la feuille réponse. Question 2 (2 points) : Sur ce graphe, les propriétés suivantes sontelles vérifiées ? 1. Après l'état initial, le long d'une séquence d'exécution comprenant uniquement des a, les états satisfont toujours x – y = 3. 2. Pour toute séquence d'exécution, après deux a successifs, on atteint forcément l'état x=0, y=1. 3. Pour toute séquence d'exécution, après la suite a.a, on atteint forcément l'état x=2, y=-1. 4. De tout état accessible, on pourra toujours revenir dans l'état x=0, y=1. Question 3 (2 points) : ● Proposez un observateur Lustre permettant de vérifier la propriété 2) de la question précédente. ● Ecrivez le noeud verif connectant l'observateur au noeud EX2 et indiquez la propriété que doit vérifier le noeud verif. Exercice 3. Esterel : Compilation en automate (4 points) On considère le programme Esterel suivant, composé d'un unique module M (le symbole % indique un commentaire) : module M : input E1,E2,E3; output S1, S2,S3; loop emit S2; await E1; emit S1; abort loop present E2 then emit S3; emit S2 end present; await E3; %% (**) emit S3; present E1 then emit S1 end present; await E1; emit S1; end loop when E2 do emit S2 end abort; await E3; %% (*) end loop end module Question 1 (1 point) : Représentez l'exécution du programme lorsque celuici est soumis à la séquence d'entrée suivante sur la feuille réponse fournie en fin de sujet. Question 2 (3 points) : Identifiez les points d'arrêt du programme et construisez la machine de Mealy du programme agglomérant en une seule transition toutes les actions exécutées entre deux points d'arrêt. Vous vous assurerez que l'automate construit est complet et déterministe. Exercice 4. Equivalence de systèmes réactifs (6 points) On suppose le noeud M d'interface : node M(i : bool) returns (o : bool); On considère les deux noeuds Lustre décrits ciaprès : node avant(E1,E2,C : bool) returns (S : bool); var S1,S2 : bool; let S = if C then S1 else S2; S1 = M(E1); S2 = M(E2); tel node apres(E1,E2,C : bool) returns (S:bool); let S = M(if C then E1 else E2); tel On cherche à établir les conditions sur M pour lesquelles ces deux noeuds sont équivalents du point de vue des entrées/sorties. Question 1 (1 point) : Représentez les noeuds avant et apres sous forme de circuit. Question 2 (1 point) : dans la formalisation de l'article XXX, comment est représenté le noeud M ? Réponse : un noeud Lustre est représenté sous la forme d'un système séquentiel, muni d'une interface (signaux d'entrées et de sortie), d'un état interne, et doté de deux fonctions f et t : f est la fonction de génération des sorties et t la fonction de transition : o = f(i,s) et s'=t(i,s) On propose trois instanciations différentes du noeud M, étudiées dans les trois questions suivantes. Dans chaque cas, vous argumenterez votre réponse et produirez un contreexemple le cas échéant. Question 2 (1 point) : Les noeuds avant et apres sontils équivalents du point de vue des entrées/sorties lorsque M répond à la définition suivante ? node M(i : bool) returns (o : bool); -- premier cas let o = not i; tel Réponse : M est combinatoire, la sortie courante o ne dépend que de l'entrée courante i : o = f(i). Dans le noeud avant, S = if C then f(i1) else f(i2), donc soit f(i1) soit f(i2) est connecté sur S. dans le noeud apres, S = f(if C then i1 else i2), donc l'expression if C then i1 else i2 est évalué puis selon le résultat seul f(i1) ou f(i2) sera évalué. Les deux noeuds sont équivalents Question 3 (1 point) : Les noeuds avant et apres sontils équivalents du point de vue des entrées/sorties lorsque M répond à la définition suivante ? node M(i : bool) returns (o : bool); -- deuxieme cas var s : bool; let s = 0 -> not pre s; o = s; tel Réponse : M est séquentiel, la sortie courante o dépend de l'entrée courante i et de la séquence d'entrée déjà appliquée, mais ici seule la longueur de la séquence d'entrée influe et non pas les valeurs de cette séquence d'entrée : M : o = f(s) et s' = t(s) Donc, à chaque instant, exécuter M sur l'entrée i1 ou i2 produit la même sortie et la même modification de l'état interne de M. Les deux noeuds sont équivalents Question 4 (1 point) : Les noeuds avant et apres sontils équivalents du point de vue des entrées/sorties lorsque M répond à la définition suivante ? node M(i : bool) returns (o : bool); -- troisieme cas var s : bool; let s = 0 -> if i then not pre s else pre s; o = s; tel Réponse : M est séquentiel, la sortie courante o dépend de l'entrée courante i et de la séquence d'entrée déjà appliquée, et ici les valeurs des entrées précédemment appliquées modifient l'état interne de M : o = f(i,s), s'=t(i,s) Si on applique la séquence (E1=1, E2=0, C=1),(E1=1, E2=0,C=1),(E1=1,E2=0,C=0), on obtient : pour avant : (s=0,o=0), (s=1,o=1) M(E1) connecté en sortie, état interne de M(E1) est passé à 1, celui de M(E2) est resté à 0, (s=0,o=0) M(E2) connecté en sortie, état interne de M(E1) passé à 0, celui de M(E2) est resté à 0 pour apres : (s=0,o=0), (s=1,o=1) état interne de M(1) passé à 1, (s=1,o=1) état interne de M(0) reste à 1. Les deux noeuds ne sont pas équivalents Question 5 (1 point) : Quelle règle généralisant les trois cas vus cidessus peuton énoncer quand à l'équivalence des constructions des noeuds avant et apres ? Réponse : si M est combinatoire ou M est séquentiel mais que la fonction de transition de M ne dépend pas des valeurs d'entrées (uniquement de la longueur de la séquence par exemple : M : o = f(s) et s' = g(s)), alors les deux constructions sont équivalentes. Lorsque M une fonction séquentielle quelconque, on ne peut pas prouver structurellement que les deux noeuds sont équivalents sans hypothèses supplémentaires. UPMC Master Informatique Parcours “Systèmes et Applications Répartis” (SAR) Module “Langages Synchrones” Année universitaire 20122013 E. Encrenaz Examen – feuille réponse NOM : ..................................... PRENOM : 12 novembre 2012 .......................................... Exercice 2, Question 2 : Graphe des états accessibles à compléter. Une portion du graphe des états du noeud EX2 est donné cidessous. Chaque état est éttiqueté par un couple de valeur indiquant la valeur de x à gauch eet la valeur de y à droite. Complétez ce graphe en précisant les étiquettes des états et transitions représentées, mais également en ajoutant les transitions et états manquants sur le schéma (vous construirez au moins tous les successeurs des états représentés sur le schéma actuel). Exercice 3, Question 1 : Exécution. Chaque case indique un événement : les signaux présents (en entrée), ou émis (en sortie). Tick : 1 2 3 4 5 6 7 8 9 10 11 12 13 Entrées E1 E2 E2 E3 E1 E2 E3 E1 E1 E3 E1 E3 E3 E1 E2 E3 E3 E1 E1 S1 S2 S3 S2 S2 S1 S2 S3 S1 S3 S1 S3 S1 S3 S2 S2 S1 Sorties S2