Modélisation des systèmes temps-réel répartis embarqués pour la ...
Modélisation des systèmes temps-réel répartis embarqués pour la ...
Modélisation des systèmes temps-réel répartis embarqués pour la ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Chapitre VII – Vérification formelle de <strong>la</strong> structure <strong>des</strong> applications<br />
VII-5 <strong>Modélisation</strong> de l’imp<strong>la</strong>ntation <strong>des</strong> composants<br />
Jusqu’ici, nous avons modélisé les opérations de traitement <strong>des</strong> composants par une transition.<br />
La représentation de l’imp<strong>la</strong>ntation d’un composant consiste à remp<strong>la</strong>cer cette transition par le<br />
sous-réseau de Petri décrivant les séquences d’appel décrits dans l’imp<strong>la</strong>ntation du composant. Le<br />
réseau de Petri fait alors apparaître les connexions entre les différents sous-éléments du composant.<br />
VII-5.1 <strong>Modélisation</strong> <strong>des</strong> sous-composants<br />
En section VII-4.1.2, nous avons indiqué que <strong>la</strong> représentation en réseaux de Petri se basait sur<br />
les composants actifs de l’architecture. D’après ce que nous avons établi dans <strong>la</strong> règle VII.7, un<br />
composant possédant <strong>des</strong> sous-composants est systématiquement remp<strong>la</strong>cé par ces derniers. Seuls<br />
les sous-composants sont donc représentés dans un réseau de Petri ; cette situation a donc déjà été<br />
traitée en section VII-4.1.2.<br />
VII-5.2 <strong>Modélisation</strong> <strong>des</strong> sous-programmes<br />
Contrairement à <strong>la</strong> génération de code que nous avons présentée au chapitre V, <strong>la</strong> traduction en<br />
réseau de Petri rend compte <strong>des</strong> flux d’exécution. Selon cette approche, chaque sous-programme<br />
est modélisé dans le réseau autant de fois qu’il est appelé. Chaque appel de sous-programme est<br />
donc assimilé à une instance. Il en est par conséquent de même <strong>pour</strong> un accès requis à un sousprogramme.<br />
Règle VII.12 (Traduction <strong>des</strong> accès à sous-programme)<br />
L’appel d’un sous-programme dont l’accès est requis par un thread ou un sousprogramme<br />
est assimilé à un appel normal au sous-programme correspondant.<br />
De <strong>la</strong> même façon que les composants de haut niveau, les sous-programmes sont modélisés<br />
par une transition entourée de p<strong>la</strong>ces modélisant les paramètres d’entrée et de sortie.<br />
Règle VII.13 (Traduction <strong>des</strong> sous-programmes)<br />
Un appel de sous-programme AADL est traduit par une transition et <strong>des</strong> p<strong>la</strong>ces correspondant<br />
à ses différents paramètres. Le flux d’exécution contrô<strong>la</strong>nt l’appel du sousprogramme<br />
est matérialisé par deux p<strong>la</strong>ces transmettant un jeton de contrôle à <strong>la</strong> transition<br />
du sous-programme. Ce jeton de contrôle est celui du thread dans lequel l’appel est<br />
effectué.<br />
Les p<strong>la</strong>ces d’entrée sont connectées à <strong>la</strong> transition du sous-programme par un arc simple,<br />
de <strong>la</strong> même façon que <strong>pour</strong> les p<strong>la</strong>ces de contrôle. Les p<strong>la</strong>ces de sortie ont un marquage<br />
initial fixé à u. La transition du sous-programme consomme et réinjecte les jetons issus<br />
de ces p<strong>la</strong>ces. Une garde est associée à <strong>la</strong> transition <strong>pour</strong> empêcher <strong>la</strong> consommation de<br />
<strong>la</strong> valeur indéfinie u.<br />
Un paramètre d’entrée sortie est traduit par une p<strong>la</strong>ce d’entrée et une p<strong>la</strong>ce de sortie.<br />
Les paramètres de sortie <strong>des</strong> sous-programmes modélisent <strong>des</strong> variables : leur valeur doit pouvoir<br />
être lue plusieurs fois, par différents sous-programmes. C’est <strong>pour</strong>quoi <strong>la</strong> transition du sousprogramme<br />
doit remp<strong>la</strong>cer un jeton qui est constamment à disposition.<br />
Le cas d’un appel à un sous-programme distant – dont l’accès est fourni par un autre thread –<br />
présente quelques spécificités. En effet, un tel sous-programme met en jeu à <strong>la</strong> fois le thread local,<br />
qui effectue l’appel, et le thread distant, qui exécute effectivement le sous-programme. L’exécution<br />
du sous-programme nécessite donc les ressources d’exécution <strong>des</strong> deux threads.<br />
c○ 2007 Thomas Vergnaud 133