• Aucun résultat trouvé

Sémantique abstraite des communications

4.2 Sémantique des règles

4.2.2 Sémantique abstraite des communications

Nous donnons maintenant une nouvelle sémantique pour la création dynamique de processus consi-dérant désormais la taille ainsi que la sémantique des primitives de communication définies dans le langage sous la forme de règles de réécriture ainsi que quelques exemples d’application de celles-ci.

Création dynamique de processus avec taille

Dans notre langage, nous considérons désormais une variable de taille. Celle-ci va permettre de conserver une information du nombre de processus présents lorsque nous effectuons des abstractions sur la forme des automates. Cette variable doit se comporter comme une variable globale. Ainsi, lorsque nous effectuons une création de processus, nous devons mettre à jour cette taille dans les mots de pro-cessus qui vont en créer un nouveau. Nous définissons ainsi une nouvelle sémantique pour cette création dynamique intégrant cette mise-à-jour de la taille. Nous faisons le choix d’attribuer au nouveau pro-cessus créé la taille précédente en tant que nouvel identifiant avant d’incrémenter globalement celle-ci. Finalement, nous attribuons en tant qu’état initial au nouveau processus créé, la localité initiale du pro-gramme (i.e. celle associée à la première instruction) avec un environnement initialisé à >.

> · hLcreate× >i · >/

F0: (hlself, ρselfi,hlcreate, ρcreatei) 7→ hlself, ρself[size 7→ ρself(size)+ 1]i · f1: (lcreate, ρcreate) 7→ hLcreate0, ρcreate[size 7→ ρcreate(size)+ 1]i · F1: (hlself, ρselfi,hlcreate, ρcreatei) 7→ hlself, ρself[size 7→ ρself(size)+ 1]i ·

f2: (lcreate, ρcreate) 7→ hLinit, ρi ni t[id 7→ ρcreate(size), size 7→ ρcreate(size)+ 1]i

hLcreate× { x= 5; id = 0; size = 2}i hLx× { x= 15; id = 1; size = 2}i (a) A

hLcreate0× { x= 5; id = 0; size = 3}i hLx× { x= 15; id = 1; size = 3}i hLinit× { x= >; id = 2; size = 3}i (b) R (A)

Figure 4.4 – Exemple de création dynamique avec mise-à-jour de taille

La Figure 4.4 illustre ce mécanisme. Nous partons d’une configuration à 2 processus respectivement d’identifiants 0 et 1 où le premier processus est à une localité de création dynamique et le deuxième à une localité quelconque. En appliquant la règle de réécriture, nous obtenons un nouvel état de programme composé d’un nouveau processus où toutes les variables de taille des processus reconnus par la règle ont

été mises à jour. Également, le nouveau processus obtient en identifiant l’ancienne valeur de la taille du mot. Il est à noter que l’on concatène le nouveau processus à la droite du mot reconnu mais tout autre position (e.g. au début, à gauche ou à droite de l’appelant, . . .) serait possible.

Communications point-à-point

Cette communication s’effectue par la synchronisation entre deux processus exécutant respective-ment une instruction send et une instruction receive. La sémantique de cette communication d’un pro-cessus d’identifiant i vers un autre d’identifiant j aux localités respectives lsendet lr ec vallant vers l0send et lr ec v0 transmettant la valeur d’une expression e évaluée dans l’environnement du premier processus vers la variable y du second se présente ainsi :

> · hlsend, {id = i}i · > · hlrecv, {id = j}i · >/ F0: (σself, σsend, σrecv) 7→ σself·

f1: (hlsend, ρsendi,hlrecv, ρrecvi) 7→ hlsend0 , ρsendi · F1: (σself, σsend, σrecv) 7→ σself·

f2: (hlsend, ρsendi,hlrecv, ρrecvi) 7→ hlrecv0 , ρrecv[y 7→ eval(e, ρsend)]i · F2: (σself, σsend, σrecv) 7→ σself

Étant donné qu’aucune supposition n’est faite sur la disposition des processus dans le mot, il est nécessaire d’effectuer l’union avec la règle symétrique plaçant l’émetteur après le récepteur.

Pour illustrer cette sémantique, nous donnons un exemple où 2 processus communiquent aux lo-calités L3 (send) et L5 (receive). La règle de communication, donnée par la Figure 4.5a est appliquée une configuration (Figure 4.5b). Le résultat de l’application de cette règle calcule un nouvel automate (Figure 4.5c) où la variable x du processus d’identifiant 1 est envoyée à la variable x du processus d’identifiant 3.

4.2. SÉMANTIQUE DES RÈGLES 59

R = >

· hL3× {id= 1}i · >

· hL5× {id= 3}i · >/ F0: (σself, σsend, σrecv) 7→ σself · f1: (hL3, ρsendi,hL5, ρrecvi) 7→ hL4, ρsendi · F1: (σself, σsend, σrecv) 7→ σself · f2: (hL3, ρsendi,hL5, ρrecvi) 7→ hL6, ρrecv[x 7→ ρsend(x)]i · F2: (σself, σsend, σrecv) 7→ σself

(a) Règle de communication point-à-point

L2× {id= 0; x = 3} L3× {id= 1; x = 10} L7× {id= 2; x = 5} L5× {id= 3; x = 2}

(b) Configuration A

L2× {id= 0; x = 3} L4× {id= 1; x = 10} L7× {id= 2; x = 5} L6× {id= 3; x =10}

(c) Configuration R (A)

Figure 4.5 – Exemple de communication Point-à-point

Communications collectives

La première primitive de communication collective dont nous exprimons la sémantique est la com-munication multi-point broadcast. La sémantique de cette primitive se présente ainsi : tous les processus sont à la localité lbcastallant vers lbcast0 , et un processus d’identifiant i envoie la valeur d’une expression e, évaluée dans son environnement, dans la variable y de tous les autres processus du système se présente ainsi :

hlbcast,>i

· hlbcast, {id = i}i · hlbcast,>i/

F0: (hlbcast, ρselfi,hlbcast, ρsendi) 7→ hlbcast0 , ρself[y 7→ eval(e, ρsend)]i · f1 : hlbcast, ρsendi 7→ hlbcast0 , ρsendi ·

F1: (hlbcast, ρselfi,hlbcast, ρsendi) 7→ hlbcast0 , ρself[y 7→ eval(e, ρsend)]i

Comme pour la règle de communication point-à-point, nous donnons ici un exemple où un processus d’identifiant 2 envoie sa variable x à tous lorsque les processus sont à la localité L7. La règle, présentée par la Figure 4.6a, est appliquée à une configuration (Figure 4.6b) pour donner comme résultat l’auto-mate de la Figure 4.6c.

R = hL7× >i · hL7× {id= 2}i · hL7× >i/ F0: (hL7, ρselfi,hL7, ρsendi) 7→ hL8, ρself[x 7→ ρsend(x)]i · f1: (L7, ρsend) 7→ hL8, ρsendi · F1: (hL7, ρselfi,hL7, ρsendi) 7→ hL8, ρself[x 7→ ρsend(x)]i

(a) Règle de communication multi-point

L7× {id= 0; x = 3} L7× {id= 1; x = 10} L7× {id= 2; x = 5} L7× {id= 3; x = 2}

(b) Configuration A

L8× {id= 0; x =5} L8× {id= 1; x =5} L8× {id= 2; x = 5} L8× {id= 3; x =5}

(c) Configuration R (A)

Figure 4.6 – Exemple de communication multi-point

La deuxième primitive de communication collective est une opération de réduction. Celle-ci est une opération complexe, il est nécessaire de la décomposer en plusieurs règles. L’idée est d’introduire un processus fantôme « collecteur » chargé de récolter les valeurs des variables de chaque processus et d’effectuer au fur et à mesure les opérations. Nous avons donc besoin de trois règles : la création de ce processus fantôme, le parcours de chaque processus et la transmission du résultat final au processus récepteur en même temps que la destruction de ce collecteur.

Ainsi, la sémantique d’une opération reduce, où tous les processus sont à une localité lr educ suivie par lr educ0 et où un processus d’identifiant i reçoit le résultat de la réduction de toutes les variables v des processus avec l’opérateur commutatif op se présente comme :

1.

hlreduc,>i/ f0 : ∅ 7→ hlcoll, {v 7→ e0}i · F0: h∅, ρselfi 7→ hllock, ρselfi 2.

> · hllock,>i · hlcoll,>i · >/ I d·

f1 : (hlcoll, ρcolli,hllock, ρlocki) 7→ hllock, ρlocki ·

f2 : (hlcoll, ρcolli,hllock, ρlocki) 7→ hlcoll, ρcoll[v 7→ eval(v ~op ρlock(v))]i · I d

3.

hllock,>i

· hllock, {id = i}i · hllock,>i

· hlcoll,>i / F0: (hllock, ρselfi,hllock, ρrecvi,hlcoll, ρcolli) 7→ hlreduc0 , ρselfi ·

f1 : (hllock, ρrecvi,hlcoll, ρcolli) 7→ hl0reduc, ρrecv[v 7→ ρcoll(v)]i · F1: (hllock, ρselfi,hllock, ρrecvi,hlcoll, ρcolli) 7→ hlreduc0 , ρselfi

4.3. VÉRIFICATION DU SYSTÈME 61

où lcoll est la localité fantôme du collecteur, llock est une localité fantôme permettant de bloquer l’évolution des processus en attente de la complétion de la collecte, e0est l’élément neutre de l’opérateur opet I dest la fonction réécrivant les processus d’un sous-mot par l’identité.

4.3 Vérification du système