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