next up previous contents
suivant: 3.5 Conclusion monter: 3. Introduction au modèle précédent: 3.3 Les systèmes réactifs   Table des matières

Sous-sections


3.4 Les configurations d'entrée

Le modèle des configurations d'entrée est une concrétisation du paradigme des dispositifs en cascades et des systèmes réactifs décrits précédemment. La boîte à outils ICON et son langage visuel, décrits dans le prochain chapitre, constituent une implémentation de ce modèle. Nous présenterons ici le modèle des configurations d'entrée, ses différentes briques de base et ses caractéristiques principales.

Le modèle des configurations d'entrée repose sur une infrastructure et des mécanismes concrets, qui consistent principalement en un système à flots de données et un moteur réactif. Cette infrastructure et ces mécanismes sont décrits par le modèle ICOM (Input Configuration Model), indépendamment des aspects graphiques et architecturaux du modèle que nous décrivons ici. ICOM, détaillé en annexe, définit les aspects statiques (la structure) et dynamiques (le comportement en édition et en exécution) d'une configuration d'entrée. Nous ne donnerons ici qu'un aperçu général de son fonctionnement.

3.4.1 Les briques de base

Les quatres entités principales de notre modèle sont les configurations d'entrée, les dispositifs, les slots et les connexions.

Figure: Une configuration d'entrée décrit une manière de relier des dispositifs système à des dispositifs d'application.
\begin{figure}
\begin{center}
\includegraphics[scale=0.65]{reprconfiguration}
\end{center}
\end{figure}

Une configuration d'entrée (figure 3.9) est un ensemble de dispositifs système et de dispositifs d'application reliés par des dispositifs utilitaires. Les premiers sont des objets fournis par le système, qui sont partagés et qui représentent pour la plupart des dispositifs d'entrée concrets. Les seconds sont des objets spécifiques fournis par l'application. Les derniers sont des objets autonomes fournis par une bibliothèque et qui sont instanciables a volonté.

Figure: Un dispositif, avec ses slots d'entrées (à gauche, en blanc) et ses slots de sortie (à droite, en noir).
\begin{figure}
\begin{center}
\includegraphics[scale=0.4]{reprdispositif2}
\end{center}
\end{figure}

Un dispositif (figure 3.10) est une boîte noire qui interagit avec son environnement par l'intermédiaire de canaux typés, appelés slots. Sa fonction principale est de produire des valeurs en sortie en fonction des valeurs qu'il reçoit en entrée. Il peut également déclarer un ensemble de paramètres permettant de spécialiser son comportement.

Figure: À gauche, un ou logique comportant deux booléens en entrée et un booléen en sortie, et un dispositif d'arrondi qui transforme un réel (double) en un entier. À droite, les différents types de slots.
\begin{figure}
\begin{center}
\includegraphics[scale=0.7]{reprtypes_ex}
\end{center}
\end{figure}

Figure: Un dispositif possédant des slots nommés name, color.r, color.g, et color.b. Le slot color est un slot composite. À gauche, le dispositif dans sa représentation condensée, à droite dans sa version étendue.
\begin{figure}
\begin{center}
\includegraphics[scale=0.4]{reprcomposition}
\end{center}
\end{figure}

Un slot est un état du dispositif qui est accessible aux autres dispositifs. Ces derniers ont la possibilité d'écrire sur le slot s'il s'agit d'un slot d'entrée, ou de lire sa valeur s'il s'agit d'un slot de sortie (figure 3.10). Les slots possèdent des types de données simples visibles dans leur représentation graphique (figure 3.11). Par exemple, les slots booléens sont circulaires, les slots entiers ont une forme triangulaire et les types indéfinis sont représentés par un carré. Les slots peuvent être organisés de façon hiérarchique par un mécanisme de nommage analogue aux chemins fichiers ou packages Java (voir figure 3.12).

Figure: Exemples de connexions: le slot de sortie s comporte trois connexions et le slot d'entrée e comporte une connexion. Les slots d'entrée ne peuvent comporter plus d'une connexion.
\begin{figure}
\begin{center}
\includegraphics[scale=0.37]{vocab_connexions2}
\end{center}
\end{figure}

Une connexion est un arc orienté reliant un slot de sortie d'un dispositif à un slot d'entrée d'un autre dispositif (figure 3.13). Deux slots reliés par une connexion partagent la même valeur. Les connexions multiples sont autorisées sur les slots de sortie mais pas sur les slots d'entrée. En outre, les connexions induisant des dépendances cycliques sont interdites.

3.4.2 Les notions essentielles

Nous présentons ici quatre caractéristiques importantes d'ICOM:

  1. Le principe des entrées/sorties implicites, qui permet d'évoquer l'asynchronisme, le non-déterminisme et le feedback.
  2. La composition, qui autorise des configurations à plusieurs niveaux de granularité.
  3. Les mécanismes de mutation, qui permettent de décrire des dispositifs génériques qui se spécialisent en fonction des connexions et des paramètres.
  4. Les processeurs, permettant aux dispositifs de décrire plusieurs comportements en exécution possibles.

3.4.2.1 Les entrées/sorties implicites

Un dispositif opère sur ses slots d'entrée et de sortie mais peut également communiquer avec l'environnement extérieur à la configuration par des entrées ou des sorties implicites. La présence d'entrées (resp. de sorties) implicites est graphiquement indiquée par la présence d'une encoche dans le coin inférieur gauche (resp. droit) du dispositif (voir la figure 3.10).

Les entrées implicites traduisent la réception de flux d'informations autres que ceux décrits par les connexions (par exemple, provenant de dispositifs concrets).

Les sorties implicites traduisent l'émission d'informations vers d'autres entités que les slots de la configuration d'entrée (par exemple, l'application interactive ou l'écran).

3.4.2.2 Composition

Notre modèle ne fait pas de distinction entre dispositifs d'entrée, de sortie ou de traitement. Cette unification du concept de dispositifs permet notamment de rendre ces derniers composables: par exemple, un dispositif d'entrée associé à un dispositif de sortie est un dispositif comportant à la fois des entrées et des sorties implicites. Deux entités entrent en jeu dans la composition: les slots externes et les dispositifs composites.

Figure: Une configuration d'entrée comportant trois slots externes.
\begin{figure}
\begin{center}
\includegraphics[scale=0.3]{connexions_externes}
\end{center}
\end{figure}

Une configuration d'entrée peut comporter des slots externes (figure 3.14), qui sont des slots isolés n'appartenant à aucun dispositif. Ces slots définissent en quelque sorte une vue extérieure pour la configuration.

Figure: Un dispositif composite défini par sa configuration fille.
\begin{figure}
\begin{center}
\includegraphics[scale=0.35]{composition}
\end{center}
\end{figure}

Un dispositif composite est un type particulier de dispositif uniquement défini par une configuration-fille (figure 3.15). Chacun de ses slots correspond à un slot externe de sa configuration-fille.

L'opération consistant à regrouper un ensemble de dispositifs dans un dispositif composite (composition) et l'opération inverse (décomposition) sont décrits en annexe, section A.4. La décomposition totale, à laquelle nous faisons référence plus loin, consiste à appliquer des décompositions successives jusqu'à obtenir une configuration plate.

3.4.2.3 Dispositifs mutables

Figure: Deux dispositifs mutables reliés en série. Le premier opère sur des réels ou sur des entiers en fonction de ses connexions en entrée. Le second adapte son type à la fois en entrée et en sortie.
\begin{figure}
\begin{center}
\includegraphics[scale=0.4]{mutation_ex}
\end{center}
\end{figure}

Certains dispositifs génériques sont capables de se spécialiser en fonction des valeurs prises par leurs paramètres et des types des slots qui leur sont connectés. Cette opération repose sur un mécanisme très général nommé mutation, décrit en annexe, section B.3. Une mutation consiste en une modification du type d'un ou plusieurs slots mutables du dispositif. Un slot mutable possède un type concret et un super-type décrivant les types concrets qu'il est susceptible d'avoir. Dans la représentation graphique d'un slot mutable, le super-type entoure le type concret (figure 3.16). Certains slots sont en outre dynamiques, c'est-à-dire que leur présence dépend du paramétrage du dispositif.

3.4.2.4 Les processeurs

Un processeur est un objet qui encapsule le comportement en exécution d'un dispositif. Plusieurs types de processeurs peuvent être associés à un seul dispositif: un additionneur peut par exemple définir un processeur pour l'addition d'entiers, un pour l'addition de réels et un autre pour la concaténation de chaînes de caractères. Le processeur effectivement employé par l'additionneur au moment de l'exécution dépendra du type concret de son slot de sortie.

L'unique responsabilité d'un processeur est de mettre à jour à la demande (c'est-à-dire à chaque fois qu'il est déclenché) les valeurs de ses slots de sortie en fonction des valeurs de ses slots d'entrée (comme évoqué précédemment, un processeur peut également communiquer avec l'environnement).

3.4.3 Aperçu du modèle d'exécution

3.4.3.1 Lancement

La phase de lancement est destinée à préparer la configuration à l'exécution. Elle comporte plusieurs étapes. Pour commencer, l'exécution travaille après décomposition totale de la configuration d'entrée. Ensuite, tous les dispositifs de la configuration sont ouverts pour leur permettre de s'initialiser. Chaque dispositif retourne lorsqu'il est ouvert un processeur en fonction de sa paramétrisation (valeur de ses paramètres et types concrets de ses slots mutables), ou le processeur nul lors d'un échec d'ouverture.

Après avoir récupéré les processeurs, le système crée un objet Valeur pour chaque slot de sortie de la configuration, objet qui encapsule une valeur concrète (entier, booléen,...) et la partage avec les slots d'entrée connectés. Ces partages de référence autorisent en quelque sorte une propagation instantanée des valeurs à travers les connexions. Pour finir, les processeurs sont triés topologiquement en fonction du graphe de dépendances.

3.4.3.2 L'algorithme du tick

L'algorithme d'exécution se décompose en pas atomiques ou ticks. Durant un tick, les processeurs sont parcourus dans l'ordre topologique et chacun d'entre eux est déclenché s'il est de type actif (c'est-à-dire qu'il correspond à un dispositif à entrées implicites), ou si au moins une de ses Valeurs en entrée comporte un signal. Le signal est un drapeau booléen dans l'objet Valeur qui est toujours à faux au début du tick. Lorsqu'un processeur déclenché met explicitement à jour une Valeur (la nouvelle valeur concrète peut être la même), ce drapeau passe à vrai pour que les processeurs qui en dépendent puissent être déclenchés.

Un tick consiste donc globalement à déclencher les processeurs actifs (pour la plupart des dispositifs d'entrée) puis à transmettre les mises à jour au reste de la configuration. L'algorithme d'exécution réactif (décrit en annexe, section C.3) assure que tout changement est correctement propagé et que chaque processeur est activé seulement lorsque c'est nécessaire, au plus une fois dans le tick. Les processeurs étant triés topologiquement, la mise à jour de la configuration est effectuée en une seule passe. Cet algorithme est simple et extrêmement efficace.


next up previous contents
suivant: 3.5 Conclusion monter: 3. Introduction au modèle précédent: 3.3 Les systèmes réactifs   Table des matières
Pierre Dragicevic 2005-07-22