Le lancement d'une configuration d'entrée consiste en un ensemble d'opérations destinées à préparer cette configuration d'entrée à l'exécution. Ces mécanismes aboutissent à la création d'une machine réactive, qui sera la version exécutable de la configuration d'entrée. Les différentes étapes de ce processus, illustrées sur la figure C.3 pour une configuration-exemple, sont les suivantes:
La première phase consiste à aplatir l'arbre des configurations afin de placer
tous les dispositifs au même niveau. L'algorithme, appelé décomposition totale,
a déjà été décrit en annexe A (algorithme algo:composition). La seconde
phase consiste à créer les structures de base qui serviront à l'exécution: les
Valeurs (signaux valués) et les Processeurs. Un tri topologique est ensuite
effectué sur les processeurs, à partir du graphe de dépendances entre
dispositifs (
section A.3.5). La dernière phase consiste à construire
la machine réactive et remplir sa structure.
Nous ne décrirons pas le mécanisme d'aplatissement (déjà décrit en Annexe A) et le tri topologique (déjà connu [Lacomme et al., 2003]). En revanche nous détaillerons la phase consistant à créer les « structures de base », après avoir décrit ces structures. Puis nous décrirons les machines réactives et la façon dont elles sont créées.
Dans la section précédente, nous avons introduit et décrit les processeurs à l'aide d'outils mathématiques simples. Dans cette partie, nous emploierons des représentations alternatives sous forme de structures de données.
Un signal valué est codé par une structure nommée Valeur, qui encapsule
une valeur de variable et un temps. Le temps est un entier
précisant à quel moment le signal valué a reçu un signal pour la dernière fois.
Cette représentation est équivalente à celle des signaux valués vus
précédemment: un signal est présent (
) si et seulement si le temps de
la Valeur est égal au temps courant de la machine réactive (i.e. au temps
global).
La structure Valeur est décrite ci-dessous:
#1 :#1 :#1 :#1 :#1 :vrai ssi le temps de la
valeur est égal au temps de la machine réactive parente.
Un processeur est codé par une structure Processeur. Cette structure
comporte des références à des Valeurs d'entrée et de sortie, ainsi qu'une
décomposition de
en deux séries de fonctions nommées
et
. Ces fonctions sont des projections de la fonction
sur les valeurs et les signaux de son ensemble d'arrivée:
Soit
#1 :#1 :#1 :valeursSortie.
#1 :valeursSortie.
La seconde étape phase du lancement d'une configuration d'entrée consiste à créer les structures contenant les valeurs des slots.
Une structure Valeur est créée pour tout slot de sortie de la
configuration d'entrée. Les slots d'entrée ne comportent pas de Valeur (voir la
figure C.3), mais référencent celle de leur slot connecté. Il
n'y aura donc pas à proprement parler de propagation de valeur entre deux
slots, puisque ceux-ci partageront la même valeur.
Une fois les valeurs créées, les dispositifs sont ouverts: lorsqu'un dispositif est ouvert, celui-ci retourne une structure Processeur créée à partir de sa fonction d'exécution.
La machine réactive gère tous les aspects de l'exécution des configurations d'entrée, et en particulier le déclenchement des processeurs et la propagation des valeurs. Un exemple de structure de machine réactive est illustré sur la figure C.4, qui reprend la configuration-exemple de la figure C.3. Cette structure est la suivante:
#1 :actif spécifie si le processeur doit être continuellement déclenché.
La valeur de cet attribut dépend de la nature de la fonction déclenché est interne à
l'algorithme d'exécution. Initialement égal à actif, il servira à spécifier
pour l'itération courante si les valeurs du processeur doivent être mises à jour.
#1 :depFirst
et depLast, qui référencent par leur index un ensemble d'éléments contigus dans la
table DepInfo.
#1 :OutInfo, et est remplie en même temps qu'elle. Lorsqu'un slot de sortie
est traité par l'ajout d'une Valeur dans OutInfo, une dépendance est créé pour chaque
slot d'entrée qui lui est directement connecté. Une dépendance est uniquement décrite par l'attribut
ProcIndex, qui référence le processeur du dispositif parent du slot d'entrée, en pointant vers son index
dans la table
ProcInfo.
#1 :déclenché de la première table. Initialement à zéro, ce compteur
entier spécifiera le temps courant de la machine réactive.