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.
Dans le document
Modèles composables et concurrents pour le temps-réel
(Page 102-106)