Aller au contenu principal

Application de la Form Machine aux protocoles de programme

Le Protocol Manager mentionné dans NWG/RFC #80 a besoin de plusieurs fonctionnalités intéressantes qui sont des propriétés de la Form Machine décrite ci-dessus.

Dans certains cas, pendant un dialogue de protocole, il peut être acceptable d'obtenir soit un accept sur la connexion A, soit une allocation sur la connexion B, c'est-à-dire que l'ordre est parfois sans importance. La procédure définie pour appliquer les règles permet l'indépendance de l'ordre.

Un logger peut nous envoyer un numéro de socket intégré dans un message régulier — le numéro de socket est censé être le premier d'un ensemble contigu de sockets que nous pouvons utiliser pour établir des connexions avec un programme. Nous souhaitons extraire le champ du numéro de socket du message régulier, peut-être le convertir dans un autre format, et lui ajouter une valeur pour obtenir les noms de socket supplémentaires. À la suite du message régulier, nous souhaitons émettre plusieurs appels système INIT qui incluent les numéros de socket que nous avons calculés. L'opérateur de valeur et les opérateurs arithmétiques de la Form Machine peuvent le faire.

Une troisième propriété de la Form Machine applicable aux protocoles est la liaison inter- et intra-règle, qui permet de résoudre les informations sensibles au contexte. En général, nous souhaitons que les règles soient indépendantes de l'ordre, mais dans certains cas nous souhaitons imposer un ordre. En prenant comme exemple le logger de NWG/RFC #66, le close envoyé par le logger peut avoir deux significations différentes selon son contexte. Si le close est envoyé avant le message régulier contenant le numéro de socket, alors il signifie appel refusé. Si le message régulier précède le close, alors l'appel est accepté. Comme le close a une signification contextuelle, nous devons le lier au message régulier pour éviter d'introduire IF et THEN dans le langage de la Form Machine.

Supposons un instant que nous puissions exprimer les appels système dans la notation de la Form Machine. (La notation ci-dessous est uniquement à titre d'illustration et ne fait pas partie du langage de la Form Machine.) Nous avons deux façons de lier le message régulier au close. Par la liaison intra-règle, nous exigeons que le close soit précédé d'un message régulier.

      Reg. Msg , Close ->

Supposons maintenant un instant que la partie distante doive recevoir un écho après chaque transmission. Comme nous devons émettre un écho après avoir reçu le message régulier et avant l'envoi du close, nous devons alors utiliser la liaison inter-règle. Cela peut être réalisé au moyen de la variable de programmation. Une valeur lui est attribuée lorsque le message régulier est reçu, et cette valeur est testée lorsque le close est reçu.

      Reg. Msg -> Echo , ([lambda]+1)
      Close, ([lambda]=1) ->

Pour illustrer la liaison inter-règle via la variable de programmation, le protocole de connexion de NWG/RFC #66 pourrait être représenté en transmettant la forme suivante à un protocol manager. (La notation ci-dessous est uniquement à titre d'illustration et ne fait pas partie du langage de la Form Machine).

      1. ->INIT(parameters) , ([alpha]<-0)

Envoyer un INIT(RTS).

      2.  INIT(parameters) -> ALLOCATE(parameters)

Envoyer un allocate en réponse à l'achèvement de la connexion (un STR reçu).

      3.  Reg. Msg (parameters) -> ([alpha]<-1)

Lorsque les messages portant des numéros de liaison sont reçus, positionner un indicateur interne. (L'extraction de la liaison n'est pas illustrée.)

      4.  CLOSE(parameters),([alpha]=1) ->
INIT(parameters),INIT(parameters)

Lorsque le close est reçu après le message régulier, [2] est vérifié pour s'assurer que le message régulier a été reçu avant l'établissement de la connexion duplex. Si le close est reçu sans qu'aucun message régulier ne le précède (appel refusé), la forme échouera (puisqu'aucune règle n'est satisfaite).

Ce protocole peut être traité au moyen d'une seule forme contenant quatre règles de remplacement. Nous avons examiné des représentations similaires pour des séquences de protocole plus complexes. De telles séquences de protocole, stockées par nom, sont un atout pour l'utilisateur ; il peut demander qu'une séquence prédéfinie soit exécutée automatiquement.