• Aucun résultat trouvé

Chapitre 4 ContextAA – Modèle théorique

4.7 Agents

4.7.6 Agent standard

Un Agent standard implémente des services pour l’Hôte auquel il participe. C’est par les Agents standards qu’un Hôte offre des services analogues à ceux d’un intergiciel, et assure la présence d’une interface sous forme de Contexte entre les Agents du domaine, les objets autonomes qui gravitent autour d’un Hôte, et la plateforme sous-jacente. Une liste des Agents standards déjà implémentés dans ContextAA est donnée à l’annexe F, mais il est probable que cette liste s’enrichisse avec le temps.

Chaque Agent standard a une responsabilité. Les responsabilités des Agents standards sur ℎ: 𝐻 varient selon l’Agent, mais se divisent en quatre catégories :

 interactions avec le matériel;

 interactions avec les objets autonomes, et à travers ceux-ci, les interactions avec le voisinage;  gestion et entretien du Contexte dans 𝑆, incluant par conséquent 𝑆𝑎: 𝑎 ∈ ℎ; et

 services essentiels généraux.

Dans chaque cas, un Agent standard joue un rôle analogue à celui d’un intergiciel, assurant la présence de services sur lesquels peuvent compter les autres Agents, en particulier les Agents du domaine. Plus précisément :

 dans le cas des interactions avec le matériel, le rôle d’un Agent standard est d’exprimer sous forme de Contexte une description de la plateforme sous-jacente, et de consommer sous forme de Contexte des demandes de mutation d’états de la plateforme sous-jacente;

 dans le cas des interactions avec le voisinage, le rôle d’un Agent standard est d’interagir avec des objets autonomes, en périphérie d’un Hôte, pour découpler les entrées/ sorties avec le voisinage réseau du cycle normal d’opération de cet Hôte;

 dans le cas de la gestion et de l’entretien du Contexte, le rôle d’un Agent standard est de réaliser les opérations qui ne sont pas à la portée des Agents du domaine.

Dans ContextAA, un Agent standard est un Agent, au sens où il s’inscrit dans le cycle de vie d’un Agent (§5.2.5) et dans son cycle normal d’opérations (§5.3) et au sens où il expose la même interface que celle exposée par les Agents du domaine (§Erreur ! Source du renvoi introuvable.). T outefois, un Agent standard a plusieurs particularités qui le distinguent des Agents du domaine sur le plan technique :

 un Agent standard est ainsi nommé du fait qu’il est disponible sur tous les Hôtes, et toujours sous la même dénomination. Ainsi, le nom d’un Agent gestionnaire de Contexte sera le même, sans égard à l’Hôte sur lequel il loge;

134

 un Agent standard est implémenté spécifiquement pour un Hôte donné. De même, il est lié à cet Hôte et n’en migrera pas.

Les Agents standards occupent une niche essentielle dans l’écosystème mis en place par ContextAA. Ce sont les entités qui assurent l’offre de services d’un Hôte.

4.7.6.1 Interactions avec le matériel

Un Agent du domaine 𝑎 est fait de Contexte, et raisonne sur la base du Contexte mis à sa disposition dans 𝑆𝑎. Pour cette raison, son Hôte ℎ représente les états du nœud sous-jacent sous forme de Contexte dans 𝑆. La tâche de représenter ces états sous forme de Contexte repose est dévolue aux Agents standards.

Chaque Agent standard responsable d’interagir avec le matériel consomme des données de la plateforme sous-jacente et les représente sous forme de Contexte, et peut assurer le chemin inverse à la manière d’un actuateur. Les fonctions de la plateforme sous-jacente varient selon les plateformes; un Agent standard doit interagir avec ces fonctions pour accomplir sa mission, ce qui explique qu’il soit typiquement rédigé non pas sous forme de Contexte mais bien dans un langage de programmation conventionnel selon des modalités tenant compte de son contexte applicatif. Parmi les tâches d’un Agent standard, on trouve :

 exprimer sous forme de Contexte les ressources disponibles (niveau d’énergie restant dans la pile, mémoire disponible, espace disque disponible, etc.);

 exprimer sous forme de Contexte la présence d’appareils sur la plateforme, tels qu’un accéléromètre, un GPS ou un capteur particulier;

 exprimer sous forme de Contexte les états rapportés par les appareils disponibles sur la plateforme;

 exprimer sous forme de Contexte les interfaces permettant d’appeler un service offert de façon programmatique sur la plateforme sous-jacente; etc.

 recevoir des demandes de modification d’état, et de réaliser ces modifications d’état au nom de l’Agent demandeur, ce qui est particulièrement pertinent dans le cas de nœuds munis d’actuateurs. C’est par exemple à l’aide d’un Agent standard que serait mis en place un mécanisme de fermeture d’urgence d’un appareil.

4.7.6.2 Interactions avec les objets autonomes et le voisinage

Puisque ∀𝑎 ∈ ℎ, 𝑎 s’inscrit dans un cycle de vie, certaines opérations ne peuvent être faites par 𝑎, qu’ils soit standard ou du domaine, car elles pourraient nuire au bon fonctionnement de ℎ et, plus spécifiquement, de ∀𝑎′∈ ℎ: 𝑎≠ 𝑎. Ces opérations incluent toute entrée/sortie bloquante et tout

traitement synchrone (au sens faible du terme) susceptible de se prolonger. Les tâches qui ne sont pas susceptibles de s’inscrire dans le cycle de vie d’un Agent sont dévolues à des objets autonomes. Tenir à jour la représentation contextualisée 𝑁 du voisinage réseau d’un Hôte ℎ fait partie de ces tâches. En effet, 𝑁 est susceptible de varier au fil du temps, pour plusieurs raisons :

 la potentielle mobilité des individus, considérée comme un a priori de ContextAA;  la mobilité des Agents eux-mêmes; et

 la présomption de disponibilité imparfaite des Hôtes, susceptibles d’être placés sur des nœuds dont les ressources peuvent varier avec le temps ou de subir pannes, défectuosités matérielles, défectuosités logicielles et autres interruptions de service.

135

Comme mentionné précédemment, l’approche soutenue par ContextAA est de proposer un modèle de programmation par lequel un Agent du domaine 𝑎 ∈ ℎ raisonne sur le présent-selon-lui, donc sur l’état courant de 𝑆𝑎 (le Contexte-selon). L’Agent 𝑎 est isolé du réseau, et interagit strictement avec 𝑆𝑎; la médiation entre ℎ et 𝑁 passe par des objets autonomes.

h Nh Sh a Sa a' Sa Obja

Dans la figure 11 ci-dessus, 𝑎 est un Agent du domaine et n’interagit donc qu’avec 𝑆𝑎. L’Agent 𝑎′

est quant à lui un Agent standard : en tant qu’Agent, il interagit avec 𝑆𝑎′ mais en tant qu’Agent

standard, il a aussi le privilège d’interagir avec 𝑆 tout entier. Pour cette raison, il est possible pour 𝑎′ de consommer des requêtes dans 𝑆

𝑎 pour tenter de les résoudre, tout comme il est possible pour

𝑎′ d’écrire dans 𝑆

𝑎 le résultat de la prise en charge de requêtes publiées précédemment par 𝑎.

Seuls les Agents standards transigent directement avec les objets autonomes. L’interaction entre un Agent standard et un objet autonome passe par un canal de contexte (§3.5.6), file d’attente bidirectionnelle synchronisée. Prenant pour exemple le cas de 𝑁, cette approche résulte en une couche isolante faite de Contexte entre 𝑎 ∈ ℎ et 𝑁, couche par laquelle 𝑎 peut continuer d’opérer même en totale coupure avec 𝑁 ou lorsque 𝑁 = ∅.

4.7.6.3 Gestion et entretien du Contexte

Un Agent standard, ayant accès au Contexte entier de son Hôte et ayant pour rôle d’interagir avec ce Contexte, complète les Agents du domaine et leur Hôte de plusieurs manières :

 prise en charge de la mise en correspondance des requêtes pour du Contexte;  prise en charge des demandes soumises par des Agents sur d’autres Hôtes;

 prise en charge de l’entretien des espaces contextuels, sur la base de règles exprimées par chaque Agent sous forme de Contexte;

 etc.

À cette fin, ContextAA comprend des Agents standards tels qu’un Agent solutionneur, qui consomme les requêtes pour du Contexte logées dans les espaces contextuels des autres Agents sur le même Hôte; un Agent intermédiaire, qui prend à son compte les requêtes reçues d’autres Hôtes pour que l’Agent solutionneur n’ait pas à tenir compte de cette particularité; un Agent gestionnaire de Contexte, qui a pour objectif de consommer les règles de gestion du Contexte exprimées sous forme de méta-Contexte, de réaliser les tâches que ces règles décrivent, puis d’éliminer les méta- Contextes en question; etc.

136 4.7.6.4 Services essentiels généraux

Par services essentiels généraux, nous entendons des services tels qu’un mécanisme pour avertir l’usager de manière immédiate, par exemple dans le cas où son intégrité physique pourrait être compromise.

Un exemple concret est un Agent avertisseur, Agent standard qui ne fait que consommer les Contextes représentant des avertissements destinés à l’usager et les présente immédiatement à ce dernier, du moins dans la mesure du possible, d’une manière appropriée en fonction du nœud sur lequel son Hôte s’exécute.

4.7.6.5 Agents de soutien

Bien que les Agents standards aient pour la plupart la particularité d’être disponibles sur tous les Hôtes et de modéliser des services pour ces Hôtes, il existe une catégorie spécialisée de ces Agents que nous nommons Agents de soutien, et qui ont pour rôle d’interfacer avec un composant matériel spécifique.

La seule réelle distinction entre les Agents de soutien et les Agents standards typiques est que la présence ou l’absence d’un Agent de soutien particulier dépend du nœud sur lequel un Hôte est déployé. Pour cette raison, alors qu’il est habituellement raisonnable d’accéder au Contexte d’un Agent standard par son nom, il tend à être préférable de communiquer avec un Agent de soutien sur la base des modèles de Contexte qu’il est susceptible de générer.

Les Agents de soutien font partie de la catégorie des Agents standards au sens où ils sont attachés à un nœud particulier, sont susceptibles d’être codés « en dur » pour profiter au maximum du matériel sous-jacent, et qu’il est possible qu’ils interfacent avec un objet autonome dans le cadre de leurs fonctions, comme dans le cas où un Agent de soutien a besoin qu’une lecture bloquante sur un appareil soit réalisée.