• Aucun résultat trouvé

5.4.1 Syntaxe textuelle des r´eseaux de Petri `a permission/inhibition

Voici la grammaire du format textuel que nous utiliserons dans la suite : R : := P|T |INH |PER |ǫ1

P : := “pl” ID (“ :” ID) ?“(” NAT“)”

T : := “tr”ID (“ :” ID) ? INTERVAL ? PRECOND*“->”NORMAL* INH : := “inh”ID+ (“<” |“>”) ID+

PER : := “per”ID+ (“<” |“>”) ID+ ID : := [0-9a-z]+

INTERVAL : := (“[” |“]”) NAT ( (“,”NAT (“]” |“[”))|“,w[”) NAT : := [0-9]+

PRECOND : := NORMAL |READ|INHIBITOR|SW |SWINH NORMAL : := ( ID “*”NAT )| ID

READ : := ID “ ?”NAT INHIBITOR : := ID “ ?-”NAT

SW : := ID “ !”NAT SWINH : := ID “ !-”NAT

La grammaire d´ebute avec le non terminal R. Chaque d´eclaration d’un ´el´ement du r´eseau tient sur une ligne : le retour chariot sert de d´elimiteur de fin.

La d´eclaration d’une place d´ebute par le mot-cl´e pl, suivi du nom de celle-ci, de l’´etiquette ´eventuelle et finalement du marquage initial. La d´eclaration d’une place par pl est facultative, `a moins que celle-ci ne poss`ede un marquage initial diff´erent de 0.

La d´eclaration d’une transition commence par le mot-cl´e tr, puis vient son nom, son ´etiquette facultative, son intervalle facultatif, ses pr´econditions utilisant diff´erents types d’arcs, un signe fl`eche

-> pour signifier la fin des pr´econditions et finalement les postconditions. Si aucun intervalle n’est donn´e, l’intervalle [0,∞[ est utilis´e par d´efaut. A noter qu’un intervalle non born´e `a droite est not´e

w[: [0,∞[ est donc not´e [0, w[.

Les deux relations de permissions et d’inhibitions sont d´eclar´ees en utilisant respectivement les mots-cl´es per etinh. Le signe >ou < indique le sens de la relation. Ainsi, pour d´eclarer quet−• t, on pourra aussi bien ´ecrire«pert >t’»que «per t’<t» et pour d´eclarerk−◦ i,k−◦ j,l−◦i, l−◦j, on pourra ´ecrire«inh k, l> i, j».

5.4.2 system et ressources

Un ´el´ementsystem est pauvre en s´emantique puisque c’est un conteneur. Bien que ses param`etres soient constamment consult´es par ses diff´erents ´el´ements fils, seule une place est produite, repr´esentant l’activation de l’´el´ement system.

Sisest une instance de la classe System, alors sa traduction est :

1

5.4. S´emantique par traduction 97

pls.active : s.active ((s.noinit ?0 :1))

L’attributpreemptablede la classeSystem est traduit, comme nous le verrons plus tard, dans les autres ´el´ements par le type de l’arc testant la valeur de la places.active : si le syst`eme est pr´eemptable alors l’arc est un arc `a chronom`etre et un read arcsinon.

Afin de ne pas nous r´ep´eter inutilement dans la s´emantique des ´el´ements ult´erieurs, nous pr´eciserons ici quetoute transition issue de la traduction des ´el´ements Pola(ce qui exclut donc les transitions de comportement qui ne sont pas synchronis´ees avec une transition issue de la traduction des ´el´ements

Pola) est synchronis´ee avec la transition suivante :

tr t (s.preempt ? s.active !1 : s.active ?1) ->

Cela signifie que tant qu’un syst`eme pr´eemptif est actif toutes les transitions fonctionnent nor-malement et sont suspendues, prˆetes `a repartir de l’´etat dans lequel elles s’´etaient arrˆet´ees, lorsque le syst`eme devient inactif. Dans le cas o`u le syst`eme n’est pas marqu´e preemptable, le d´esactiver interrompt et remet `a z´ero les horloges du syst`eme. Un read arc est obligatoire pour ne pas remettre `

a z´ero l’ensemble du syst`eme `a chaque fois que l’un de ses ´el´ements produit un ´ev`enement (tire une transition).

De la mˆeme fa¸con que la classe System, une instance de la classe Resource est traduite par une place. Cette place repr´esente le nombre de cette ressource libre dans le syst`eme : c’est-`a-dire 1 dans le cas par d´efaut et le nombre de ressources dans le pool (r.pool ici) au cas o`u la ressource est unpool

de ressources.

Soit r l’instance de la ressource `a traduire.

plSYS.r : SYS.r ( (r.pool ? r.nb : 1))

5.4.3 Traduction d’une tˆache

L’´el´ement tˆache est, comme l’´el´ement system, un conteneur qui, au contraire desystem, ne poss`ede aucune s´emantique propre. L’activit´e d’une tˆache est donn´ee par celle de ses ´el´ements comme le g´en´erateur de p´eriodes ou le d´ecalage initial du r´eveil : il n’y a donc pas de places permettant de rep´erer l’activit´e d’une tˆache. L’attribut et mot-cl´e noinit qui peut param´etrer une tˆache d´eclare l’inactivit´e initiale de tous ses ´el´ements.

5.4.4 Traduction d’une action

Soit x une instance de la classe Action, soita=T ASK.x, la s´emantique de l’action x est donn´ee par :

Algorithme 5 : S´emantique d’une action x Donn´ees:a=T ASK.x

tr a.tau : a.tau a.Interval TASK.released TASK.dlcheck (∀r∈a.alloc.res)(r.preempt?r!1 :r) -> tr a : a [0,w[ (a.endoftask ? TASK.released (TASK.deadline 6=⊥→ TASK.dlcheck) :

TASK.released ?1) (∀r ∈a.alloc.res)(a.giveback ∨a.endoftask ? TASK.r : TASK.r ?1) ->

(∀r ∈a.alloc.res)(a.giveback ∨ a.endoftask→ SYS.r)

inh a.tau >a.tau

per a.tau >a

La figure 5.6 en donne la repr´esentation graphique. Seule la transition a.tau porte une r´eelle information temporelle pertinente. Elle n’est pas tirable, puisqu’elle est d´efinie comme prioritaire sur elle-mˆeme. Elle est sensibilis´ee aux mˆeme instants que sa jumelle a et contraint son tir par la relation de permission. Par cons´equent,an’est tirable que dans l’intervallea.Interval. Lorsque l’action termine la tˆache, ce qui est signal´e par le mot-cl´e endoftask, elle se charge de lib´erer les ressources auparavant occup´ees et enl`eve un jeton de released, mettant la tˆache en sommeil (si par ailleurs aucun autre ´ev`enement n’est intervenu pour r´eveiller plusieurs fois la tˆache). Lorsque une ressource est preemptableun arc chronom`etre est utilis´e permettant la suspension de la tˆache.

Fig. 5.6 – Motif de traduction d’une actiona

5.4.5 Traduction d’une p´eriode

Soit x une instance de la classe Period, soit p = TASK.period, la s´emantique du g´en´erateur de p´eriode est donn´ee par :

Algorithme 6: S´emantique d’une p´eriode p Donn´ees:p = TASK.period

plp.active : p.active ( (noinit ? 0 : 1)) trp.tempo : p.tau p.Interval p.active ?1 ->

trp : p [0,w[ p.active ->TASK.released (p.noregular → p.active) (TASK.Deadline 6=⊥→ TASK.dlcheck) (not (isStrict p.Interval.Max ∨p.Interval.Max = ∞) →

trp.max : p.tau [p.Interval.Max,p.Interval.Max] p.active ?1 ->)

inhp.tempo> p.tempo

inhp.max >p.max

per p.tempo>p

La figure 5.7 donne la repr´esentation graphique de la s´emantique du motif period. La transition

p.max admet un intervalle [p.Interval.M ax, p.Interval.M ax], o`u l’attribut M ax est la valeur de la borne sup´erieure de p.Interval. Cette transition est utile afin de rep´erer le dernier instant possible pour le tir dep, lorsqu’il existe. Nous verrons dans la section 5.7.2 qu’il est n´ecessaire que la transition

p.max contraigne les allocations par −◦, c’est-`a-dire que p.max est une transition noty du motif pr´esent´e dans la section 5.7.2. Lorsquep.Interval n’est pas born´e (p.Interval.M ax=∞) ou lorsque sa borne sup´erieure est stricte (isStrict p.Interval.Max), la transitionp.maxne doit pas ˆetre g´en´er´ee. Lorsque la p´eriode estnoregular, cela signifie que l’utilisateur souhaite contrˆoler lui-mˆeme l’acti-vit´e du g´en´erateur. Si la tˆache ne poss`ede pas de contrainte temps r´eel, c’est-`a-dire si aucune ´ech´eance n’est sp´ecifi´ee, il faut faire attention `a ne pas g´en´erer le jeton de demande d’observation du d´epassement d’´ech´eance :TASK.dlchek.