• Aucun résultat trouvé

6.3 Introduction de la pr´eemption

6.3.2 Avortement

.

s1

t1

suspend

s2

t2

resume

t3

suspend

s3

t4

[

term

s4

t4

[

term

Figure 6.9 — Leρ-netTray dont la relation de priorit´es est vide. Les places

s1ets3correspondent `a l’´etat«bac ferm´e»et la placess2`a l’´etat«bac

ou-vert». Les transitions entre ces places mod´elisent l’ouverture et la fermeture

du bac.

6.3.2 Avortement

Par rapport `a la suspension, l’avortement pr´esente une difficult´e suppl´ementaire : il

faut empˆecher tout red´emarrage du r´eseau avort´e. Le suspendre et interdire sa reprise

n’est pas une solution satisfaisante. En effet, la suspension peut ˆetre consid´er´ee comme

une pause dans l’ex´ecution d’un r´eseau. Nous pouvons d’ailleurs noter que le mod`ele des

r´eseaux de Petri ne force pas le franchissement des transitions et qu’elles peuvent toujours

attendre avant d’ˆetre franchies. De ce point de vue, la suspension ne sert qu’`a forcer

l’attente. L’avortement cependant n’est pas une attente mais une terminaison. Nous en

d´eduisons imm´ediatement que l’avortement d’un ρ-net doit produire son marquage de

sortie qui correspond effectivement `a sa terminaison.

Pour r´ealiser cela, nous proc´edons en trois ´etapes. Tout d’abord, le r´eseau est suspendu

(puisque nous avons affaire `a un avortement imp´eratif) ; ensuite, nous supprimons tous

les jetons qu’il contient ; enfin, nous produisons son marquage de sortie. La suppression

des jetons est r´ealis´ee par une boucle qui s’arrˆete quand il n’y a plus de jeton `a consommer

(les priorit´es nous permettent de d´etecter cette condition assez simplement).

Nous pourrions r´ealiser ces ´etapes en une seule de la fa¸con suivante. ´Etant donn´e un

ρ-net P, pour chaque marquage M de P accessible `a partir d’un marquage initial, nous

devrions ajouter `aP une transitiontM ayant la priorit´e sur toutes les transitions deP ;

le franchissement de cette transition devrait consommerM et produire le marquage de

sortie deP. Il faudrait ensuite assurer que, lorsque plusieurs de ces nouvelles transitions

seraient franchissables, celle qui consommerait le plus grand marquage (et qui viderait

alorsP) serait toujours choisie ; nous ajouterions donc une priorit´etM ≺tM0 d`es queM

est un sous-marquage deM0.

Cette fa¸con de faire n’est pas seulement in´el´egante, elle est aussi irr´ealiste puisqu’elle

n´ecessite d’ajouter une infinit´e de transitions. En effet, les places de liens n’´etant pas

born´ees, unρ-net poss`ede une infinit´e de marquages accessibles (comme nous l’avons vu

Notre solution en trois ´etapes permet donc de contourner cette difficult´e : puisque

la suppression des jetons ne peut ˆetre faite par un seul franchissement, la suspension

est n´ecessaire pour empˆecher le r´eseau en cours d’avortement d’´evoluer. Ainsi mod´elis´e,

l’avortement n’est pas une action´el´ementaire, mais c’est une action atomique puisque le

r´eseau avort´e est suspendu pendant qu’elle a lieu et qu’il ne peut donc pas interagir avec

le reste du syst`eme. De plus, l’avortement ne peut pas ˆetre interrompu autrement que

par une autre pr´eemption de plus haut niveau. S’il s’agit d’une suspension, l’avortement

continuera `a la reprise, s’il s’agit d’un autre avortement, le syst`eme qui initialement

avortait le sera donc de toute fa¸con.

Nous voyons ici que l’avortement est r´ealis´e sans nouvelle extension du mod`ele

(c’est-`a-dire, sans ajouter autre chose que les priorit´es d´ej`a n´ecessaires `a la suspension). Cette

remarque co¨ıncide avec l’un des r´esultats principaux de [Pin+98] qui montre que la

suspension est une op´eration primitive alors que l’avortement ne l’est pas (autrement dit,

nous pouvons obtenir le second en nous basant sur la premi`ere, mais pas le contraire).

Suppression des jetons. Pour permettre la suppression des jetons, nous d´efinissons

un op´erateur auxiliaire, clr, qui ajoute pour chaque place d’un r´eseau une transition

pouvant y supprimer des jetons. Ces transitions seront par la suite synchronis´ees avec une

boucle qui assurera la suppression de tous les jetons dans toutes les places. L’op´erateur

clr fait perdre l’ex-orientation qui sera donc r´etablie syst´ematiquement par l’op´erateur

d’avortement.

SoitP = (N, ρ) unρ-net tel queN = (S, T, ι). Nous d´efinissonsclr(P)= (df N0, ρ0), avec

N0 = (S0, T0, ι0), de la fa¸con suivante :

• S0 =df S;

• T0 df

=T]{ts

a|s∈S};

• pour toute places∈S0 et toute transitiont∈T0 :

◦ ι0(s)=df ι(s),

◦ ι0(t)=df

½

ι(t) sit∈T,

{clear}.{>} sinon,

◦ ι0(s, t)=df

ι(s, t) si t∈T,

{y} ⊂Var si t=tsa,

∅ sinon,

◦ ι0(t, s)=df

½

ι(t, s) sit∈T,

∅ sinon ;

• ρ0 df

=ρ]{(t, ts

a)|s∈S ett∈s•∩T}.

L’op´erateur d’avortement. Nous sommes maintenant en mesure de d´efinir l’op´erateur

πa permettant de rendre avortable un ρ-net arbitraire P. Le principe est presque le

mˆeme que pour la suspension et nous utilisons le ρ-net Pa, donn´e sur la figure 6.10, qui

ressemble beaucoup `a Ps. La principale diff´erence ici est que nous exploitons la boucle

sur la transitionta pour supprimer un `a un les jetons de P. Formellement :

πa(P)=df Pa[Xa←clr(P);P]sc{clear,abort} ,

o`uP est aussi donn´e sur la figure 6.10.

.

.

tXa

Xa

sa

t1

[

abort

ta clear[

t2

.

.

Figure 6.10 — A gauche, le` ρ-net Pa, sa relation de priorit´es ´etant ρa

df

=

{(t2, ta)}. `A droite, le r´eseauP dont la relation de priorit´es est∅.

Grˆace au scoping sur abort, le franchissement dans P d’une transition portant cette

action place un jeton dans sa. Grˆace au scoping sur clear ce jeton rend franchissables

toutes les transitions ts

a ajout´ees par clr, pour chaque place s non vide. La priorit´e

t2 ≺ρa ta garantit qu’elles seront toutes franchies avant que t2 ne puisse produire le

marquage de sortie.

La s´equence avec le r´eseau P a pour but d’assurer que πa(P) reste un r´eseau

ex-orient´e. En effet, l’applicationclr(P) ajoute des transitionsts

apour puiser les jetons dans

toutes les places de P, y compris ses places de sortie. Le r´esultat n’est donc pas

ex-orient´e. En ajoutantP en s´equence, nous r´etablissons cette propri´et´e. Notons qu’il est

n´ecessaire de vider les places de sorties deP car il est possible que certaines contiennent

des jetons alors que d’autres pas encore. Tout vider nous assure que nous produirons un

marquage de sortie correct.

Remarquons que, comme dans le cas de la suspension, le r´eseau Pa n’est pas

T-restreint. Nous verrons dans la preuve du th´eor`eme 7(2) que cela n’a pas de cons´equence

sur la T-restriction d’un r´eseauπa(P).

Dans la d´efinition de πa, nous n’avons pas fait de diff´erence entre une terminaison

provoqu´ee par un avortement est une terminaison « normale » (lorsque P n’est pas

avort´e). Nous verrons `a la section 7.4.1 que, puisqueP initie son propre avortement, il

peut `a ce moment ex´ecuter une action lui permettant de pr´evenir son environnement.

(Dans ce cas, il s’agira de d´eclencher le traitant d’une exception alors que le bloc de

programme qui la l`eve est avort´e.)

Avortement externe. Comme pour la suspension, nous pouvons d´efinir au-dessus de

πaun nouvel op´erateurπ0aautorisant un r´eseau `a ˆetre avort´e de l’ext´erieur. ´Etant donn´e

unρ-netP, nous d´efinissons :

πa0(P)=df πa

³³

(P ; Pt)°°

°Pk

´

scterm´

, 103

o`uPtest donn´e figure 6.7 etPk, donn´e figure 6.11, est charg´e de«convertir»une action

kill externe en actionabort. Comme un seul avortement peut avoir lieu, il n’est pas utile

ici d’utiliser une boucle.

.

.

c

kill,abort term[

Figure 6.11 —Leρ-netPk, sa relation de priorit´es est vide.

La figure 6.12 sch´ematise le fonctionnement deπa0 comme nous l’avons fait pourπs0 sur

la figure 6.8. Cette fois, il n’y a pas d’action commeresumequi soit visible de l’ext´erieur

de πa0(P) puisque l’avortement entraˆıne la terminaison du r´eseau.

.

.

π0

a(P) P

[

abort

c

kill

abort

Figure 6.12 —Une vue sch´ematique de πa(P).

Exemple. Consid´erons `a nouveau le processus d’impression Prints qui nous a servi `a

illustrer la suspension. Nous souhaitons ajouter la mod´elisation d’un bouton d’annulation

de l’impression. En utilisant l’op´erateur πa0, nous obtenons facilement :

Printa=df ³

a0(P1) ; Pt)°°

°Cancel´

sc{kill,term} ,

o`uPtest donn´e figure 6.7 etCancel, donn´e figure 6.13, mod´elise le bouton d’annulation.

.

.

kill term[

Figure 6.13 —Leρ-netCancel (sa relation de priorit´es est vide). La

transi-tion de gauche correspond `a l’utilisatransi-tion du bouton alors que celle de droite

est franchie quand l’impression se termine normalement.