INTRODUCTION à la SPECIFICATION FORMELLE

Transcription

INTRODUCTION à la SPECIFICATION FORMELLE
Introduction à la description formelle
- 101

INTRODUCTION à la SPECIFICATION FORMELLE
Description des protocoles par automates d'états étendus (automates à prédicats)
Les protocoles de communication sont décrits par des automates d'états finis à
prédicats ( automates étendus ). Les services sont souvent modélisés de la même manière. La
description formelle de ces automates d'états finis à prédicats peut prendre trois formes de
précision croissante qui présentent chacune leur intérêt. La conception voire la compréhension
d'un tel automate nécessite d'utiliser ces trois formes. Pour chaque forme il existe plusieurs
notations parfois éloignées l'une de l'autre.
1. Description par graphe
Nous ne donnerons ici qu'un exemple de description par graphe sous une forme
simple. D'autres formes sont souvent utilisées. En particulier, le langage LDS (Langage de
description et de spécification fonctionnelle) du CCITT (Recommandation Z.100 et annexes)
fournit une syntaxe plus détaillée. Les standards ECMA utilisent aussi une autre notation. Les
schémas ci-dessous montre l'évolution d'un tel graphe au cours de la conception d'un protocole
élémentaire.
On utilise une notation LDS graphique en n'en gardant que les éléments de base.
Les primitives sont codées par les suffixes: req, ind, rsp+, rsp-, cnf+ et cnf-.
Les Préfixes CON, LIB et DATA correspondent respectivement à des événements
de connexion, libération et données.
Le contenu des primitives de données vaut :
CR demande de connexion
DT données utilisateur
CC acceptation de connexion
LR demande de libération
LC acceptation de libération
0
Repos
Commentaires
Notations
Evénement
entrant
ETAT
Evénement
sortant
LDS
de base
Prédicat
Action(s)

Téléinformatique : Bases techniques pour les réseaux tome 1
Introduction à la description formelle
- 102

Dans le premier automate ci-dessous on suppose le service N - 1 déjà connecté et
on s'interresse essentiellement aux phases de connexion et de libération. Le transfert de données
est juste amorcé pour montrer quand et comment il est initialisé.
Si le service N-1 n'est pas toujours prêt, il est nécessaire, sur la requête de
connexion venant de la couche N + 1, de demander l'établissement d'une connexion à ce service
et d'en attendre la confirmation. Nous noterons par le prédicat P1 la préconnexion du service N 1.
Le second automate tient compte de cette initialisation du service N-1 .
Cet automate est complété pour traiter (sommairement ici ...) le transfert de
données et aussi prendre en compte les défauts en introduisant un état " Erreur " supplémentaire
activé soit sur un événement entrant ERRind (Indication d'erreur), soit sur un événement interne.
On pourrait aussi le compléter en dédoublant l'état 2 Transfert en deux états : " Prêt " et " Occupé
" pour gérer la fonction de contrôle de flux. Parfois, par exemple pour cette fonction, on lance un
sous-automate qui n'est actif que dans l'état " Transfert ".
0
Repos
attente de
commande
LIBcnf
DATAind(LC)
CONreq
CONcnf-
DATAreq(CR)
DATAind (LR)
3
1 Connexion
Libération
attente de
connexion N
attente de
déconnexion N
DATAind (CC)
CONcnf+
DATAreq (LR)
2
Transfert
connexion
établie
LIBreq
DATAind (DT)
DATAreq (données)

Téléinformatique : Bases techniques pour les réseaux tome 1
Introduction à la description formelle
- 103

CONreq
4
0
Repos
CONreq
attente de
commande
Attente
attente de
connexion N-1
Prédicat
LIBcnf
CONcnf+
DATAind(LC)
CONcnf-
DATAreq(CR)
DATAreq(CR)
DATAind (LR)
3
Libération
1 Connexion
attente de
déconnexion N
attente de
connexion N
CONreq
4
0
Repos
CONreq
attente de
commande
Attente
attente de
connexion N-1
Prédicat
LIBcnf
CONcnf+
DATAind(LC)
CONcnf-
DATAreq(CR)
DATAreq(CR)
DATAind (LR)
3
Libération
1 Connexion
attente de
déconnexion N
DATAreq (LR)
attente de
connexion N
5
Défaut
DATAind (CC)
Traitement
d'anomalie
LIBreq
CONcnf+
2
DATAind (DT)
Transfert
connexion
établie
DATAind (données)
DATAreq (données)
DATAreq (DT)

Téléinformatique : Bases techniques pour les réseaux tome 1
Introduction à la description formelle
- 104

2. Description par table ou liste de transitions
Nous donnerons la forme classique de ce type de description, utilisée dans la
plupart des standards de l'O.S.I.
Nous utilisons les conventions ci-dessous :
P1:
Etat actuel
P2:
Evénement entrant
Etat suivant
Action et/ou
événement sortant
X
Y = yyyy
EVEreq
Défaut :
Pi : Prédicat testé dans l'ordre de la liste
Evt
entrant
Etat
CONreq
Repos
0
P1 : 1
DATreq
(CR)
LIBind
CONcnf
DATreq
DATind
(CC)
0
DATind
(DT)
DATind
(LC)
0
défaut
Def: 4
CONreq
Connex
1
LIBreq
défaut
0
CONcnf-
2
CONcnf
+
Transf
ert
2
Decone
x
3
Attent
e
4
Défaut
5
3
DATreq
(LR)
ignore
r
0
LIBcnf
2
DATreq
(DT)
2
DATind
(dat)
0
LIBcnf
1
DATreq
(CR)
0
xxxx
Pour traiter de manière automatique ces tables de transitions, par exemple dans des
outils de simulation ou de validation des protocoles représentés, il est plus commode de les coder
sous la forme de listes de quintuplets :
< Evénement, Etat , Prédicat, Etat ,
entrant actuel
suivant
Action ou >
liste d'actions

Téléinformatique : Bases techniques pour les réseaux tome 1
Introduction à la description formelle
- 105

Chaque quintuplet représente une transition élémentaire. Il est souhaitable que l'ordre
des transitions dans la liste soit indifférent. Cependant ceci implique que les fonctions logiques
exprimant les prédicats soient plus complexes. En pratique, on tiendra donc souvent compte,
pour trouver la transition tirable à un instant donné, du rang de cette transition. La liste suivante
donne un exemple de cette représentation.
< CONreq
, Repos , P1 , Attente , CONreq
>
< CONreq
, Repos , Def, Connex , DATreq(CR) >
< CONcnf
, Attente ,
, Connex , DATreq(CR) >
< IND_Don(LR) , Connex ,
, Repos , CONcnf>
< CONind(CC) , Connex ,
, Transfert , CONcnf+ >
< DATreq(dat) , Transfert,
, Transfert , DATreq(DT) >
< DATind(DT) , Transfert,
, Deconex , DATreq(LR) >
< DATind(LC) , Deconex,
, Repos , LIBcnf
>
Nota : Parfois les paramètres apparaissant dans un événement entrant "Indication de
données " sont traités comme des prédicats.
3. Description par langage algorithmique
3.1. Objet
Une description formelle de protocole complète et non ambigüe ne peut être fournie
que par un langage adapté. Si Pascal a parfois été utilisé ( par exemple description formelle des
protocole Ethernet ou standards OSI 8802.3 ) on a normalement recours à des langages
spécifiques.
Le langage de spécification et de description fonctionnelle LDS du CCITT
(recommandations Z100 à Z104 ) ou le langage PDIL (Protocol Description and Implémentation
Language ) développé à l' Agence de l'Informatique (Projet Rhin) sont des représentants d'une
première génération de ces langages. Le langage Estelle en cours de normalisation à l'OSI
(standard ISO/IS 9074) doit les remplacer et servir à décrire tous les protocoles de
communication. Pour la représentation des données, le CCITT à aussi édité la recommandation
X.409 ( "syntaxe de transfert" ) retenu par à l'OSI: Standard ASN0 (Que coder) et ASN1
(Comment coder). Une description de plus haut niveau d'abstraction est fournie par le langage
normailsé LOTOS (standard ISO/IS 8807)
3.2.Langage Estelle
Le langage Estelle est un surensemble de Pascal OSI qui permet de modéliser des
protocoles de communication par automates d'états finis étendus. Il possède une structure
modulaire très structurée en "spécifications", "Processus" et "Activité". Il prend en compte le
parallélisme entre processus de même niveau sur des architectures mono ou multiprocesseurs. Il

Téléinformatique : Bases techniques pour les réseaux tome 1
Introduction à la description formelle
- 106

introduit non seulement une description des automates mais aussi des interactions avec
l'environnement à travers des "canaux" où transitent ces interactions.

Téléinformatique : Bases techniques pour les réseaux tome 1
Introduction à la description formelle
- 107

La description d'un automate est introduite par le verbe trans.
Les événements entrants sont indiqués par when
l'état actuel par
from
l'état suivant par
to
un prédicat par
provided
un événement sortant par
output
Lorsque qu'une transition renvoie dans le même état le nom de celui-ci peut être
remplacé par
same
Les retards peuvent être introduits par la clause
delay
Les canaux, introduits par la clause channel sont décrits avec une grande
précision. Les rôles des entités qu'ils relient sont décrites et ils contiennent la listes des
événements pouvant transiter dans chaque sens.
D'autres clauses permettent de prendre en compte l'environnement de l'entité décrite
et une gestion dynamique des modules instanciés.
Nota: Le tôme 5 "Méthodologie de conception des logiciels de communication" fournit
une description plus complète des langages de spécification ou description fonctionnelle :
LDS, LOTOS et ESTELLE
3.3.Exemples de codage algorithmique d'un automate
attendre "événement entrant"
lorsque "événement entrant" vaut
soit CONReq
selon "état"
cas: Repos
si P1 vrai
alors
DATReq (CR)
"état" = Connex
sinon
CONReq
"état" = Attente
cas: Autre
signaler_défaut
soit CONConf
selon "état"

Téléinformatique : Bases techniques pour les réseaux tome 1
Introduction à la description formelle
- 108

cas: Attente
DATReq (CR)
"état" = Connex
cas: Autre
signaler_défaut
soit LR
{ DATInd (LR) }
selon "état"
cas: Connex
CONConf"état" = Repos
cas: Autre
signaler_défaut
soit CC
{ DATInd (CC) }
selon "état"
cas: Connex
CONConf+
"état" = Transfert
cas: Autre
signaler_défaut
soit DT
{ DATInd (DT) }
selon "état"
cas: Transfert
dat = extrait(DT)
DATInd (dat)
cas: Autre
signaler_défaut
soit LC
{ DATInd (LC) }
selon "état"
cas: Deconnex
LIBConf
"état" = Repos
cas: Autre
signaler_défaut
soit DATReq
selon "état"
cas: Transfert
DT = PCI//dat
DATReq(DT)
cas: Autre
signaler_défaut
soit LIBReq
selon "état"
cas: Transfert
DATReq(LR)
"état" = Deconnex
cas: Autre

Téléinformatique : Bases techniques pour les réseaux tome 1
Introduction à la description formelle
- 109

signaler_défaut
soit AUTRE
signaler défaut
attendre "événement entrant"
selon "état"
cas: Repos
lorsque "événement entrant" vaut
soit CONReq
si P1 vrai
alors
DATReq (CR)
"état" = Connex
sinon
CONReq
"état" = Attente
soit AUTRE
signaler_défaut
cas: Attente
lorsque "événement entrant" vaut
soit CONConf
DATReq (CR)
"état" = Connex
soit AUTRE
signaler_défaut
cas: Connex
lorsque "événement entrant" vaut
soit LR
{ DATInd (LR) }
CONConf"état" = Repos
soit CC
{ DATInd (CC) }
CONConf+
"état" = Transfert
soit AUTRE
signaler_défaut
cas: Transfert
lorsque "événement entrant" vaut
soit DT
{ DATInd (DT) }
dat = extrait (DT)
DATInd (dat)
soit DATReq
DT = PCI // dat
DATReq (DT)
soit LIBReq
DATReq (LR)
"état" = Deconnex

Téléinformatique : Bases techniques pour les réseaux tome 1
Introduction à la description formelle
- 110

soit AUTRE
signaler_défaut
cas: Deconnex
lorsque "événement entrant" vaut
soit LC
LIBConf
"état" = Repos
soit AUTRE
signaler_défaut
cas: autre
signaler_défaut
{ DATInd (LC) }
3.4.Exemple de codage Estelle
Exemple (simplifié) de description Estelle
Specification
Exemple
systemprocess;
{ déclarations }
channel SUP_acces_point (Utilisateur, Fournisseur)
by Utilisateur:
CONReq
DATReq (dat : dataType)
LIBReq
by Fournisseur
CONConf+
CONConfDATInd (dat)
LIBConf
channel INF_acces_point (Utilisateur, Fournisseur)
by Utilisateur:
CONReq
DATReq (DATn : DATnType)
by Fournisseur:
CC
LR
DT (dat : dataType)
LC
CONConf
{
{
{
{
DATInd (CC)
DATInd (LR)
DATInd (DT)
DATInd (LC)
}
}
}
}
initialize

Téléinformatique : Bases techniques pour les réseaux tome 1
Introduction à la description formelle
- 111

to Repos
begin
"
"
end;
trans
When CONReq
from Repos
provided P1
to Connex
begin
output DATReq (CR)
end;
provided not P1
to Attente
begin
output CONReq
end;
from EITHER
to same
begin
signaler_défaut
end;
When CONConf+
from Attente
to Connex
begin
output DATReq (CR)
end;
from EITHER
to same
begin
signaler_défaut
end;
When DATReq
from Transfert
to same
begin
DT = .....//dat;
output DATReq (DT)
end;
from EITHER
to same
begin

Téléinformatique : Bases techniques pour les réseaux tome 1
Introduction à la description formelle
- 112

signaler_défaut
end;
When LIBReq
from Transfert
to Deconnex
begin
output DATReq (LR)
end;
from EITHER
to same
begin
signaler_défaut
end;
trans
from Connex
when LR
to Repos
begin
{ DATInd (LR) }
output CONconfend;
when CC
to Transfert
begin
{ DATInd (CC) }
output CONconf+
end;
from Transfert
when DT
to same
{ DATInd (DT) }
begin
dat = .......;
output DATInd (dat)
end;
from Deconnex
when LC
to Repos
begin
{ DATInd (LC) }
output LIBconf
end;
from EITHER
to same
begin
signaler_défaut
end;

Téléinformatique : Bases techniques pour les réseaux tome 1
Introduction à la description formelle
- 113


Téléinformatique : Bases techniques pour les réseaux tome 1