• Aucun résultat trouvé

5.4 Algorithme du ramasse-miettes omniscient

5.4.2 Bornes et indice de ressources

5.4.2.4 Indice de ressource

Pour obtenir l’indice de ressources, nous recherchons un allocateur omniscient. Cet allo-cateur correspond exactement au coloriage parfait du graphe de la relation de conflit.

Proposition 5.12.

Soient G un graphe de ressources et la relation de conflits définie survars(G), et soitµun allocateur sûr correspondant au coloriage parfait du graphe de la relation. Alors µest un allocateur omniscient pour G. De plus,card(img(µ)) est l’indice de ressources de G.

100 Le ramasse-miettes omniscient G 1 A 2 B 2 C 1 D 3 H 1 E 4 G 1 A 2 B 2 C 2 D 1 H 1 E 3

FIGURE5.4 – Coloriages du graphe de conflits des variables de G0 : stratégie first-fit (en haut) et coloriage parfait (en bas)

5.4. Algorithme du ramasse-miettes omniscient 101

Démonstration. D’après la définition 4.6, un allocateur omniscient est un allocateur qui

minimise n. Or, d’après la définition du coloriage parfait, siµest obtenu par coloriage parfait, il n’existe pas de coloriage utilisant moins de couleurs quecard(img(µ)). On en déduit, d’après la définition 5.11, quecard(img(µ) est l’indice de ressources de G.

Par exemple, l’indice de ressources pourχ pour le graphe exemple G est 3. Il s’agit

égale-ment du nombre chromatique du graphe des conflits qu’il génère. Un coloriage parfait de cette relation de conflits figure dans la partie basse de la figure 5.4 : il n’utilise en effet que 3 couleurs différentes. La complexité d’un tel coloriage revient à trouver un ordre sur les sommets tel qu’une stratégie first-fit appliquée dans cet ordre minimise le nombre de couleurs nécessaires. Dans notre exemple, l’ordre choisi répondant à ce critère est le suivant : H ,G, D, A, B,C puis

E .

La correspondance entre indice de ressources d’un graphe de ressources et nombre chro-matique de son graphe des conflits mène à un résultat important concernant la complexité du calcul de l’indice de ressources :

Théorème 5.1. Calcul de l’indice de ressources

Le calcul de l’indice de ressourcesχ d’un graphe de ressources est NP-complet.

À première vue, ce résultat peut sembler négatif. Toutefois, nous rappelons que l’algo-rithme de coloriage n’est appliqué qu’au graphe des conflits, et non au graphe de ressources en entier. Dans la plupart des cas pratiques, le premier est bien plus petit que le second. Ensuite, une propriété intéressante de séparabilité peut souvent être exploitée.

Proposition 5.13.

Soit un graphe de conflits entre variables de ressources. Si pour un entier n fixé, =1≤i≤ni, alors :

µ= 1≤i≤n

µi.

De plus, si pour une variable de ressource X , on a∀Y ∈ , X = Y ∨ X Y , alors : χ= 1 + χ\{X }.

Démonstration. Il s’agit là de l’application de propriétés basiques du problème de coloriage

de graphe.

D’abord, les parties non connectées d’un graphe de conflits peuvent être coloriée de manière indépendante.

Ensuite, pour un sommet connecté avec tous les autres sommets, il peut être réservé une couleur dont on sait qu’elle ne sera pas utilisée par aucun autre sommet, et écarter le sommet du problème de coloriage.

Dans notre exemple, la variable H n’est connectée à aucune autre variable, on peut donc lui attribuer la plus petite couleur de façon séparée du coloriage des autres variables. Ensuite, la variable E étant connectée à toutes les autres variables de la composante connexe de laquelle elle fait partie, on peut lui attribuer une couleur exclusive et l’exclure elle aussi du problème de coloriage.

102 Le ramasse-miettes omniscient

Le cœur de l’algorithme de coloriage ne s’applique alors plus qu’aux 5 variables restantes, tandis que le graphe de ressources de départ contenait quant à lui 13 états (après suppression des états ne contenant pas d’événements de ressources et ne jouant aucun rôle dans le branchement du graphe).

5.5 Conclusion

Dans le chapitre précédent, nous avons présenté lesν-automates ainsi que les

résul-tats théoriques concernant la quantité d’identités nécessaires à leur bon fonctionnement (minimum d’identités requises pour constituer lesν-langages reconnus).

Dans ce chapitre, nous nous sommes attachés à l’élaboration d’algorithmes permettant le calcul de ces résultats quantitatifs. Pour cela, afin de nous abstraire des branchements desν-automates, nous avons défini une structure de graphe de ressources, puis redéfini les

propriétés desν-automates sur ces graphes.

L’établissement des algorithmes passe ensuite par la définition des récurseurs, principe générique de calcul sur les graphes de ressources, permettant également l’expression directe d’une complexité pire-cas des algorithmes effectuant ces calculs.

Le résultat final (théorème 5.1) subsume les algorithmes précédents traitant les ressources sur les graphes de ressources. En effet, le calcul du graphe des conflits entre variables d’un graphe G est dans le pire-cas en O(card(RG)2∗ (card(VG)+card(EG))), tandis que le calcul de l’indice de ressources est un algorithme exponentiel sur le graphe des conflits. En pratique, dans un modèle de taille conséquente, une variable est très rarement utilisée tout au long du déroulement du modèle. Les propriétés de séparabilité présentées ci-dessus (proposition 5.13) peuvent alors réduire grandement le temps de calcul de l’indice de ressources. De plus, nos résultats montrent que de premières bornes de ressources peuvent être établies en un temps moindre que celui nécessaire pour calculer la meilleure borne.

Notre travail présenté dans ce chapitre aura permis de mieux séparer la problématique de récupération des informations sur les ressources dans un modèle de la problématique d’attribution des identités. Ainsi, des algorithmes efficaces pour cette phase de récupération ont été introduits, et le principe du récurseur pourra être réutilisé afin de définir de plus nombreux traitements sur les graphes de ressources, comme par exemple la vérification de certaines propriétés qualitatives concernant l’utilisation des ressources.

Troisième partie

C

H

AP

ITRE

6

MODÈLES DE RESSOURCES POUR LE π-CALCUL

C

OMMEdiscuté dans l’introduction de cette thèse, et plus précisément dans les objectifs visés, notre cas d’étude pour l’analyse de ressources porte sur leπ-calcul. Nous

souhai-tons ainsi montrer la mise en œuvre de nos algorithmes sur un formalisme suffisamment abstrait pour être possiblement la cible d’abstractions préliminaires de programmes ou de systèmes concrets. Par exemple, l’abstraction du comportement de programmes exprimés en Piccolo vers des termes enπ-calcul permet l’application des analyses de ressources sur des

programmes réalistes.

L’approche que nous choisissons consiste en la construction de modèles de ressources directement depuis les graphes d’états représentant le comportement complet d’un processus. Dans une première section, nous présentons ce principe général d’abstraction des res-sources. Il y est décrit plusieurs manières de construire des transitions deν-automate depuis

des transitions de termes décrits enπ-calcul, selon sa sémantique précoce1.

Avant l’opération d’abstraction des ressources, la construction de graphes d’états pour des processus enπ-calcul pose toutefois plusieurs difficultés. Pour la sémantique précoce

notamment, ces graphes explosent en nombre d’états, du fait de la prise en compte d’un grand nombre de noms distincts à chaque action de réception ou d’émission d’un nom frais. Pour répondre à ces problématiques, nous présentons dans la seconde section une sémantique à états, basée sur la sémantique symbolique tardive, permettant une construction bien plus compacte et pour laquelle les analyses de ressources peuvent toujours être appliquées.

Enfin, dans la troisième section de ce chapitre, une dernière sémantique pour l’obser-vation fine des ressources dans leπ-calcul est introduite : la sémantique slice-π. Par l’ajout

d’une construction simple autorisant la distinction entre ressources observables et ressources non observables, cette nouvelle sémantique propose un compromis entre l’expressivité des sémantiques de transitions et les possibilités algorithmiques induite par les sémantiques de

106 Modèles de ressources pour leπ-calcul

réductions. Elle permet entre autres de réduire le nombre de transitions observables, ainsi que de préciser les ressources que l’on souhaite voir analysées pour un système. La puissance de l’environnement requis pour l’observation de transitions générées par une telle sémantique est amoindrie, et les analyses de ressources qui suivent en deviennent naturellement plus efficaces en pratique.

6.1 Modèles d’abstraction des ressources

Une étape pour l’application de nos algorithmes d’analyses de ressources concerne l’éta-blissement de modèles de ressources qui reflètent le comportement (ou la partie du comporte-ment que l’on souhaite étudier) de processus décrits enπ-calcul. Pour cela, une interprétation

naturelle de la sémantique duπ-calcul consiste à produire un ν-automate directement depuis

un système de transitions étiquetées.

Dans cette section, on considère en particulier le cas de systèmes de transitions générés à l’aide de la sémantique précoce duπ-calcul (présentée dans l’annexe B, figure B.4). Précisons

que, comme discuté dans l’état de l’art (chapitre 2, section 2.3.3) ce type de sémantique génère une infinité de transitions pour chaque réception de donnée sur un canal. Dans le cadre de nos analyses de ressources, il nous suffira alors de ne considérer que les transitions P−−→ Q,ax

par la règle (e-input), pour lesquelles x∈fn(P ), ainsi qu’une unique transition P−−→ Q aveca y y∉fn(P ). Une telle construction ne garantie pas, pour deux processus bisimilaires donnés, la construction d’une relation de bisimilarité sur les états générés à l’aide des algorithmes classiques pour la bisimulation. Ce sont toutefois les algorithmes d’analyses de ressources qui permettront par la suite d’éliminer les transitions redondantes, à travers la minimisation des ressources qui leur seront associées.

Le principe général des abstractions de ressources qui suivent est l’établissement d’une transition (qP,λ, qQ) dans unν-automate pour chaque transitions P−→ Q d’un système deµ

transitions étiquetées. Les manipulations de ressources sont alors spécifiées parλ, au travers

des ensemblesallocs(λ) (allocations),uses(λ) (utilisations) etfrees(λ) (destructions).

Abstraction des données générées puis envoyées par le système On considère un premier

exemple de règles qui forment l’abstraction des données générées et envoyées, en termes de ressources dynamiques. Dans cette abstraction :

— Une transition P −−−→ Q crée une ressource Xa(b) b associée au nom b et est interprétée comme :

qP {νXb, Xb} qQ

— Une transition P−−→ Q telle qu’il existe ressource Xab bassociée au nom b est interprétée comme :

6.1. Modèles d’abstraction des ressources 107

qP {Xb} qQ

— Toute autre transition P−→ Q est interprétée comme :µ

qP {} qQ

Pour cette première abstraction, le principe est donc le suivant : chaque donnée créée

puis envoyée vers l’environnement est comptabilisée comme l’utilisation de la ressource cor-respondante. Par conséquent, chaque émission liée compte pour une création de ressource

fraîche combinée à son utilisation (puisqu’elle est émise dans le même temps que sa créa-tion), et chaque émission de la donnée associée à une variable de ressource compte pour une utilisation de la ressource.

De nombreuses variations sont possibles pour la mise en place d’une telle abstraction. Il est possible, par exemple, de considérer une communication sur un canal donné comme une utilisation de la variable de ressources associée à ce canal, ou encore de considérer les réceptions, comme nous le faisons dans le prochain paragraphe. Pour toutes les abstractions, deux points supplémentaires sont à prendre en noter.

D’abord, notre principal leitmotiv reste le fait que deux processus bisimilaires doivent générer deuxν-automates qui reconnaissent des ν-langages "équivalents".

Ensuite, il est requis, dans une moindre mesure, que les ressources manipulées soient détruites. Or dans les transitions deν-automate des règles précédemment décrites ne figure

aucune destruction de variable de ressource. Une heuristique simple mais efficace consistera à insérer une destructionνXbde la variable Xb associée au nom b :

— soit durant une transition P−→ Q, lorsque b ∈µ fn(P ) mais que b∉fn(Q),

— ou bien durant une transition P−→ Q, lorsqu’il n’existe aucun processus Qµ couplé à une actionµtels que Q µ

 −→ Q.

Exemple 6.1. Un premier cas d’abstraction des ressources depuis un terme décrit enπ-calcul

Soit la définition de processus qui suit :

P ()def=new(c)ac, bc, P ()

Il s’agit là d’un motif classique de génération de noms frais. Le nom c est généré puis envoyé par le biais du canal a, puis du canal b, vers l’environnement. Le processus est alors répété, et un appel à P produit les dérivations suivantes :

P ()−−→ bc.P()a(c) −→ P() → ...bc

En appliquant les règles d’abstraction de ressources que nous avons définies plus haut au processus P (), et étant donnée une variable de ressource Xcreprésentant le nom frais c, on obtient leν-automate suivant :

108 Modèles de ressources pour leπ-calcul

q0 q1

{νXc, Xc} {Xc,νXc}

L’état q0 correspondant au processus P () est l’état initial duν-automate, mais en est

également un état final, du fait qu’il existe un cycle partant de q0et arrivant sur le même état. De cette manière, leν-langage reconnu par le ν-automate généré par P () prend en compte

tous lesν-mots, de taille arbitrairement grande, qu’il est possible de reconnaître à travers ce

cycle, même si le comportement de P semble infini.

Un équivalent théoriquement acceptable aurait été un système infini générant une nombre infini de ressources. Toutefois, cette version contenant un simple cycle indique en plus qu’une unique ressource est nécessaire pour représenter ce comportement, et que son indice de ressource est trivialement 1 puisqu’il n’y a ici aucun conflit entre variables.

Exemple 6.2. Cas générant des conflits de variables de ressources

Un exemple minimal générant un conflit entre deux variables de ressources est le suivant :

new(a).new(b).c a.cb.c a.0

On considère ensuite des exemples moins triviaux. Soient les définitions de processus qui

suivent2 : 

Q()def=new(a).new(b).c a.cb.d a.d (x).c x.0

C [X ]def=new(d ).[Q | X ]

Leν-automate correspondant au processus C [d (y).d y.0]() est le suivant :

q0 q1 q2 q3 q4 q5 {νXa, Xa} {νXb, Xb,νXb} {} {} {Xa,νXa}

Ceν-automate contient deux variables Xaet Xb, qui sont en conflit. L’indice de ressource du système est de 2. Si l’on considère maintenant la variante C [d (y).d c.0](), leν-automate

devient :

2. La notation à trou C [X ] désigne une fonction paramétrée par un processus syntaxique X et générant un processus syntaxique tel que C [P ]= C[X ]{P/X } selon la notation standard de la substitution de noms étendue ici

6.1. Modèles d’abstraction des ressources 109 q0 q1 q2 q3 q4 q5 {νXa, Xa} {νXb, Xb,νXb} {νXa} {} {}

Le conflit XaXbne figure plus dans cette variante3, et, dans ce cas, l’indice de ressource est de 1 seulement. Cette différence illustre la nature sémantique proposée par notre abstraction de ressources pour la sémantique précoce duπ-calcul. Le comportement de la composante X dans le contexte C [X ] peut être aussi complexe que souhaité et, en restant dans le cas où

le nombre d’états est fini, il n’est pas possible de décider si un conflit aura lieu ou non sans explorer explicitement les différents chemins d’exécution possibles.

On considère finalement une seconde abstraction possible des ressources.

Abstraction des données reçues depuis l’environnement Dans cette seconde variante

d’abs-traction des transitions duπ-calcul :

— Une transition P−−→ Q, avec b ∉ab fn(P ), crée une ressource Xbassociée au nom b et est interprétée comme :

qP {νXb, Xb} qQ

— Une transition P−−→ Q, avec b ∈ab fn(P ), correspond à une utilisation de la variable de Xb

associée au nom b déjà connu, et est interprétée comme :

qP {Xb} qQ

— Toute autre transition P−→ Q est interprétée comme :µ

qP {} qQ

110 Modèles de ressources pour leπ-calcul

Le principe est cette fois : chaque donnée reçue est comptabilisée comme l’utilisation de

la ressource correspondante. Comme précédemment, on appliquera une heuristique afin de

détruire les ressources générées avant la fin de l’exécution du système.

Des combinaisons des deux abstractions présentées (et d’autres) peuvent bien évidem-ment être mises en place, selon les besoins. On peut alors adapter les observations faites en fonction du type de manipulations des ressources considérées. On illustre par l’exemple suivant l’application conjointe de deux ensembles de règles : l’abstraction des réceptions de ressources et l’abstraction des émissions de ressources.

Exemple 6.3. Abstraction d’un processus de dispatch

Soit la définition de processus qui suit :

D()def= c(x),dx,ex,D()

Le rôle d’une telle définition est de spécifier un processus qui reste en attente de la réception d’une donnée (sur le canal c), puis qui transmet cette donnée à d’autres agents (ici, à travers les canaux d et e). La donnée reçue n’étant pas connue à l’avance, il est nécessaire dans le cas général de considérer la réception possible d’un nom parmi tous les noms connus, ainsi qu’un nom frais. Le processus D() peut donc générer les dérivations :

D()−→ dx,ex,D()c x −−→ ex,D()d x −→ ...ex

mais également, par exemple, les dérivations :

D()−→ dd,ed,D()cd −−→ ed,D()d d −−→ ...ed

L’application des règles d’abstraction des réceptions et des émissions de données pro-duisent alors leν-automate suivant :

q0 q1 q2 q3 q4 q5 q6 q7 q8 {νXc, Xc} {Xc} {Xc,νXc} {νXd, Xd} {Xd} {Xd,νXd} {νXe, Xe} {Xe} {Xe,νXe} {νXx, Xx} {Xx} {Xx,νXx}

Pour ce système, puisque le contenu de la donnée n’importe pas pour qu’elle soit ensuite envoyée sur les canaux d et e, le fait de recevoir un canal connu ou une donnée inconnue n’a aucun impact sur le comportement du processus. Leν-automate a pour indice de ressource :