• Aucun résultat trouvé

4 Concepts supplémentaires dans le SDL de base

4.14 Procédures distantes

b) Exportateur

A tous les états <state> de l'exportateur, exception faite des états implicites, dérivés d'une importation, la partie <input part> suivante est ajoutée:

input xQUERY;

output xREPLY (imcx) to sender/* état suivant identique*/

L'<export> 'export (x)' est transformé en ce qui suit:

task imcx := x, NOTES

1 Un blocage fatal peut se produire en utilisant la construction d'import, particulièrement si aucune <destination> n'est donnée, ou si <destination> ne désigne pas une expression <PId expression> d'un processus dont la spécification garantit l'existence au moment de la réception du signal xQUERY.

2 Le caractère facultatif des définitions de variables distantes est introduit pour assurer la compatibilité avec le SDL-88 et n'est pas recommandé pour les nouvelles descriptions SDL.

L’identificateur <remote procedure identifier> suivant as dans une définition de procédure exportée doit désigner une définition <remote procedure definition> ayant la même signature que la procédure exportée. Dans une définition de procédure exportée sans clause as, le nom de la procédure exportée est implicite et la définition <remote procedure definition> dans la portée environnante la plus proche ayant le même nom est implicite.

Pour chaque appel <remote procedure call>, il doit exister une spécification <imported procedure specification> de l'identificateur de la procédure distante dans un type de processus, une définition de processus, un type de service ou une définition service englobant(e) ayant le même nom <remote procedure name>.

Pour chaque spécification de procédure importée dans un processus, il doit exister au moins une procédure exportée dans un certain processus.

Grammaire graphique concrète

<remote procedure call area> ::=

<procedure call symbol> contains <remote procedure call body>

<remote procedure input area>::=

<input symbol> contains

{ [ <virtuality> ] procedure <remote procedure identifier list> } is followed by { [<enabling condition area>] <transition area> }

<remote procedure save area> ::=

<save symbol> contains

{[ <virtuality> ] procedure <remote procedure identifier list> <end> } Sémantique

Une définition <remote procedure definition> introduit le nom et la signature des procédures importées et exportées.

Une procédure exportée est une procédure contenant le mot clé exported.

L'association entre une spécification <imported procedure specification> et une procédure exportée est établie par le fait que les deux font référence à la même définition <remote procedure definition>.

Un appel de procédure distante par un processus demandeur conduit ce dernier à attendre que le processus serveur exécute la procédure. Les signaux envoyés au processus demandeur pendant l'attente sont sauvegardés. Le processus serveur exécutera la procédure demandée dans l'état suivant où la sauvegarde de la procédure n'est pas spécifiée, selon l'ordre normal de réception des signaux. Si aucune sauvegarde <remote procedure save> ni aucune transition <remote procedure input transition> n'est spécifiée pour un état, une transition implicite qui consiste en un appel de procédure ramenant au même état est ajoutée. Si une transition <remote procedure input transition> est spécifiée pour un état, une transition implicite qui consiste en l'appel de procédure suivi par <transition> est ajoutée. Si une sauvegarde <remote procedure save> est spécifiée pour un état, une sauvegarde implicite du signal pour la procédure demandée est ajoutée.

Modèle

L'appel de procédure distante est modélisé par un échange de signaux. Ces signaux sont implicites et acheminés sur des canaux et des acheminements de signaux implicites. Le processus demandeur envoie un signal contenant les paramètres réels de l'appel de procédure au processus serveur et attend la réponse. En réponse à ce signal, le processus serveur exécute la procédure distante correspondante, envoie un signal en retour au processus demandeur avec la valeur de tous les paramètres in/out et exécute alors la transition.

Il existe deux définitions implicites <signal definition> pour chaque définition <remote procedure definition> dans une définition <system definition>. Les noms <signal name> dans ces définitions <signal definition> sont désignés respectivement par pCALL et pREPLY, où p est déterminé de façon unique. Les signaux sont définis dans la même unité de portée que la définition <remote procedure definition>.

a) Processus demandeur

L’appel <remote procedure call> ’call Proc(apar) to destination', où apar est la liste des paramètres réels, est transformé de la manière suivante, où la clause to est omise, si la destination n'est pas donnée:

output pCALL(apar) to destination;

Wait in state pWAITe, saving all other signals;

input pREPLY (aINOUTpar);

où aINOUTpar est la liste modifiée des paramètres réels in/out.

Dans tous les autres états, pREPLY est sauvegardé.

b) Processus serveur

Il existe une déclaration de variable implicite, appelée ivar, de la sorte PId.

On ajoute la partie <input part> suivante à tous les états <state> comportant une transition d'entrée de procédure distante:

input pCALL(fpar);

ivar := sender call Proc(fpar);

output pREPLY (fINOUTpar) to ivar;

<transition>

où fpar et fINOUT par sont identiques à apar et aINOUT ci-dessus.

La partie <save part> suivante est ajoutée à tous les états <state> ayant une sauvegarde de procédure distante:

save pCALL;

On ajoute la partie <input part> a tous les autres états <state> exception faite des états implicites dérivés d'une importation:

input pCALL(fpar);

ivar := sender call Proc(fpar);

output pREPLY (fINOUTpar) to ivar;

/* next state the same */

Une transition <remote procedure input transition> ou une zone <remote procedure input area> qui contient <virtuality>

est appelée transition virtuelle d'entrée de procédure distante. Une sauvegarde <remote procedure save> ou une zone

<remote procedure save area> qui contient <virtuality> est appelée sauvegarde virtuelle de procédure distante. La transition virtuelle d'entrée et la sauvegarde virtuelle de procédure distante sont décrites en détail au § 6.3.3.

NOTE – Un blocage fatal peut se produire en utilisant la construction de procédure distante, particulièrement si aucune

<destination> n'est donnée, ou si <destination> ne désigne pas une expression <PId expression> d'un processus dont la spécification garantit l'existence au moment de la réception du signal pCALL.