3.4 Réalisation avec discrétisation
3.4.3 Transformation en Giotto
La seconde étape de la transformation est de traduire l’automate discret en Giotto.
L’ob-jectif du programme Giotto est de surveiller si les composants s’exécutent correctement par
rapport à leur comportement attendu. L’automate discrétisé représente ce comportement unité
de temps par unité de temps. Un état de l’automate discretisé permet de savoir ce qui doit se
passer ou pas pendant une période de une unité de temps. Le moniteur en Giotto doit vérifier
les évènements durant cette unité de temps.
Un programme Giotto est composé de modes. Un mode permet d’exécuter un ensemble de
fonctions pendant une période. Le programme peut quitter un mode pour aller dans un autre
grâce à un changement de mode.
Chaque état de l’automate discrétisé représente le comportement attendu pour une unité
de temps. Les transitions sortantes sont les changements d’états possibles et les informations
portées par les transitions sont les conditions de ce changement. Chaque état de l’automate
discret correspond à un mode en Giotto. La période du mode sera de une unité de temps. A la
fin de la période, le moniteur changera obligatoirement de mode. En effet, on ne peut rester dans
Réalisation avec discrétisation 69
s0 ?launch-!start$-!getSound s1 s0- s2 violation !start$ ou !getSound violation s3 1 s3-violation αβ violation ?launch-!start$-!getSound ?launch-!start$ 1 αβ !start$ ou !getSound s0 s1 violations0- s2 !start$ ou !getSound violation s3 1 s3-violation αβ violation ?launch-!start$-!getSound ?launch-!start$ 1 αβ 1 1 violation ?launch-!start$-!getSound ?launch-!start$ ?launch-!start$FIG. 3.13 – Violations des transitions temporisées.
un état de l’automate discret plus de une unité de temps. Une transition de l’automate temporisé
correspond à un changement de mode conditionné par les informations portées par la transition.
On change d’état soit par une transition discrète soit par une transition temporisée. Chacun de
ces types de transitions aura une transformation particulière. Nous présentons la transformation
pour les états et pour chacun de ces types de transitions. Nous présenterons ensuite la génération
des fichiers intermédiaires nécessaires à la communication entre le moniteur et les composants.
3.4.3.1 Transformation des états
L’algorithme transforme tous les états en exactement un mode. Ce mode à une période de
une unité de temps. L’algorithme construit dans un premier temps tous les modes en parcourant
tous les états de l’automate. Si l’état est l’état initial de l’automate alors son mode est le mode de
départ du moniteur. Ensuite il reparcourt tous les états pour traiter les transitions. L’algorithme
de transformation des états est le suivant est décrit par l’algorithme 3.8.
3.4.3.2 Transformation des transitions discrètes
Une transition discrète ne peut être tirée que si l’ensemble des labels portés par cette
transi-tion a effectivement eu lieu. Une transitransi-tion discrète est transformée en un changement de mode
dont le driver vérifiera l’occurrence des labels. Le driver fait appel à un fichier intermédiaire
qui retourne vrai si les messages sont bien arrivés. Le driver a une conséquence si la transition
est une transition violant la qualité de service. Cette conséquence fait appel à un fichier pour
notifier l’utilisateur. Si un état à plusieurs transitions sortantes, l’algorithme les classe par taille
de l’ensemble de messages. La transition portant le plus de messages est préférée à une
transi-tion avec un seul message. A l’exécutransi-tion, cet ordre est important car le moniteur traite d’abord
70 De la spécification à la réalisation
Algorithme 3.8Transformation des états
ENTRÉES: Ad=< S, init, T t, T d >
pour touts∈S faire
création mode(s,période)
sis==initalors
mode de départ
finsi
fin pour
pour touts∈S faire
traitement des transitions sortantes
fin pour
le premier changement de mode puis, si il le faut, le second et ainsi de suite.
3.4.3.3 Transformation des transitions temporisées
Une transition temporisée n’est tirée que si aucune transition discrète n’est tirable. Le
chan-gement de mode associé sera donc le dernier du mode à être exécuté car ce chanchan-gement de mode
s’effectue sans condition. En effet si aucun changement de mode dû à une transition discrète
ne peut être effectué alors le temps s’incrémente. La conséquence sera vide si aucune violation
n’est provoquée par cet incrément de temps. Si il y a violation, le driver associé au changement
de mode fait appel à un fichier pour notifier l’utilisateur de la violation.
La Figure 3.14 représente le mapping pour l’état initial de l’automate discret.
3.4.3.4 Génération des fichiers intermédiaires
Les composants notifient le moniteur de l’arrivée des messages. Cela s’effectue grâce à un
ensemble de fichiers intermédiaires. Ces fichiers sont générés en même temps que le fichier en
Giotto. La discrétisation génère deux types de fichiers : vérification des messages et notification
à l’utilisateur.
Le premier type, la vérification, permet aux composants de notifier l’arrivée de messages
et au moniteur de le vérifier. Ces fichiers fournissent donc deux opérations.
Le second type, la notification, permet au moniteur de notifier à l’utilisateur des violations
possibles de la qualité de service. Ces fichiers n’offrent qu’une opération.
3.4.4 Conclusion
L’algorithme de réalisation d’un moniteur en discrétisant l’automate permet d’obtenir le
comportement attendu unité de temps par unité de temps. Cet algorithme est capable, en le
modifiant légèrement, de transformer d’autres formalismes comme les automates hybrides. La
modification porte sur la suppression de la phase de discrétisation, la période d’un mode et
la fréquence de vérification des changements de mode. Le moniteur généré permet bien de
notifier l’utilisateur de la violation de la qualité de service. Si une réaction à cette violation
à été prévue, elle peut être intégrée au moniteur. Par contre, une modification dynamique des
Réalisation de l’automate temporisé 71
Automate discret Code du moniteur
s000
s211 s311
s000-violation
!start$ ou !getSound ou !sound violation ?launch-!start$-!getSound ?launch-!start$ 1 ?launch-!start$ s200 ?launch-!start$-!getSound-?getSound$-!sound ?launch-!start$-!getSound-?getSound$-!sound 1 violation ?launch-!start$-!getSound start s000 { mode s000() period 1000{ exitfreq 1 do s200(driver_s000_s200); exitfreq 1 do s211(driver_s000_s211); exitfreq 1 do s311(driver_s000_s311); exitfreq 1 do s511(driver_s000_s511); exitfreq 1 do s000v(driver_s000_s000v); } mode s200() period 1000{} mode s211) period 1000{} mode s311() period 1000{} mode s511() period 1000{} mode s000v() period 1000{ exitfreq 1 do s200(driver_s000_s200); exitfreq 1 do s211(driver_s000_s211); exitfreq 1 do s311(driver_s000_s311); exitfreq 1 do s511(driver_s000_s511); } } s511 ?launch-!start$-!getSound-?getSound$ ?launch-!start$-!getSound-?getSound$