Vous êtes sur la page 1sur 570

SYSTMES

TEMPS REL
DE CONTRLE-
COMMANDE
Conception
et implmentation
Francis Cottet
Emmanuel Grolleau
SRIE | EEA
ISBN 2 10 007893 3
Cet ouvrage prsente une mthodologie complte et oprationnelle
de dveloppement des systmes temps rel de contrle-commande.
Il permet au lecteur de :
connatre et mettre en uvre les mthodes de spcification et de
conception ;
dfinir et paramtrer lenvironnement dexcution des systmes ;
raliser limplmentation multitche base sur un noyau temps
rel ;
dvelopper lapplication en C, Ada ou LabVIEW.
Louvrage fait galement le point sur les dernires avances dans le
domaine des systmes temps rel multitches. De nombreux exemples
industriels sont traits, permettant de comprendre puis de mettre en
uvre les principes de cette mthodologie de dveloppement.
Ce livre sadresse tous les ingnieurs ou techniciens concepteurs
dapplications temps rel de contrle-commande de procds
industriels. Il est galement destin aux tudiants en informatique
industrielle.
TECHNIQUE ET INGNIERIE
Srie EEA
Francis Cottet Emmanuel Grolleau
F
.

C
O
T
T
E
T
E
.

G
R
O
L
L
E
A
U
S
Y
S
T

M
E
S

T
E
M
P
S

R

E
L

D
E

C
O
N
T
R

L
E
-
C
O
M
M
A
N
D
E
SYSTMES TEMPS REL DE
CONTRLE-COMMANDE
Conception et implmentation
FRANCIS COTTET
est professeur lENSMA
(cole Nationale
Suprieure de Mcanique
et dArotechnique).
EMMANUEL GROLLEAU
est matre de confrences
lENSMA.
Tous deux
sont chercheurs
au Laboratoire
dinformatique
scientifique et industrielle
(LISI), dans lquipe
Systme temps rel ,
coordonne par Francis
Cottet lui-mme.
www.dunod.com
GESTION INDUSTRIELLE
CONCEPTION
FROID ET GNIE CLIMATIQUE
MCANIQUE ET MATRIAUX
CHIMIE
ENVIRONNEMENT ET SCURIT
EEA

Francis Cottet
Emmanuel Grolleau

S

YSTMES TEMPS REL
DE
CONTRLE-COMMANDE

Conception et implmentation

cottet_prelims Page I Mardi, 1. mars 2005 2:33 14

D

U



MME



AUTEUR

: F

RANCIS

C

OTTET

LabVIEW Programmation et applications,

Dunod, 2001

Dunod, Paris, 2005
ISBN 2 10 007893 3

cottet_prelims Page II Mardi, 1. mars 2005 2:33 14
III


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

TABLE DES MATIRES

Avant-Propos V
1


Dveloppement des systmes de contrle-commande 1

1.1 Introduction

1

1.2 Architecture des applications de contrle-commande

7

1.3 Dveloppement des applications de contrle-commande

18

2


Spcification selon la mthode SA-RT 27

2.1 Introduction gnrale la mthode SA-RT

27

2.2 Prsentation de la syntaxe graphique de la mthode SA-RT

30

2.3 Les diagrammes flot de donnes

36

2.4 Laspect contrle de la mthode SA-RT

41

2.5 Spcification des processus primitifs

49

2.6 Spcification des donnes

51

2.7 Organisation gnrale de la mthode SA-RT

54

2.8 Exemples

56

2.9 Extensions de la mthode SA-RT

70

3


Conception selon la mthode DARTS 81

3.1 Introduction

81

3.2 Prsentation de la mthode DARTS

85

3.3 Exemples de conception avec la mthode DARTS

102

4


Architectures systmes 109

4.1 Architecture matrielle

109

4.2 Architecture logicielle

138

4.3 Rseaux et bus de terrain

160

5


Excutifs temps rel 181

5.1 Introduction

181

5.2 Concepts des excutifs temps rel

184

5.3 Principales normes temps rel

209

5.4 Exemples dexcutifs temps rel

230
IV

6


Programmation des systmes multitches 245

6.1 Programmation C, Ada et LabVIEW

245

6.2 Programmation multitche en langage C

285

6.3 Programmation multitche en langage Ada

314

6.4 Programmation multitche en langage LabVIEW

331

7


Traitement complet dune application industrielle 341

7.1 Cahier des charges

341

7.2 Spcification

342

7.3 Conception

350

7.4 Implmentation sur simulateur

354

7.5 Spcification et conception adaptes

388

7.6 Implmentation de la commande relle

394

7.7 Conclusion

405

8


tude avance des systmes temps rel 407

8.1 Introduction

407

8.2 Modlisation des tches

409

8.3 Ordonnancement des tches indpendantes priodiques

431

8.4 Ordonnancement des tches indpendantes apriodiques

447

8.5 Ordonnancement des tches priodiques dpendantes

463

8.6 Analyse dordonnanabilit en environnement monoprocesseur

481

8.7 Ordonnancement en environnement multiprocesseur

491

Annexes

A


Reprsentation de linformation 513
B


Standards POSIX 519
C


Module de botes aux lettres POSIX 523
D


Module de communication Ada 533
Bibliographie 539
Lexique anglais franais 541
Sigles 546
Index 551
V


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

AVANT-PROPOS

Les applications informatiques dites de contrle-commande ont envahi lenviron-
nement industriel et notre vie quotidienne. Depuis quelques dcennies, les besoins
de plus en plus accrus en termes de technicit ont conduit intgrer une trs forte
automatisation dans tous les produits industriels ou destins lusage grand
public . La liste inniment longue des exemples contient des produits aussi divers
quun tlphone mobile, un vhicule automobile, un four micro-onde, une console
de jeu, un satellite dexploration, etc. Le dnominateur commun toutes ces appli-
cations est la fourniture de fonctionnalits toujours plus sophistiques : interface
homme-machine (cran couleur de haute dnition, cran tactile, commande
vocale), nombre lev de fonctions dbordant largement lutilisation de base du
produit (visualisation des commandes, liaison Internet), sret de fonctionnement
(robustesse, tolrance aux fautes, rpartition, maintenance rapide et aise).
Pour ces raisons, les trois grands domaines permettant ces dveloppements : llec-
tronique, lautomatique et linformatique, ont d progresser et sadapter.
lectronique : processeur multifonctions (microcontrleur), processeur faible
consommation, ralisation de circuits lectroniques ddis (FPGA, FPLA), etc.
Automatique : lois de rgulations adaptes, rgulation numrique, etc.
Informatique : mthodes et mthodologies de dveloppement, systmes dexploi-
tation ou excutifs embarqus, langages applicatifs, mthodes de tests et de
validations, etc.
Les domaines de llectronique et de lautomatique ne sont pas le propos de cet
ouvrage. Toutefois, tant donn le dveloppement li entre les deux parties matriel
et logiciel , une prsentation succincte du matriel est faite. En revanche, nous
allons nous intresser particulirement laspect informatique ou plus exactement
laspect gnie logiciel, cest--dire la ou les mthodes permettant de dvelopper
correctement ces applications. La signication du terme correctement est pr-
cise dans le chapitre suivant, mais nous pouvons dj annoncer que ces applications
doivent tre dveloppes avec un grand souci de rigueur tant donn que leurs uti-
lisations peuvent avoir un impact nancier important, un effet nuisible sur lenvi-
ronnement, ou plus gravement, mettre en jeu des vies humaines. Aussi la mtho-
dologie de dveloppement des applications de contrle-commande doit assurer
une qualit de ralisation en termes de abilit, defcacit, de maintenabilit,
dvolutivit, etc.
Il est important de noter quil nest pas possible de parler des applications de contrle-
commande comme un ensemble homogne au sens de leur ralisation. En effet,
VI

entre les dveloppements de lapplication informatique grant un four micro-
onde et celle pilotant une navette spatiale, la distance est immense : criticit de
lapplication, taille du logiciel, volution de lapplication Le seul lien en commun
est que toutes ces applications mettent en relation un programme informatique
avec un procd externe.
Dautre part, le dveloppement des applications de petite taille ou de taille moyenne
a souvent t conduit par des professionnels du monde de lautomatique ou de
llectronique. Les rgulations de type lectromcanique ou lectronique analogique
ont rapidement fait place des systmes purement numriques ; seuls les capteurs
et les actionneurs, faisant le lien vers le monde rel, sont toujours analogiques. Les
concepteurs de ces applications ont des mthodes bases sur laspect fonctionnel :
schmas blocs, grafcets, etc. En effet, la spcication et la conception de telles
applications sont plus aises lorsquelles sont penses en termes de fonctions ou de
traitements des donnes. Aussi les langages ddis ce type dapplications sont
tout naturellement des langages fonctionnels excution squentielle comme le
langage C, les assembleurs ou le langage ot de donnes LabVIEW.
Dans le domaine informatique, en parallle, ces applications ont conduit la mise
en place de mthodes de spcication ou de conception rpondant ces besoins,
cest--dire des mthodes bases sur la description de laspect fonctionnel, soit
lanalyse structure (SA), lanalyse structure temps rel (SA-RT), la conception
structure (SD), etc. Ces mthodes correspondent parfaitement ces besoins
condition que les applications ne deviennent pas de grande taille et nimpliquent
des nombreuses donnes complexes (donnes structures). Dautre part, il est impor-
tant de noter que ces mthodes ont une drivation trs directe vers une implmen-
tation multitche qui permet de rpondre la fois la logique du paralllisme du
monde rel en termes de conception et aux contraintes temporelles exiges.
En ce qui concerne les applications informatiques dites classiques (applications
bureautiques, bases de donnes), des mthodes bases sur les donnes ont t
labores an de rpondre un besoin fort de modlisation des donnes et de leurs
volutions. Ces mthodes, dites orientes objets, permettent une spcication et une
conception des applications en pensant avant tout en termes de donnes et dactions
sur ces donnes, mais en ngligeant dans les premires tapes laspect fonctionnel,
cest--dire lenchanement, le squencement ou lexcution des diffrentes parties
de lapplication. Ces mthodes orientes objets, unies sous le nom UML (

Unied
Modeling Language

), sont devenues incontournables pour le dveloppement des
applications informatiques.
Actuellement, ces mthodes orientes objets sont de plus en plus utilises dans le
domaine des applications de contrle-commande, domaine non concern initia-
lement par ce type de modlisation objet. Il est concevable et acceptable de suivre une
telle dmarche pour des applications informatiques, mme de contrle-commande,
de grande taille possdant souvent des donnes consquentes de type complexe.
Mais il ne semble pas naturel de vouloir imposer ce type doutils pour des applica-
tions de contrle de procds de petite ou moyenne taille ayant des donnes en
nombre rduit et de type simple. Dautant plus que, comme nous lavons not pr-
cdemment, les utilisateurs de ces outils ont une culture de conception de type fonc-
tionnel qui a une trs grande efcacit. Ensuite les mthodes orientes objets vont
VII


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

conduire des difcults pour passer ltape de limplmentation multitche ;
cette rupture de la chane de dveloppement diminue fortement lintrt de ces
mthodes de spcication et de conception.
Cet ouvrage a donc pris le parti de prsenter une mthodologie complte de dvelop-
pement dapplications de contrle-commande bas sur un aspect fonctionnel condui-
sant naturellement vers une implmentation multitche. Sans rejeter les mthodes
orientes objets largement rpandues aujourdhui, il semble contraire aux rgles
du gnie logiciel dutiliser une mthodologie non cohrente avec le domaine des
applications cibles, non cohrente la fois en termes de logique danalyse de bout
en bout et dobjectifs applicatifs.

Notre mthodologie, base sur une approche
fonctionnelle au niveau de lanalyse et une approche multitche au niveau de
la conception, sadapte parfaitement aux applications de contrle-commande
de petite taille ou de taille moyenne mettant en jeu des donnes simples.

Le premier chapitre prsente lenvironnement de dveloppement des systmes de
contrle-commande en dcrivant la spcicit de ces applications en termes darchi-
tectures logicielles et matrielles. Le second chapitre traite de la mthode de spci-
cation fonctionnelle choisie SA-RT (

Structured Analysis for Real Time systems

). La
mthode de conception DARTS (

Design Approach for Real-Time Systems

) qui est la
suite logique de SA-RT est dcrite dans le chapitre 3. Les environnements matriels
et logiciels (excutifs temps rel) trs particuliers de ces applications sont prsents
dans les chapitres 4 et 5 an de mieux comprendre la partie implmentation de ces
systmes de contrle-commande. Le chapitre 6 est ddi limplmentation des
applications de contrle-commande en dclinant trois environnements : noyau temps
rel et langage de type langage C, langage Ada et enn un environnement spcique
bas sur LabVIEW. Les prcdents chapitres sont illustrs par des exemples simples
mais ralistes ; en revanche, le chapitre 7 propose le dveloppement complet dune
application relle industrielle. Enn, le chapitre 8 ouvre le dveloppement de ces
applications vers des aspects avancs concernant lordonnancement.

Tlchargement sur Internet

Vous trouverez en tlchargement sur le site www.dunod.com les codes sources de
tous les programmes prsents dans cette ouvrage.
1


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

1 DVELOPPEMENT DES SYSTMES
DE CONTRLE-COMMANDE

1.1 Introduction

1.1.1 Dfinitions

Nous pouvons dnir un systme de contrle-commande comme un systme infor-
matique en relation avec lenvironnement physique rel externe par lintermdiaire
de capteurs et/ou dactionneurs, contrairement aux systmes dinformatiques scien-
tiques (gestion de base de donnes, CAO, bureautique) qui ont des entres
constitues de donnes fournies par des chiers ou ventuellement un oprateur.
Les grandeurs physiques acquises permettent au systme de contrle-commande
de piloter un procd physique quelconque. Donnons ainsi une dnition gnrale
dun systme de contrle-commande (gure 1.1) :
Un systme de contrle-commande reoit des informations sur ltat du
procd externe, traite ces donnes et, en fonction du rsultat, value une
dcision qui agit sur cet environnement extrieur an dassurer un

tat
stable

.
Cette notion dtat stable peut tre diffrente selon les applications ou procds.
Il dpend du cahier des charges de lapplication (maintien dune temprature de
consigne, rgime moteur, qualit de service). Deux caractristiques font quun
systme de contrle-commande ne possde pas les proprits classiques des systmes
dinformatiques scientiques :
indpendance du rsultat produit par rapport la vitesse dexcution. Le rsultat
dun calcul effectu partir de donnes dentre similaires est indpendant de la
vitesse du calculateur. En revanche, ltat stable dun procd dpend de la dyna-
mique du procd par rapport la vitesse dexcution du systme de contrle-
commande ;
comportement reproductible. Un calcul effectu partir de donnes dentre
identiques donne toujours le mme rsultat. En revanche, dans le cas de donnes
dentre (grandeurs physiques) obtenues par des capteurs, le systme de contrle-
commande travaille sur un domaine de donnes relles approximes qui sont
trs rarement identiques.
2

1.1 Introduction

1 Dveloppement des
systmes de contrle-commande

Linteraction du systme de contrle-commande avec le procd extrieur piloter
se dcompose en deux parties (gure 1.2) :
observations par lintermdiaire de capteurs (

sensors

) qui permettent dobtenir
des informations sous la forme des

interruptions

(information tout ou rien) ou
des

mesures

(information continue) en provenance du procd physique ;
actions ralises par lintermdiaire dactionneurs (

actuators

) qui permettent dagir
sur le procd physique sous la forme de

commandes

(modication dtat phy-
sique du systme) ou simplement sous la forme dun

afchage

(diodes, lampes,
afcheurs, crans, etc.).
Cette dnition des systmes de contrle-commande ayant t faite, nous pouvons
replacer ces systmes par rapport aux autres systmes informatiques en faisant trois
catgories :
les

systmes transformationnels

qui utilisent des donnes fournies linitiali-
sation par lutilisateur. Ces donnes, leurs traitements et lobtention du rsultat
nont aucune contrainte de temps ;
les

systmes interactifs

dans le sens o les donnes sont produites par inter-
action avec lenvironnement sous diffrentes formes (clavier, chier, rseaux,
souris, etc.). Mais le temps nintervient pas en tant que tel si ce nest avec un
aspect confort de travail ou qualit de service ;
les

systmes de contrle-commande

ou ractifs qui sont aussi en relation avec
lenvironnement physique rel pour les donnes en entre ; mais, dans ce cas,
Systme
de contrle-commande
Procd
externe
Systme informatique
Entres
Sorties
Figure 1.1 Reprsentation schmatique dun systme de contrle-commande.
Procd externe
piloter
capteur
Systme informatique
de contrle-commande
capteur
capteur
actionneur
Mesures
Interruptions
Commandes
Affichages
Figure 1.2 Reprsentation schmatique de linteraction
du procd physique pilot et du systme de contrle-commande.
1.1 Introduction

3


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

1 Dveloppement des
systmes de contrle-commande

laspect temps a une place importante sous la forme dun temps de raction,
dune chance respecter, etc.
Nous terminons cette section par des dnitions qualiant des systmes de contrle-
commande ayant des spcications particulires. La premire de ces catgories
concerne les systmes temps rel (

real-time system

) dont la dnition est : un sys-
tme de contrle-commande dans lequel lexactitude des applications ne dpend
pas seulement du rsultat mais aussi du temps auquel ce rsultat est produit. Si les

contraintes temporelles

de lapplication ne sont pas respectes, on parle de

dfail-
lance

du systme . Ces contraintes temporelles peuvent tre de deux types :


contraintes temporelles relatives

ou lches (temps rel mou :

soft real-time

) :
les fautes temporelles sont tolrables (ex. : jeux vido, applications multimdia,
tlphonie mobile) ;


contraintes temporelles strictes

ou dures (temps rel dur :

hard real-time

) : les
fautes temporelles ne sont pas tolrables (ex. : avionique, vhicules spatiaux,
automobile, transport ferroviaire).
Dans le cas des systmes temps rel contraintes temporelles relatives, nous pouvons
parler de systmes de contrle-commande classiques.
Nous pouvons aussi trouver les qualicatifs suivants :
systme de contrle-commande

embarqu

(

embedded real-time system

) : pas
dintervention humaine directe (pas de modication du programme ou des para-
mtres du programme) ;
systme de contrle-commande

ddi

(

dedicated real-time system

) : les architec-
tures matrielles ou logicielles sont spciques lapplication (noyau, processeur) ;
Donnes produites par lenvironnement
Pas de contraintes de temps
Synchronisations
ou communications
Aspect relation
entre entits
du programme
Aspect temporel
Aspect
comportemental
Donnes produites par lenvironnement
Contraintes de temps
Proprits temporelles
Aspect
transformationnel
Systmes
interactifs
(ex. : bureautique, CAO)
Systmes ractifs
ou de contrle-commande
Systmes
transformationnels
(ex. : code de calcul)
Donnes linitialisation
Pas de contraintes de temps
Algorithmique
Figure 1.3 Comparaison des systmes de contrle-commande
par rapport aux autres applications informatiques.
4

1.1 Introduction

1 Dveloppement des
systmes de contrle-commande

systme de contrle-commande

rparti ou distribu

(

distributed real-time
system

) : larchitecture matrielle est constitue de plusieurs processeurs relis
entre eux par un bus ou un rseau.
Il est vident que ces diffrentes spcications dun systme de contrle-commande
peuvent se combiner comme par exemple un systme de contrle-commande
ddi, distribu et contraintes temporelles strictes (application pour un vhicule
automobile).

1.1.2 Principales caractristiques des systmes de contrle-commande

Considrons un exemple reprsentatif dune application de contrle-commande
reprsent sur la gure 1.4. Cet exemple de contrle-commande dun moteur com-
bustion est repris de faon dtaille dans le chapitre suivant. Le contrle-commande
de cette application est fait par lintermdiaire dun ensemble de capteurs et daction-
neurs (pdale dacclrateur, temprature air, pression air, temprature eau, rotation
vilebrequin, capteurs de pollution, injection essence, allumage, admission air, etc.)
et dune connexion au rseau interne lautomobile. Lanalyse de cet exemple dappli-
cation permet de mettre en exergue les principales caractristiques des systmes de
contrle-commande :


grande diversit des dispositifs dentres/sorties

: les donnes acqurir qui
sont fournies par les capteurs et les donnes fournir aux actionneurs sont de types
trs varis (continu, discret, tout ou rien ou analogique). Il est aussi ncessaire
de piloter un bus de terrain pour les communications ;
Capteur
pdale acclrateur
Capteur temprature eau
Commande
allumage
Capteur
temprature air
Commande
injecteur essence
Capteur vitesse de rotation
du vilebrequin

Capteur
pollution en aval
Capteur
pollution en amont
Communications
avec les autres
calculateurs
Commande de r-injection
gaz chappement
Capteur
pression collecteur
a
i
r
Calculateur
Commande admission air
(papillon)
Bus CAN
Figure 1.4 Exemple dune application de contrle-commande
dun moteur combustion.
1.1 Introduction

5


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

1 Dveloppement des
systmes de contrle-commande


prise en compte des comportements concurrents

: lensemble de ces donns
physiques qui arrivent de lextrieur et le rseau qui permet de recevoir des mes-
sages ne sont pas synchroniss au niveau de leurs volutions, par consquent, le
systme informatique doit tre capable daccepter ces variations simultanes des
paramtres ;


respect des contraintes temporelles

: la caractristique prcdente impose de
la part du systme informatique davoir une ractivit sufsante pour prendre
en compte tous ces comportements concurrents et en rponse ceux-ci, de faire
une commande en respectant un dlai compatible avec la dynamique du systme ;


sret de fonctionnement

: les systmes de type contrle-commande mettent
souvent en jeu des applications qui demandent un niveau important de scurit
pour raisons de cot ou de vies humaines. Pour rpondre cette demande, il est
ncessaire de mettre en uvre toutes les rponses de la sret de fonctionnement
(dveloppements srs, tests, mthodes formelles, prvisibilit, dterminisme,
continuit de service, tolrance aux fautes, redondance, etc.).

1.1.3 Caractristique temporelle des systmes de contrle-commande

Le respect des contraintes temporelles dune application de contrle-commande
dpend essentiellement de la dynamique du procd. Cette caractristique temporelle
peut tre trs diffrente suivant lapplication (gure 1.5) :
Milliseconde : systmes radar, systmes vocaux, systmes de mesures
Seconde : systmes de visualisation, robotique
Minute : chane de fabrication
Heure : contrle de ractions chimiques
Ce paramtre temporel correspond lordre de grandeur de la capacit de rponse
ou de traitement du systme de contrle-commande.
Application
Temps
Systmes
radar
Systmes
mesures
scientifiques
100 ns
1 s
1 ms
1 seconde
1 minute
1 heure
10 ms
Contrle
en chimie
Contrle
fabrication
Contrle
stockage
Systmes
vocaux
Robotique
Figure 1.5 Comparaison de la dynamique
de diffrentes applications de contrle-commande.
6

1.1 Introduction

1 Dveloppement des
systmes de contrle-commande

Mais, comme nous le verrons dans le chapitre 8, il est ncessaire de prciser et de
formaliser cette caractristique temporelle qui peut prendre de nombreuses formu-
lations. Ainsi, nous pouvons dnir de manire non exhaustive :


Dure



dexcution

dune activit : lactivit dune application, qui peut tre
lenchanement de plusieurs activits lmentaires (acquisition, traitement, com-
mande, afchage), possde une dure dexcution qui peut tre mesure de
diverses manires. Cette dure nest pas constante chaque occurrence de cette
activit puisque les programmes et les enchanements de programmes ne sont pas
toujours identiques (branchement conditionnel, itration, synchronisation).
Cadence de rptition ou

priodicit

dune activit : lacquisition dune donne
ou la commande dun actionneur peuvent ncessiter une rgularit lie par exemple
la frquence dchantillonnage.
Date au plus tt ou

date de rveil

: dans certains cas, un traitement doit tre
dclench une date prcise relative par rapport au dbut de lexcution de lappli-
cation ou absolue (plus rarement). Cette date de rveil nimplique pas obligatoi-
rement lexcution ; il peut y avoir un dlai de latence d lindisponibilit du
processeur.


Date dactivation

: cet instant correspond lexcution effective de lactivit.
Date au plus tard ou

chance

: le traitement ou la commande dun actionneur
doivent tre termins un instant x par rapport au dbut de lexcution de
lapplication. Dans le cas dapplications contraintes temporelles strictes, cette
chance doit tre respecte de faon imprative, sinon il y a faute temporelle et
lapplication est dclare non valide.


Temps de rponse

: cette caractristique peut sappliquer une activit de rgu-
lation ou un ensemble dactivits de rgulation ; elle est directement lie la
dynamique du systme. Ce paramtre correspond la diffrence entre la date de
rveil et la date de n de lactivit.


Gigue temporelle

: ce paramtre caractrise la rptabilit dune activit au fur
et mesure de ses occurrences. En effet, entre deux excutions successives dune
mme activit, ses caractristiques temporelles peuvent changer : date dactivation,
dure dexcution, temps de rponse, etc.

1.1.4 Quelques exemples dapplications

Nous pouvons citer quelques exemples dapplications de contrle-commande :


Robot de production

: un robot, ralisant une activit spcique (peinture,
assemblage, tri) sur une chane de production, doit effectuer son travail en des
temps xs par la cadence de fabrication. Sil agit trop tt ou trop tard, lobjet
manufacturier trait sera dtruit ou endommag conduisant des consquences
nancires ou humaines graves (oubli dun ou plusieurs rivets sur un avion).


Robot dexploration

: ce robot doit se dplacer dans un environnement en
principe non connu (zone radioactive aprs un accident, plante, pave sous la
mer). Il est important quil puisse ragir aux obstacles xes ou mobiles an de
ne pas conduire sa perte.
1.2 Architecture des applications
de contrle-commande

7


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

1 Dveloppement des
systmes de contrle-commande


Tlphone mobile

: le systme de contrle-commande doit remplir plusieurs
fonctions dont certaines ont des contraintes temporelles fortes pour avoir une
bonne qualit de service (QoS :

Quality of Service

). Ainsi, la premire fonction
est de transmettre et de recevoir les signaux de la parole (577 s de parole mises
toutes les 4,6 ms et 577 s de parole reues toutes les 4,6 ms des instants dif-
frents). En parallle, il est ncessaire de localiser en permanence le relais le plus
proche et donc de synchroniser les envois par rapport cette distance (plus tt si
la distance augmente et plus tard si la distance diminue). Des messages de comptes
rendus de la communication sont aussi mis avec une priodicit de plusieurs
secondes. Les contraintes temporelles imposes au systme doivent tre imper-
ceptibles lutilisateur.


Systme de vidoconfrence

: ce systme doit permettre lmission et la rcep-
tion dimages numrises une cadence de 20 25 images par seconde pour avoir
une bonne qualit de service. An de minimiser le dbit du rseau, une com-
pression des images est effectue. Dautre part la parole doit aussi tre transmise.
Bien que correspondant un dbit dinformation moindre, la rgularit de la
transmission, qualie par une gigue temporelle, est ncessaire pour une repro-
duction correcte. De plus ce signal doit tre synchronis avec le ux dimages.
Lensemble de ces traitements (numrisations images et parole, transmission,
rception, synchronisation) sont raliss en cascade, mais avec une cohrence
prcise.


Pilotage dun procd de fabrication

(fonderie, laminoir, four verrier) : par
exemple la fabrication dune bobine daluminium (laminage froid) exige un
contrle en temps rel de la qualit (paisseur et planit). Cette vrication en
production de la planit ncessite une analyse frquentielle (FFT) qui induit
un cot important de traitement. Le systme doit donc raliser lacquisition dun
grand nombre de mesures (246 Ko/s) et traiter ces donnes (moyenne, FFT)
la priode de 4 ms. Ensuite, il afche un compte rendu sur lcran de loprateur
toutes les 200 ms et enn imprime ces rsultats dtaills toutes les 2 s. Un fonc-
tionnement non correct de ce systme de contrle de la qualit peut avoir des
consquences nancires importantes : production non conforme la spcication
demande.

1.2 Architecture des applications
de contrle-commande

1.2.1 Architecture logicielle des applications de contrle-commande

m

Architecture multitche

Le comportement concurrent des vnements et grandeurs physiques externes amne
dcrire lenvironnement comme un systme fortement parallle. Cela conduit
naturellement adapter les mthodes de conception et de ralisation du systme de
contrle-commande dun tel environnement ce paralllisme. Aussi, larchitecture
la mieux adapte pour rpondre ce comportement parallle du procd externe
8

1.2 Architecture des applications
de contrle-commande

1 Dveloppement des
systmes de contrle-commande

est une

architecture multitche

. Ainsi, au paralllisme de lenvironnement, la
rponse est le paralllisme de conception. Nous pouvons dnir la tche ou activit
ou processus comme une entit dexcution et de structuration de lapplication .
Cette architecture logicielle multitche facilite la conception et la mise en uvre et
surtout augmente lvolutivit de lapplication ralise.
Dune manire trs gnrique, la gure 1.6 donne larchitecture logicielle dune
application de contrle-commande multitche. Nous pouvons ainsi dcouper cet
ensemble de tches ou activits selon les groupes suivants :
Tches dentres/sorties : ces tches permettent daccder aux donnes externes
par lintermdiaire de cartes dentres/sorties et ensuite de capteurs et daction-
neurs directement lis au procd gr. Ces tches peuvent tre actives de faon
rgulire ou par interruption.
Tches de traitement : ces tches constituent le cur de lapplication. Elles int-
grent des traitements de signaux (analyse spectrale, corrlation, traitement dimages,
etc.) ou des lois de commande (rgulation tout ou rien, rgulation du premier
ordre, rgulation PID, etc.). Dans le cadre de cet ouvrage, nous considrerons
ces tches comme des botes noires, cest--dire que le traitement effectu par ces
tches relve des domaines comme le traitement du signal, le traitement dimages
ou lautomatique, disciplines qui dbordent largement le contexte de ce livre.
Tches de gestion de linterface utilisateur : ces tches permettent de prsenter
ltat du procd ou de sa gestion lutilisateur. En rponse, loprateur peut modi-
er les consignes donnes ou changer les commandes. Ces tches peuvent tre trs
complexes et coteuses en temps de calcul si linterface gre est de taille impor-
tante (tableau de bord) ou de type graphique (reprsentation 3D).
Liaison
rseau
Rseaux
Sauvegarde Rcupration
Units de stockage
Liaison
rseau
Liaison
rseau
Oprateurs
Procd
physique
externe
Interface
entres/sorties
Traitements
des donnes
Interface
homme/machine
Liaison
stockage
Mesures
Commandes
Consignes
Visualisation
Programmation multitche
Figure 1.6 Architecture logicielle dune application de contrle-commande multitche.
1.2 Architecture des applications
de contrle-commande

9


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

1 Dveloppement des
systmes de contrle-commande

Tches de communications : ces tches sont destines grer les messages envoys
ou reus travers un ou plusieurs rseaux ou bus de terrain. Si ce type de tches
existe, lapplication est dite distribue ou rpartie.
Tches de sauvegarde : ces tches permettent de stocker ltat du systme des
instants xs. Cette sauvegarde peut tre utilise

a posteriori

pour analyser le
fonctionnement de lapplication ou lors dune reprise dexcution une tape
prcdente.
Aprs lanalyse et la conception de lapplication, nous obtenons un ensemble de
tches ou activits qui cooprent an de raliser le contrle-commande du procd
gr. Ces tches appartiennent aux diffrents groupes lists prcdemment : tches
dentres/sorties, tches de traitement, tches de gestion de linterface utilisateur,
tches de communications et tches de sauvegarde. Ce dcoupage purement fonc-
tionnel peut tre modi dans certains cas en utilisant une conception tourne
vers les entits ou objets contrler. Cet aspect de la conception et de la mise
en uvre est prsent dans les chapitres suivants.
Les tches obtenues, qui constituent lapplication de contrle-commande, ne sont
pas des entits dexcution indpendantes. En effet, certaines tches sont connectes
vers lextrieur pour les entres/sorties. De plus elles peuvent tre lies par des rela-
tions de type (gure 1.7) :
synchronisation : cela se traduit par une relation de prcdence dexcution entre
les tches ;
communications : la notion de prcdence, traduite par la synchronisation,
sajoute le transfert de donnes entre les tches ;
partage de ressources : les tches utilisent des lments mis en commun au niveau
du systme comme des zones mmoire, des cartes dentres/sorties, cartes rseau,
etc. Certaines de ces ressources, comme par exemple les zones mmoire, ne sont
pas ou ne doivent pas tre accessibles, pour avoir un fonctionnement correct,
par plus dune tche la fois, elles sont dites

ressources critiques

.
Ces diffrents concepts sont tudis de faon dtaille dans le chapitre 4.
R
Synchronisation
Ressource
critique
Sortie
Entre
Tche 6
Tche 4
Tche 7
Tche 8
Tche 1
Tche 3
Tche 2
Tche 5
Figure 1.7 Reprsentation schmatique
de larchitecture multitche dune application de contrle-commande.
10

1.2 Architecture des applications
de contrle-commande

1 Dveloppement des
systmes de contrle-commande

m

Modles dexcution et ordonnancement

Cette architecture logicielle peut tre vue comme un ensemble de tches synchro-
nises, communicantes et partageant des ressources critiques. Le rle essentiel du
systme informatique est donc de grer lenchanement et la concurrence des tches
en optimisant loccupation du processeur, cette fonction est appele l

ordonnance-
ment

. Ce principe dordonnancement est un point crucial des systmes de contrle-
commande ; en effet lordonnancement va dterminer les caractristiques tempo-
relles et tre le garant du respect des contraintes de temps imposes lexcution de
lapplication.
Nous pouvons distinguer deux modles dexcution de ces systmes de contrle-
commande : lexcution dite

synchrone

et lexcution

asynchrone

. Nous allons pr-
senter ces deux modles dexcution laide dun modle dapplication trs simple.
Cette application, constitue dun ensemble de tches pour grer le procd, intgre
en particulier les deux tches suivantes :
Tche de lecture des donnes entres par loprateur laide dun clavier, appele
Lecture_consigne . Lintervention humaine fait que cette tche peut tre longue.
Tche dalarme qui se dclenche sur un vnement dalerte correspondant au
dpassement dun paramtre critique, appele Alarme . Celle-ci doit sexcuter
au plus vite pour viter lendommagement du procd.
Pour mettre en avant les diffrences entre les deux modles dexcution, nous allons
tudier la situation dans laquelle la tche Lecture_consigne sexcute et la tche
Alarme demande son excution alors que la tche Lecture_consigne nest
pas termine.
Dans le modle d

excution synchrone

, la perception de loccurrence de tout v-
nement par le systme est diffre du temps dexcution de la tche en cours. Dans
lexemple propos, nous pouvons constater que la prise en compte dun signal dalerte
nest effective que lors de la n de la tche Lecture_consigne (gure 1.8). Dun
point de vue du procd, la raction est perue comme diffre, alors que du point
de vue du systme informatique, elle est perue comme immdiate. Loccurrence
temps
Clavier Alerte
Raction perue comme diffre par le procd
Raction perue comme immdiate
par le systme
Lecture_consigne
Alarme
Occurrences
mises
par le procd
Occurrences
observes
par le systme
Application
Figure 1.8 Modle dexcution synchrone dune application de contrle-commande.
1.2 Architecture des applications
de contrle-commande

11


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

1 Dveloppement des
systmes de contrle-commande

des vnements externes a donc t articiellement synchronise avec le systme
informatique, do le nom dexcution synchrone.
Ce retard peut affecter la prise en compte de nimporte quel vnement, quelle
quen soit la gravit pour lapplication. Il faut donc vrier que larchitecture op-
rationnelle choisie permettra de prendre en compte les contraintes temporelles :
hypothse de la fentre de visibilit des vnements ou dinstantanit des actions.
La capacit du systme apprhender un vnement externe est caractrise par la
dure de la tche la plus longue puisque les tches sont non interruptibles ou

non
premptibles

.
Dans le cas du modle synchrone dexcution, nous avons un systme dordonnan-
cement compltement prvisible et, en consquence, il est possible en faisant une
analyse exhaustive de lexcution de produire une squence dexcution qui est joue
de faon rptitive. Cette tude de la squence est appele analyse de lordonnan-
cement hors ligne. Lordonnancement peut se rduire un squencement. Nous
avons alors un environnement informatique trs simple de lapplication dveloppe
puisquil se rduit une liste de tches excuter. Lenvironnement informatique
pour piloter cette liste de tches se rduit un systme trs simple : un squenceur.
Dans le modle dexcution asynchrone, loccurrence de tout vnement est imm-
diatement prise en compte par le systme pour tenir compte de lurgence ou de
limportance. Dans lexemple propos, nous pouvons constater que la prise en
compte dun signal dalerte est immdiate sans attendre la n de la tche Lecture_
consigne (gure 1.9). La prise en compte de lvnement alerte est identique
pour le procd et le systme informatique. Loccurrence des vnements externes
nest pas synchronise avec le systme informatique, do le nom dexcution asyn-
chrone.
Dans ce contexte, nous avons des tches qui sont interruptibles ou premptibles.
En consquence, lordonnancement nest pas totalement prvisible et lanalyse de
lexcution des tches doit se faire en ligne par simulation ou par test. Cela ncessite
lutilisation dun gestionnaire centralis des vnements et de la dcision dexcu-
tion : excutif ou noyau temps rel.
temps
Clavier Alerte
Les vnements sont immdiatement perus
par le systme
Suspension d'un traitement en cours
Alarme
Occurrences
mises
par le procd
Occurrences
observes
par le systme
Application
Lecture_consigne Lecture_consigne
Figure 1.9 Modle dexcution asynchrone dune application de contrle-commande.
12
1.2 Architecture des applications
de contrle-commande
1 Dveloppement des
systmes de contrle-commande
Pour terminer cette section, nous allons rappeler trois dnitions importantes que
nous avons utilises et xer le contexte de cet ouvrage. Nous avons ainsi dni :
Tche non premptible ou premptible :
Une tche non premptible ne peut tre interrompue qu des endroits spci-
ques et la demande de la tche elle-mme : n_de_tche, attente_signal
Dans ce cas, la programmation et plus simple et aucun mcanisme de partage
de ressources critiques nest prvoir. En revanche, des temps de rponse longs
peuvent se produire.
Une tche premptible peut tre interrompue nimporte quel instant et le
processeur affect une autre tche. Dans ce cas, les temps de rponse un v-
nement externe peuvent tre trs courts ; mais nous avons alors une program-
mation plus complexe avec un besoin de mcanisme de partage de ressources
critiques.
Analyse de lordonnancement hors ligne ou en ligne :
Une analyse de lordonnancement hors ligne correspond la construction
dune squence dexcution complte sur la base des paramtres temporels des
tches en utilisant une modlisation (rseaux de Petri) ou une simulation
(animation ou numration du modle). Lordonnanceur ncessaire est minimal
puisque la squence dexcution est prdnie, il se rduit un squenceur.
En revanche, lapplication ainsi ge est peu exible.
Une analyse de lordonnancement en ligne correspond un choix dynamique
de la prochaine tche excuter en fonction des paramtres de la tche en utili-
sant une modlisation de lalgorithme dordonnancement et une simulation de
lexcution. Lordonnancement a un cot temporel non ngligeable ; en revanche,
lapplication peut ragir des vnements ou des situations non prvus.
Excution synchrone ou asynchrone :
Une excution est dite synchrone si les tches sont non premptibles et sex-
cutent les unes aprs les autres dans un ordre qui peut tre dni par une analyse
hors ligne de lordonnancement.
Une excution est dite asynchrone si les tches sont premptibles et sexcutent
selon lordonnancement. Une analyse de la squence doit se faire obligatoire-
ment en ligne.
Dans la suite de cet ouvrage, nous nous intressons plus particulirement aux sys-
tmes asynchrones composs de tches premptibles avec un ordonnancement en
ligne. Ainsi, larchitecture logicielle de lapplication est compose de plusieurs tches
ralises par le concepteur et dun environnement spcique, le noyau temps rel,
que nous allons dcrire. Le point essentiel de cet environnement est lordonnanceur
qui permet daffecter tout instant le processeur une tche an de respecter
lensemble des contraintes temporelles attaches la gestion du procd.
m Excutif ou noyau temps rel
Cet environnement particulier dexcution, excutif ou noyau temps rel, peut tre
assimil un systme dexploitation de petite taille ddi aux applications de
contrle-commande. La caractristique fondamentale est son dterminisme dex-
1.2 Architecture des applications
de contrle-commande
13


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
1 Dveloppement des
systmes de contrle-commande
cution avec des paramtres temporels xs (temps de prise en compte dune inter-
ruption, changement de contexte entre deux tches, etc.). Nous pouvons comparer
les diffrences au niveau des objectifs xs pour le noyau dexcution dun systme
informatique classique et dun systme informatique de contrle-commande.
Un systme classique na pas t conu pour permettre de respecter des contraintes
temporelles, mais il suit les rgles suivantes :
politiques dordonnancement des activits bases sur le partage quitable du pro-
cesseur : affectation identique du temps processeur tous les processus en cours ;
gestion non optimise des interruptions ;
mcanismes de gestion mmoire (cache) et de micro-excution engendrant des
uctuations temporelles (difcult pour dterminer prcisment les dures des
tches) ;
gestion des temporisateurs ou de lhorloge pas assez ne (plusieurs milli-
secondes) ;
concurrence de lapplication temps rel avec le systme dexploitation toujours
actif ;
gestion globale base sur loptimisation dutilisation des ressources et du temps
de rponse moyen des diffrents processus en cours.
Un systme informatique de contrle-commande sattache aux caractristiques
suivantes :
efcacit de lalgorithme dordonnancement avec une complexit limite ;
respect des contraintes de temps (chances). Ces contraintes temporelles se
traduisent plus en termes de choix dune activit excuter un instant donn
plutt que de rapidit dexcution de toutes les activits ;
prdictibilit (rptitivit des excutions dans des contextes identiques) ;
capacit supporter les surcharges ;
possibilit de certication pour les applications de certains domaines comme
lavionique, lautomobile
En gnral, contrairement un noyau temps rel, les contraintes temporelles ne sont pas garanties
dans un systme dexploitation classique (Unix, Windows NT).
Une application temps rel tant par dnition un systme multitche, le rle essentiel
du noyau temps rel est donc de grer lenchanement et la concurrence des tches en
optimisant loccupation de lunit centrale du systme informatique. Les principales
fonctions dun noyau temps rel peuvent tre scindes en trois groupes :
1. gestion des entres/sorties (gestion des interruptions, gestion des interfaces
dentres/sorties, gestion des rseaux de communications) ;
2. ordonnancement des tches (orchestration du fonctionnement normal, surveil-
lance, changements de mode, traitement des surcharges) ;
3. relations entre les tches (synchronisation, communication, accs une ressource
critique en exclusion mutuelle, gestion du temps).
14
1.2 Architecture des applications
de contrle-commande
1 Dveloppement des
systmes de contrle-commande
Il important de noter que les tches sont les units actives du systme ; le noyau temps
rel nest actif que lors de son appel. Une tche active peut appeler le noyau temps
rel par une requte. Les diffrentes requtes sont servies par des modules du noyau
temps rel appeles primitives. Ensuite le noyau temps rel ractive une tche de
lapplication selon lalgorithme dordonnancement utilis (gure 1.10). Ainsi, le
noyau temps rel centralise toutes les demandes dactivation des tches et gre des
tables lui permettant de comparer les priorits (ou les urgences) et ltat de ces diverses
tches, ainsi que ltat doccupation des ressources. La dcision dactivation dune
tche tant prise, le noyau temps rel lance les modules de programmes correspon-
dant cette tche et lui alloue les ressources disponibles. La tche active occupe le
processeur jusqu la n de son excution sous le respect des conditions suivantes :
Elle ne ralise pas doprations dentres-sorties.
Les ressources utilises sont disponibles.
Aucun vnement extrieur ne revendique le droulement dune tche plus prio-
ritaire.
Nous pouvons donc dcrire schmatiquement le contexte complet dexcution dune
application temps rel avec les deux parties : tches et noyau temps rel (gure 1.11).
En conclusion de cette section sur lordonnancement qui est tudi de faon plus
complte dans le chapitre 8, lordonnancement dans le cas des systmes temps rel
contraintes temporelles strictes a pour objectif principal de rpondre aux deux cas
suivants :
Fautes temporelles : cela correspond un non respect dune contrainte temporelle
associe une tche comme le dpassement de la date limite dexcution ou
chance. Cela induit la notion durgence dune tche.
Surcharge : lors de loccurrence dune ou plusieurs fautes temporelles, lordon-
nanceur peut ragir en supprimant une ou plusieurs tches de lapplication, ce qui
amne la notion dimportance, cest--dire le choix dune tche excuter par
rapport aux spcications fonctionnelles de lapplication.
m Implmentation des applications de contrle-commande
Comme nous le verrons au cours de cet ouvrage, les langages de dveloppement des
applications de contrle-commande sont trs divers. Mais, par rapport lenviron-
nement dexcution que nous venons de dcrire (noyau temps rel avec les trois
Tche i Tche j
Noyau
temps rel
Excution
programme
Excution
programme
Excution
primitives et ordonnanceur
Requte Activation
Figure 1.10 Interaction entre les tches et le noyau temps rel.
1.2 Architecture des applications
de contrle-commande
15


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
1 Dveloppement des
systmes de contrle-commande
fonctions dcrites : 1. gestion des interruptions, 2. ordonnancement, 3. relations
entre les tches), il est possible de dcliner les langages en trois groupes (gure 1.12) :
langages standards (langage C) : le noyau temps rel qui supporte ce type de
langage doit tre complet puisque le langage nintgre aucune spcicit de ce
domaine de contrle-commande multitche ;
langages multitches (langage Ada) : ces langages permettent de dcrire
lapplication en termes de tches ; ainsi le noyau peut tre plus rduit et ne
comporter que les deux premires fonctions ;
Application
Tche i Tche
j
Tche k Tche x Tche y
Mesures Commandes
Noyau ou Excutif
Interruptions
Horloge
temps rel
Gestion
des interruptions
Gestion
du temps
Gestion
des vnements

Activation Requte
Primitives

Ordonnanceur
Figure 1.11 Architecture de lapplication : tches et noyau temps rel.
Langages
standards
(Langage C)
Noyau temps rel
Langages
multitches
(Langage Ada)
Noyau temps rel
Langages
ractifs
Noyau temps rel
1 1
2
1
2
3
Autre
langage
Figure 1.12 Langages utiliss pour dvelopper les applications de contrle-commande
avec un noyau temps rel (1. gestion des interruptions, 2. ordonnancement, 3. relations
entre les tches).
16
1.2 Architecture des applications
de contrle-commande
1 Dveloppement des
systmes de contrle-commande
langages ractifs (langages Lustre, Esterel, Signal) : ces langages donnent non
seulement la possibilit de dcrire les fonctionnalits du programme, mais aussi
lenchanement des diffrentes parties. Le noyau est donc limit une couche
proche du matriel li notamment la gestion des interruptions. En revanche,
tant donn la possibilit trs limite dexpression de laspect fonctionnel, ils
sont souvent associs un langage standard pour palier ce manque.
1.2.2 Architecture matrielle des applications de contrle-commande
Comme nous lavons vu en introduction, laspect matriel a une trs grande impor-
tance dans les applications de contrle-commande. Cette implication est lie dune
part la connexion directe avec le monde physique rel laide dune grande diver-
sit de systmes dentres/sorties et dautre part au matriel informatique parfois
spcique et dvelopp pour une application donne. Ce dernier point concerne les
applications dites ddies et embarques ; le matriel a t conu et cr spcique-
ment pour une application, comme un tlphone portable, une camra vido, etc.
titre dexemple, les diffrents calculateurs embarqus dans un vhicule automobile
sont ddis et spcialement dvelopps pour cette application (gure 1.13). Dans
ces matriels, nous trouvons un processeur de type microcontrleur redond pour
avoir un haut niveau de scurit, des composants spciques (ASIC : Application
Specic Integrated Circuit), une alimentation lectrique Tout ce matriel est ensuite
encapsul dans un botier rsistant lenvironnement de fonctionnement usuel
(chaleur, vibrations, ambiance corrosive, etc.).
Beaucoup dapplications de contrle-commande sexcutent sur des plateformes PC
classiques. En revanche, il est toujours ncessaire de disposer de cartes dentres/
sorties qui doivent souvent tre synchronises (acquisition et commande effectues
des instants prcis). Ainsi, dans ce domaine dapplications informatiques, des matriels
spciques existent et permettent ce fonctionnement temporel : cest par exemple
le cas de la plateforme PXI concatnation dune plateforme classique PC et de cartes
dentres/sorties synchronises.
Enn, dans de nombreux cas, les applications de contrle-commande sont de type
distribu, cest--dire quelles sont composes de plusieurs sites ou processeurs, sur
lesquels sexcutent un environnement multitche, relis par un ou des rseaux
informatiques (Ethernet, CAN, FIP).
Lensemble de ces aspects matriels est trait en dtail dans le chapitre 4.
17
1.2 Architecture des applications
de contrle-commande
1 Dveloppement des
systmes de contrle-commande


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
B
o

t
i
e
r
L
e
s

c
a
l
c
u
l
a
t
e
u
r
s

s
i
t
u

s

d
a
n
s

d
e
s

p
a
r
t
i
e
s
e
x
p
o
s

e
s

s
o
n
t

p
l
a
c

s

d
a
n
s

d
e
s

b
o

t
i
e
r
s
m

t
a
l
l
i
q
u
e
s

t
a
n
c
h
e
s

e
t

b
l
i
n
d

s
.
C
e
u
x

d
e

l

h
a
b
i
t
a
c
l
e

s
o
n
t

e
n

p
l
a
s
t
i
q
u
e
.



M

m
o
i
r
e

S
t
o
c
k
e

l
e
s

t

c
h
e
s

u
t
i
l
i
s
a
n
t
l
e

m
i
c
r
o
c
o
n
t
r

l
e
u
r
.
H
o
r
l
o
g
e
D

t
e
r
m
i
n
e

l
a

v
i
t
e
s
s
e



d

e
x

c
u
t
i
o
n

d
e
s

o
p

r
a
t
i
o
n
s
.



E
l
l
e

s
e

m
e
s
u
r
e

e
n

m

g
a
h
e
r
t
z
.



(
5
0

M
H
z
)
.
M
i
c
r
o
c
o
n
t
r

l
e
u
r

d
e

s

c
u
r
i
t


C
e
r
t
a
i
n
s

c
a
l
c
u
l
a
t
e
u
r
s

(
i
n
j
e
c
t
i
o
n
,

A
B
S
,



e
t
c
.
)

d
i
s
p
o
s
e
n
t

d

u
n

m
i
c
r
o
c
o
n
t
r

l
e
u
r
d
e

s
e
c
o
u
r
s

(
r
e
d
o
n
d
a
n
c
e
)
.
A
l
i
m
e
n
t
a
t
i
o
n
A
l
i
m
e
n
t
e

l
e

c
a
l
c
u
l
a
t
e
u
r

e
n

l
e
c
t
r
i
c
i
t

e
n

d
i
m
i
n
u
a
n
t

l
a

t
e
n
s
i
o
n

e
n

p
r
o
v
e
n
a
n
c
e
d
e

l
a

b
a
t
t
e
r
i
e
.
M
i
c
r
o
c
o
n
t
r

l
e
u
r



E
x

c
u
t
e

l
e
s

d
i
f
f

r
e
n
t
e
s

t

c
h
e
s
s
t
o
c
k

e
s

e
n

m

m
o
i
r
e
.
A
S
I
C



U
n

A
S
I
C

(
A
p
p
l
i
c
a
t
i
o
n

S
p
e
c
i
f
i
c


I
n
t
e
g
r
a
t
e
d

C
i
r
c
u
i
t
)

e
s
t

u
n
e

p
u
c
e



d

d
i


u
n
e

a
p
p
l
i
c
a
t
i
o
n

q
u

e
l
l
e



e
x

c
u
t
e

d
i
r
e
c
t
e
m
e
n
t
.


A
m
p
l
i
f
i
c
a
t
i
o
n
d
e
s

i
n
f
o
r
m
a
t
i
o
n
s

d

e
n
t
r

e
.
F
i
g
u
r
e

1
.
1
3


M
a
t

r
i
e
l

d

d
i


u
t
i
l
i
s


p
o
u
r

i
m
p
l

m
e
n
t
e
r

u
n
e

a
p
p
l
i
c
a
t
i
o
n

d
e

c
o
n
t
r

l
e
-
c
o
m
m
a
n
d
e

d
u

d
o
m
a
i
n
e

d
e

l

a
u
t
o
m
o
b
i
l
e
.
18
1.3 Dveloppement des applications
de contrle-commande
1 Dveloppement des
systmes de contrle-commande
1.3 Dveloppement des applications
de contrle-commande
Le dveloppement des applications informatiques demande de plus en plus de
rigueur dans le suivi des diffrentes tapes de spcication, de conception et de
codage. Ce cycle de dveloppement permet ainsi dobtenir des applications de trs
bonne qualit dun point de vue architecture logicielle, daugmenter la maintena-
bilit et lvolutivit. En particulier, cette rigueur de dveloppement accrot de faon
signicative la correction des programmes en suivant une dmarche de tests unitaires
et dintgration. Si ces tests, qui sont un point primordial dans lobtention dune
qualit logicielle, sont aiss raliser dans le cas dapplications informatique classi-
ques, en revanche, dans le cas des applications de contrle-commande, les tests
oprationnels en excution relle sont souvent difciles produire cause de diverses
particularits :
excution unique : satellite dexploration ;
cot trs lev : fuse ;
risques humains : avion
Ainsi, malgr des phases de tests souvent coteuses et consquentes, de nombreuses
applications de contrle-commande nont pas rempli les objectifs xs. Nous pou-
vons citer quelques exemples connus :
Mission Vnus : le satellite dexploration est pass plus de 500 000 km de la
plante Venus au lieu de 5 000 km, prvu initialement. Cet chec a t attribu
un simple remplacement dune virgule par un point dans un programme Fortran
( DO 20 I 1. 5 au lieu de DO 20 I 1, 5 ).
Avion militaire amricain F16 : lors des premiers essais en vol, lavion tait dclar
sur le dos au passage de lquateur la trs grande surprise du pilote. Cela
tait simplement d une erreur de signe dans le programme.
Navette spatiale amricaine : lors du premier lancement de la navette, le dpart
a t annul et la mission recule de trois jours (cot trs important). Ce faux
dpart tait d une erreur de synchronisation entre les deux ordinateurs de
conduite de vol. Le fonctionnement en redondance de ces ordinateurs conduisait
un test de cohrence de certaines grandeurs physiques. tant donn une dsyn-
chronisation des deux ordinateurs, ce test a t ngatif simplement cause de la
mesure du mme paramtre effectue des instants diffrents.
Mission sur Mars : lors de la mission dexploration de la plante Mars par le robot
Pathnder, une remise zro priodique des donnes acquises a fortement per-
turb la mission. Ce problme tait li un blocage dune tche trs prioritaire
par une tche moins prioritaire mais dtenant une ressource critique (rseau de
communication vers la terre). En particulier les donnes mtorologiques mesures
taient trs spciques dun point de vue dure et taille du fait des caractris-
tiques martiennes.
Fuse Ariane V : lors du premier lancement, la fuse a d tre dtruite cause
dune trajectoire non correcte. Cette erreur tait lie la rutilisation de certains
= =
1.3 Dveloppement des applications
de contrle-commande
19


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
1 Dveloppement des
systmes de contrle-commande
modules logiciels utiliss dans le contexte dAriane IV. Les spcications, attaches
lacclration, auraient d tre diffrentes en termes de limites an dviter ce
dysfonctionnement.
Cette liste dexemples de problmes au niveau de lexcution dapplications de
contrle-commande montre la ncessit de mettre en place un cycle de dveloppe-
ment encore plus rigoureux pour ces applications de gestion de procd physique
dont les tests en excution relle ne sont pas toujours facilement accessibles.
1.3.1 Cycle de dveloppement des applications informatiques
Le cycle de dveloppement des applications informatiques suit les trois tapes clas-
siques que sont la spcication, la conception et la programmation. Lanalyse des
besoins permet dcrire le cahier des charges de lapplication. partir de ce cahier
des charges, le droulement des trois tapes conduit successivement aux descriptions
suivantes de lapplication (gure 1.14) :
spcication globale : description de ce que lon a faire ou le quoi ,
cest--dire une mise en forme plus ou moins formelle du cahier des charges ;
conceptions prliminaire et dtaille : description du comment , cest--dire
une modlisation de larchitecture logicielle de lapplication (modules, tches,
objets). Il peut tre ncessaire demployer diffrents niveaux de rafnement
selon la taille de lapplication ;
programmation : traduction dans un langage excutable de larchitecture logi-
cielle de lapplication dcrite prcdemment. Suivant la mthode de conception
employe et le niveau de rafnement, la traduction dans un langage de program-
mation peut tre plus ou moins automatise.
Ces diffrentes tapes peuvent tre plus ou moins formelles selon les mthodes
employes. Aussi, chaque tape, il est primordial de vrier la cohrence de la
description ou de la traduction ralise partir de ltape prcdente. Ce travail
concerne la validation. Celle-ci constitue une preuve si la mthode est formelle ou
un test si elle ne lest pas.
Cahier
des
charges
Analyse Analyse
des des
besoins besoins
Spcification
globale
Conceptions
prliminaire
et dtaille
Logiciel
Spcification Conception Conception Programmation Programmation
Validation externe Validation externe Validations internes Validations internes
Figure 1.14 Cycle de dveloppement dune application informatique classique.
20
1.3 Dveloppement des applications
de contrle-commande
1 Dveloppement des
systmes de contrle-commande
Une prsentation gnralement plus adapte est celle du cycle en V (gure 1.15).
Dans cette reprsentation, chaque niveau danalyse ou de conception correspond
un niveau de validation ; ainsi, nous avons :
conception dtaille et tests unitaires ;
conception prliminaire et tests dintgration ;
spcication et validation globale.
Il est vident que cette formalisation mthodologique du dveloppement des appli-
cations informatiques a pour principaux objectifs : viter les fautes logicielles, accrotre
la maintenabilit, faciliter lvolutivit chaque tape ou ensemble dtapes cor-
respond une mthode qui est gnralement supporte par un outil informatique
pour aider sa mise en uvre plus ou moins automatise (CASE Tools : Computer
Aided Software Engineering Tools).
Lexprience du dveloppement de logiciels prouve que llaboration complte de
lapplication ne se fait pas en une seule fois : volution du cahier des charges, modi-
cations du dcoupage modulaire, correction de programmes, etc. Cela a induit de
nouveaux schmas de dveloppement, appels itratifs ou en spirale, qui consistent
prendre en compte les passages successifs dans les diffrentes tapes du dveloppe-
ment. Lide forte retenir est que, lors de toutes modications apportes lappli-
cation quelque niveau que ce soit, il est ncessaire de dcliner nouveau toutes
les tapes du dveloppement.
1.3.2 Dveloppement coupl matriel et logiciel
Avant de dcrire les diffrentes mthodes utilises dans le cadre des applications de
contrle-commande et leurs spcicits, il est important de remarquer la particula-
rit du dveloppement de ces applications quant au caractre du couplage fort entre
les aspects matriel et logiciel.
En effet, le cahier des charges dune application de contrle-commande dun pro-
cd va intgrer dans la grande majorit des cas la fois la description du matriel et
VALIDATION
INTGRATION
TESTS UNITAIRES
CODAGE
CONCEPTION
DTAILLE
CONCEPTION
PRLIMINAIRE
SPCIFICATION
Figure 1.15 Cycle de dveloppement en V
dune application informatique classique.
1.3 Dveloppement des applications
de contrle-commande
21


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
1 Dveloppement des
systmes de contrle-commande
les fonctions remplir par ce procd (gure 1.16). Ainsi, la spcication de lappli-
cation commence par une spcication systme (matriel et logiciel). Une partie de
la conception prliminaire peut aussi intgrer les deux aspects puisque la ralisation
dun module fonctionnelle peut tre ralise soit de manire matrielle (circuit
intgr spcique FPLA : Field Programmable Logic Array ou FPGA : Field Pro-
grammable Gate Array) soit dune manire logicielle. Ensuite, le dveloppement des
deux parties peut continuer de faon diffrencie et classique avec la conception
dtaille, limplmentation (ralisation ou codage) et les tests. nouveau, les deux
aspects de lapplication doivent se rejoindre pour passer la phase dintgration et
de validation de lensemble. La phase dintgration est certainement ltape la plus
importante et la plus difcile. En effet, une partie logicielle va tre insre dans un
environnement matriel trs spcique.
Bien que ce ne soit pas le propos de cet ouvrage, laspect matriel est abord de faon
succincte dans le chapitre 4. Au niveau de la conception, il existe aussi de nom-
breuses mthodes permettant davoir des dveloppements de qualit. Ainsi, le lan-
gage VHDL (VHSIC Hardware Description Language VHSIC : Very High Speed
Integrated Circuit) de description des fonctions raliser dun point de vue matriel
conduit une conception formelle des circuits, cest--dire autorisant une preuve
de la conception tablie.
Prenons un exemple trs rpandu comme les consoles de jeux portables. Ces matriels
possdent une interface utilisateur trs spcique comportant un ensemble de
CONCEPTI ON
DTAILLE
CONCEPTI ON
DTAILLE
CODAGE RALISATION
TEST TEST
I NTGRATI ON
VALIDATION
Architecture
oprationnelle
Logiciel Matriel +
Architecture
logicielle
Architecture
matrielle
CONCEPTI ON
PRLIMINAIRE
SPCI FI CATI ON
SYSTME
Figure 1.16 Cycle de dveloppement matriel et logiciel
dune application de contrle-commande de procd.
22
1.3 Dveloppement des applications
de contrle-commande
1 Dveloppement des
systmes de contrle-commande
boutons, un haut-parleur et un cran couleur. De plus, ces consoles intgrent gnra-
lement une liaison vers lextrieur de type infrarouge ou laire pour une connexion
avec une autre console de la mme gamme. ces entres/sorties trs ddies, sajoutent
des contraintes de ralisation lies la caractristique embarque de lapplication :
alimentation sur batterie, autonomie importante, encombrement rduit, ergonomie,
design du botier, ralisation en trs grande quantit, cot le plus bas possible
Toutes ces contraintes vont avoir un impact important sur le dveloppement aussi
bien matriel que logiciel. Ainsi, le processeur est de type microcontrleur faible
consommation intgrant des entres/sorties multiples auquel sajoute un processeur
graphique pour grer lcran couleur. Le noyau temps rel implant doit possder les
caractristiques suivantes : petite taille (taille mmoire limite), rapidit dexcution
(ensembles de primitives simples), cot faible (ralisation en trs grande quantit)
Ces diffrentes spcications, qui lient la ralisation matrielle limplmentation
logicielle, doivent tre prises en compte au dbut de lanalyse de lapplication.
Aussi, nous pouvons rsumer lenvironnement de dveloppement dune application
de contrle-commande par le schma de la gure 1.17. Les spcications du systme
sont donc largies ; en plus des aspects fonctionnels et comportementaux classiques
pour ce type dapplication, nous devons ajouter les contraintes de dveloppement
voques prcdemment, soit :
contraintes matrielles : type de processeur, architecture (distribu, multiproces-
seur), taille mmoire, dimension physique, consommation, environnement
(temprature, pression, corrosion) ;
noyau temps rel : primitives, taille (micronoyau), certi
Environnement de dveloppement
Logiciel
applicatif
Noyau
temps rel
Environnement dexcution
Spcifications du systme
Aspect fonctionnel et aspect comportemental
Autres contraintes de dveloppement :
matriel (processeur, architecture, taille, consommation)
noyau temps rel
langage de dveloppement
Logiciel
Matriel Logiciel
Figure 1.17 Environnement spcifique du dveloppement
dune application de contrle-commande de procd.
1.3 Dveloppement des applications
de contrle-commande
23


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
1 Dveloppement des
systmes de contrle-commande
langages de dveloppement : assembleurs, langage de haut niveau, langage
formel
Ensuite, il est important de noter que le dveloppement de la partie logicielle dune
application de contrle-commande va tre ralis sur une plate-forme dite hte
qui na aucun rapport avec lenvironnement dexcution ou environnement cible
en termes de processeur, mmoire, systme dexploitation, etc. Lorsque le logiciel
applicatif est ralis et test autant que faire se peut sur cette plate-forme hte ,
le programme est compil dans le code du processeur cible par un compilateur
crois ; puis il est tlcharg avec le noyau temps rel choisi vers larchitecture mat-
rielle cible . De nouveau, des tests doivent tre raliss dans cet environnement
dexcution. En effet, le comportement du programme dans cette architecture
cible de lapplication peut tre diffrent et amener des modications cons-
quentes du programme. Ce processus conduit modier le cycle en V de dve-
loppement des applications informatiques classiques par un cycle en W o la
deuxime partie du cycle correspond la reprise de la premire partie du cycle mais
dans lenvironnement cible (gure 1.18). Nous trouvons en particulier dans ce
cycle en W un codage crois et lintgration avec le noyau.
Ce constat de la dualit de dveloppement des applications de contrle-commande
de procd amne plusieurs remarques concernant les environnements permettant
dlaborer ce type dapplication :
le noyau temps rel choisi doit tre adapt larchitecture cible de lapplica-
tion en termes de codage, de taille et de fonctionnalits (primitives, gestion des
entres, gestion du temps) ;
lenvironnement de dveloppement sur la plate-forme hte doit possder un
mulateur du noyau temps rel an de pouvoir faire les premiers tests du logiciel
multitche ralis ;
Dveloppement
en environnement hte

SIMULATION VALIDATION
INTGRATION
avec noyau
TESTS
CONCEPTION
ADAPTE
INTGRATION
SPCIFICATION
CONCEPTION
CODAGE CODAGE - Crois
Dveloppement
en environnement cible

TESTS
Figure 1.18 Cycle de dveloppement en W
dune application de contrle-commande de procd.
24
1.3 Dveloppement des applications
de contrle-commande
1 Dveloppement des
systmes de contrle-commande
lenvironnement de dveloppement sur la plate-forme hte doit pouvoir
faire une compilation croise dans le code du processeur de larchitecture cible ;
lenvironnement de dveloppement sur la plate-forme hte doit permettre
un debug de lapplication lors de son excution sur larchitecture cible .
Cette observation de lexcution se fait distance par une liaison rseau quel-
conque (Ethernet). De nombreux environnements proposent une reprsenta-
tion graphique de lexcution des tches. La plus grande difcult rside dans le
fait de ne pas modier lexcution de lapplication par cette observation.
Toutes ces remarques impliquent dans le choix dun environnement de dveloppe-
ment de ces applications de prendre en compte lensemble des caractristiques
suivantes :
environnement cible (microprocesseurs, architecture) ;
environnement hte (type de systme dexploitation) ;
conformit une norme ou pseudo-norme (POSIX, projet Sceptre) ;
compacit (pour les applications embarques) ;
outils daide au dveloppement ( debug , analyse en ligne) ;
primitives temps rel (liste de tous les services fournis) ;
caractristiques de lordonnanceur (politiques dordonnancement) ;
caractristiques temporelles :
temps de masquage des interruptions (interrupt latency), temps pendant lequel
les interruptions sont masques et ne peuvent donc pas tre prises en compte,
temps de rponse (task response time) : temps entre loccurrence dune inter-
ruption et lexcution de la tche rveille.
Lensemble de ces notions concernant le noyau temps rel et son choix pour une
application donne est abord dans le chapitre 5.
1.3.3 Cycle de dveloppement des applications de contrle-commande
Il existe de nombreuses mthodes appliques au dveloppement logiciel des appli-
cations de contrle-commande de procd. Ces mthodes couvrent une ou plusieurs
tapes du cycle de dveloppement selon les niveaux de rafnement o elles sont
utilises. Sans vouloir faire un expos exhaustif de lexistant, il est intressant de
citer quelques mthodes en les diffrenciant par leur concept de base. Nous trouvons
ainsi des mthodes fonctionnelles et structures, dites aussi ots de donnes, qui
sont fondes sur le principe du dcoupage fonctionnel de lapplication. Ces lments
ou modules fonctionnels sont appliqus aux donnes qui se propagent de fonction
en fonction. Le deuxime ensemble de mthodes est celui des mthodes bases sur
des modles de machines tats. Ces mthodes reposent sur des bases formelles et
permettent en gnral des vrications plus avances que les prcdentes. La troi-
sime catgorie, plus rcente, de mthodes est dite oriente objets ou objets. Nous
pouvons rsumer ces dernires en disant que ces mthodes mettent en avant les
donnes et leur structuration. Nous pouvons donner les exemples suivants dans
chacun de ces ensembles :
1.3 Dveloppement des applications
de contrle-commande
25


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
1 Dveloppement des
systmes de contrle-commande
Mthodes fonctionnelles structures :
JSD : Jackson System Design (Michal Jackson, 1981)
SA_RT : Structured Analysis Real Time (Ward-Mellor, 1984 ; Pirbha-Hatley,
1986)
DARTS : Design Approach for Real-Time Systems (Gomaa, 1984)
SDL : Specication and Description Language (CCITT, 1988)
MSMC : Modlisation Simulation des Machines Cyberntiques (Brenier, 2001)
Mthodes bases sur les machines tats :
Rseaux de Petri (Petri, 1962)
GRAFCET : Graphe Fonctionnel de Commande tape Transition (IEC 1988)
Statecharts : (D. Harel, 1987)
Langages ractifs synchrones : Lustre (Caspi, 1991), Esterel (Berry, 1991),
Signal (le Guernic, 1991)
Mthodes objets ou orients objets :
UML : Unied Modeling Language (OMG, 1995)
HOOD : Hiearchical Object Oriented Design (CRI-Cisi Ingnierie-Matra, 1987)
La gure 1.19 reprend le cycle en V de dveloppement avec le positionnement
de quelques-unes de ces mthodes dans ce cycle.
Comme cela a t justi et expliqu dans lavant-propos, les mthodes SA-RT et
DARTS, qui permettent de dcrire compltement le cycle dans ses phases de sp-
cication et de conception, sont celles qui sont tudies de faon dtaille dans cet
ouvrage. En effet, dans le cas dapplications embarques de taille petite ou moyenne
qui sont implmentes dans une architecture multitche, il semble plus pertinent
dutiliser une analyse et une conception de type fonctionnel et structur.
DARTS
StateCharts
GRAFCET
HOOD
SA-RT
DARTS
MSMC
StateCharts
UM
HOOD
SA-RT
MSMC
StateCharts
UML
CODAGE
CONCEPTION
DTAILLE
TESTS UNITAIRES
VALIDATION
CONCEPTION
PRLIMINAIRE
SPCIFICATION
INTGRATION
Figure 1.19 Quelques mthodes de dveloppement
dune application de contrle-commande de procd.
26
1.3 Dveloppement des applications
de contrle-commande
1 Dveloppement des
systmes de contrle-commande
1.3.4 Quelques exemples industriels dapplications de contrle-commande
An dillustrer les diffrents environnements de dveloppements des applications de
contrle-commande, nous prsentons des exemples industriels issus de programmes
de taille importante des annes 1990-2000. Ces exemples sont caractriss par le
nom du programme, la ou les socits en charge du programme et les mthodes et
langages utiliss, soit :
Programme Spot 4 (Matra Marconi Space/CNES) : satellite destin une obser-
vation de la terre (mtorologie, environnement, agriculture)
Spcications et conceptions : HOOD
Langages : Ada, Assembleur
Programme Ariane 5 (Arospatiale/CNES) : lanceur
Spcications et conceptions : HOOD
Langages : Ada, noyau temps rel ARTK, Assembleur (Motorola 68020)
Programme ISO lnfrared Space Observatory (Arospatiale/ESA) : ensemble de
satellites destins une observation de lespace dans un domaine infrarouge
Spcications et conceptions : SART et HOOD
Langages : Ada (15 000 lignes), Assembleur (11 000 lignes)
Programme SENIT8 (Dassault lectronique & DCN-Ingnierie) : quipements
de gestion et de contrle-commande du porte-avions Charles de Gaulle
Spcications et conceptions : SART et Ada-Buhr (proche de la mthode
DARTS)
Langages : Ada (1 000 000 lignes), C (400 000 lignes)
Programme Rafale (Dassault lectronique) : avion militaire
Spcications et conceptions : SA-RT et OMT
Langages : Ada (800 000 lignes 1 500 000 lignes selon les versions).
Nous pouvons remarquer que les environnements de dveloppement intgrent une
analyse fonctionnelle et structure avec SA-RT et une conception oriente objet.
Cela est d essentiellement soit des obligations du cahier des charges (applications
spatiales) soit la taille de lapplication qui justie une mthode oriente objet.
27


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

2 SPCIFICATION
SELON LA MTHODE SA-RT

2.1 Introduction gnrale la mthode SA-RT

La mthode SA-RT est une mthode danalyse fonctionnelle et oprationnelle des
applications de contrle-commande. Cette mthode permet de raliser une des-
cription graphique et textuelle de lapplication en termes de besoins, cest--dire
de ce que lon a faire ou le quoi (

What

?). Cette mise en forme du cahier
des charges de lapplication est formelle dans le sens o la mthodologie (ensemble
des documents laborer) et lexpression (syntaxe graphique) sont dnies. En
revanche, elle ne permet pas deffectuer une vrication de proprits de lapplication
partir des seules descriptions SA-RT. Des tudes ont t menes pour associer la
mthode SA-RT des mthodes formelles an dapporter des possibilits de simulation
et de vrication. Une de ces mthodes est prsente la n du chapitre. Aucune
rgle ofcielle ou normalisation na t mise en place pour la mthode SA-RT et son
utilisation. Par consquent, il existe de nombreuses mises en uvre de la mthode
SA-RT avec des diffrences plus ou moins importantes et aussi des extensions sp-
ciques de la mthode. Ceci fera lobjet du dernier point trait dans ce chapitre.
Nous allons nous attacher dcrire la mthode SA-RT la plus gnrale et la plus
usite, et correspondant la mthodologie de dveloppement dune application de
contrle-commande qui est lobjectif de cet ouvrage.
Laccroissement trs important de la taille des logiciels dvelopps dans les annes 70
a conduit mettre en place des mthodes danalyse et de conception permettant
une meilleure ralisation et aussi une maintenance plus efcace dans lexploitation
des logiciels. Le mot essentiel de ces mthodes est structuration dans le sens dune
dcomposition en lments ou blocs fonctionnels pour un niveau danalyse donn
et dune dcomposition hirarchique cohrente entre les diffrents niveaux danalyse.
Ces mthodes danalyse ou de conception structures conduisent naturellement
la programmation structure. La deuxime particularit commune ces mthodes est
la description sous forme de ux ou ots de donnes, de contrle ou autres. Laspect
oprationnel de la description est alors visualis par la propagation de ces ux.
Ainsi, nous trouvons la mthode SA-DT (

Structured Analysis Design Technics

) de
spcication dun systme qui permet dexprimer un bloc reprsentant soit les
activits (fonctions) soit les donnes. Les ots entrants sont les donnes, un contrle
ou des mcanismes (mthodes) et les ots sortants correspondent aux sorties de
28

2.1 Introduction gnrale
la mthode SA-RT

2 Spcification
selon la mthode SA-RT

donnes. Cette mthode trs gnrale de description dun systme a t adapte
la spcication de logiciels avec la mthode trs connue SA (

Structured Analysis

)
(gure 2.1).
Lanalyse structure SA, dnie par E. Yourdon et T. Demarco, est une mthode
descendante par afnages successifs des traitements, appels process . Les diffrents
diagrammes sont donc ordonns hirarchiquement en faisant apparatre pour les
derniers niveaux des fonctions lmentaires, appeles primitives lmentaires ou
process primitifs. Les diffrents outils composant cette mthode sont :
diagrammes de transformations de donnes ou diagramme de ots de donnes
(DFD) ;
dictionnaire de donnes ;
spcications des process primitifs.
Les diagrammes de ots de donnes sont construits partir de quatre lments
graphiques : traitement (cercle), ot de donnes (che), unit de stockage (traits
parallles) et entit externe (rectangle) (tableau 2.1). partir de ces lments de base,
il est possible de dcrire laspect fonctionnel dune application par un diagramme ots
de donnes. Un exemple, prsent sur la gure 2.2, montre lanalyse dune applica-
tion trs simple de rgulation de temprature avec trois entits externes, deux process
et une unit de stockage.

Remarque

Il est intressant de noter que cette description graphique fonctionnelle dune application laide
de la mthode SA sera presque entirement reprise dans la mthode SA-RT, montrant bien ainsi sa
dpendance chronologique.

Pour exprimer compltement le comportement de lapplication, le diagramme ots
de donnes de SA manquait dun moyen permettant de spcier laspect oprationnel,
Spcification
dun systme
Spcification
statique
dun logiciel
Spcification
dynamique
dun logiciel
SADT
SA
SA-RT
ESML
Structured Analysis Design Technics
(D.T. Ross, 1976)
Structured Analysis
(E. Yourdon, T. Demarco, 1979)
Structured Analysis Real Time
(Ward/Mellor, 1985 ; Hatley/Pirbhai, 1986)
Extended Systems Modeling Language
(W. Bruyn, R. Jensen, D. Keskar,
P. Ward-Boeng, Hugues Aircraft, 1987)
Figure 2.1 Positionnement chronologique de la mthode SA-RT.
2.1 Introduction gnrale
la mthode SA-RT

29


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

2 Spcification
selon la mthode SA-RT

cest--dire la description de lenchanement des diffrents process. Cette lacune
fut comble par la cration de mthode SA-RT (

Structured Analysis-Real Time

).
Deux groupes laborrent la mthode SA-RT avec des diffrences notables en termes
de reprsentation : dune part, la mthode tablie par Ward et Mellor en 1985 qui
associe le fonctionnel et le contrle dans un mme diagramme et, dautre part, la
mthode propose par Hatley et Pirbhai en 1986 qui spare le fonctionnel et le
contrle. Mais ces deux vues de la mme mthode restent trs similaires en termes de
capacit dexpression de la spcication. Nous prsentons dans cet ouvrage la
mthode SA-RT tablie par Ward et Mellor en 1985.
Comme le montre la gure 2.1, la mthode SA-RT a continu voluer au sein
des entreprises en intgrant des besoins spciques un domaine dapplications.
Ainsi, nous trouvons une mthode SA-RT, appele ESML et utilise dans lavionique,
qui a t enrichie dun point de vue ot de contrle.

Tableau 2.1

Les diffrents lments graphiques de la mthode SA.

Fonction Signification Reprsentation graphique

Traitement ou process Unit de travail qui
ralise la transformation
des donnes dentre
en donnes de sortie
Cercle ou bulle
Action dcrite par :
verbe + nom
Flot de donnes Vecteur nomm reliant
deux process, sur lequel
circule un ensemble de
donnes de mme nature
Flche en trait plein
Donne nomme
Unit de stockage
ou rservoir
Entit ou zone de
rangement de donnes
Deux traits parallles
Entit nomme
Entit externe
ou terminateur
Provenance, source ou
destination des donnes
Rectangle
Entit nomme
Acqurir
Mesures
Mesures
Mesures
Capteur
Tension lue Temprature Tension_commande
Temprature_consigne
Commande_chauffage
Thermistance
Commander
chauffage
Acqurir
temprature
Rsistance
chauffante
Tmoin
de chauffage
Figure 2.2 Exemple simple du diagramme flot de donnes de la mthode SA
correspondant une application de rgulation de temprature.
30

2.2 Prsentation de la syntaxe graphique
de la mthode SA-RT

2 Spcification
selon la mthode SA-RT

La mthode SA-RT intgre les trois aspects fondamentaux dune mthode de spci-
cation en mettant laccent sur les deux premiers qui sont des points essentiels dans
les applications de contrle-commande :


aspect fonctionnel

(ou transformation de donnes) : reprsentation de la trans-
formation que le systme opre sur les donnes et spcication des processus qui
transforment les donnes ;


aspect vnementiel

(pilot par les vnements) : reprsentation des vnements
qui conditionnent lvolution dun systme et spcication de la logique de
contrle qui produit des actions et des vnements en fonction dvnements en
entre et fait changer le systme dtat ;


aspect informationnel

(donnes) : spcication des donnes sur les ots ou dans
les stockages. Ce dernier aspect qui est en gnral assez nglig dans ce type dappli-
cation peut faire lobjet dune description spcique choisie au sein dune entre-
prise.

2.2 Prsentation de la syntaxe graphique
de la mthode SA-RT

Nous allons prsenter la syntaxe graphique complte de SA-RT permettant dlaborer
les diffrents diagrammes de la mthode. Cette syntaxe graphique trs simple peut
tre scinde en deux parties : la syntaxe graphique affrente laspect fonctionnel
et la syntaxe ddie laspect contrle ou vnementiel.

2.2.1 Syntaxe graphique pour laspect fonctionnel

m

Syntaxe graphique du processus fonctionnel

En premier lieu, nous trouvons le

Processus fonctionnel

ou

Processus

qui repr-
sente une transformation de donnes. Un ou plusieurs ux de donnes en entres
sont traits pour donner un ou plusieurs ux de donnes en sortie (gure 2.3). Le
Processus est reprsent par un cercle avec une tiquette ou label explicite form de :
tiquette_Processus verbe (+ un ou plusieurs complments dobjets) + numro

m

Syntaxe graphique du flot de donnes

Puis, nous avons le

Flot de Donnes

qui supporte ou transporte les valeurs dune
certaine information diffrents instants. Ce concept reprsente le cheminement
des donnes. Le ot de donnes est reprsent par un arc orient avec une tiquette
ou label explicite form de (gure 2.4) :

tiquette_Flot_de_Donnes

nom (+ qualiant)
Les valeurs de ce ot de donnes sont supposes disponibles pendant tout le temps
o le processus producteur de ce ot est en mesure de les gnrer.
Le ot de donnes peut reprsenter aussi bien une donne de type continu, code par
un entier ou un rel (

Temprature

) quune donne discrte code par un boolen,
=
=
2.2 Prsentation de la syntaxe graphique
de la mthode SA-RT

31


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

2 Spcification
selon la mthode SA-RT

exemple

Position_interrupteur

. Un ot de donnes peut dcrire aussi bien une
donne lmentaire ou unique, exemple

Temprature

quune donne structure
intgrant plusieurs donnes lmentaires, exemple la donne

Pressions

qui est
compose de

Pression_huile

et

Pression_air

. Il est alors possible de faire appa-
ratre ltiquette du ot de donnes sous la forme suivante :

tiquette_Donne_Structure



tiquette_Donne_1

,

tiquette_Donne_2

Une spcication dtaille de cette donne, vhicule par le ot de donnes, est faite
dans le

Dictionnaire de donnes

(voir ci-aprs).
Mesurer
temprature
1
Commander
vanne
2
Calculer
moyenne
3
Lecture
de donnes
criture
de donnes
Transformation
de donnes
Exemples
tiquette
Processus
N
Figure 2.3 Processus fonctionnel de la mthode SA-RT.
Mesurer
temprature
1
Commander
lampe
2
Calculer
vitesse
3
Temprature
mesure
Allumage
lampe
Affichage
vitesse
Distance
parcourue
Top horloge
Signal
temprature
Signal
interrupteur
Figure 2.4 Exemples simples de flots de donnes de la mthode SA-RT.
=
32

2.2 Prsentation de la syntaxe graphique
de la mthode SA-RT

2 Spcification
selon la mthode SA-RT

Ces ots de donnes peuvent se dcomposer ou au contraire se regrouper lors des liai-
sons entre les processus fonctionnels dans le diagramme ot de donnes (gure 2.5).

m

Syntaxe graphique du stockage de donnes

Le troisime lment graphique est le

Stockage de Donnes

qui modlise le besoin
de mmorisation dune donne de telle faon que sa valeur puisse tre relue plu-
sieurs fois. Comme le ot de donnes auquel il est troitement associ, il est nomm
par une tiquette ou label explicite form de :

tiquette_Stockage_de_Donnes

nom (+ qualiant)
Le stockage de donnes est reprsent par deux traits horizontaux encadrant lti-
quette dnie ci-avant (gure 2.6). Les arcs ots de donnes arrivant ou partant
de lunit de stockage ne sont pas tiquets sils transportent les donnes mmorises
compltes. Si une partie de la donne est crite ou lue, larc transportant de faon
partielle la donne doit tre tiquet avec le nom de cette donne.
Un exemple de diagramme ot de donnes intgrant ces trois lments graphiques
de la mthode SA-RT (processus fonctionnel, ot de donnes et unit de stockage)
est prsent sur la gure 2.7.
D

c
o
m
p
o
s
i
t
i
o
n
e n n o D
R
e
g
r
o
u
p
e
m
e
n
t
e n n o D

y o v n e t s e
s t o l f x u e d s e l r u s
e n n o D
1 _ e n n o D e d t i a r t x e t s e e n n o D
n
n
o
D

e
1
_
e n n o D
1 _ e n n o D t e 2 _ e n n o D t n o s
e d s t i a r t x e e n n o D
n
n
o
D

e
1
_
n
n
o
D

e
2
_
e n n o D
n o i t a r C e d e v i t a n r e t l a e n n o D
e n n o D
t o l f e L e n n o D i h c i r n e t s e s
e d 1 _ e n n o D
n
n
o
D

e
1
_
e n n o D
t o l f e L e n n o D t i u r t s n o c t s e c e v a
s t o l f s e l 1 _ e n n o D t e 2 _ e n n o D
n
n
o
D

e
1
_
n
n
o
D

e
2
_
Figure 2.5 Dcomposition et regroupement des flots de donnes de la mthode SA-RT.
=
Pression
Temprature
Paramtres_moteur Paramtres_moteur
Figure 2.6 Unit de stockage de la mthode SA-RT.
2.2 Prsentation de la syntaxe graphique
de la mthode SA-RT

33


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

2 Spcification
selon la mthode SA-RT

Remarque

Pour des besoins de clart graphique, un stockage de donnes peut tre visualis plusieurs fois sur
un diagramme ot de donnes en notant cette duplication par une * .

Il est important de noter que lutilisation de llment stockage de donnes peut
correspondre deux cas :
mmorisation ou reprsentation des constantes du systme ;
mmorisation de valeurs de donnes partages entre deux ou plusieurs processus
dsynchroniss (consommation et production des donnes des instants ou des
rythmes diffrents).

m

Syntaxe graphique de la Terminaison

Enn, le dernier lment graphique, utilis dans cet aspect fonctionnel, est la

Termi-
naison

, ou encore appele

bord de modle

, qui



reprsente une entit extrieure
changeant des donnes avec le systme modlis. Une terminaison peut donc tre
une entit logicielle (programme, base de donnes) ou matrielle (capteurs,
actionneurs, console oprateur). Reprsente par un rectangle, elle est nomme
par une tiquette ou label explicite form de (gure 2.8) :
tiquette_Terminaison nom (+ qualiant)
Temprature_consigne*
Chauffage
Rguler
temprature
2
Mesurer
temprature
1
Signal_temprature
Temprature_mesure
Affichage
Temprature_consigne*
Afficher
temprature
3
Figure 2.7 Exemple dun diagramme flot de donnes de la mthode SA-RT.
=
34

2.2 Prsentation de la syntaxe graphique
de la mthode SA-RT

2 Spcification
selon la mthode SA-RT

2.2.2 Syntaxe graphique pour laspect contrle

Dans les diagrammes ot de donnes, le dclenchement de lexcution des processus
de transformation de donnes peut tre li au rythme dapparition des donnes
entrantes (diagramme pilot par les donnes :

data-driven

). Mais, dans le cas de la
spcication des applications temps rel, il est prfrable davoir un contrle de ces
transformations de donnes pilot par des conditions externes comme loccurrence
dvnements (

event-driven

) (gure 2.9). Cette vue dynamique du modle impose
la mise en place de la partie contrle : processus de contrle et ot de contrle

m

Syntaxe graphique du processus de contrle

Le

Processus de contrle

reprsente la logique du pilotage des processus fonctionnels.
Il gnre lensemble des vnements qui vont activer ou dsactiver les processus fonc-
tionnels. En retour, les processus fonctionnels fournissent au processus de contrle
tous les vnements ncessaires aux prises de dcision. Le processus de contrle ne
peut en aucun cas grer des donnes.
Le Processus de contrle est reprsent par un cercle en pointill avec une tiquette
ou label explicite form de (gure 2.10) :
tiquette_Processus_Contrle verbe (+ un ou plusieurs complments) + numro
Production
de donnes
Signal
Capteur
Consommation
de donnes
Commande
Actionneur
Figure 2.8 Terminaison ou bord de modle de la mthode SA-RT.
Donne_1
Donne_3
Donne_2
Pilotage de lexcution
Pilotage de lexcution
Processus
1
vnement
(a)
Donne_1
Donne_3
Donne_2
Processus
1
(b)
Figure 2.9 Pilotage de lexcution dun processus fonctionnel :
(a) pilot par les donnes et (b) pilot par les vnements.
=
2.2 Prsentation de la syntaxe graphique
de la mthode SA-RT

35


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

2 Spcification
selon la mthode SA-RT

m

Syntaxe graphique du Flot de contrle

Le

Flot de Contrle

transporte les vnements ou informations qui conditionnent
directement ou indirectement lexcution des processus de transformations de
donnes. Le ot de contrle est reprsent par un arc orient pointill avec une ti-
quette ou label explicite form de (gure 2.11) :

tiquette_Flot_de_Contrle

nom (+ qualiant)
Les vnements, fournis par le

processus de contrle

, sont gnralement lis
lactivation ou la dsactivation des processus fonctionnels. Aussi, ces vnements
spciques ont t formaliss et prdnis :


E

pour

Enable

(activation) ;


D

pour

Disable

(dsactivation) ;


T

pour

Trigger

(dclenchement).
Les deux premiers vnements sont utiliss ensemble

E/D

pour piloter un processus
fonctionnel de type boucle sans n ou priodique, cest--dire que le processus
de contrle doit lancer lexcution de ce processus avec lvnement

E

et ensuite
peut larrter avec lvnement

D

. Lvnement

T

est utilis pour activer un
processus fonctionnel de type dbut-n ou sporadique, cest--dire que le pro-
cessus de contrle doit lancer lexcution de ce processus avec lvnement

T

et
ensuite le processus sarrte la n de son excution sans intervention du contrle.
Contrler
temprature
1
Piloter
vanne
2
Grer
moteur
3
Figure 2.10 Processus de contrle de la mthode SA-RT.
=
Contrler
chauffage
2
Vrifier
temprature
1
Trop_chaud
Temprature
Temprature_consigne
Dclenchement
Figure 2.11 Exemple simple dune partie contrle
lie une partie fonctionnelle de la mthode SA-RT.
36
2.3 Les diagrammes flot de donnes 2 Spcification
selon la mthode SA-RT
2.3 Les diagrammes flot de donnes
2.3.1 Prsentation dun exemple simple dapplication de contrle-commande
An dillustrer la mthodologie au fur et mesure de la prsentation, nous allons
prsenter un exemple simple qui va tre dclin en dtail au cours de cet ouvrage.
Considrons un systme de freinage automobile qui est constitu dune part dun
ensemble classique compos dune pdale de frein (demande de freinage) et dun frein
(actionneur de freinage) et dautre part dun systme ABS (Anti-blocking Brake System).
Un capteur de glissement de roues est associ ce systme ABS. Pour simplier, le
fonctionnement de lABS est bas sur un arrt du freinage ds quun glissement est
dtect sur les roues, et cela mme si la demande du conducteur est toujours effective.
Le conducteur a la possibilit dactiver ou non ce systme ABS laide dun bouton
spcique (bouton deux positions stables : interrupteur). Un voyant permet de lui
indiquer lactivation du systme ABS. En revanche, il nest pas possible de dsactiver
le systme ABS en cours de freinage, cest--dire pendant lappui sur la pdale de frein.
La spcication fonctionnelle de cette application laide de la mthode SA-RT va
seffectuer en plusieurs tapes :
diagramme de contexte ;
diagramme prliminaire ;
diagrammes de dcomposition.
2.3.2 Diagramme de contexte dune application
Le diagramme de contexte est une premire tape extrmement importante puis-
quelle va dnir le contexte et lenvironnement extrieur du systme pilot. Nous
pouvons la considrer comme le contrat de ralisation entre le concepteur et son
client. Les bords de modle ou terminaisons vont apparatre uniquement dans ce
diagramme. Les descriptions prcises de ces terminaisons, ainsi que des donnes
ou ventuellement des vnements entrants ou sortants de ceux-ci, sont la charge
du donneur dordre. Un exemple gnrique dun diagramme de contexte est donn
sur la gure 2.12.
Nous trouvons un et un seul processus fonctionnel, numrot 0 , qui traduit
lapplication raliser effectivement par le concepteur. Autour de ce processus fonc-
tionnel, un ensemble de bords de modles fournit ou consomme les donnes ou
vnements de cette application. Ces bords de modles peuvent donc tre les lments
physiques suivants :
capteurs (thermocouples, dynamomtres, etc.) ;
actionneurs (rsistances chauffantes, vannes, etc.) ;
oprateur(s) li(s) des capteurs (interrupteurs, potentiomtres, etc.) ;
systmes dafchage (lampes, diodes, cran dordinateur, etc.) ;
systme de stockage ou de sauvegarde externe (disque, bande magntique, etc.) ;
systme dimpression (imprimante, drouleur papier, etc.) ;

2.3 Les diagrammes flot de donnes
37


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
2 Spcification
selon la mthode SA-RT
Lensemble des donnes ou vnements changs avec lextrieur du processus fonc-
tionnel , qui reprsente lapplication, constitue les spcications dentres et de
sorties de lapplication. La description de ces entres/sorties sera faite dans le diction-
naire de donnes ( 2.5).
Dans lexemple simple dun systme de freinage automobile ( 2.3.1), le diagramme
de contexte est constitu du processus fonctionnel Contrler systme freinage 0
et de cinq bords de modles (gure 2.13) :
terminaison Pdale de frein fournissant la donne Demande_freinage ;
terminaison Bouton dactivation de lABS fournissant la donne Activation_
ABS ;
terminaison Capteur de glissement fournissant la donne Glissement_roue ;
terminaison Systme de freinage consommant la donne Commande_
freinage ;
terminaison Voyant ABS consommant la donne Afchage_ABS .
Ce diagramme de contexte dnit parfaitement linterface entre le concepteur et le
client, cest--dire les donnes fournir ou gnrer. La suite du travail danalyse
Donne_E_1
Donne_E_2 Donne_S_2
Donne_E_3
Donne_S_3
Donne_S_1
Consigne_1
Affichage_1
Capteur 1
Capteur 2
Capteur 3
Actionneur 1
Actionneur 2
Actionneur 3
Oprateur 1
cran
Piloter
application
0
Figure 2.12 Diagramme de contexte gnrique de la mthode de spcification SA-RT.
Demande_freinage
Commande_freinage
Affichage_ABS
Glissement_roue
Activation_ABS
Mise_en_marche
Contrler
systme
freinage
0
Systme de freinage
Voyant ABS
Capteur glissement
Bouton activation ABS
Pdale de frein
Conducteur
Figure 2.13 Diagramme de contexte de lapplication systme de freinage automobile .
38
2.3 Les diagrammes flot de donnes 2 Spcification
selon la mthode SA-RT
va donc se situer dans lexpression du processus fonctionnel raliser : Contrler
systme freinage 0 .
2.3.3 Diagramme prliminaire et diagrammes de dcomposition
Le premier niveau danalyse est reprsent par le diagramme prliminaire. Ce
diagramme prliminaire est la premire dcomposition du processus raliser pr-
sent dans le diagramme de contexte. ce niveau, le diagramme reprsente la liste
graphique des processus fonctionnels ncessaires lapplication sans se soucier
de lenchanement (squence dexcution).
Le nombre de processus fonctionnels, composant ce diagramme prliminaire, doit
tre limit pour avoir une meilleure lisibilit : 5 9 maximum.
Dans ce cadre, nous pouvons aussi trouver un motif gnrique permettant de dcrire
une fonction simple ou complexe de contrle-commande en la divisant selon les
trois lments de base, soit :
un processus dacquisition ;
un processus de traitement (loi de rgulation) ;
un processus de commande.
Selon lapplication, tout ou partie de ce diagramme ot de donnes gnrique peut
tre prsent pour chaque chane de contrle-commande implique dans le niveau
danalyse en cours dlaboration. Ce diagramme ot de donnes gnrique peut tre
utilis au niveau du diagramme prliminaire ainsi que dans les niveaux danalyse
suivant des diagrammes de dcomposition.
Le passage des donnes entre les processus fonctionnels peut tre ralis selon les
besoins avec les deux mthodes de base : ots de donnes direct (exemple entre les
processus 2 et 3) ou unit de stockage (cas des processus 1 et 2).
Ainsi, dans lexemple simple dun systme de freinage automobile ( 2.3.1), le dia-
gramme prliminaire est constitu de cinq processus fonctionnels (gure 2.15). Au
niveau de cet exemple simple, nous navons pas une dcomposition fonctionnelle
aussi complexe que lexemple gnrique prsent prcdemment : seules les parties
Autre_Donne_1
Autre_Donne_2
Actionneur_1
Actionneur_2
Donne_calcule
Donne_lue
Traiter
donne
2
Acqurir
donne
1
Commander
actionneur
3
Capteur_1
Capteur_2
Figure 2.14 Dcomposition fonctionnelle gnrique.
2.3 Les diagrammes flot de donnes
39


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
2 Spcification
selon la mthode SA-RT
acquisition et commande sont prsentes dans le cas du contrle-commande du
freinage et du bouton ABS.
Nous pouvons souligner immdiatement la cohrence obligatoire entre le diagramme
de contexte (gure 2.13) et ce diagramme prliminaire au niveau des ots de donnes
entrants et sortants.
Le passage des donnes entre les processus fonctionnels est effectu de faon directe.
Il est important de noter que la donne Niveau_freinage est de type entier ou
rel alors que les donnes Etat_glissement et Etat_bouton_ABS sont de type
boolen. Cela va entraner dans la suite de cette analyse une modication de ce
diagramme prliminaire.
Cette dcomposition fonctionnelle en diagrammes ots de donnes peut se pour-
suivre en rafnant de plus en plus la description des processus fonctionnels
(gure 2.16). Chaque diagramme de dcomposition, associ un processus fonc-
tionnel numrot N du diagramme hirarchiquement suprieur, est rf-
renc au niveau des processus fonctionnels par des numros N.x .
Lexemple simple systme de freinage automobile choisi pour illustrer la mtho-
dologie nest pas assez complexe pour justier la dcomposition dun des processus
fonctionnels. Donc tous les processus fonctionnels du diagramme prliminaire de
la gure 2.15 sont des processus primitifs.
Lorsquil ny a plus dintrt dcomposer un processus, celui-ci est appel pro-
cessus primitif et doit tre dcrit par une spcication sous forme textuelle, tabulaire
ou graphique (voir ci-aprs).
Nous pouvons noncer les deux premires rgles de cohrence de cette dcompo-
sition hirarchique :
lensemble des ots entrants et sortants du processus dcompos doit se retrouver
dans le diagramme de dcomposition de ce processus avec les mmes typages
(donnes ou vnements) ;
Demande_freinage
Commande_freinage
Affichage_ABS
Glissement_roue
Activation_ABS
Niveau_freinage
tat_glissement
tat_bouton_ABS
Acqurir
demande
freinage
1
Commander
freinage
3
Lire
bouton
ABS
4
Dtecter
glissement
de roue
2
Afficher
tat bouton
ABS
Figure 2.15 Diagramme flot de donnes prliminaire de lapplication
systme de freinage automobile .
40
2.3 Les diagrammes flot de donnes 2 Spcification
selon la mthode SA-RT
la numrotation des diffrents processus fonctionnels doit intgrer le numro du
processus fonctionnel analys N sous la forme N.x ;
les stockages doivent apparatre dans tous les diagrammes o les processus les utili-
sent.
2.3.4 Conclusion
La dcomposition hirarchique fonctionnelle, explicite dans ce paragraphe, est la
base de la mthode danalyse SA-RT. Mais laspect temporel ou plus exactement le
contrle de lenchanement dans lexcution de ces diffrents processus fonctionnels
nest pas dcrit au travers de ces diagrammes ots de donnes. Ceci va donc faire
lobjet dun complment au niveau de ces diagrammes par laspect contrle .
Contrler
systme
0
Capteur1
Capteur2
Processus
1
Processus
2
Processus
3
Processus
1.1
Processus
1.2
Stockage
Stockage
c
a
a
a
b
b
c
d
d
e
f
Processus
Processus
: Processus
dcomposer
: Processus
primitif
Lgende
Diagramme de contexte
Diagramme prliminaire
Diagramme de dcomposition
Actionneur
Figure 2.16 Dcomposition hirarchique en diagramme flots de donnes
de la mthode danalyse SA_RT.
2.4 Laspect contrle de la mthode SA-RT
41


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
2 Spcification
selon la mthode SA-RT
2.4 Laspect contrle de la mthode SA-RT
2.4.1 Mise en place du processus de contrle
Le processus de contrle, tel que nous lavons dj explicit dans le paragraphe 2.2.2,
va permettre de spcier lenchanement des diffrents processus fonctionnels de
lapplication. Ainsi, ce processus de contrle va tre positionn dans le diagramme
prliminaire et dans les diagrammes de dcomposition sils existent.
m Flots de contrle et diagramme de contexte
Nous pouvons souligner quil ne peut pas exister de processus de contrle au niveau
du diagramme de contexte puisquun seul diagramme fonctionnel est reprsent.
En revanche, il est tout fait possible davoir des ots de contrle au niveau de ce
diagramme de contexte entre les terminaisons et le processus fonctionnel. Ces ots
de contrle, correspondant des signaux tout ou rien, doivent tre rservs des
signaux particuliers ne ncessitant aucun processus fonctionnel particulier (acqui-
sition, mise en forme). Ainsi, nous pouvons citer les vnements externes tels
que frappe clavier , click souris , interrupteur de mise sous tension , etc.
Pour prciser de faon plus complte ces notions de signaux et dvnements, nous
pouvons considrer quun signal ncessite une acquisition (scrutation priodique
par exemple) et une mise en forme minimum. Le rsultat de ce prtraitement
peut alors effectivement devenir un vnement. La gure 2.17a illustre cette diff-
rence signal/vnement en considrant lexemple dun interrupteur. Le signal lec-
trique fourni par linterrupteur tout ou rien peut tre considr comme un vnement
Signal_interrupteur vnement_interrupteur
Signal_interrupteur vnement_interrupteur
(a)
Bord de modle
Processus fonctionnel
(b)
Circuit
anti-rebond
Signal_interrupteur
vnement_interrupteur
Acqurir
interrupteur
6
Figure 2.17 Mthodes de prise en compte dun signal lectrique afin de raliser une trans-
formation donnes-vnements : (a) processus fonctionnel dans le diagramme prliminaire,
(b) circuit lectronique visualis au niveau du diagramme de contexte.
42
2.4 Laspect contrle de la mthode SA-RT 2 Spcification
selon la mthode SA-RT
sil est directement comprhensible par le systme informatique, par exemple
connexion une ligne dinterruption. Dans le cas contraire, il ncessite une lecture
rgulire et une mise en forme pour tre intgr la logique du programme. Il est
important de noter que ces processus de mise en forme des signaux an de trans-
former une donne en un vnement peuvent parfois tre remplacs de faon beau-
coup plus facile et efcace par un circuit lectronique (gure 2.17b).
Dans le cas de lexemple simple du systme de freinage automobile ( 2.3.1), le dia-
gramme de contexte peut tre enrichi dun ot de contrle manant dun nouveau
bord de modle Conducteur qui fournit un ot de contrle Mise_en_marche
au processus fonctionnel (gure 2.18).
Rappelons que lensemble des ots entrants et sortants de lunique processus fonc-
tionnel du diagramme de contexte doit se retrouver dans le diagramme prliminaire
y compris les ots de contrle sils existent.
m Processus de contrle et diagramme prliminaire
Nous allons donc implanter un processus de contrle dans le diagramme prliminaire
an de coordonner lexcution des diffrents processus fonctionnels. Les concepts
et les rgles de mise en place de ce processus de contrle sont identiques dans le cas
des diagrammes de dcomposition. Ce processus de contrle va donc interagir
avec un processus fonctionnel pour lancer ou activer son excution et, en retour, le
processus fonctionnel fournira si ncessaire un vnement indiquant le rsultat de
son traitement an de donner des informations utiles aux changements dtats du
contrle. Nous pouvons ainsi illustrer cette interaction entre le processus de contrle
et les processus fonctionnels selon le schma gnrique utilisant la dcomposition
fonctionnelle complte prsente sur la gure 2.14. Rappelons que lvnement
coupl E/D est utilis pour piloter un processus fonctionnel de type boucle
sans n et lvnement T est utilis pour activer un processus fonctionnel de type
dbut-n . Dans cet exemple de la gure 2.19, deux processus fonctionnels,
supposs de type dbut-n , sont activs lun aprs lautre par le processus de
contrle par un vnement T et envoient un vnement de n dexcution vers
Demande_freinage
Commande_freinage
Affichage_ABS
Glissement_roue
Activation_ABS
Mise_en_marche
Contrler
systme
freinage
0
Systme de freinage
Voyant ABS
Capteur glissement
Bouton activation ABS
Pdale de frein
Conducteur
Figure 2.18 Diagramme de contexte complet
de lapplication systme de freinage automobile .
2.4 Laspect contrle de la mthode SA-RT
43


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
2 Spcification
selon la mthode SA-RT
ce mme processus de contrle. Le troisime processus fonctionnel, activ par un
vnement E/D , est li la commande des actionneurs, qui doit tre faite en
continu, soit type boucle sans n .
Concernant cette mise en place dun processus de contrle dans un diagramme
prliminaire, nous pouvons faire plusieurs remarques :
Un diagramme prliminaire ne doit contenir quun seul processus de contrle.
En effet, il est difcilement concevable davoir plusieurs organes de contrle-
commande pour une seule application, pour des raisons de cohrence.
Un diagramme prliminaire, ou, a fortiori, un diagramme de dcomposition, peut
ne pas avoir de processus de contrle. Dans ce cas, tous les processus fonctionnels
sont supposs sexcuter en mme temps avec pour seule rgle celle des ots de
donnes.
Un processus fonctionnel peut ne pas tre connect au processus de contrle.
Dans ce cas, il est suppos tre activ au dmarrage de lapplication et ne jamais
sarrter. Aussi, pour augmenter la lisibilit, il est prfrable de le connecter au
processus de contrle avec un vnement de type E/D et de lactiver dnitive-
ment au dbut de lapplication en utilisant lvnement E .
Dans le cas de lexemple du systme de freinage automobile, le diagramme prli-
minaire, reprsent sur la gure 2.15, va tre modi pour intgrer un processus de
contrle. En particulier, les deux ots de donnes Etat_glissement et Etat_
bouton_ABS de type boolen deviennent des vnements envoys respectivement
par les processus fonctionnels Dtecter glissement roue et Lire boutons ABS .
Nous obtenons alors le diagramme prliminaire complet de la gure 2.20.
Cet exemple de diagramme prliminaire, prsent sur la gure 2.20, doit faire
lobjet de plusieurs remarques qui sont gnralisables la ralisation dun diagramme
prliminaire quelconque. Ainsi, nous pouvons noter :
Tous les diffrents processus fonctionnels sont lis au processus de contrle par
des ots de contrle de type E/D ou T . Le choix de lun ou lautre de ces
Capteur_1
Autre_Donne_2
Actionneur_1
Actionneur_2
Capteur_2
Donne_calcule
Donne_lue
T
Acquisition_termine
E/ D
T Traitement_termin
Mise_en_marche
Traiter
donne
2
Acqurir
donne
1
Commander
actionneur
3
Contrler
application
6
Figure 2.19 Schma gnrique de linteraction
entre le processus de contrle et les processus fonctionnels.
44
2.4 Laspect contrle de la mthode SA-RT 2 Spcification
selon la mthode SA-RT
vnements est fait, comme nous lavons dj vu, en fonction de la structure de
fonctionnement interne du processus fonctionnel : processus de type boucle
sans n ou de type dbut-n .
Certains processus fonctionnels possdent des retours dexcution vers le processus
de contrle. Dans ce cas, il est souhaitable dexpliciter les vnements indiquant
le rsultat du traitement, par exemple ABS_activ . Ces vnements pour-
raient tre caractriss par des variables de type boolen ; ainsi labsence doccur-
rence de lvnement ABS_activ pourrait tre interprte comme NON
( ABS_activ ) NON tant lopration boolenne. Mais, dans beaucoup de
cas, il est prfrable pour des raisons de clart oprationnelle, de faire apparatre
les deux vnements possibles : ABS_activ et ABS_non_activ .
Il ne faut pas oublier de connecter les ots de contrle du diagramme prcdent
ralis dans lanalyse descendante, par exemple lvnement Mise_en_marche
du diagramme de contexte.
La mise en place du processus de contrle au niveau dun diagramme prliminaire
ou dun diagramme de dcomposition avait pour but dexprimer lexcution ou
lenchanement des processus fonctionnels. Lobjectif nest pas compltement atteint
puisque le diagramme ot de donnes ainsi complt ne rete pas cette excution.
Il est ncessaire dajouter cette information supplmentaire dcrivant le fonction-
nement du processus de contrle, cela se traduit gnralement par un diagramme
tat/transition que nous allons dcrire dans le paragraphe suivant.
Demande_freinage
Commande_freinage
Affichage_ABS
Glissement_
roue
Activation_ABS
Niveau_freinage
A
B
S
_
a
c
t
i
v

P
a
s
_
d
e
_
f
r
e
i
n
a
g
e
Mise_en_marche
F
r
e
i
n
a
g
e
T
A
B
S
_
n
o
n
_
a
c
t
i
v

E/D
E/D
E/D
E/D
G
lis
s
e
m
e
n
t
P
a
s
_
d
e
_
g
lis
s
e
m
e
n
t
Commander
freinage
3
Contrler
application
6
Lire
bouton
ABS
4
Dtecter
glissement
de roue
2
Afficher
tat bouton
ABS
5
Acqurir
demande
freinage
1
Figure 2.20 Diagramme prliminaire complet
de lapplication systme de freinage automobile .
2.4 Laspect contrle de la mthode SA-RT
45


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
2 Spcification
selon la mthode SA-RT
2.4.2 Diagramme tat/transition
m Reprsentation dun diagramme tat/transition
Dans le cas o un diagramme ots de donnes possde un processus de contrle,
la comprhension de ce diagramme de ot de donnes, trac un certain niveau
danalyse, ncessite une description ou spcication du processus de contrle.
Cette spcication, reprsentant laspect comportemental ou temps rel de lappli-
cation, peut tre faite de diverses manires : diagramme tat-transition, table tat-
transition, matrice tat-transition ou ventuellement un grafcet.
La reprsentation la plus courante est le diagramme tat-transition, ou automate
synchronis, qui est compos de quatre lments (gure 2.21) :
tat courant correspondant un fonctionnement prcis du systme, en parti-
culier un tat des processus fonctionnels (excution ou non) ;
vnement : occurrence dun vnement manant dun processus fonctionnel
vers le processus de contrle qui va provoquer le franchissement de la transition
et donc faire changer ltat du systme ;
action : occurrence dun vnement manant du processus de contrle vers un
ou plusieurs processus fonctionnels pour les activer ( E ou T ) ou les dsac-
tiver ( D ). Ces actions caractrisent leffet du franchissement de la transition ;
tat suivant correspondant au fonctionnement aprs les actions faites par le
processus de contrle en direction des processus fonctionnels.
Pour illustrer cette description du processus de contrle avec un exemple trs gn-
rique, reprenons le diagramme prliminaire de la gure 2.19 qui reprsente la
coordination dun systme acquisition-traitement-commande par un processus de
contrle. La gure 2.22 montre la squentialit vidente de lexcution dune telle
application. propos de ce diagramme tat/transition, nous pouvons faire les
remarques gnrales suivantes :
Les noms des diffrents tats atteints par le systme explicitent ltat de fonction-
nement du systme. Ces tats ne doivent pas en principe tre des tats fugitifs.
Les vnements intervenant au niveau de la transition entre ces tats doivent
tous appartenir au diagramme prliminaire et rciproquement tous les vnements
du diagramme tat/transition doivent tre reprsents dans le diagramme prli-
minaire.
vnement
action
tat suivant
tat courant
Figure 2.21 Reprsentation de base
dune cellule lmentaire dun diagramme tat/transition.
46
2.4 Laspect contrle de la mthode SA-RT 2 Spcification
selon la mthode SA-RT
Les actions du processus de contrle sur les processus fonctionnels sont notes
par < E ou D ou T > + numro ou nom du processus fonctionnel . Il peut y avoir
plusieurs actions de ce type associes une seule transition.
Mise_en_marche
<E> 3
<T> 1
Acquisition_termine
<T> 3
Traitement_termin
<T> 1
Phase de traitement
Phase dacquisition
tat repos
Figure 2.22 Reprsentation du diagramme tat/transition
du processus de contrle du diagramme prliminaire de la figure 2.19.
Freinage
<T> 4
<E> 3
ABS_non_activ
<D> 5
ABS_activ
<E> 5
<E> 2
Pas de freinage
<D> 3
<D> 2
Pas de freinage
<D> 3
Pas de freinage
<D> 3
<D> 2
Mise en marche
<E> 1
<D> 5
Pas de freinage
demand
Test
ABS
Freinage
avec ABS
Freinage
sans ABS
Pas de freinage
(ABS)
Glissement
<D> 3
Pas de Glissement
<E> 3
Figure 2.23 Premire reprsentation du diagramme tat/transition du processus de contrle
Contrler application du diagramme prliminaire de lapplication systme de freinage
automobile : comportement non conforme.
2.4 Laspect contrle de la mthode SA-RT
47


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
2 Spcification
selon la mthode SA-RT
Si nous considrons lexemple du systme de freinage automobile, une solution pos-
sible du diagramme tat/transition du processus de contrle Contrler application
du diagramme prliminaire est prsente sur la gure 2.23. Ce diagramme tat/
transition explique le comportement de lapplication.
Une analyse rapide de cet exemple simple montre une incohrence dans ce compor-
tement ; en effet, ltat initial de lapplication Pas de freinage demand nest
sensible qu loccurrence de lvnement Freinage provenant du processus fonc-
tionnel 1 Acqurir demande freinage . Le bouton dactivation ou de dsactivation
du systme ABS avec le voyant associ nest pris en compte que lors dun freinage
(vnement Freinage ). Ce comportement ne correspond pas un fonctionnement
correct du systme o le conducteur doit accder cette fonction et voir son rsultat
en dehors de la phase de freinage. En effet, avec un tel diagramme tat/transition,
le conducteur ne peut voir la modication du voyant ABS quen actionnant la pdale
de frein.
Un deuxime diagramme tat/transition propose un autre comportement de lappli-
cation plus conforme aux spcications dun tel systme. Ce diagramme tat/tran-
sition, prsent sur la gure 2.24 (page suivante), montre clairement les deux fonc-
tionnements du systme en cas de freinage avec le systme ABS activ ou sans le
systme ABS. Dans ce cas du diagramme tat/transition, le conducteur voit imm-
diatement la modication du voyant ABS lors de lappui sur le bouton ABS.
Une modication au niveau des vnements dactivation par le processus de contrle
a t effectue pour le processus 4 Lire bouton ABS . Dans le diagramme prli-
minaire de la gure 2.20, lvnement est de type T . Or, dans le nouveau dia-
gramme tat/transition de la gure 2.24 par rapport au premier diagramme de la
gure 2.23, cet vnement est de type E/D . Il est trs important de noter que,
pour conserver la cohrence entre les diagrammes danalyse, cest--dire le diagramme
prliminaire et le diagramme tat/transition du processus de contrle, il est indis-
pensable de modier le diagramme prliminaire de la gure 2.20 comme le montre
la gure 2.25, page suivante.
m Rgles gnrales dlaboration dun diagramme tat/transition
Lexemple simple trait prcdemment montre de faon vidente quil est indis-
pensable de conduire en parallle dune part la ralisation du diagramme prlimi-
naire au niveau de la mise en place du processus de contrle et dautre part la
construction du diagramme tat/transition de ce processus de contrle. En effet, que
ce soit au niveau des vnements dactivation ou de dsactivation issus du processus
de contrle, ou pour les vnements provenant des processus fonctionnels, il est
ncessaire de les mettre en place dans le diagramme prliminaire au fur et mesure
de la construction du diagramme tat/transition. Aussi, la n de ce travail, nous
devons vrier imprativement que tous les vnements du diagramme prliminaire
ont t utiliss et uniquement ceux-ci.
Dautre part, le passage dun tat un autre dans un diagramme tat/transition peut
tre ralis par loccurrence dun vnement ou de la combinaison logique de plu-
sieurs vnements. Il est donc possible dutiliser les oprateurs de la logique com-
binatoire pour grouper les vnements : ET, OU, NON. Dans ce cas, il faut tre
vigilant pour ne pas diminuer fortement la lisibilit du diagramme qui reprsente
48
2.4 Laspect contrle de la mthode SA-RT 2 Spcification
selon la mthode SA-RT
Freinage
<E> 3
ABS_activ
<E> 5
Glissement
<D> 3
Pas de Glissement
<E> 3
Pas de freinage
<D> 3
Mise en marche
<E> 1, <E> 4, <D> 5
ABS_non_activ
<D> 5
Freinage
<E> 3, <E> 2
Pas de freinage
<D> 3, <D> 2
ABS_non_activ
<D> 5
ABS_activ
<E> 5
tat initial
et test ABS
Freinage
sans ABS
Pas de freinage
(ABS)
Freinage
avec ABS
ABS activ
pas de freinage
ABS non activ
pas de freinage
Figure 2.24 Deuxime reprsentation plus correcte du diagramme tat/transition du processus
de contrle Contrler application du diagramme prliminaire de lapplication systme de
freinage automobile .
Lire
bouton
ABS
4
A
B
S
_
a
c
t
i
v

e
Contrler
Application
6
T
A
B
S
_
n
o
n
_
a
c
t
i
v

e
Activation_ABS
Lire
bouton
ABS
4
A
B
S
_
a
c
t
i
v

e
Contrler
Application
6
E/D
A
B
S
_
n
o
n
_
a
c
t
i
v

e
Activation_ABS
Figure 2.25 Modification du diagramme prliminaire de lapplication systme de freinage
automobile de la figure 2.20 pour garder la cohrence avec le diagramme tat/transition de
la figure 2.24.
2.5 Spcification des processus primitifs
49


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
2 Spcification
selon la mthode SA-RT
le fonctionnement de lapplication (gure 2.26). Aussi, il est fortement dconseill
dutiliser des combinaisons complexes dvnements comme celui du passage
de ltat 3 ltat 2 de la gure 2.26. Ainsi, se limiter la combinaison de deux v-
nements semble tre une rgle de bon compromis : lisibilit et puissance dexpression.
2.5 Spcification des processus primitifs
Le processus du diagramme de contexte tant numrot 0 , les processus du dia-
gramme prliminaire seront nots 1, 2, 3 Les processus de ce diagramme ot de
donnes sont ensuite dcomposs si ncessaire et dcrits par des diagrammes ot
de donnes, appels diagrammes de dcomposition. Ainsi, la dcomposition du
processus 1 donnera naissance des processus numrots 1.1, 1.2, 1.3 .
Lorsque le processus fonctionnel est sufsamment simple, cest un processus primitif ;
il doit tre dcrit par une spcication sous forme textuelle (spcication procdu-
rale, par prcondition et postcondition), tabulaire ou graphique. La mthode SA-RT
ntant pas normalise et sans indication particulire concernant la spcication des
processus primitifs, les utilisateurs dcrivent ces processus fonctionnels selon les
mthodes usites dans lentreprise.
Une des mthodes de spcications de processus fonctionnels, la plus usite et adapte
ce domaine, est celle qui sappuie sur une spcication procdurale. Celle-ci se
dcline en 6 mots-cls :
E/ donnes : Nom_ots_de_donnes : liste des ots de donnes en entre
du processus fonctionnel ;
E/ vnements : Nom_ots_dvnements : liste des ots dvnements en
entre du processus fonctionnel, cest--dire en gnral E/D ou T , ou
ventuellement les vnements produits directement par les bords de modle ;
S/ donnes : Nom_ots_de_donnes : liste des ots de donnes en sortie du
processus fonctionnel ;
S/ vnements : Nom_ots_dvnements : liste des ots dvnements en
sortie du processus fonctionnel ;
NON (e3)
<D> 1

tat 2
tat 1
tat 3
e5 ET (e1 OU e3)
<D> 1
e1 ET e2
<E> 3
e3 OU e4
<E> 6
Figure 2.26 Exemple dutilisation de combinaisons logiques dvnements.
50
2.5 Spcification des processus primitifs 2 Spcification
selon la mthode SA-RT
Ncessite : : liste des contraintes sur les donnes en entre du processus
fonctionnel ;
Entrane : description algorithmique du traitement raliser.
Dans le cas de lexemple simple systme de freinage automobile , nous allons
considrer le processus fonctionnel 1 Acqurir demande de freinage . La descrip-
tion procdurale de ce processus est la suivante :
Il est aussi possible de faire une spcication de type pr et postcondition sur le
modle suivant :
Prcondition : : liste des ots de donnes ou dvnements en entre du pro-
cessus fonctionnel ave les conditions associes.
Postcondition : liste des ots de donnes ou dvnements en sortie du pro-
cessus fonctionnel ave les conditions associes.
Donc, dans le cas de lexemple simple systme de freinage automobile , nous avons
le processus fonctionnel 1 Acqurir demande de freinage spci de la faon
suivante :
Processus_fonctionnel : Acqurir demande freinage
E/ donnes : Demande_freinage
E/ vnements : E/D
S/ donnes : Niveau_freinage
S/ vnements : Freinage, Pas_de_freinage
Ncessite : Demande_freinage = 0
Entrane :
Faire toujours
Acqurir Demande_freinage
mettre Niveau_freinage vers Processus 3 (Commander freinage)
Si Demande_freinage > 0
Alors mettre Freinage vers Processus de contrle 6
(Contrler freinage)
Sinon mettre Pas_de_freinage vers Processus de contrle 6
(Contrler freinage)
Finsi
Fin faire
Processus_fonctionnel : Acqurir demande freinage
Prcondition :
Demande_freinage est fourni et Demande_freinage = 0
E est fourni
Postcondition :
Niveau_freinage est fourni
Freinage est fourni si Demande_freinage > 0
Pas_de_freinage est fourni si Demande_freinage 0 =
2.6 Spcification des donnes
51


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
2 Spcification
selon la mthode SA-RT
2.6 Spcification des donnes
Au fur et mesure de la ralisation des diffrents diagrammes ots de donnes
(diagramme de contexte, diagramme prliminaire et diagrammes de dcomposition),
un ensemble de donnes et dvnements est dni. Les donnes et les vnements,
qui interviennent tous les stades du modle, sont alors runis dans un dictionnaire
de donnes.
De la mme manire que, pour la spcication des processus primitifs, il ny a pas de
mthode impose, les utilisateurs spcient les donnes selon les mthodes person-
nalises dans lentreprise. Pour cet aspect informationnel de SA-RT, nous allons
dcrire deux mthodes qui peuvent rpondre des besoins simples de spcications
des donnes : reprsentation textuelle et reprsentation graphique. Des mthodes
plus complexes et plus formelles existent et sont ncessaires si les donnes au niveau
de lapplication ont une place importante en nombre ou en complexit.
2.6.1 Reprsentation textuelle des donnes
La spcication des donnes de manire textuelle peut utiliser une notation prcise
comme celle base sur la notation BNF (Backus-Naur Form) dcrite dans le
tableau 2.2.
Ainsi, nous pouvons proposer une description de chaque donne ou vnement de
la faon suivante :
Donne ou vnement spcier dsignation.
Rle : description fonctionnelle de la donne ou de lvnement.
Type : description du codage, domaine de valeurs, etc.
Tableau 2.2 Notation B.N.F. permettant de spcifier les donnes.
Symbole Signification
= Compos de
** Commentaire
+ Regroupement sans ordre
{} Itration non borne
n{}p Itration de n p
() Optionnel
" " Expression littrale
(|) ou (/) Ou exclusif
=
52
2.6 Spcification des donnes 2 Spcification
selon la mthode SA-RT
La dsignation de la donne ou de lvnement peut tre faite avec quelques mots
prdnis : signal en entre, signal en sortie, vnement en entre, vnement en
sortie, donne interne, vnement interne ou composition forme dun ensemble
des lments prcdents.
La formalisation de la reprsentation est limite, mais elle permet toutefois davoir
une description homogne et prcise de lensemble des donnes ou des vnements.
En particulier, cette reprsentation permet dexprimer la composition entre plusieurs
donnes ou vnements. Ainsi, nous pouvons donner les quelques exemples suivants :
Oprateur de composition et oprateur de squence +
Pression Pression_air + Pression_huile
Oprateur de slection [ ] et ou exclusif | ou /
Pression [Pression_calcule/Pression_estime]
Oprateur ditration { } et avec bornes
Pressions 1{Capteur_pression}5
Oprateur indiquant le caractre optionnel ( )
Temprature Capteur_temprature + (Valeur_par_dfaut)
Pour lexemple simple systme de freinage automobile qui nous intresse, le
dictionnaire de donnes est assez limit puisque nous avons seulement 6 donnes
et 7 vnements. Ainsi, nous obtenons :
Demande_freinage Signal en entre
Rle : donne un signal proportionnel lappui sur la pdale de frein
Type : entre analogique code de type entier sur 8 bits, conversion :
[0-5V] -> [0-255]
Activation_ABS Signal en entre
Rle : donne la position de linterrupteur ABS
Type : entre numrique de type boolen
Glissement_roue Signal en entre
Rle : donne ltat du glissement de la roue
Type : entre numrique de type boolen
Afchage_ABS Signal en sortie
Rle : permet dallumer le tmoin dABS (lampe ou LED)
Type : sortie numrique de type boolen
Commande_freinage Signal en sortie
Rle : permet de commander le frein
Type : sortie analogique de type entier code sur 8 bits, conversion :
[0-255] -> [0-10V]
Mise en marche vnement en entre
Rle : indique la mise en marche du vhicule
Type : entre numrique de type boolen
=
=
=
=
=
=
=
=
=
=
=
2.6 Spcification des donnes
53


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
2 Spcification
selon la mthode SA-RT
2.6.2 Reprsentation graphique des donnes
Une autre reprsentation des donnes et des vnements, qui interviennent tous les
stades du modle, est une reprsentation graphique de type Jackson. Cette notation
est quivalente la notation BNF. Nous pouvons donner quelques exemples simples
correspondant ceux du paragraphe prcdent, soit la reprsentation dune squence
ou dun ou exclusif (gure 2.27), soit la reprsentation dune itration avec ou
sans bornes (gure 2.28).
Niveau_Freinage Donne interne
Rle : donne la valeur du freinage transmettre au frein
Type : entier code sur 8 bits
Freinage, Pas_de_freinage vnements internes
Rle : indique lappui ou non du conducteur sur la pdale de frein
Type : type boolen (vrai : freinage demand et faux : pas de freinage)
ABS_activ, ABS_non_activ vnements internes
Rle : indique lactivation du systme ABS par le conducteur
Type : type boolen (vrai : ABS activ et faux : ABS non activ)
Glissement, Pas_de_glissement vnements internes
Rle : indique ltat du glissement de la roue
Type : type boolen (vrai : glissement et faux : pas de glissement)
=
=
=
=
Ou exclusif
Squence
Pression
estime
Pression
calcule
Pression
Pression
huile
Pression
air
Pression
Figure 2.27 Reprsentation graphique dune donne :
squence et ou exclusif .
1-5
Pression
Pression
air
7 7
Pression
air
Pression
Itration Itration
avec bornes
Figure 2.28 Reprsentation graphique dune donne :
itration avec ou sans bornes.
54
2.7 Organisation gnrale de la mthode SA-RT 2 Spcification
selon la mthode SA-RT
2.7 Organisation gnrale de la mthode SA-RT
La description prcdente nous a permis de prsenter la mthode danalyse SA-RT
dans sa globalit. Les traits essentiels de cette mthodologie hirarchique descendante
rsident dans la mise en avant des aspects fonctionnels et comportementaux (ex-
cution) de lapplication analyse. Laspect informationnel, description des donnes
au sens large du terme, est trait de faon minimale.
Le schma de la gure 2.29 prsente lorganisation gnrale de la mthode SA-RT
avec lenchanement des diffrentes tapes et lensemble des documents produits.
Nous pouvons ainsi dcliner :
Diagramme de contexte : premier diagramme ot de donnes permettant de
dcrire lenvironnement de lapplication dvelopper.
Diagramme prliminaire : diagramme ot de donnes prsentant le premier
niveau danalyse fonctionnelle de lapplication.
Diagrammes de dcomposition : diagramme ot de donnes prsentant les ana-
lyses des processus fonctionnels non primitifs.
Spcications des processus fonctionnels primitifs : spcication textuelle des
fonctions ralises par les processus fonctionnels.
Spcications des processus de contrle : diagrammes tat/transition dcrivant
le fonctionnement des processus de contrle.
Dictionnaire de donnes : liste exhaustive des donnes et des vnements utiliss
dans la spcication.
Il est vident que lensemble de ces diagrammes doit tre cohrent par rapport aux
deux points de vue :
Cohrence de lanalyse :
Diagramme de contexte, diagramme prliminaire, diagramme de dcompo-
sition, spcication dun processus primitif.
Processus de contrle dans un diagramme ots de donnes , diagramme
tat/transition du processus de contrle.
Cohrence de lenchanement des diffrentes tapes
Donnes et vnements correspondant entre deux diagrammes ots de donnes.
vnements identiques entre un diagramme ot de donnes intgrant un pro-
cessus de contrle et le diagramme tat/transition du processus de contrle.
Nous pouvons ainsi rappeler les diffrentes rgles dlaboration des diagrammes ots
de donnes que nous avons vues au cours des paragraphes prcdents :
Un seul processus fonctionnel et pas de processus de contrle dans un diagramme
de contexte.
Le nombre de processus fonctionnels, composant un diagramme prliminaire,
doit tre limit de 5 9 maximum.
Les stockages doivent apparatre dans tous les diagrammes o les processus les
utilisent.
2.7 Organisation gnrale de la mthode SA-RT
55


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
2 Spcification
selon la mthode SA-RT
Un seul ou aucun processus de contrle par niveau de diagramme : diagramme
prliminaire ou diagrammes de dcomposition.
Lensemble des ots entrants et sortants du processus dcompos doit se retrouver
dans le diagramme de dcomposition de ce processus avec les mmes typages.
La numrotation des diffrents processus fonctionnels doit intgrer le numro
du processus fonctionnel analys N sous la forme N.x .
Un processus fonctionnel peut ne pas tre connect au processus de contrle.
Dans ce cas, il est suppos tre activ au dmarrage de lapplication et ne jamais
sarrter.
Les vnements intervenant au niveau de la transition entre les tats du dia-
gramme tat/transition doivent tous appartenir au diagramme ot de donnes et
rciproquement tous les vnements du diagramme ot de donnes doivent tre
utiliss dans le diagramme tat/transition.
Pas de ots de donnes entre les processus fonctionnels et le processus de contrle.
Pas de ots dvnements entre les processus fonctionnels.
Les deux dernires rgles sont essentielles et, de faon plus gnrale, nous pouvons
dcrire les possibilits de relations entre les diffrentes entits du modle SA-RT par
le tableau 2.3 pour les ots de donnes et tableau 2.4 pour les ots de contrle.
a
b
c
a
b
c
d
e
f
g h
a
d
h
i
j
k



a
=
.....
b
=
.....


Diagramme
de contexte
Diagramme de contexte
Diagramme E-T du 4
Diagramme E-T du 4
Systme
de
contrle
Diagramme de
dcomposition
Diagramme de dcomposition
Diagramme
prliminaire
Diagramme prliminaire
Dictionnaire
des donnes
Spcification
des processus
de contrle
Spcification
des processus
primitifs
Spcif du 2
Spcif du 3
Spcif du 1.1
Spcif du 1.2
Spcif du 1.3
Z
4
1.4
2
3
X
X
1.1
1.2
1.3
D
ictionnaire des donnes
1
Figure 2.29 Organisation gnrale de la mthode SA-RT.
56
2.8 Exemples 2 Spcification
selon la mthode SA-RT
2.8 Exemples
Nous allons mettre en uvre cette mthodologie danalyse SA-RT pour quelques
exemples plus complexes que lexemple dcrit jusqu prsent systme de freinage
automobile . Toutefois, nous nous limitons la description principale, cest--dire :
diagramme de contexte, diagramme prliminaire avec un processus de contrle et
diagramme tat/transition du processus de contrle.
2.8.1 Exemple : gestion de la scurit dune mine
m Prsentation du cahier des charges
En plus de la gestion automatise dune mine, laspect scurit est le point essentiel
de la gestion dune zone dextraction de minerai, situe en sous-sol, avec une pr-
sence humaine. Nous allons limiter notre tude au systme de gestion de la scurit
qui concerne principalement le contrle des deux uides :
Eau : les eaux de ruissellement sont vacues par un ensemble de conduites vers
un lieu unique, appel puisard. Le niveau de ce puisard, qui rcupre toutes les
Tableau 2.3 Liaisons flots de donnes entre les entits du modle SA-RT.
Vers
De
Processus
fonctionnel
Processus
de contrle
Unit
de stockage
Bord
de modle
Processus fonctionnel OUI
Processus de contrle NON NON
Unit de stockage OUI NON NON
Bord de modle OUI NON OUI
Tableau 2.4 Liaisons flots de contrle entre les entits du modle SA-RT.
Vers
De
Processus
fonctionnel
Processus
de contrle
Unit
de stockage
Bord de
modle
Processus fonctionnel NON
Processus de contrle OUI OUI
Unit de stockage NON OUI* NON
Bord de modle OUI OUI OUI*
* si le modle intgre le stockage dvnements.
2.8 Exemples
57


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
2 Spcification
selon la mthode SA-RT
eaux, est contrl en permanence avec une vacuation laide de pompes an
de la maintenir entre deux valeurs de niveaux.
Air : la ventilation des galeries de la mine est effectue en permanence. Lors de
lextraction, il peut se produire un accs accidentel une poche de gaz comme
du mthane. Fortement toxique, la meilleure protection consiste procder
lvacuation de la zone ou de la mine entire sachant que le volume de mthane
nest, a priori, pas connu. Dautre part si le niveau de mthane est lev, il faut
viter toutes les productions dtincelles (moteur).
Nous allons considrer un systme simple de gestion de la scurit de la mine vis-
-vis de ces deux facteurs. Le pilotage de cet ensemble comprend donc les lments
suivants (gure 2.30) :
un capteur analogique de niveau deau, appel LS (Level Sensor), pour dtecter
les deux niveaux limites de rgulation, soit le niveau bas (LLS, Low Level Sensor)
et le niveau haut (HLS, High Level Sensor) ;
une pompe eau dbit rglable permettant lvacuation du puisard ;
un capteur analogique du taux de mthane contenu dans lair, appel MS
(Methane Sensor) ;
une interface vers loprateur pour afchage de lalarme.
MS
HLS
Commande
pompe
Puisard
LS
Pompe
LLS
Systme
de contrle
Console
oprateur
Figure 2.30 Reprsentation schmatique
de lapplication de la gestion de laspect scurit dune mine.
58
2.8 Exemples 2 Spcification
selon la mthode SA-RT
La mine doit donc fonctionner tant que la scurit maximale peut tre maintenue.
Ainsi, les indications gnrales ou rgles de fonctionnement sont les suivantes :
Rgle 1 : La pompe doit tre mise en route si le niveau deau dpasse le niveau
maximum (LS > HLS). La pompe sarrte ds que le niveau descend en dessous
de la valeur infrieure (LS < LLS).
Rgle 2 : Une alarme doit tre lance vers la console de loprateur ds que le
niveau limite du capteur MS est franchi an de pouvoir oprer une vacuation
de la mine. Cette valeur limite est appele MS_L1 (Methane Sensor Level 1).
Rgle 3 : La pompe ne doit pas fonctionner quand le niveau du capteur de
mthane (MS) est suprieur une limite xe MS_L2 (Methane Sensor Level 2)
avec la condition MS_L2 > MS_L1 an dviter les risques dexplosion.
Dans cet exemple dapplication simple, nous sommes donc en prsence de deux lignes
de rgulation : le contrle du niveau de leau dans le puisard (rgle 1) et le contrle
du taux de mthane dans lair (rgle 2). Linteraction entre ces deux rgulations se
situe au niveau de la commande de la pompe pour lvacuation de leau du puisard
dont le fonctionnement est li non seulement au niveau deau, mais aussi au taux
de mthane (rgle 3).
m Analyse SA-RT
M Diagramme de contexte
Le premier niveau danalyse consiste laborer le diagramme de contexte de lappli-
cation. Ce diagramme, reprsent sur la gure 2.31, intgre les quatre bords de
modle correspondant aux deux entres ou capteurs (capteur de mthane, capteur
de niveau deau) et aux deux sorties ou actionneurs (pompe, console oprateur). Il
est souvent ncessaire dajouter un vnement de dmarrage Mise_sous_tension
dlivr par un bord de modle interrupteur . Le processus fonctionnel initial 0
Grer scurit mine constitue lapplication raliser. En rsum, en plus de
Grer
scurit
mine
0
Commande_pompe
Alarme
Mise_sous_tension
Console
oprateur
Console
oprateur
Capteur
niveau eau
Pompe
MS
LS
Interrupteur
Figure 2.31 Analyse SA-RT de lapplication de la gestion de laspect scurit dune mine :
Diagramme de contexte.
2.8 Exemples
59


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
2 Spcification
selon la mthode SA-RT
lvnement Mise_sous_tension , nous avons quatre ots de donnes : deux entrants
(MS, LS) et deux sortants (Commande_pompe, Alarme). Lensemble de ces ots doit
se retrouver dans le diagramme prliminaire : premier niveau danalyse du processus
fonctionnel 0.
M Diagramme prliminaire et diagramme tat/transition
Le diagramme prliminaire, prsent sur la gure 2.32, donne une analyse ou dcom-
position fonctionnelle du processus fonctionnel initial 0 Grer scurit mine .
Cette analyse fait apparatre quatre processus fonctionnels de base et un processus
de contrle permettant de squencer lensemble. Nous pouvons vrier la cohrence
des ots de donnes ou dvnements entrants ou sortants par rapport au dia-
gramme de contexte.
Les processus 1 (Acqurir capteur mthane) et 4 (Afcher alarme) concernent le
contrle du taux de mthane dans lair avec un processus dacquisition et de compa-
raison aux niveaux de consignes (MS_L1, MS_L2) stocks dans une mmoire de
stockage Niveaux_consignes_mthane et un processus de commande pour dclen-
cher lalarme.
Les processus 2 (Acqurir capteur eau) et 3 (Commander pompe) concernent la
rgulation du niveau deau dans le puisard avec un processus dacquisition et de
comparaison aux niveaux de consignes (LLS, HLS) stocks dans une mmoire de
stockage Niveaux_consignes_eau et un processus de commande de la pompe.
Contrairement la chane de rgulation du taux de mthane o les deux processus
fonctionnels sont indpendants en termes de donnes, les deux processus fonction-
nels de la chane de rgulation du niveau deau sont lis par le transfert dune donne
Vitesse_pompe qui est, par exemple, proportionnelle la hauteur du niveau deau.
Contrler
mine
5
Commande_pompe
Alarme
Acqurir
capteur eau
2
Niveaux_
Consignes_mthane
Niveaux_
Consignes_eau
Commander
pompe
3
Afficher
alarme
4
MS_L2 dpasse
Niveau_LLS
Niveau_HLS
E/D
E/D
E/D
E/D
Consigne_respecte
Mise_sous_tension
MS_L1 dpasse
Vitesse_pompe
MS
LS
Acqurir
capteur
mthane
1
Figure 2.32 Analyse SA-RT de lapplication de la gestion de laspect scurit dune mine :
Diagramme prliminaire.
60
2.8 Exemples 2 Spcification
selon la mthode SA-RT
M
i
s
e
_
s
o
u
s
_
t
e
n
s
i
o
n
<
E
>

A
c
q
u

r
i
r

c
a
p
t
e
u
r
s

a
i
r
<
E
>

A
c
q
u

r
i
r

c
a
p
t
e
u
r
s

e
a
u

C
o
n
s
i
g
n
e

r
e
s
p
e
c
t

e
<
D
>

A
f
f
i
c
h
e
r

a
l
a
r
m
e
C
o
n
s
i
g
n
e

r
e
s
p
e
c
t

e
<
D
>

A
f
f
i
c
h
e
r

a
l
a
r
m
e
M
S

L
1

d

p
a
s
s

e
<
E
>

A
f
f
i
c
h
e
r

a
l
a
r
m
e
N
i
v
e
a
u

L
L
S
<
D
>

C
o
m
m
a
n
d
e
r

p
o
m
p
e
N
i
v
e
a
u

H
L
S
<
E
>

C
o
m
m
a
n
d
e
r

p
o
m
p
e
N
i
v
e
a
u

H
L
S

E
T

N
O
N

(
M
S

L
2

d

p
a
s
s
e
r
)
<
E
>

C
o
m
m
a
n
d
e
r

p
o
m
p
e
N
i
v
e
a
u

H
L
S

E
T

N
O
N

(
M
S

L
1

d

p
a
s
s
e
r
)
<
E
>

C
o
m
m
a
n
d
e
r

p
o
m
p
e
<
E
>

A
f
f
i
c
h
e
r

a
l
a
r
m
e
C
h
a
u
f
f
a
g
e
_
t
e
r
m
i
n

<
T
>

A
n
a
l
y
s
e
r

t
e
m
p

r
a
t
u
r
e
F
o
n
c
t
i
o
n
n
e
m
e
n
t
n
o
m
i
n
a
l
d
e

l
a

m
i
n
e

t
a
t

a
l
e
r
t
e
(
c
o
n
s
i
g
n
e
s

d

p
a
s
s

e
s
)

t
a
t

a
l
e
r
t
e
(
c
o
n
s
i
g
n
e
s

d

p
a
s
s

e
s
)
e
t

p
o
m
p
e

e
n

m
a
r
c
h
e
P
o
m
p
e
e
n

m
a
r
c
h
e
F
i
g
u
r
e

2
.
3
3


A
n
a
l
y
s
e

S
A
-
R
T

d
e

l

a
p
p
l
i
c
a
t
i
o
n

d
e

l
a

g
e
s
t
i
o
n

d
e

l

a
s
p
e
c
t

s

c
u
r
i
t

u
n
e

m
i
n
e

:

D
i
a
g
r
a
m
m
e

t
a
t
/
t
r
a
n
s
i
t
i
o
n
.
2.8 Exemples
61


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
2 Spcification
selon la mthode SA-RT
Le processus de contrle est li aux diffrents processus fonctionnels par des vne-
ments qui sont mis en place en mme temps que la ralisation du diagramme tat/
transition de la gure 2.33. Ce diagramme tat/transition, description du fonc-
tionnement du processus de contrle 5 (Contrler mine), comprend quatre tats :
fonctionnement nominal de la mine (niveau deau infrieur HLS et taux de
mthane infrieur MS_L1) ;
pompe en marche (niveau deau suprieur LLS) ;
tat alerte (consigne MS_L1 dpasse et niveau deau infrieur HLS, ou consigne
MS_L2 dpasse et niveau deau quelconque) ;
tat alerte (consigne MS_L1 dpasse) et pompe en marche.
Nous pouvons remarquer que, dans ce diagramme tat/transition complexe, nous
avons utilis dans certains cas des combinaisons logiques de deux vnements pour
passer dun tat lautre, par exemple MS_L2_dpasse OU Niveau_LLS pour
passer de ltat tat alerte et pompe en marche ltat tat alerte .
Dautre part, ce diagramme tat/transition fait lhypothse pour la surveillance du
taux de mthane que les vnements MS_L1_dpasse et MS_L2_dpasse se
produisent toujours dans lordre cit et, lors du retour la situation normale, lv-
nement Consigne_respecte est mis.
2.8.2 Exemple : pilotage dun four verre
m Prsentation du cahier des charges
Un four pour la fabrication du verre fonctionne de faon continue aussi bien du
point de vue de lapprovisionnement en matires premires (sables) que du point de
vue de lutilisation du produit (verre). En effet, le four doit rester en fonctionnement
permanent avec un niveau toujours sufsant de matires fondues temprature
constante, une vacuation du trop plein tant prvue en cas dattente prolonge
dutilisation du verre. Cette application a t simplie an de limiter lanalyse.
Le contrle-commande de cette application est fait par lintermdiaire de 3 capteurs
(capteur de temprature, capteur de niveau du four et capteur de dtection de
larrive de matires premires) et de 2 actionneurs (commande dapprovisionne-
ment en matires premires, chauffage du four). Nous avons donc comme prc-
demment deux chanes de rgulation : temprature et approvisionnement en sable.
Une reprsentation schmatique de cette application est prsente sur la gure 2.34.
Lacquisition de la temprature, partir de capteurs de type thermocouple, doit se
faire des moments rguliers en utilisant lhorloge temps rel interne du systme.
Le traitement du signal temprature permet de faire un calcul prcis de la tem-
prature (approximation polynomiale correspondant au thermocouple) et lance
une tche de commande de chauffage si la temprature du four est infrieure la
temprature de consigne. Le principe de chauffage du four se fait partir dondes
hautes frquences pulses. Ce chauffage est effectu pendant un temps x court
mais avec une intensit qui peut dpendre du chauffage ncessaire.
Lacquisition du niveau de matire est lie linterruption gnre de faon aprio-
dique par les tombes successives mais non rgulires du sable dtectes par le capteur.
Cette dtection est ralise par un capteur tout ou rien comme une cellule photo-
62
2.8 Exemples 2 Spcification
selon la mthode SA-RT
lectrique. Le paramtre niveau de matire va impliquer lapprovisionnement
ou non en matires premires en commandant la vitesse dapprovisionnement en
fonction du paramtre niveau du four . Mais cette rgulation dpend aussi de la
valeur de la temprature. En effet, an dviter une solidication du sable fondu, il
est ncessaire de limiter lapport en matires premires si la temprature nest pas
sufsante.
m Analyse SA-RT
M Diagramme de contexte
La premire tape danalyse consiste laborer le diagramme de contexte de lappli-
cation. Ce diagramme, reprsent sur la gure 2.35, intgre les six bords de modles
correspondant aux trois entres ou capteurs (capteur de temprature thermocouple,
capteur de niveau de sable, capteur tout ou rien de dtection darrive du sable) et
aux deux sorties ou actionneurs (approvisionnement en sable, commande du four de
chauffage). Le dernier bord de modle correspond la console oprateur qui fournit
les deux vnements : Arrt et Marche . Ces vnements ne sont utiliss que
pour le dmarrage de lapplication et ventuellement son arrt. Le processus fonc-
tionnel initial 0 Piloter four verre constitue lapplication tudier. En rsum,
en plus des deux vnements prcdemment cits, nous avons cinq ots de donnes :
trois ots entrants (Temprature, Niveau_sable, Arrive_sable) et deux ots sortants
(Sable, Chauffage). Lensemble de ces ots doit se retrouver dans le diagramme pr-
liminaire : premier niveau danalyse du processus fonctionnel 0.
Capteur
dtection sable
Commande
dapprovisionnement
Capteur de niveau
du four
Capteur
de temprature
Chauffage
du four
sable
verre
Figure 2.34 Reprsentation schmatique
de lapplication de la gestion dun four verre.
2.8 Exemples
63


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
2 Spcification
selon la mthode SA-RT
M Diagramme prliminaire et diagramme tat/transition
Le diagramme prliminaire, prsent sur la gure 2.36, donne une analyse ou dcom-
position fonctionnelle du processus fonctionnel initial 0 Piloter four verre .
Cette analyse fait apparatre six processus fonctionnels de base et un processus de
contrle permettant de squencer lensemble. Nous pouvons vrier la cohrence des
ots de donnes ou dvnements entrants ou sortants par rapport au diagramme de
contexte.
Les diffrents processus fonctionnels correspondent aux deux chanes de rgulation :
temprature (processus fonctionnels 1 3) et approvisionnement en sable (processus
fonctionnels 4 6). La rgulation de la temprature suit exactement la dcomposi-
tion fonctionnelle gnrique que nous avons vue (gure 2.14). Ainsi, les trois pro-
cessus fonctionnels de base existent : acquisition (1 Acqurir temprature), traite-
ment (2 Analyser temprature) et commande (3 Chauffer four). Les deux units
de stockage sont utilises dans les deux cas classiques : soit pour la mmorisation
dune constante (Temprature_consigne) soit pour une donne partage (Temprature_
mesure). Dans ce dernier cas, nous pouvons noter que lunit de stockage est utilise
deux fois dans le diagramme et donc comporte une * .
Dans le cas de la rgulation du niveau du sable, les trois processus fonctionnels mis
en uvre ne correspondent pas exactement au modle de dcomposition gnrique
prcdent ; mais nous avons uniquement deux processus fonctionnels : acquisition
(5 Acqurir niveau), traitement et commande (6 Analyser besoin sable). Nous
pouvons remarquer que ce dernier processus utilise pour laborer la dcision de
commande trois donnes : Niveau_consigne (constante place dans une unit de
stockage), Niveau_mesure (donne fournie directement par le processus 5) et
Temprature_mesure (unit de stockage partage avec la chane de rgulation de la
Piloter
four verre
0
Chauffage
Sable
Niveau_sable
Temprature
Arrive_sable
Commande chauffage
Capteur
de dtection arrive sable
Capteur de niveau
Capteur de temprature
Console oprateur
Commande approvisionnement
Marche Arrt
Figure 2.35 Analyse SA-RT de lapplication de la gestion dun four verre :
Diagramme de contexte.
64
2.8 Exemples 2 Spcification
selon la mthode SA-RT
temprature). Le troisime processus utilis dans cette rgulation de niveau (4
Dtecter arrive sable) correspond en fait un processus de dclenchement qui est
activ sur interruption lie la donne Arrive_sable .
Le processus de contrle (7 Rguler four) est li aux diffrents processus fonc-
tionnels par des vnements qui sont mis en place en mme temps que la ralisation
du diagramme tat/transition de la gure 2.37. Ce diagramme tat/transition, des-
cription du fonctionnement du processus de contrle 7, comprend quatre tats :
tat repos (attente de fonctionnement ou arrt du four) ;
fonctionnement nominal (four en fonctionnement et attente des vnements
pour effectuer les rgulations soit de temprature, soit de niveau de sable) ;
chauffage du four (la temprature de consigne ntant pas atteinte, un cycle de
chauffage est lanc) ;
rgulation du niveau de sable (une interruption due la chute dun paquet de
sable lance la rgulation du niveau du four).
Nous pouvons remarquer que, dans ce diagramme tat/transition simple, nous avons
utilis un tat stationnaire (Fonctionnement nominal) dans lequel lapplication
reste et deux autres tats plus transitoires dans lesquels lapplication se situe en cas
de rgulation de lun des deux paramtres.
Dautre part nous pouvons noter la difcult concernant la rgulation du niveau
de sable ; en effet lajustement de lapprovisionnement en sable ne peut se produire
Analyser
besoin
sable
6
Analyser
niveau
5
Dtecter
arrive
sable
4
Analyser
temprature
2
Rguler
four
7
Aqurir
temprature
1
Chauffer
four
3
Arrt
Marche
E/D
E/D
E/D T
T
T
Temprature_*
mesure
Temprature_*
mesure
Temprature_
consigne
Niveau_
consigne
Trop_froid
Chauffage
Chauffage_
termin
Commande_
chauffage
Arrive_sable
Niveau_sable
Sable_
tomb
Niveau_mesur
sable
Temprature
Figure 2.36 Analyse SA-RT de lapplication de la gestion dun four verre :
Diagramme prliminaire.
2.8 Exemples
65


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
2 Spcification
selon la mthode SA-RT
que si la mesure du niveau est effectue, cest--dire que le processus fonctionnel
5 Acqurir niveau est activ. Pour cela, il est ncessaire que la donne Arrive_
sable se produise pour quelle soit transforme en vnement Sable_tomb par
le processus fonctionnel 4 Dtecter arrive sable . Dans le cas contraire, la
rgulation du niveau de sable ne peut sexcuter, conduisant un dysfonctionnement
de lapplication. Ce problme est tudi au niveau de la conception dcrite dans le
chapitre 3.
2.8.3 Exemple : Commande dun moteur combustion
m Prsentation du cahier des charges
Le contrle-commande dun moteur combustion est devenu de plus en plus com-
plexe au fur et mesure des besoins en rendement, consommation et pollution.
En effet, en plus de fournir une puissance mcanique en fonction de lappui sur la
pdale de lacclrateur, il est ncessaire davoir une optimisation de la consomma-
tion du vhicule en contrlant les diffrents paramtres de la combustion (pression
air, temprature, mlange, allumage, etc.). Dautre part, la pollution du vhicule doit
tre minimise. Les diffrents tats du moteur peuvent tre prsents au conducteur
an de le prvenir de sa consommation excessive ou de la pollution de son vhicule
pour quil effectue un changement dans son mode de conduite. Lensemble de ces
paramtres moteur est gr par un calculateur spcique. Actuellement, un vhicule
possde de nombreux calculateurs ddis des fonctions trs diverses (freinage ABS,
gestion moteur, clairage, climatisation, etc.). Ces diffrents calculateurs commu-
Marche
<E> Acqrir temprature
<T> Analyser temprature
<E> Dtecter arrive sable
Arrt
<D> Acqrir temprature
<D> Dtecter arrive sable
Chauffage_termin
<T> Analyser temprature
Niveau_ modifi
<D> Analyser temprature
Sable_tomb
<T> Acqurir niveau
<E> Analyser besoin en sable
Trop_ froid
<T> Chauffer four
tat repos
Fonctionnement
nominal
Chauffage
du four
Rgulation
niveau
sable
Figure 2.37 Analyse SA-RT de lapplication de la gestion dun four verre :
Diagramme tat/transition.
66
2.8 Exemples 2 Spcification
selon la mthode SA-RT
niquent entre eux par un bus de terrain comme CAN (voir chapitre 4) an de par-
tager des informations et grer ainsi le vhicule de faon cohrente.
Cette application de commande dun moteur combustion est reprsente schma-
tiquement sur la gure 2.38. Le contrle-commande de cette application est fait par
lintermdiaire de sept capteurs (pdale acclrateur, temprature air, pression air,
temprature eau, rotation vilebrequin et deux capteurs de pollution) et de quatre
actionneurs (injection essence, allumage, admission air, rinjection gaz chappement
ou bruls). Le calculateur est donc aussi reli au bus de communication CAN.
Except les deux capteurs de pollution amont et aval, la loi de rgulation du moteur
combustion prend en compte lensemble des donnes dentre et labore les dif-
frentes sorties de commande. Nous nanalyserons pas cette loi de commande qui
prsente une relative complexit et correspond une spcicit constructeur pour
un type de moteur donn. Ainsi, llaboration de la loi de commande du moteur
combustion est considre comme une bote noire fonctionnelle qui utilise un
ensemble de donnes en entre (Paramtres_moteur_entre) et qui fournit des don-
nes en sortie (Paramtres_moteur_sortie). Les donnes sur la pollution ne sont pas
utilises dans ce calculateur ; mais elles sont fournies par lintermdiaire du rseau
de communications un autre calculateur, par exemple, pour afchage.
Capteur
pollution
en amont Capteur
pollution
en aval
Capteur vitesse de rotation du villebroquuin Capteur temprature eau
Capteur pression
collecteur air
Communication
avec les autres
calculateurs
Capteur pdale
acclrateur
Commande de rinjection
gaz chappement
Commande
admission air (papillon)
Commande
injecteur
Commande allumage
Bus CAN
Calculateur
Figure 2.38 Reprsentation schmatique
de lapplication de la commande dun moteur combustion.
2.8 Exemples
67


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
2 Spcification
selon la mthode SA-RT
m Analyse SA-RT
M Diagramme de contexte
Le diagramme de contexte de lapplication est reprsent sur la gure 2.39. Il donne
les 11 bords de modles correspondant aux sept entres ou capteurs et aux quatre
sorties ou actionneurs, numrs prcdemment. Nous avons ajout un bord de
modle correspondant la connexion au bus CAN et un bord de modle reprsentant
laction du conducteur. Le dernier bord de modle fournit les deux vnements :
Arrt et Marche . Pour le bord de modle du bus CAN, nous supposons que
les communications bidirectionnelles sont identies : en sortie (Com_S) et en entre
(Com_E).
Le processus fonctionnel initial 0 Piloter moteur constitue lapplication tudier.
En rsum, en plus des deux vnements prcdemment cits (Arrt, Marche),
nous avons 13 ots de donnes : huit entrants (Acclrateur, P_air, T_air, T_eau,
Vitesse, Pollution_E, Pollution_S, Com_E) et cinq sortants (Allumage, Injecteur,
Entre_air, Entre_gaz_b, Com_S). Lensemble de ces ots doit se retrouver dans le
diagramme prliminaire : premier niveau danalyse du processus fonctionnel 0.
A
c
c

r
a
t
e
u
r
E
n
t
r

e
_
a
i
r
E
n
t
r

e
_
g
a
z
_
b
Injecteur
C
o
m
_
E
A
l
l
u
m
a
g
e
C
o
m
_
S
T
_
a
i
r
P
_
a
i
r
T_eau
P
o
l
l
u
t
i
o
n
_
E
V
it
e
s
s
e
P
o
l
l
u
t
i
o
n
_
S
Commande admission gaz brls
Commande admission air
Commande injecteur
Commande allumage
Conducteur
Capteur pollution sortie
Capteur pollution entre
Capteur vitesse
Capteur temprature eau
Capteur temprature air
Capteur pression air
Capteur acclrateur
Piloter
moteur
0
Bus CAN
Figure 2.39 Analyse SA-RT de lapplication de la commande dun moteur combustion :
Diagramme de contexte.
68
2.8 Exemples 2 Spcification
selon la mthode SA-RT
M Diagramme prliminaire et diagramme tat/transition
Le diagramme prliminaire, prsent sur la gure 2.40, donne une analyse ou
dcomposition fonctionnelle du processus fonctionnel initial 0 Piloter moteur .
Cette analyse fait apparatre neuf processus fonctionnels de base et un processus de
contrle permettant de squencer lensemble. Malgr le regroupement de certaines
fonctions dacquisition ou de commande, le nombre de processus fonctionnel de
cette premire dcomposition correspond la limite xe pour avoir une bonne
comprhension globale du diagramme ots de donnes. Nous pouvons remarquer
que les processus fonctionnels 6, 7 et 8 auraient pu tre regroups car ils sont
dclenchs en mme temps. Ce travail de regroupement est effectu en partie au
niveau de la conception tudie dans le chapitre 3.
Nous pouvons vrier la cohrence des ots de donnes ou dvnements entrants ou
sortants par rapport au diagramme de contexte de la gure 2.39. An daugmenter
la lisibilit du diagramme, nous avons utilis des units de stockage de donnes
complexes, ou encore appeles numres, dans le sens o elles intgrent un ensemble
ou groupe de donnes. Comme nous lavons dj prsent, deux units de stockages
renferment les paramtres en entre du moteur, except les donnes pollutions
(Paramtres_moteur_entre) et les paramtres en sortie du moteur (Paramtres_
moteur_sortie).
Acclrateur
Commande
allumage
8
E/D
E/D
E/D
E/D
E/D
Commande_
prte
Entre_air
Entre_gaz_b
Injecteur
Arrt
Marche
Com_E
Allumage
Com_S
Messages*
Messages*
Paramtres_*
moteur_entre
Paramtres_*
Moteur en entre
Paramtres_*
moteur_entre
Paramtres_*
moteur_sortie
Paramtres_*
moteur_sortie
T_air
P_air
T_eau
P
o
l
l
u
t
i
o
n
_
E
V
it
e
s
s
e
P
o
l
l
u
t
i
o
n
_
S
Acqurir
paramres
moteur
2
Acqurir
acclrateur
1
Acqurir
vitesse
3
Lire
capteur
pollution
4
Commander
Entres gaz
6
Commander
injection
7
laborer
commande
moteur
5
Contrler
moteur
10
T
T
T
T
Communiquer
bus CAN
9
Figure 2.40 Analyse SA-RT de lapplication de la commande dun moteur combustion :
Diagramme prliminaire.
2.8 Exemples
69


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
2 Spcification
selon la mthode SA-RT
Une autre unit de stockage est ddie aux messages (Messages). Cette unit de stoc-
kage est un peu particulire par rapport aux autres units de stockage. En effet, en
entre, nous avons une le gre de faon FIFO ou priorit et, en sortie, la le
est gre de manire FIFO.
Remarquons que toutes ces units de stockages sont dupliques au niveau de ce
diagramme et donc notes avec une * .
Le processus de contrle (10 Contrler moteur) est li aux diffrents processus
fonctionnels par des vnements qui sont mis en place en mme temps que la
ralisation du diagramme tat/transition de la gure 2.41. Nous avons simpli le
fonctionnement de ce processus de contrle en supposant que les processus fonc-
tionnels dacquisition taient lancs au dbut de lexcution (1, 2, 3 et 4) et four-
nissaient les donnes de faon priodique ; en particulier le processus fonctionnel
1 Acqurir acclrateur fournit rgulirement lvnement tat_acclrateur
qui dclenche llaboration de la loi de commande partir de toutes les donnes
dentre acquises. Lorsque la commande est prte, le processus 5 laborer com-
mande moteur dclenche lensemble des processus fonctionnels de commande
(6, 7 et 8). Enn, le processus fonctionnel 9 de communication gre priodique-
ment les messages au niveau rception et mission.
Nous pouvons remarquer que, dans ce diagramme tat/transition trs simple, nous
avons utilis uniquement deux tats actifs en plus de ltat repos : Un tat attente
qui est priodiquement interrompu par lvnement tat_acclrateur et un tat
correspondant llaboration de la loi de commande du moteur combustion.
marche
<E> 1
<E> 2
<E> 3
<E> 4
<E> 9
arrt
<D> 1
<D> 2
<D> 3
<D> 4
<D> 9
<T> 6
<T> 7
<T> 8
tat_acclrateur
<T> 5
Commande_prte
tat attente
tat repos
laboration
contrle
moteur
Figure 2.41 Analyse SA-RT de lapplication de la commande dun moteur combustion :
Diagramme tat/transition.
70
2.9 Extensions de la mthode SA-RT 2 Spcification
selon la mthode SA-RT
2.9 Extensions de la mthode SA-RT
2.9.1 Extensions de la syntaxe graphique de la mthode SA-RT
Comme nous lavons dj dit prcdemment en introduction de cette mthode
danalyse SA-RT, la description non formelle des applications est trs abstraite et ne
permet pas dans beaucoup de cas de spcier prcisment certaines fonctions ou
certaines donnes. Dautre part, la mthode ntant pas normalise, il est tout fait
possible dtendre la mthode an doffrir plus dexpressivit. Aussi de nombreuses
entreprises ont adapt la mthode leurs besoins et ajout des lments graphiques
pour exprimer des spcications plus prcises. Nous prsentons dans ce chapitre
deux de ces extensions trs utilises : une extension concernant les ots de donnes
et une extension pour les vnements. Ces extensions sont intgres dans la mthode
ESML++ dveloppe dans le cadre de la socit Boeing. Cette mthode, utilise
pour les dveloppements des applications de contrle-commande du domaine de
lavionique, est une mthode SA-RT enrichie.
m Extensions lies aux flots de donnes
Une syntaxe graphique plus complte permet de prciser les ots de donnes discrets
ou continus. Ainsi, lanalyse des ots de donnes permet et, donc oblige, de distin-
guer un ot de donnes discret (arc orient simple comme prcdemment) et un ot
de donnes continu (arc orient avec une double che). Mais, dans ce cas, o la
richesse dexpression des donnes vhicules par ces ots est augmente, il est
ncessaire de prciser la smantique attache cette nouvelle description. Or deux
types de smantique peuvent tre attachs aux ots de donnes (gure 2.42) :
Smantique 1 :
Flot de donne discret : valeur discrte de donne (type boolen) ;
Flot de donne continu : valeur continue de la donne (type entier ou rel).
Smantique 2 :
Flot de donne discret : donne consommable ou lisible une fois (existence de
la donne des temps discrets) ;
Smantique 1 Smantique 2
Calculer
vitesse
3
Valider
conexion
3
Affichage_vitesse
Nom_valide
Distance_parcourue
Top_horloge Entre_nom
Utilisateur
Figure 2.42 Extension de la syntaxe graphique des flots de donnes
selon deux smantiques.
2.9 Extensions de la mthode SA-RT
71


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
2 Spcification
selon la mthode SA-RT
Flot de donne continu : donne continuellement disponible (existence per-
manente de la donne).
m Extensions lies aux vnements
Comme pour les ots de donnes, une syntaxe graphique plus complte permet de
prciser les ots dvnements discrets ou continus. Ainsi, lanalyse des ots dv-
nements permet et, donc oblige, de distinguer un ot dvnements discret (arc
orient simple comme prcdemment) qui concerne des vnements consommables
ou lisibles une seule fois (existence des temps discrets). De mme un ot dv-
nements continu (arc orient avec une double che) dcrit un vnement conti-
nuellement disponible (existence permanente).
Il est important de noter que les vnements prdnis E, D, T sont des vne-
ments discrets, envoys chaque fois pour activer ou arrter un processus fonctionnel.
En revanche, un ot dvnements continu permet au processus de contrle de tester
en permanence le rsultat dun processus fonctionnel qui est indpendant du pro-
cessus de contrle (gure 2.43).
De mme, pour les stockages de donnes, le stockage dvnements modlise le
besoin de mmorisation dun vnement de faon ce que son occurrence soit uti-
lise plusieurs fois. Comme le ot dvnements auquel il est troitement associ,
il est nomm par une tiquette ou label explicite form de :
tiquette_Stockage_vnements nom (+ qualiant)
et il est reprsent par deux traits parallles en pointills (gure 2.44).
Mesurer
temprature
2
Trop chaud
E/D
Climatiser
enceinte
3
Temprature
T_consigne
Figure 2.43 Extension de la syntaxe graphique des flots dvnements.
=
Consigne_dpasse Jetons disponibles
Figure 2.44 Extension de la syntaxe graphique de SA-RT :
Stockages dvnements.
72
2.9 Extensions de la mthode SA-RT 2 Spcification
selon la mthode SA-RT
2.9.2 Mthode SA-RT et mthode formelle : projet IPTES
m Introduction
La mthode SA-RT, qui vient dtre prsente dans les sections prcdentes, est
une mthode de spcication simple avec un langage graphique trs comprhensible
par un utilisateur. Cette facilit dexpression a un inconvnient majeur, celui de
pouvoir conduire des ambiguts. En effet, lors de lanalyse dune application,
base sur la mthode SA-RT, la ralisation des diffrents diagrammes ots de donnes
rete lide du concepteur au travers dun langage simple, limit et trs abstrait.
Ainsi, deux utilisateurs peuvent avoir exprim deux analyses diffrentes sous la
forme dun mme diagramme ots de donnes SA-RT. Pour lever cette ambigut,
il est ncessaire de disposer dun outil formel qui offre un moyen dexpression prcis
et qui peut tre valid.
Ainsi, il est possible dutiliser en complment ou en parallle de cette mthodologie
SA-RT, un modle formel comme des automates tats nis ou des rseaux de
Petri. Ces modles prsentent lavantage dtre rigoureux au niveau de lexpression
et dtre analysable mathmatiquement. En revanche, ces modles sont en gnral
complexes et dune lisibilit faible. Aussi le projet europen IPTES (Incremental
Prototyping Technology for Embedded Real-Time Systems), dont les rsultats ont t
prsents en 1998, a voulu donner une smantique la mthode SA-RT base sur les
rseaux de Petri. Nous pouvons schmatiser cette association par le graphique de la
gure 2.45. Ainsi, la mthode SA-RT peut tre vue comme linterface de la mthode
danalyse globale avec un langage graphique de haut niveau pour exprimer la sp-
cication, cest linterface utilisateur. Directement lie ce modle graphique, nous
trouvons la correspondance dans le modle formel apport par les rseaux de Petri
qui constituent le noyau fonctionnel, cest--dire la partie permettant dexcuter
ce modle graphique reprsentant la spcication.
Lutilisateur dcrit sa spcication avec la syntaxe graphique SA-RT et, de faon
automatique, le modle formel, bas sur les rseaux de Petri, se construit. Cela permet
ensuite une analyse mathmatique de la spcication : simulation et vrication.
Pour atteindre ce but, il est ncessaire davoir une traduction unique dun modle
vers lautre.
Noyau formel d'excution
Langage graphique
de haut niveau
pour la spcification
Interface utilisateur
Langage machine
pour l'analyse
Rseaux de Petri Mthode SA-RT
Figure 2.45 Reprsentation schmatique
de lassociation dun modle formel avec la mthode SA-RT.
2.9 Extensions de la mthode SA-RT
73


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
2 Spcification
selon la mthode SA-RT
m Principes gnraux
La mthode SA-RT, utilise pour ce projet, correspond celle dcrite prcdemment
avec toutefois lextension des ots de donnes discrets et continus suivant la
smantique 2 ( 2.9.1).
Les rseaux de Petri ont de nombreuses variantes : abrviations et extensions. Les
rseaux de Petri choisis pour ce projet sont des rseaux de Petri autonomes ayant
les principales caractristiques suivantes :
Association des donnes et des vnements aux jetons.
Jeton correspondant une variable type.
Places types.
Association chaque transition :
Un prdicat li aux places en amont de la transition ;
Une action.
Transition temporise suivant le modle Merlin et Farber [
min
,
max
] o t
0
est la
date de sensibilisation de la transition :
Franchissement de la transition aprs le temps t
0
+
min
;
Franchissement de la transition avant le temps t
0
+
max
.
En partant de ces hypothses sur les modles utiliss, nous avons donc une traduction
ou correspondance entre tous les lments syntaxiques du modle SA-RT et un
rseau de Petri. Toutefois, an de simplier cette prsentation, les lments traduits
font abstraction de la modlisation temporise des transitions qui a t prsente
prcdemment, cest--dire que toutes les transitions prsentes dans la suite sont
considres comme des transitions immdiates, soit [0,0] avec la notation du modle
Merlin et Farber.
En premier, pour les ots de donnes, nous trouvons le modle dun ot de donnes
discret, qui sont des donnes consommables ou lisibles une fois, sur la gure 2.46
et le modle dun ot de donnes continu, qui sont des donnes continuellement
disponibles, sur la gure 2.47. Ces deux reprsentations rseaux de Petri ncessitent
deux places (Vide et Valeur) et trois transitions (crire_donne_vide, crire_donne
et Lire_donne). La place Vide dsigne une donne qui na jamais t produite
Donne Processus
A
1
Processus
B
2
crire_donne_vide
Lire_donne crire_donne
Valeur
Vide
Figure 2.46 Traduction dun flot de donnes discret de la mthode SA-RT
par un rseau de Petri.
74
2.9 Extensions de la mthode SA-RT 2 Spcification
selon la mthode SA-RT
(cas ot continue) ou qui a t consomme (cas du ot discret). Cette place possde
un jeton linitialisation. Dans le cas du ot de donnes continu, la premire cri-
ture de la donne la place Vide perd son jeton et la place Valeur sera ensuite
toujours marque. En revanche, dans le cas du ot de donnes discret, le franchis-
sement de la transition Lire_donne fait passer le jeton de la place Valeur la
place Vide .
La modlisation de lunit de stockage, reprsente sur la gure 2.48, est plus simple
dun point de vue rseau de Petri. Ainsi, nous avons une place Stockage , intgrant
un jeton reprsentant la donne, et les deux transitions correspondant lcriture
et la lecture (crire_donne et Lire_donne). En revanche, dans le but dobtenir
un modle formel prcis, une smantique particulire est associe au jeton dcrivant
ltat de la donne selon la lecture ou non de cette donne. Lenregistrement dans
lunit de stockage comprend deux champs : la donne elle-mme et son tat
(tableau 2.5). Aprs chaque criture, la donne a un tat dclar nouveau qui peut
donc tre utilis par le processus fonctionnel qui lit cette donne.
Tableau 2.5 Caractrisation du contenu de lenregistrement
dans lunit de stockage du modle SA-RT.
Donne tat
Initialement
Aprs crire_donne
Aprs Lire_donne
Non dfinie
Dfinie
Dfinie
Ancien
Nouveau
Ancien
Donne Processus
A
1
Processus
B
2
crire_donne_vide
Lire_donne crire_donne
Valeur
Vide
Figure 2.47 Traduction dun flot de donnes continu de la mthode SA-RT
par un rseau de Petri.
Stockage
crire_donne Lire_donne Donne
Figure 2.48 Traduction dune unit de stockage de la mthode SA-RT
par un rseau de Petri.
2.9 Extensions de la mthode SA-RT
75


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
2 Spcification
selon la mthode SA-RT
La modlisation dun processus fonctionnel est relativement complexe dans le sens
o il peut possder de nombreuses entres et sorties en termes de ots de donnes.
La gure 2.49 dcrit un cas gnral avec des entres de type ot discret, ot continu
et unit de stockage. Ainsi, nous avons en entre un ot discret (Donne_d_1),
deux ots continus (Donnne_c_1 et Donne_c_2) et deux units de stockages
(Donnne_s_1 et Donne_s_2). En sortie, nous trouvons deux ots discrets
(Donne_d_1 et Donne_d_2), un ot continu (Donne_c_1) et une unit de stockage
(Donne_s_3).
Le processus fonctionnel est dcrit par deux places qui reprsentent les deux tats
possibles : en excution ou traitement (place Excution ) et larrt (place Oisif ).
Suppression
Lancement
Fin
Donne_c_1
Donne_c_2
D
o
n
n

e
_
d
_
1
Donne_s_3
Donne_s_2
Donne_s_1
D
o
n
n

e
_
d
_
2
Donne_c_3
D
o
n
n

e
_
d
_
3
Donne_c_1
Donne_c_2
Donne_d_1
Donne_s_1
Donne_s_2
Donne_s_3
Donne_d_2
Donne_c_3
Donne_d_3
Processus
A
1
Oisif
Excution
Figure 2.49 Traduction dun processus fonctionnel de la mthode SA-RT
par un rseau de Petri.
76
2.9 Extensions de la mthode SA-RT 2 Spcification
selon la mthode SA-RT
Trois transitions permettent de modliser le fonctionnement du processus : une
transition Lancement au dmarrage de lexcution qui fait passer le jeton de la
place Oisif la place Excution , et une transition Fin la n de lexcution
qui fait passer le jeton de la place Excution la place Oisif .
Une transition supplmentaire est ajoute : Suppression . En effet, une hypothse
fondamentale, concernant les ots de donnes discrets, est mise en exergue sur cet
exemple. Le ot de donnes discret ne peut tre consomm quune seule fois pendant
lexcution dun processus fonctionnel ; par consquent une transition suppl-
mentaire ( Suppression ) est ncessaire pour liminer les ots de donnes discrets
arrives pendant lexcution.
La modlisation du processus de contrle est trs complexe et dborde largement
le propos de cet ouvrage. Le lecteur intress pourra se reporter aux documents de
rfrence cits dans la bibliographie en n douvrage.
m Exemple simple
La difcult de ce genre de modlisation par lment est le recollement des diffrents
modles lors de lanalyse dune application complte. Il nest pas possible dajouter
ou de juxtaposer les modles de chaque lment dune application sans analyser
lajustement de deux modles lun la suite de lautre. En effet, dans notre cas, les
transitions ou les places situes aux limites des modles doivent se lier avec le modle
prcdent ou suivant.
Nous allons tudier cet aspect sur un exemple simple compos de deux processus
fonctionnels (Processus A et Processus B) et dune unit de stockage, appele
Donne_s (gure 2.50). Ces lments sont lis par des ots de donnes discrets.
Dautre part des ots de donnes discrets arrivent sur les deux processus fonctionnels
(Donne_a et Donne_b) et un ot de donnes discret est mis (Donne_c).
La traduction de ce diagramme ot de donnes est reprsente sur la gure 2.51.
Ce rseau de Petri est compos de 11 places et de 7 transitions. Nous pouvons imm-
diatement remarquer que nous retrouvons les diffrentes places correspondant aux
modles initiaux de chaque lment. Ainsi, les deux processus fonctionnels Proces-
sus A et Processus B possdent chacun les deux places : A_Excution et
A_Oisif pour le processus A et B_Excution et B_Oisif pour le proces-
Donne_a
Donne_s
Donne_s
Processus
A
1
Donne_c
Processus
B
2
Figure 2.50 Exemple dun diagramme flots de donnes de la mthode SA-RT
pour appliquer la transformation en rseaux de Petri.
77
2.9 Extensions de la mthode SA-RT 2 Spcification
selon la mthode SA-RT


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
T
_
1
T
_
3
D
o
n
n

e
_
s
D
o
n
n

e
_
a
_
v
i
d
e
D
o
n
n

e
_
b
_
v
i
d
e
D
o
n
n

e
_
a
_
v
a
l
e
u
r
D
o
n
n

e
_
b
_
v
a
l
e
u
r
D
o
n
n

e
_
c
_
v
i
d
e
D
o
n
n

e
_
c
_
v
a
l
e
u
r
B
_
O
i
s
i
f
B
_
E
x

c
u
t
i
o
n
A
_
O
i
s
i
f
A
_
E
x

c
u
t
i
o
n
T
_
4
T
_
6
T
_
2
T
_
5
T
_
7
F
i
g
u
r
e

2
.
5
1


T
r
a
d
u
c
t
i
o
n

d
u

d
i
a
g
r
a
m
m
e

f
l
o
t
s

d
e

d
o
n
n

e
s

d
e

l
a

f
i
g
u
r
e

2
.
5
0

e
n

r

s
e
a
u
x

d
e

P
e
t
r
i
.
78
2.9 Extensions de la mthode SA-RT 2 Spcification
selon la mthode SA-RT
sus B. Lunit de stockage est modlise par une seule place Donne_s comme
le montre le modle initial de la gure 2.48. En se basant sur le modle gnrique
de la gure 2.46, les trois ots de donnes discrets sont reprsents chacun par deux
places, soit, par exemple pour le ot de donnes Donne_a du modle SA-RT :
Donne_a_vide et Donne_a_valeur . En rsum nous pouvons noter que,
lors de la traduction dun diagramme ots de donnes de SA-RT en un rseau de
Petri, il y aura toujours un nombre de places gal la somme des places des modles
gnriques des diffrents lments du diagramme SA-RT.
En revanche, nous pouvons constater que les transitions sont partages entre les
diffrents lments modliss. Considrons le cas du raccordement du ot de don-
nes Donne_a au processus fonctionnel A. La transition T_2 reprsente la fois
la transition Lire_donne du modle du ot de donnes discret et la transition
Excution du modle dun processus fonctionnel. De mme la transition T_1
reprsente la fois la transition crire_donne du modle du ot de donnes
discret et la transition Suppression du modle dun processus fonctionnel. La
dernire transition T_3, attache la modlisation du processus fonctionnel Proces-
sus A , correspond en mme temps la transition Fin du modle gnrique
dun processus fonctionnel et la transition crire_donne du modle de lunit
de stockage Donne_s . Nous pouvons rpter cette constatation pour lensemble
du rseau de Petri.
Le rseau de Petri, qui est lexact modle du diagramme ots de donnes SA-RT,
peut tre utilis pour vrier certaines proprits de la spcication comme la non
occurrence de lexcution simultane de deux processus fonctionnels, le chemine-
ment des donnes, etc. Une fonction de simulation peut tre ralise laide du
modle formel rseau de Petri sous-jacent aux diagrammes SA-RT. Dans ce cadre,
le rseau de Petri est analys en traant le graphe de marquages dans le cas de tran-
sition immdiate (modle [0,0] de Merlin et Farber), cest--dire lvolution de la
position des jetons dans le rseau. Si le modle des transitions temporises est pris
compte lanalyse est ralise laide dun graphe des classes. En parallle avec cette
volution des jetons correspondant lactivation ou non de laction associe la place,
il est alors possible de visualiser lactivit au niveau du diagramme ots de donnes
SA-RT. Prenons lexemple prcdent, le marquage prsent sur la gure 2.51 cor-
respond un moment de lexcution o nous avons les lments suivants :
pas de donne sur le ot de donnes discret Donne_a entrant ;
le processus fonctionnel Processus A en excution ;
une donne prsente dans lunit de stockage Donne_s ;
une donne prsente sur le ot de donnes discret Donne_b entrant ;
le processus fonctionnel Processus B en arrt ;
pas de donne sur le ot de donnes discret Donne_c sortant.
Par consquent, il est possible de visualiser ces diffrents tats sur le diagramme
ots de donnes initial, reprsent sur la gure 2.50. Cette visualisation peut tre
anime et donc ainsi permettre au concepteur de voir le droulement de lexcution
de diagramme ots de donnes SA-RT. Cette visualisation est schmatise sur la
2.9 Extensions de la mthode SA-RT
79


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
2 Spcification
selon la mthode SA-RT
gure 2.52 qui reprend la gure 2.50 avec une marque symbolisant lactivit dun
processus fonctionnel ou la prsence dune donne.
Donne_a
Donne_s
Donne_s
Processus
A
1
Donne_c
Processus
B
2
Figure 2.52 Visualisation de lexcution dun diagramme flots de donnes
en utilisant le rseau de Petri.
81


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

3 CONCEPTION
SELON LA MTHODE DARTS

3.1 Introduction

La mthode de conception va permettre de passer dun modle de spcication
aux programmes cods dans un langage excutable. tant donn lanalyse de type
fonctionnel et structur qui a t ralise avec la mthode SA-RT, nous pourrions
tre tents de traduire directement ces modules fonctionnels (processus fonctionnels
des diagrammes ots de donnes de SA-RT) en des entits de programmes. Cette
approche serait trs nfaste pour deux raisons :
dune part, le dcoupage modulaire de lapplication a t fait en se proccupant
essentiellement des fonctions raliser et non pas de la structuration efcace en
termes de ralisation et dexcution, cest--dire que le nombre de tches de
lapplication ne correspond pas obligatoirement au nombre de processus fonc-
tionnels des diagrammes SA-RT ;
dautre part, les relations entre les processus fonctionnels des diagrammes ots
de donnes sont dcrites de manire trs abstraite (zone mmoire, passage de
donnes) sans se proccuper de leurs implmentations possibles avec ou sans
synchronisation.
La question qui se pose concerne le choix de cette mthode. En effet, il serait tout
fait envisageable, comme nous lavons vu dans les exemples industriels du para-
graphe 1.3.4, dassocier une mthode danalyse de type ot de donnes une
mthode de conception de type orient objets . En revanche, le choix de lune
ou lautre voie amne quasi obligatoirement un choix de langage. Ainsi, la gure 3.1
reprsente les choix possibles selon les deux groupes de mthodes de conception.
La mthode DARTS (

Design Approach for Real-Time Systems

H. Gomaa, 1984)
trouve naturellement sa place entre la mthode danalyse SA-RT et une implmen-
tation avec un langage de programmation de haut niveau excut dans un envi-
ronnement de type noyau temps rel, ou avec un langage multitche (Ada) ou un
langage ots de donnes (LabVIEW).

3.1.1 Les besoins dune mthode de conception

La mthode de conception doit offrir tous les moyens dexpression lutilisateur
pour dcrire son application multitche. Ainsi, la conception doit pouvoir exprimer
82

3.1 Introduction

3 Conception
selon la mthode DARTS

larchitecture donne sur la gure 3.2, cest--dire les diffrentes tches, les relations
entre les tches et la possibilit daccs des ressources critiques.
Ainsi, nous pouvons donc dcliner les diffrentes caractristiques reprsenter
avec la mthode DARTS :
les tches : type dactivation, paramtres ou donnes en entres ou en sorties ;
les relations entre les tches :


synchronisation de type asynchrone ou synchrone (rendez-vous),


communication avec des donnes qui transitent entre deux tches ;
le partage de ressources critiques.
Ada
C++
Ada
C
labVIEW
SD Structured Design
(E. YOURDON, L.L. CONSTANTINE, G. MEYERS, 1979)
HOOD Hierarchical Object Oriented Design
(CRI-Cisi Ingnirie-Matra, 1987)
DARTS Design Approach for Real-Time Systems
(H. Gomaa, 1984)
MSMC Modlisation Simulation des Machines
Cyberntiques (H. Brenier, 1999)
Mthodes de conception orientes flot de donnes Mthodes de conception orientes objets

UML Unified Modeling Language
(Booch, Jacobson, Rumbbaugh, 1997)

Mthode et spcification fonctionnelle et structure
SA-RT
Figure 3.1 Les choix dune mthode de conception et du langage dimplmentation
suite une analyse de type SA-RT.
R
synchronisation
Ressource
critique
entre
entre
communication
synchronisation
communication
synchronisation
Tche 8
Tche 7
Tche 6 Tche 3
Tche 4
sortie
sortie
Tche 1
Tche 5
Tche 2
Figure 3.2 Architecture multitche dcrire avec la mthode de conception DARTS.
3.1 Introduction

83


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

3 Conception
selon la mthode DARTS

3.1.2 Modlisation des tches

Nous pouvons dnir deux grandes catgories de tches : les tches matrielles et
les tches logicielles.
Les

tches matrielles

(ou tches immdiates) sont associes des vnements
matriels externes au programme. Lactivation de ces tches se fait donc par une
interruption provenant soit du procd externe, soit du systme de contrle lui-
mme (horloge temps rel, temporisateur chien de garde ). Dans cette cat-
gorie de tches, nous trouvons en particulier toutes les tches dacquisitions qui
sont de type rgulier, cest--dire une acquisition par scrutation (

polling task

) du
capteur. Nous avons aussi les tches dacquisition qui sont dclenches par une
interruption externe comme une alerte gnre par un dpassement de paramtre.
Les

tches logicielles

(ou tches diffres) sont celles dont lactivation est demande
par une autre tche, tche appelante, qui peut tre de type matriel ou logiciel.
Dans le cas des tches logicielles, les caractristiques temporelles de la tche appele
sont dtermines dune part partir des attributs temporels de la tche appelante
et dautre part en fonction des relations temporelles spciques entre la tche
appelante et la tche appele. Ces tches doivent obligatoirement tre lies avec
une autre tche.
En ce qui concerne les tches matrielles, les spcications de lapplication vont en
particulier dcrire les caractristiques temporelles des signaux dinterruptions internes
ou externes associs ces tches matrielles. Les principaux types de signaux sont
(gure 3.4) :
les

signaux priodiques

qui peuvent tre caractriss par une premire date
doccurrence et une priode. Ces signaux (rfrencs 1 sur la gure 3.4) provien-
nent en gnral dune horloge interne HTR Horloge Temps Rel . ;
les

signaux apriodiques

qui se produisent de faon rptitive mais sans priode
xe (rfrencs 2 sur la gure 3.4). Pour dterminer les caractristiques des
tches associes ces signaux apriodiques, il est ncessaire de possder des infor-
mations temporelles les concernant, par exemple la dure minimale entre deux
occurrences ;
IT
Capteur Donnes
Demande
d'affichage
Tche
acquisition
Tche
affichage
Tches matrielles Tches logicielles
Figure 3.3 Exemple des deux types de tches matrielles et logicielles.
84

3.1 Introduction

3 Conception
selon la mthode DARTS

les

signaux sporadiques

qui se produisent une seule fois, comme les signaux
dalarme provenant du procd.

3.1.3 Relations entre les tches

Le point le plus complexe est la traduction des diffrentes relations entre les tches.
En effet, cette relation traduit un lien de dpendance entre les tches , cest--dire
quune ou plusieurs tches ne commencent leur excution uniquement que lors-
quune autre tche sest excute en partie ou en totalit. Cette synchronisation ou
communication peut tre unilatrale ou asynchrone (seule la tche en attente est
bloque), ou bilatrale ou synchrone (les deux tches ont un rendez-vous, exemple
du langage Ada). La gure 3.5 montre cette diffrence de relations de synchronisa-
tion entre deux tches. Dans le premier cas I de la relation asynchrone, la tche 1
bloque la tche 2 qui doit attendre lexcution dune partie de la tche 1 en un certain
point de son code ; en revanche, dans le second cas, les deux tches doivent sattendre
mutuellement.
Attache cette synchronisation de deux ou plusieurs tches, un transfert de donnes
peut tre associ, nous parlons alors de communication. Une communication est
caractrise par la taille de cette zone dchange de donnes (une ou plusieurs don-
nes) et le mode de gestion de cette zone de donnes (FIFO

First In Fisrt Out

,
priorit). Le critre principal, li cet change de donnes, est laspect bloquant
ou non de linteraction entre les tches. Si la production et la consommation de
donnes sont synchronises, cest--dire que, si la zone de donnes est vide, la tche
consommatrice ne peut sexcuter et rciproquement, si la zone de donnes est
pleine, la tche productrice ne peut sexcuter. Nous avons dans ce cas une com-
munication mettant en jeu une vraie synchronisation entre les tches. Dans le cas
contraire, la zone de donnes est dite crasement et nous avons un blocage
uniquement en lecture des donnes.
Tches
1 2
Horloge
temps rel
Procd contrler
Systme de contrle
Noyau
temps rel
Logiciel
Figure 3.4 Les diffrents types dactivation des tches matrielles.
Interactions du logiciel temps rel avec des vnements externes : (1) interruptions internes pro-
venant dune horloge temps rel, (2) interruptions externes provenant du procd contrler.
3.2 Prsentation de la mthode DARTS

85


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

3 Conception
selon la mthode DARTS

3.2 Prsentation de la mthode DARTS

La mthode de conception DARTS constitue le lien entre la mthode danalyse
SA-RT et limplmentation de lapplication. Nous allons tudier la mthode DARTS
dans sa forme la plus simple, cest--dire sappliquant des applications de contrle-
commande gnrales. Il est intressant de noter que des versions enrichies de cette
mthode de conception ont t cres an de rpondre des besoins spciques.
Nous trouvons ainsi :
mthode DARTS adapte une implmentation avec le langage Ada :

ADARTS

:

Ada Based Design Approach for Real-Time Systems

(GOMAA, 1987) ;
mthode DARTS adapte une application distribue :

CODARTS

:

Concurrent
Design Approach for Real-Time Systems

(GOMAA, 1987).
Pour sharmoniser de faon complte avec la mthode danalyse SA-RT, la mthode
de conception DARTS est de type ots de donnes. Ainsi, les diagrammes ots de
donnes de la mthode SA-RT (diagrammes prliminaires ou diagrammes de
dcomposition) sont traduits en diagramme ots de donnes DARTS reprsentant
larchitecture multitche de lapplication.
Dautre part, la mthode DARTS que nous prsentons dans cet ouvrage permet de
dcrire de nombreuses applications de type contrle-commande. Mais an dobtenir
des applications dont le test ou la vrication peuvent tre conduits de faon able,
nous avons volontairement limit la possibilit dexpression en se donnant des rgles
de bonne conception . Ces rgles correspondent en partie un prol de program-
mation adopt dans le cadre de la programmation en langage Ada dapplications
haut niveau de scurit. La prsentation dtaille de ce prol de programmation,
Synchronisation
unilatrale ou asynchrone
Tche 1
t
Tche 2
t
Attente
C
a
s

l
Tche 1
t
Tche 2
Tche 1
Tche 2
Tche 1
Tche 2
t
Pas dattente
C
a
s

I
I
Synchronisation
bilatrale ou synchrone (rendez-vous)
t
t
Attente
Point de synchronisation Point de synchronisation
Point de synchronisation
C
a
s

l
t
t
Pas dattente
Point de synchronisation Point de synchronisation
C
a
s

I
I
Attente
excution de lune ou lautre tche
Tche 1 Tche 2 Tche 2 Tche 1
Figure 3.5 Relations de synchronisation entre les tches.
86

3.2 Prsentation de la mthode DARTS

3 Conception
selon la mthode DARTS

appel

Ravenscar prole

(1997), est effectue dans le chapitre 5. Dans ce contexte,
nous pouvons ainsi dnir les rgles suivantes :
Nombre x de tches au dmarrage de lapplication.
Un seul vnement de dclenchement par tche : signal temporel, synchronisation
avec une autre tche.
Interaction entre les tches qui doit tre ralise uniquement par donnes partages
gres de manire atomique.
Possibilit danalyse fonctionnelle des tches de faon individuelle.
Il est noter que dautres rgles concernant plus la partie implmentation et laspect
ordonnancement sont tudies dans les chapitres concerns.

3.2.1 Syntaxe graphique de la mthode DARTS

Nous allons prsenter dans cette section les diffrents lments de la bibliothque
graphique de la mthode DARTS correspondant la phase de conception.

m

Modlisation des tches et modules

En premier lieu, nous trouvons la

tche

qui reprsente lentit de base de larchi-
tecture multitche. Nous pouvons avoir un ou plusieurs ots de donnes en entres
et un ou plusieurs ots de donnes en sortie (gure 3.6). Les tches sont modlises
par un paralllogramme qui comporte une tiquette ou label explicite form de :
tiquette_Tche verbe (+ un ou plusieurs complments dobjets)
Cette tiquette peut correspondre celle donne dans le cadre dun diagramme
ots de donnes SA-RT sil y a, par exemple, une correspondance entre une tche
et un processus fonctionnel comme nous allons ltudier dans la suite de ce chapitre.
Nous avons aussi un signal dactivation qui a une provenance et un type diffrents
selon que nous modlisons une tche matrielle (activation de type vnement
externe au programme) ou une tche logicielle (activation de type vnement interne
au programme : synchronisation ou communication). Ce signal dactivation doit
obligatoirement exister et doit tre unique pour rpondre au prol de conception x.
Nous avons aussi le

module de traitement

qui correspond des programmes sp-
ciques appels par les tches pour effectuer des calculs particuliers. Nous pouvons
avoir un ou plusieurs ots de donnes en entres et un ou plusieurs ots de donnes
en sortie (gure 3.6). Les modules de traitement sont modliss par un rectangle
qui comporte une tiquette ou label explicite form de :
=
Entre Sortie Sortie
Signal dactivation
Acqurir
pression
Tche Module de traitement
Calculer
FFT
Entre
Figure 3.6 Reprsentations des tches et des modules.
3.2 Prsentation de la mthode DARTS

87


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

3 Conception
selon la mthode DARTS

tiquette_Module verbe (+ un ou plusieurs complments dobjets)
Ces modules ne peuvent pas mettre ou recevoir des lments de type multitche :
synchronisation ou communication. Ils peuvent tre considrs comme rentrants,
cest--dire partags par plusieurs tches sans mettre en uvre une gestion spciale
de laccs. Ces modules concernent gnralement des calculs de type traitement du
signal, traitement dimages, loi de rgulation de lautomatique Cette sparation
des units de traitement permet de ne pas alourdir les tches en termes de code et
dy conserver uniquement laspect dynamique et comportemental.

m

Modlisation des synchronisations et des communications

En ce qui concerne les

synchronisations

, nous avons les modles correspondant
aux deux synchronisations prcdemment cites, cest--dire la synchronisation de
type asynchrone et la synchronisation de type synchrone, cest--dire le rendez-vous
(gure 3.7). Le modle synchronisation de type asynchrone est gnralement le
plus utilis car il permet une validation plus aise de lapplication. Ces modles
reprsentent le cheminement des dpendances entre les tches en termes dexcution.
Les synchronisations sont donc reprsentes par un symbole orient avec une ti-
quette ou label explicite form de :

tiquette_Synchronisation

nom (+ qualiant)
Cette synchronisation peut relier plusieurs tches en amont dune tche synchroni-
se en considrant une opration OU entre toutes les synchronisations en pro-
venance des tches en amont. Rappelons quil nest pas souhaitable davoir deux
synchronisations lentre dune tche ; cela correspondrait alors deux activations
de la tche, ce qui est contraire au prol de programmation nonc.
Pour les

communications

, nous avons plusieurs modles correspondant dune part
la taille de la zone de communication et dautre part la gestion de cette zone de
stockage des donnes (gure 3.8). Dune manire gnrale, ces modles botes
aux lettres BAL reprsentent le cheminement des donnes entre les tches avec
un aspect relation de prcdence pour certaines communications. Les communi-
cations sont donc reprsentes par un symbole orient avec une tiquette ou label
explicite form de :
=
=
Rendez-vous Synchronisation unique
Synchronisation multiple
de type OU
Figure 3.7 Reprsentations des synchronisations entre les tches.
88

3.2 Prsentation de la mthode DARTS

3 Conception
selon la mthode DARTS

tiquette_Communication

nom (+ qualiant)
Nous pouvons ainsi distinguer deux types de gestion de la zone de stockage des
donnes dun point de vue dpendance (relation synchrone ou non) :
les botes aux lettres bloquantes qui se dclinent en trois modles :


botes aux lettres bloquantes pouvant contenir

n

messages grs selon une le
FIFO,


botes aux lettres bloquantes ne pouvant contenir quun seul message,


botes aux lettres bloquantes pouvant contenir

n

messages grs selon une le
FIFO, classs par priorits correspondantes gnralement celle de la tche
mettrice de la donne ;
les botes aux lettres non bloquantes en criture ou BAL crasement qui se
dclinent en deux modles :


botes aux lettres non bloquantes en criture pouvant contenir n messages
grs selon une le FIFO,


botes aux lettres non bloquantes en criture ne pouvant contenir quun seul
message.
Les communications, dites crasement, fonctionnent en liminant la donne la
plus vieille dans le cas dune le FIFO ou la donne stocke dans le cas de la bote
aux lettres une place. Il est important de noter que ces communications sont non
bloquantes en criture uniquement et reprsentent donc une synchronisation et
une activation dune tche comme les autres types de communications. Comme
pour les synchronisations, ces communications peuvent possder plusieurs tches
en amont en considrant une opration OU entre toutes les communications en
provenance des tches en amont (gure 3.9). En revanche, il est dconseill davoir
plusieurs tches en aval car cela nuit au dterminisme du programme.
=
BAL une place
BAL priorit
BAL FIFO BAL FIFO crasement
BAL une place et crasement
Figure 3.8 Reprsentations des communications entre les tches.
3.2 Prsentation de la mthode DARTS

89


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

3 Conception
selon la mthode DARTS

m

Modlisation de lactivation des tches

Comme nous lavons prsent dans le paragraphe 3.1.2, il existe deux types de
tches : tches matrielles et tches logicielles. Dans les deux cas, lactivation est trs
diffrente. Ainsi, pour les tches matrielles qui sont dclenches par des vnements
ou signaux externes, nous distinguons trois types de signaux :
Signal Horloge temps rel HTR . Ce signal, qui provient dune horloge mat-
rielle interne lordinateur, correspond un signal rigoureusement priodique.
Signal Interruption IT . Ce signal qui provient du procd externe doit
toujours tre considr comme apriodique du fait de lasynchronisme du monde
extrieur par rapport au cadencement de lordinateur.
Signal Chien de garde CG . Ce signal provient dune horloge interne utilise
comme un rveil. Son utilisation et son fonctionnement sont dcrits de faon
dtaille dans la suite de cet ouvrage. En termes de signal, il est identique lhor-
loge temps rel (signal interne) ; mais il se produit de faon apriodique.
Les activations sont donc reprsentes par un symbole orient (ligne brise) avec
une tiquette ou label explicite form de (gure 3.10) :
tiquette_Activation_HTR HTR (dure en ms)
tiquette_Activation_IT IT (+ nom interruption)
tiquette_Activation_CG CG (+ nom chien de garde)
BAL FIFO multiple
de type OU
BAL FIFO crasement multiple
de type OU
Figure 3.9 Reprsentations des communications entre les tches
avec entres multiples de type OU .
Valeur de la priode en ms
Entre Sortie
Acqurir
temprature
Entre Sortie
Acqurir
temprature
HTR (Val_per)
IT (Nom_interruption),
CG (Nom_chien_de_garde)
Tche matrielle apriodique
Tche matrielle priodique
Figure 3.10 Reprsentations de lactivation des tches matrielles.
=
=
=
90

3.2 Prsentation de la mthode DARTS

3 Conception
selon la mthode DARTS

Comme nous lavons dj explicit, les tches logicielles sont dclenches par dautres
tches (matrielles ou logicielles) avec les mcanismes de synchronisation ou de
communication de type bloquant. Ainsi, le signal dactivation de ces tches peut
tre laction des lments suivants (gure 3.11) :
botes aux lettres crasement ou non gres selon une le FIFO ou FIFO
priorit ;
botes aux lettres crasement ou non une seule place ;
botes aux lettres

n

places gres selon la priorit.
Ainsi, nous pouvons noter quune tche logicielle ne peut pas tre active par un
lment de synchronisation et en mme temps tre connecte une autre tche en
amont par une bote aux lettres crasement, cest--dire bloquante en lecture
(gure 3.12). Ainsi, la tche Commander vanne doit tre synchronise soit par
la tche matrielle Attendre mesures qui est active par une interruption, soit
par lautre tche matrielle Acqurir niveau , dite scrutation, qui est priodique
et active par lhorloge temps rel dont la priode est de 350 ms.
Sortie
Commander
vanne
Entre
Acqurir
temprature
HTR (250 ms)
Tche logicielle
ou
Figure 3.11 Reprsentations de lactivation des tches logicielles.
Sortie
Commander
vanne
Attendre
mesures
IT (dclenchement_mesures)
Entre_niveau
Acqurir
niveau
HTR (350 ms)
BAL_niveau
Evt_mesure
?
Figure 3.12 Exemple de dysfonctionnement de synchronisation dune tche logicielle
par deux tches matrielles.
3.2 Prsentation de la mthode DARTS

91


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

3 Conception
selon la mthode DARTS

m

Modlisation des stockages de donnes

Le dernier lment modliser est le

module de donnes

qui permet une protection
des accs une unit de gestion de donnes en

exclusion mutuelle

par deux ou
plusieurs tches. Les modules de donnes sont reprsents par un rectangle associ
des entres permettant de raliser une action sur les donnes :

LIRE

,

CRIRE

, etc.
Ce symbole du module de donnes est reprsent avec une tiquette ou label expli-
cite form de (gure 3.13) :

tiquette_module_donnes

nom (+ qualiant)
Si laction met en jeu un transfert de donne entre la tche et le module de donnes
(

LIRE

,

CRIRE

, etc.), la che est oriente dans le sens de ce transfert de donnes.
Si ce nest pas le cas (

INITIALISER

,

TRIER

, etc.), la che est oriente de la tche
vers le module de donnes an de montrer la demande queffectue la tche sur ce
module de donnes (gure 3.14). Il est important de noter que plusieurs tches
peuvent accder un module de donnes puisque ce module de donnes est gr
en exclusion mutuelle.
Il est important de noter que cet lment module de donnes ne peut en aucun
cas tre utilis comme un lment de synchronisation. Les deux tches 1 et 2 de la
gure 3.13 sont totalement asynchrones et doivent possder leur propre mcanisme
dactivation. Nous pourrions dnir le module de donnes comme une bote aux
lettres crasement en criture et lecture non destructive avec un message par dfaut
linitialisation.
=
LIRE
CRIRE
Tche
1
Tche
2
Module_de_donnes
Figure 3.13 Reprsentations dun module de donnes
partag par plusieurs tches.
LIRE
CRIRE
LIRE
CRIRE
INITIALISER
Module_de_donnes Module_de_donnes
Figure 3.14 Reprsentations de diffrents modules de donnes
partags par plusieurs tches.
92

3.2 Prsentation de la mthode DARTS

3 Conception
selon la mthode DARTS

3.2.2 Mise en uvre de la mthode DARTS

Cette section dcrit le passage de la spcication SA-RT la conception DARTS.
Aprs quelques rgles de base permettant de donner un guide mthodologique
ce passage SA-RT/DARTS, des exemples simples sont dcrits et nous nissons par
lexemple du systme de freinage automobile dj spci.
m Rgles gnrales
Pour cette mthode de conception non formelle, nous allons dnir des rgles gn-
rales permettant de passer dun diagramme ots de donnes de la mthode SA-RT
un diagramme multitche DARTS. Pour cela, nous devons raliser la traduction
selon les quatre phases suivantes :
Phase 1 : Cration des tches. Cela correspond la traduction des processus
fonctionnels ou de contrle en tches.
Phase 2 : Dtermination du typage et de lactivation des tches. Les tches sont
dclares matrielles ou logicielles. Dans le cas des tches matrielles, le signal
dactivation doit tre dni prcisment (HTR, IT, CG). Pour les autres tches
logicielles, il est ncessaire didentier les synchronisations permettant de les
activer. Celles-ci sont souvent dj dclares comme des vnements traits par
le processus de contrle.
Phase 3 : Mise en place des synchronisations et des transferts de donnes.
Les relations par communications sont traduites par des botes aux lettres ou
par des modules de donnes.
Phase 4 : Regroupement ou rassemblement des tches. An damliorer et de
simplier la premire conception ralise de faon semi-automatique en suivant
les trois rgles de base que nous allons dcrire, le diagramme multitche est de
nouveau analys, et les tches sont regroupes selon un ensemble de critres qui
sont exposs dans la suite.
Pour la premire phase de cration des tches, nous pouvons dnir trois rgles de
base qui servent de guide cette traduction semi-automatise :
Rgle 1.1 : Une tche du modle DARTS est cre pour chaque processus fonc-
tionnel du diagramme SA-RT.
Rgle 1.2 : Une tche supplmentaire du modle DARTS est associe au proces-
sus de contrle du diagramme SA-RT si le diagramme tat/transition, associ
ce processus de contrle, est complexe, cest--dire quil possde au moins une
structure conditionnelle.
En ce qui concerne le typage et lactivation des tches, nous pouvons noncer les
rgles suivantes :
Rgle 2.1 : Une tche en entre (acquisition de donnes) est obligatoirement de
type matriel dclenche soit par lhorloge temps rel (ex. : tche de scrutation
dun paramtre physique), soit par une interruption provenant du procd
(ex. : tche dalarme).
3.2 Prsentation de la mthode DARTS
93


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
3 Conception
selon la mthode DARTS
Rgle 2.2 : Les autres tches sont dclares soit logicielles (activation par syn-
chronisation ou communication avec les tches matrielles), soit matrielles
dclenche par un vnement interne (horloge temps rel, chien de garde).
Rgle 2.3 : Les vnements importants du diagramme ots de donnes de SA-RT
peuvent tre traduits par des synchronisations qui sont utilises pour activer des
tches logicielles.
Enn, les communications entre les tches de DARTS sont tablies en se basant
sur les deux rgles suivantes :
Rgle 3.1 : Les communications directes entre les processus fonctionnels (ot de
donnes dun processus fonctionnel un autre) sont traduites prfrentiellement
par des botes aux lettres.
Rgle 3.2 : Les communications par une zone de stockage entre les processus
fonctionnels sont traduites prfrentiellement par des modules de donnes, en
particulier si cette zone de stockage se trouve partage par plus de deux tches.
Les rgles (ou critres de regroupement des tches) concernant la dernire phase
sont tudies dans la suite de cette section sur un exemple prcis.
Cet ensemble de rgles ne constitue pas une traduction automatique et formelle de
la spcication SA-RT en des diagrammes multitches DARTS. En effet, la rgle,
qui concerne les regroupements ou les scissions ventuelles des tches cres en se
basant sur les deux premires rgles 1.1 et 1.2, laisse un libre choix de la congura-
tion multitche. De mme les deux rgles 3.1 et 3.2, concernant les communica-
tions entre les tches, ne dnissent en rien la gestion de ces botes aux lettres
(FIFO ou priorit, crasement ou non, une ou plusieurs places). Ainsi, en partant
dune mme spcication SA-RT (diagramme ots de donnes), cette phase de
conception, base sur DARTS, donne naturellement plusieurs solutions selon le
concepteur qui effectue la traduction.
m Exemples simples de traduction de SA-RT vers DARTS
Nous allons appliquer quelques rgles nonces prcdemment en les illustrant
dexemples simples. Soit la gure 3.15, considrons le processus fonctionnel cor-
respondant lacquisition de donnes provenant de deux capteurs (thermocouple
et capteur rotatif ). Daprs la rgle 2.1, ce processus fonctionnel se transforme en
une tche matrielle dentre qui va tre active priodiquement (priode de 2 ms).
Tester
tat
Moteur
3
Temprature_moteur
Vitesse_moteur
Commande_moteur
HTR (2 ms)
Contrle
moteur
Temprature_moteur
Vitesse_moteur
Commande_moteur
Figure 3.15 Traduction dun processus fonctionnel dacquisition de donnes
en une tche priodique.
94
3.2 Prsentation de la mthode DARTS 3 Conception
selon la mthode DARTS
Nous pouvons noter les noms des diffrents lments qui sont conservs autant
que possible. Cette tche matrielle est donc une tche dacquisition de donnes
dite scrutation. La transmission de la donne Commande_moteur est traduite
par une bote aux lettres n places conformment la prconisation de la rgle 3.1.
Dans lexemple de la gure 3.16, nous avons aussi un processus fonctionnel cor-
respondant lacquisition de donnes provenant de deux capteurs (thermocouple
et capteur rotatif ). Daprs la rgle 2.1, ce processus fonctionnel se transforme en
une tche matrielle dentre qui va tre active par une interruption (Dpassement_
temprature) qui est issue de la mesure du capteur de temprature. La tche ainsi
cre est donc apriodique et sactive au rythme de linterruption. Le processus
fonctionnel met un vnement Afcher_alarme vers le processus de contrle
suppos. Dans ce cas, en appliquant la rgle 3.2, nous traduisons cet vnement
par une synchronisation nomme Alarme .
De la mme manire que pour la cration des tches partir des diagrammes ots
de donnes de SA-RT, la traduction des transferts de donnes peut suivre les rgles
afches. Ainsi, la gure 3.17, qui prsente un ot de donnes direct entre deux
processus fonctionnels, montre la traduction par un lment de communication
de type bote aux lettres conformment la rgle 3.1. Nous pouvons remarquer
que la premire tche est de type matriel, dclenche par une horloge temps rel,
et la deuxime tche de type logiciel est active par la synchronisation de la commu-
nication par bote aux lettres.
Le deuxime cas trait, illustr sur la gure 3.18, est celui du transfert de donnes
par une unit de stockage au niveau du diagramme ots de donnes SA-RT. Selon
Tester
tat
Moteur
3
Afficher_alarme
IT (Dpassement_temprature)
Tester
tat moteur
Vitesse_moteur
Alarme
Temprature_moteur
Vitesse_moteur
Figure 3.16 Traduction dun processus fonctionnel dacquisition de donnes
en une tche apriodique.
HTR
Donnes
Donnes
Produire
donnes
Consommer
donnes
Produire
donnes
1
Consommer
donnes
2
Figure 3.17 Traduction dun flot de donnes direct entre deux processus fonctionnels
par une bote aux lettres.
3.2 Prsentation de la mthode DARTS
95


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
3 Conception
selon la mthode DARTS
la rgle 3.2, il est naturel de traduire ce ot de donnes par un module de donnes ;
toutefois ce transfert tant limit deux processus fonctionnels, aurait pu aussi tre
traduit par un lment de type bote aux lettres comme dans le cas de la gure 3.17.
En revanche, la premire traduction par un module de donnes, qui nest pas une
synchronisation, oblige synchroniser aussi la deuxime tche par une autre horloge
temps rel par exemple. Les tches sont alors indpendantes au niveau de leur cadence
dexcution.
m Une premire conception avec DARTS
Nous allons mettre en uvre cette mthodologie DARTS pour lexemple dcrit
jusqu prsent, cest--dire le systme de freinage automobile . Pour cela nous
allons considrer le dernier diagramme prliminaire dni, celui de la gure 2.20,
modi avec la partie de diagramme reprsent sur la gure 2.25. Ce diagramme
prliminaire, prsent sur la gure 3.19, sert de base pour la traduction en dia-
gramme multitche DARTS.
La premire phase mettre en uvre est la cration des tches. Ainsi, selon la rgle 1.1,
nous allons crer cinq tches correspondant aux cinq processus fonctionnels du
diagramme prliminaire. Le processus de contrle de ce diagramme prliminaire a
un fonctionnement dcrit par le diagramme tat/transition relativement complexe
reprsent sur la gure 2.24. Par consquent, daprs la rgle 1.2, nous devons dans
une premire tape traduire ce processus de contrle par une tche. Ainsi, nous
obtenons un diagramme multitche DARTS comportant six tches ayant les mmes
noms que les processus fonctionnels SA-RT du diagramme prliminaire de la
gure 3.19. Ce diagramme multitche DARTS, reprsent sur la gure 3.20, com-
porte de plus pour chacune des tches les entres/sorties des processus fonctionnels
correspondant avec des noms identiques. La nomination correspondante entre les
diagrammes SA-RT et DARTS nest pas obligatoire, mais elle joue un rle important
sur la traabilit lors du passage de la spcication la conception.
La deuxime phase concerne la dtermination du type des tches et de leur activation.
En suivant la rgle 2.1, les tches dacquisition Acqurir demande freinage ,
Produire
donnes
HTR_1
Donnes
Produire
donnes
1
Consommer
donnes
2
Consommer
donnes
Donnes
HTR_2
LIRE
CRIRE
Figure 3.18 Traduction dune unit de stockage entre deux processus fonctionnels
par un module de donnes.
96
3.2 Prsentation de la mthode DARTS 3 Conception
selon la mthode DARTS
Dtecter glissement et Lire boutons ABS sont tout naturellement des tches
matrielles de type scrutation (tche priodique dclenche par lhorloge temps rel).
Nous allons dnir les priodes respectives de ces tches : 100, 150 et 1 000 ms.
Les trois autres tches peuvent tre des tches logicielles, si elles sont actives par
lune des tches prcdentes, ou ventuellement une tche matrielle. Nous pouvons
identier sur le diagramme prliminaire de la gure 3.19 deux vnements Freinage
et ABS_activ qui vont agir respectivement sur les tches Contrler appli-
cation et Afcher tat bouton ABS . Ces deux vnements peuvent donc tre
traduits par des synchronisations (gure 3.20).
Nous arrivons maintenant la troisime et dernire phase de traduction quasi-
automatique du diagramme SA-RT en diagramme DARTS, sachant que la phase
suivante correspond la partie de la conception par reprise et amlioration du dia-
gramme DARTS obtenu aprs les trois premires phases. La mise en place des com-
munications se fait en suivant les rgles 3.1 et 3.2. Nous avons donc une traduction
du ot de donnes direct entre les deux processus fonctionnels Acqurir demande
freinage et Commander freinage par une bote aux lettres. Le type de bote aux
lettres choisi est une BAL FIFO crasement. En effet, comme nous allons le voir,
la tche Commander freinage peut sexcuter moins souvent que la tche de
scrutation du capteur Acqurir demande freinage du fait de larrt du freinage
lors du glissement et du systme ABS en fonctionnement. Toutefois il est ncessaire
de synchroniser cette tche Commander freinage avec la tche Contrler
Demande_freinage
Commande_freinage
Affichage_ABS
Glissement_
roue
Activation_ABS
Niveau_freinage
A
B
S
_
a
c
t
i
v

P
a
s
_
d
e
_
f
r
e
i
n
a
g
e
Mise_en_marche
F
r
e
i
n
a
g
e
T
A
B
S
_
n
o
n
_
a
c
t
i
v

E/D
E/D
E/D
E/D
G
lis
s
e
m
e
n
t
P
a
s
_
d
e
_
g
lis
s
e
m
e
n
t
Acqurir
demande
freinage
1
Commander
freinage
3
Contrler
application
6
Lire
bouton
ABS
4
Dtecter
glissement
de roue
2
Afficher
tat bouton
ABS
5
Figure 3.19 Diagramme prliminaire de lapplication systme de freinage automobile
servant de base la conception DARTS.
3.2 Prsentation de la mthode DARTS
97


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
3 Conception
selon la mthode DARTS
freinage ; cela est ralis avec la synchronisation Evt_freinage . Dautre part, il
est ncessaire de passer les informations sur ltat du bouton ABS et sur le glissement
de la roue. Comme les tches dacquisitions de ces deux paramtres sont actives
des rythmes diffrents de la tche Contrler freinage qui travaille la priode
de la tche Acqurir demande freinage , nous sommes contraints de dcoupler
ces passages de paramtres laide de deux modules de donnes : Etat_glissement
et Etat_demande_ABS . Enn, la tche Afcher tat bouton ABS peut puiser
son information dans le module de donnes Etat_demande_ABS .
Avant de continuer la conception partir de ce premier diagramme multitche
ainsi labor, nous allons nous intresser ce dernier cas de relation entre deux tches
qui doivent se synchroniser et schanger une donne partage par dautres tches.
Cette liaison peut se faire de trois manires diffrentes. Les conditions initiales
sont une premire tche dont lactivation est dnie (dans cet exemple, une horloge
temps rel), une deuxime tche de type logiciel quil est ncessaire de synchroniser
et un module de donnes cr an de distribuer une donne vers dautres tches.
Ainsi, les diffrents cas, prsents sur la gure 3.21, sont les suivants :
Cas I : ce cas est celui adopt dans la solution du diagramme DARTS de la
gure 3.20. La deuxime tche est donc lie la premire par une synchronisation
et la transmission de la donne entre ces deux tches est faite au travers du module
de donnes.
HTR (100 ms)
tat_demande_ABS
Commander
freinage
Demande_freinage
Affichage_ABS
Commande_freinage
HTR (150 ms)
Glissement_roue
tat_glissement
Niveau_freinage
HTR (1 000 ms)
Activation_ABS
Freinage
Evt _freinage
ABS_activ
Lire
bouton ABS
Afficher
tat bouton ABS
Acqurir
Demande freinage
Dtecter
glissement roue
Contrler
application
LIRE
CRIRE
LIRE
CRIRE
Figure 3.20 Premire conception du diagramme multitche DARTS
partir du diagramme prliminaire de la figure 3.19.
98
3.2 Prsentation de la mthode DARTS 3 Conception
selon la mthode DARTS
Cas II : la deuxime tche rcupre la donne par une bote aux lettres qui sert
en mme temps dactivation. Ainsi, la lecture de la donne par cette deuxime
tche vers le module de donnes devient inutile.
Cas III : tous les liens de synchronisation entre les deux tches sont supprims
et la deuxime tche lit la donne dans le module de donnes. Pour lactivation
de la deuxime tche, il est ncessaire de mettre un vnement de type horloge
temps rel . Les deux tches ont donc des activations priodiques de mme
priode mais non synchronises. Pour conserver la relation de dpendance entre
ces deux tches, la seule solution rside dans lutilisation des priorits : la premire
tche Lire bouton ABS ayant la priorit la plus grande.
Reprenons le travail de conception du diagramme multitche ralis (gure 3.20) par
la dernire phase, cest--dire le regroupement ou le rassemblement de tches. Pour
obtenir un programme multitche plus simple valider et raliser, nous devons
Lire
bouton ABS
HTR (1 000 ms)
Activation_ABS
ABS_activ
Afficher
tat bouton ABS
Afficher
tat bouton ABS
HTR (1 000 ms)
Activation_ABS
tat_demande_ABS_2
HTR (1 000 ms)
Activation_ABS
HTR (1 000 ms)
Affichage_ABS
Affichage_ABS
Affichage_ABS
Lire
bouton ABS
Lire
bouton ABS
Afficher
tat bouton ABS
Cas l
Cas Il
Cas IIl
tat_demande_ABS
LIRE
CRIRE
tat_demande_ABS
LIRE
CRIRE
tat_demande_ABS
LIRE
CRIRE
Figure 3.21 Diffrentes mthodes de relations
entre deux tches communicantes dun diagramme multitche DARTS.
3.2 Prsentation de la mthode DARTS
99


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
3 Conception
selon la mthode DARTS
rduire si possible le nombre de tches. Le regroupement peut tre effectu en amont
directement sur les processus fonctionnels ou ensuite sur les tches cres de faon
automatique (un processus fonctionnel une tche). Ce regroupement de processus
fonctionnels ou de tches va seffectuer sur les bases de critres de cohsion. Mme
si ce guide mthodologique nest pas formel, il permet de travailler de faon efcace
sur le diagramme SA-RT ou le diagramme DARTS. Ainsi, nous pouvons lister les
critres possibles de regroupement de tches :
Cohsion temporelle : le regroupement concerne des processus fonctionnels qui
doivent tre activs par le mme vnement ou la mme priode. La gure 3.22
montre lexemple de deux processus fonctionnels qui se traduisent par deux tches
qui sexcutent au mme rythme.
Cohsion squentielle : le regroupement concerne des processus fonctionnels
qui doivent sexcuter en squence. La gure 3.23 montre deux processus fonc-
tionnels qui doivent obligatoirement sexcuter en squence.
Cohrence du contrle : le regroupement concerne des processus fonctionnels
contrls par un ou plusieurs vnements corrls. La gure 3.24 montre deux
processus fonctionnels qui remplissent une fonction trs corrle et qui sont
cadencs par un processus de contrle.
=
Contrler
frein
4
Contrler
frein
3 Contrler
tats
moteur et frein
Commande_moteur
Commande_frein
Moteur_arrt
Moteur_en_marche
Freinage
Pas_de_freinage
tat_moteur
tat_frein
tat_frein
tat_moteur
Figure 3.22 Exemple dun regroupement de tches dun diagramme multitche DARTS
bas sur une cohsion temporelle.
Taille_roue Temps
Dterminer
vitesse
Vitesse
IT (Capteur_roue)
Dterminer
distance
1
Dterminer
distance
2
Distance Capteur_roue Vitesse
Figure 3.23 Exemple dun regroupement de tches dun diagramme multitche DARTS
bas sur une cohsion squentielle.
100
3.2 Prsentation de la mthode DARTS 3 Conception
selon la mthode DARTS
Cohsion fonctionnelle : le regroupement concerne des processus fonctionnels
lis une fonctionnalit unique. La gure 3.25 montre le regroupement de trois
processus fonctionnels qui concourent la mme fonction (pilotage dun robot).
Il est important de noter que certaines tches remplissent parfois plusieurs de ces
critres la fois et donc la justication du regroupement est encore plus vidente.
En appliquant ces critres de cohsion au diagramme DARTS de lapplication sys-
tme de freinage automobile de la gure 3.20, nous obtenons un diagramme multi-
tche plus compact, puisque nous passons dune architecture six tches quatre tches.
Le premier regroupement concerne les deux tches Commander freinage et
Contrler application qui remplissent la fois le critre de cohsion de contrle
et le critre de cohsion fonctionnelle. Nous obtenons ainsi une seule tche qui est
appele Contrler freinage . Nous pouvons remarquer quil parat important que
cette tche, issue du regroupement de plusieurs tches, ne porte pas le mme nom
dautant quelle ne correspond plus un processus fonctionnel du diagramme SA-RT
initial. Notons que ce regroupement conomise deux synchronisations ; en revanche,
la bote aux lettres de type FIFO crasement a t remplace par une bote aux
lettres de type FIFO sans crasement an de raliser une synchronisation forte.
Grer
affichage
des donnes
HTR
Commande_affichage
Grer
affichage
1
Afficher
nouvelle
valeur
2
Effacer
ancienne
valeur
3
effacement
donne
T
T
Figure 3.24 Exemple dun regroupement de tches dun diagramme multitche DARTS
bas sur une cohsion de contrle.
E/D
Programme_robot
Piloter
robot
HTR
Acqurir
capteur
3
Commander
dplacements
2
Position_finale
Donne_capteur
Position_initiale
Commande_robot
Commande_robot
Donne_capteur
Commander
robot
1
Programme_robot
LIRE
CRIRE
Figure 3.25 Exemple dun regroupement de tches dun diagramme multitche DARTS
bas sur une cohsion fonctionnelle.
3.2 Prsentation de la mthode DARTS
101


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
3 Conception
selon la mthode DARTS
Le deuxime regroupement effectu concerne les deux tches Lire bouton ABS
et Afcher tat bouton ABS qui remplissent la fois le critre de cohsion tem-
porelle et le critre de cohsion fonctionnelle. Nous obtenons alors une seule tche
qui est appele Lire et afcher demande ABS . Dans ce cas aussi, le diagramme
fait lconomie dune synchronisation.
Nous obtenons ainsi un diagramme DARTS plus simple dun point de vue multi-
tche. Cette clarication de larchitecture logicielle permet alors une comprhension
plus aise qui peut conduire une validation plus complte.
Ainsi, nous avons mis en uvre la mthode de conception DARTS. partir de la
spcication ralise laide de la mthode danalyse SA-RT, la transformation
consiste obtenir une architecture multitche avec une dmarche la plus automatise
possible. Pour cela, nous avons dcompos cette conception DARTS en quatre phases
que nous pouvons rappeler :
Phase 1 : Cration des tches.
Phase 2 : Dtermination du typage et de lactivation des tches.
Phase 3 : Mise en place des synchronisations et des transferts de donnes.
Phase 4 : Regroupement de tches.
Acqurir
Demande freinage
HTR (100 ms)
Contrler
freinage
Demande_freinage
Lire et afficher
demande ABS
HTR (1 000 ms)
Activation_ABS
Affichage_ABS
Commande_freinage
HTR (150 ms)
Glissement_roue
Niveau_freinage
Dtecter
glissement roue
tat glissement tat demande ABS
LIRE
CRIRE
LIRE
CRIRE
Figure 3.26 Deuxime conception du diagramme multitche DARTS
obtenue partir du regroupement de tches du diagramme DARTS de la figure 3.20.
102
3.3 Exemples de conception
avec la mthode DARTS
3 Conception
selon la mthode DARTS
3.3 Exemples de conception avec la mthode DARTS
Nous allons mettre en uvre cette mthodologie DARTS pour les exemples plus
complexes que lexemple dcrit jusqu prsent systme de freinage automobile .
3.3.1 Exemple : gestion de la scurit dune mine
Pour lexemple dcrit gestion de la scurit dune mine , nous allons considrer le
diagramme prliminaire spci dans le chapitre 2 et reprsent sur la gure 2.32.
Le diagramme prliminaire de cette application, qui comporte quatre processus fonc-
tionnels et un processus de contrle, sert de base pour la traduction en diagramme
multitche DARTS.
Aprs la mise en uvre des quatre phases de la conception DARTS, nous obtenons
un modle multitche possible de lapplication, prsent sur la gure 3.27. Cette
reprsentation multitche intgre cinq tches correspondant aux diffrents processus
du diagramme prliminaire SA-RT. Nous pouvons noter immdiatement que le
processus de contrle a t traduit par une tche qui est reste aprs la phase de
regroupement. En effet, cette tche prsente une complexit algorithmique de bon
niveau qui est mise en exergue par le diagramme tat/transition de la gure 2.33.
Les deux processus fonctionnels dacquisitions de donnes ont t traduits par deux
tches matrielles Acqurir capteur mthane et Acqurir capteur eau dclen-
ches par lhorloge temps rel. Elles possdent des priodes trs diffrentes lies la
MS
Alarme
LS
Commande_pompe
Niveau_mthane
Vitesse_pompe
Evt_alarme
Commander
pompe
Contrler
mine
Acqurir
capteur eau
Acqurir
capteur mthane
afficher
alarme
HTR (500 ms)
HTR (5 000 ms)
Niveau_eau
LIRE
CRIRE
Figure 3.27 Diagramme multitche DARTS obtenu partir du diagramme prliminaire
de lapplication gestion de la scurit dune mine de la figure 2.32.
3.3 Exemples de conception
avec la mthode DARTS
103


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
3 Conception
selon la mthode DARTS
dynamique des grandeurs physiques associes : 500 ms pour la mesure dun taux
de gaz (variation du mthane dans lair : volution rapide) et 5 s pour la mesure dun
niveau (eau dans un puisard : volution lente). Cette diffrence de vitesse dexcution
ncessite lemploi dun module de donnes Niveau_eau pour le passage de para-
mtres an de dsynchroniser ces tches. La tche la plus rapide va cadencer le pilo-
tage gnral de lapplication en se synchronisant avec les tches suivantes de rgula-
tion : Contrler mine , Commander pompe et Afcher alarme .
Remarque
La tche dacquisition de donnes, dont la priode est la plus petite, va dicter la cadence principale
dexcution de lapplication, cest--dire synchroniser la rgulation du procd.
Il est intressant de noter les traductions des synchronisations et des communications
entre le diagramme SA-RT et le diagramme DARTS. En effet, les vnements du
diagramme SA-RT Niveau_LLS et Niveau_HLS ont t remplacs par un
module de donnes qui sauvegarde la comparaison par rapport aux niveaux de
consignes et aussi le niveau de leau. Ainsi, le ot de donnes direct entre les pro-
cessus fonctionnels Acqurir capteur eau et Commander pompe se retrouve
sous la forme dune bote aux lettres une place crasement entre les deux tches
Contrler mine et Commander pompe . De la mme manire, les trois v-
nements Consignes_respectes , MS_L1_dpasse et MS_L2_dpasse sont
remplaces par une bote aux lettres une place crasement entre les deux tches
Acqurir capteur mthane et Contrler mine . Enn, lvnement E/D
de commande du processus fonctionnel Afcher alarme est traduit par une
synchronisation Evt_alarme entre les deux tches Contrler mine et Afcher
alarme .
La traduction du diagramme SA-RT de cette application gestion de la scurit
dune mine a t ralise de faon assez simple avec une trs faible part la phase 4
de conception avec des modications de la traduction semi-automatique effectue
dans les trois premires phases. Lexemple suivant montre le contraire, o la phase 4
va modier profondment le diagramme DARTS issu de la traduction semi-auto-
matique du diagramme SA-RT.
3.3.2 Exemple : pilotage dun four verre
Pour lexemple dcrit pilotage dun four verre , nous allons considrer le dia-
gramme prliminaire spci dans le chapitre 2 et reprsent sur la gure 2.36. Le
diagramme prliminaire de cette application, qui comporte six processus fonctionnels
et un processus de contrle, sert de base pour la traduction en diagramme multi-
tche DARTS.
Aprs la mise en uvre des quatre phases de la conception DARTS, nous obtenons
un modle multitche possible de lapplication, prsent sur la gure 3.28. Cette
reprsentation multitche intgre cinq tches qui ne correspondent pas exactement
aux diffrents processus du digramme prliminaire SA-RT. Nous pouvons noter
immdiatement que le processus de contrle na pas t traduit par une tche. En
effet, cette tche aurait reprsent une complexit algorithmique trs faible comme
le montre le diagramme tat/transition de la gure 2.37.
104
3.3 Exemples de conception
avec la mthode DARTS
3 Conception
selon la mthode DARTS
Nous pouvons noter immdiatement le regroupement qui a t effectu entre les
processus fonctionnels Analyser temprature et Chauffer four pour donner une
seule tche appele Rguler temprature sur des critres de cohsion fonctionnelle
et squentielle.
Deux des trois processus fonctionnels dentre de donnes ont t traduits par
deux tches matrielles Acqurir temprature et Dtecter arrive sable . La
premire tche est une tche priodique scrutation dclenche par lhorloge
temps rel de priode 1 s. En revanche, la deuxime tche est une tche matrielle
dclenche par une interruption Arrive_sable . Cette tche est utilise pour
dclencher de faon logicielle, par une synchronisation Sable_tomb , la tche
dacquisition Acqurir niveau traduction dun processus fonctionnel dentre de
donnes. Nous avons ici un exemple rare de processus dacquisition qui est traduite
par une tche logicielle.
Nous avons une traduction trs classique des transferts de donnes. Ainsi, le ot de
donnes direct Niveau_mesur entre les processus fonctionnels Acqurir niveau
et Analyser besoin sable se retrouve sous la forme dune bote aux lettres du
mme nom entre les deux tches aussi de mme nom conformment la rgle 3.1.
De la mme manire, le transfert de la donne Temprature_mesure sous la forme
dune zone de stockage, partage par les trois processus fonctionnels Acqurir tem-
prature , Analyser temprature et Analyser besoin sable , est traduit par un
module de donnes du mme nom conformment la rgle 3.2 qui est accd par
les trois tches Acqurir temprature , Rguler temprature et Analyser besoin
sable .
Temprature Chauffage
Acqurir
temprature
Rguler
temprature
HTR (1 000 ms)
Acqurir
niveau
Sable_tomb
IT (Arrive_sable)
Sable
Niveau
Analyser
besoin sable
Niveau_mesur
Evt_Temprature
Dtecter
arrive sable
Temprature_mesure
LIRE
CRIRE
Figure 3.28 Premier diagramme multitche DARTS obtenu partir du diagramme prliminaire
de lapplication pilotage dun four verre de la figure 2.36.
3.3 Exemples de conception
avec la mthode DARTS
105


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
3 Conception
selon la mthode DARTS
Nous pouvons noter la relation entre les deux tches Acqurir temprature , et
Rguler temprature qui correspond aux modles du cas I de la gure 3.21.
Aussi, cette relation aurait pu tre traduite par les autres modles possibles (cas II
et III de la gure 3.21).
Pour terminer ltude de cette conception, nous allons analyser le comportement de
cette architecture multitche. Ainsi, lexcution de la squence des tches Dtecter
arrive sable , Acqurir niveau et Analyser besoin sable est conditionne
par larrive de linterruption Arrive_sable de dclenchement de la tche ini-
tiale Dtecter arrive sable . Si aucun approvisionnement en sable ne seffectue,
alors linterruption ne peut se produire et cette chane dexcution est bloque, car
seule la tche nale Analyser besoin sable peut modier lapprovisionnement
en sable. An de pallier ce problme, une solution base sur un chien de garde est
mise en place. La tche Analyser besoin sable va crer un chien de garde destin
la rveiller dans le cas o elle resterait inactive pendant une dure suprieure 5 s.
Si ce dysfonctionnement se produit, un vnement li ce chien de garde est gnr
et peut tre utilis pour rsoudre le blocage. Cela explique la prsence sur la
gure 3.29 de la tche matrielle Alarme dclenche par le chien de garde CG
de dure 5 s. Cette tche ne correspond aucun processus fonctionnel du diagramme
SA-RT. Lors de son excution, la tche Alarme va gnrer une synchronisation
identique celle gnre par la tche Dtecter arrive sable . Ainsi, la squence
va tre dbloque, une nouvelle mesure du niveau du sable, qui aura diminu, con-
duira une modication de la vitesse dapprovisionnement.
Temprature Chauffage
Acqurir
temprature
Rguler
temprature
HTR (1 000 ms)
Sable
Analyser
besoin sable
Evt_Temprature
Temprature_mesure
LIRE
CRIRE
CG (5 000 ms)
Acqurir
niveau
Sable_tomb
IT (Arrive_sable)
Niveau
Niveau_mesur
Alarme
Dtecter
arrive sable
Figure 3.29 Deuxime diagramme multitche DARTS obtenu partir du diagramme prlimi-
naire de lapplication pilotage dun four verre de la figure 2.36 avec la prsence dune
tche dclenche par un chien de garde CG.
106
3.3 Exemples de conception
avec la mthode DARTS
3 Conception
selon la mthode DARTS
Nous obtenons ainsi un diagramme nal de conception DARTS de six tches dont
deux nont pas dquivalent direct dans le diagramme ots de donnes SA-RT de
cette application. Une premire tche a t cre suite un regroupement de tche
et une deuxime tche a t mise en place pour rpondre un blocage du systme
par une solution de type chien de garde.
La modication du diagramme multitche initial, issu dune traduction automatique
du diagramme ots donnes SA-RT, a t dans cet exemple de la pilotage dun four
verre plus importante que dans lexemple prcdent gestion de la scurit
dune mine . Le dernier exemple plus complexe Commande dun moteur com-
bustion va montrer un travail de conception encore plus profond.
3.3.3 Exemple : Commande dun moteur combustion
Pour ce dernier exemple commande dun moteur combustion , nous allons
considrer le diagramme de prliminaire spci dans le chapitre 2 et reprsent sur
la gure 2.40. Le diagramme prliminaire de cette application, qui comporte neuf
processus fonctionnels et un processus de contrle, sert de base pour la traduction
en diagramme multitche DARTS.
Aprs la mise en uvre des quatre phases de la conception DARTS, nous obtenons
un modle multitche de lapplication, prsent sur la gure 3.30. Cette reprsen-
tation multitche intgre huit tches qui ne correspondent pas exactement aux dif-
frents processus du digramme prliminaire SA-RT. Nous pouvons noter immdia-
tement que le processus de contrle na pas t traduit par une tche. En effet,
cette tche aurait prsent une complexit algorithmique faible comme le montre
le diagramme tat/transition de la gure 2.41.
Nous pouvons aussi noter immdiatement le regroupement qui a t effectu entre
les processus fonctionnels Commander injection et Commander entres gaz
pour donner une seule tche appele Commander injection mlange sur des
critres de cohsion fonctionnelle et temporelle.
Les cinq processus fonctionnels dacquisitions de donnes ont t traduits par cinq
tches matrielles portant les mmes noms Acqurir acclrateur , Acqurir
paramtres moteur , Acqurir vitesse Acqurir capteurs pollution et Com-
muniquer bus CAN dclenches par lhorloge temps rel. Elles possdent des
priodes trs diffrentes lies la dynamique des grandeurs physiques mesures,
soit respectivement 100 ms, 5 ms, 200 ms, 2 s et 50 ms.
Remarque
Nous pouvons noter que les priodes des diffrentes tches dacquisition sont choisies dune part
en fonction de la dynamique des grandeurs physiques mesurer et dautre part an de minimiser la
charge processeur. Raliser une seule tche dacquisition, cadence la frquence la plus grande,
satisferait a fortiori la priode de scrutation au sens de lacquisition correcte de donnes (thorme
de lchantillonnage), mais conduirait un besoin processeur fortement surdimensionn.
Comme cela a t soulign prcdemment, la tche la plus rapide va cadencer le
pilotage principal de lapplication, cest--dire la commande du moteur (allumage)
en fonction de la demande de vitesse. Cette fonction principale est ralise en se
synchronisant avec les tches suivantes de rgulation : laborer commande moteur ,
Commander allumage et Commander injection mlange . De plus, nous
107
3.3 Exemples de conception
avec la mthode DARTS
3 Conception
selon la mthode DARTS


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
H
T
R

(
1
0
0

m
s
)
A
c
q
u

r
i
r
a
c
c

r
a
t
e
u
r
A
c
q
u

r
i
r
v
i
t
e
s
s
e
H
T
R

(
5

m
s
)
A
c
q
u

r
i
r
p
a
r
a
m

t
r
e
s
m
o
t
e
u
r
H
T
R

(
2
0
0

m
s
)
H
T
R

(
2

0
0
0

m
s
)

l
a
b
o
r
e
r
c
o
m
m
a
n
d
e
m
o
t
e
u
r
C
o
m
m
a
n
d
e
r
a
l
l
u
m
a
g
e
C
o
m
m
a
n
d
e
r
i
n
j
e
c
t
i
o
n
m

l
a
n
g
e
a
c
c

r
a
t
e
u
r
P
_
a
i
r
T
_
a
i
r
T
_
e
a
u
v
i
t
e
s
s
e
P
o
l
l
u
t
i
o
n
_
E
P
o
l
l
u
t
i
o
n
_
S
i
n
j
e
c
t
e
u
r
a
l
l
u
m
a
g
e
E
n
t
r

e
_
g
a
z
_
b
E
n
t
r

e
_
a
i
r
C
o
m
m
u
n
i
q
u
e
r
b
u
s

C
A
N
H
T
R

(
5
0

m
s
)
C
o
m
_
S
C
o
m
_
E
V
i
t
e
s
s
e
_
m
o
t
e
u
r
M

l
a
n
g
e
S
y
n
c
h
r
o
_
a
l
l
u
m
a
g
e
L
i
r
e
c
a
p
t
e
u
r
p
o
l
l
u
t
i
o
n
A
c
c

r
a
t
i
o
n
L
I
R
E

C
R
I
R
E
M
e
s
s
a
g
e
s
P
a
r
a
m

t
r
e
s
_
m
o
t
e
u
r
L
I
R
E

C
R
I
R
E
L
I
R
E

C
R
I
R
E
P
a
r
a
m

t
r
e
s
_
p
o
l
l
u
t
i
o
n
L
I
R
E

C
R
I
R
E
F
i
g
u
r
e

3
.
3
0


D
i
a
g
r
a
m
m
e

m
u
l
t
i
t

c
h
e

D
A
R
T
S

o
b
t
e
n
u
e


p
a
r
t
i
r

d
u

d
i
a
g
r
a
m
m
e

p
r

l
i
m
i
n
a
i
r
e

d
e

l

a
p
p
l
i
c
a
t
i
o
n


C
o
m
m
a
n
d
e

d

u
n

m
o
t
e
u
r


c
o
m
b
u
s
t
i
o
n


d
e

l
a

f
i
g
u
r
e

2
.
4
0
.
108
3.3 Exemples de conception
avec la mthode DARTS
3 Conception
selon la mthode DARTS
pouvons noter que la tche matrielle Communiquer bus CAN est la fois une
tche dentres et de sorties. Cette synchronisation forte est implmente laide
de deux botes aux lettres une place Vitesse_moteur et Mlange , et dune
synchronisation Synchro_allumage .
Cette diffrence de vitesse dexcution entre ces tches dacquisitions ncessite
lemploi de quatre modules de donnes pour le passage de paramtres an de dsyn-
chroniser ces tches : Acclration , Paramtres_moteur , Paramtres_pollution
et Messages .
En conclusion de cet exemple, il important de souligner que la mthode DARTS
est une mthode de conception non formelle qui permet dexprimer sous une forme
graphique dnie une architecture multitche. Dans ce sens, les diagrammes multi-
tches DARTS prsents en solution des exemples traits sont une des conceptions
possibles de lapplication ; mais il existe videmment de nombreuses autres solutions
possibles qui peuvent aussi voluer en fonction de limplmentation.
109


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

4 ARCHITECTURES SYSTMES

Avant de prsenter les outils et mthodes utiliss lors du dveloppement de pro-
grammes de contrle-commande dans diffrents langages de programmation, il est
ncessaire de prsenter larchitecture matrielle et logicielle sur laquelle ils sappuient.
En effet, le chapitre 3 prsente une mthode de conception multitche, qui est mise
en uvre partir du chapitre 6 : une implmentation multitche repose la plupart
du temps sur un systme dexploitation supportant le multitche, reposant lui-mme,
au plus bas niveau, sur une architecture matrielle permettant lentrelacement tem-
porel de plusieurs programmes. Les concepts sous-jacents, regroups communment
dans des ouvrages darchitecture et de systmes dexploitations, sont ncessaires
une bonne comprhension des outils de dveloppement. Ce chapitre donne donc
un bref aperu des problmes poss par le multitche et des solutions communment
proposes : il sert de base darchitecture matrielle et logicielle des systmes infor-
matiss pour le lecteur non familiaris avec ce domaine.

4.1 Architecture matrielle

4.1.1 Dfinitions de base

Le chapitre 3 met laccent sur la ncessit de programmer les applications de contrle-
commande en utilisant plusieurs tches sexcutant en parallle. Cependant, les
systmes informatiss fonctionnent de faon squentielle : une unit de calcul et de
traitement excute les instructions composant un programme, les unes la suite des
autres. Dans les applications de contrle-commande, les units de traitement peuvent
tre des microprocesseurs ou des microcontrleurs.

m

Processeur

Un

microprocesseur

est une unit de traitement optimise pour le calcul. Gn-
ralement plus rapide quun microcontrleur, cest le cur des micro-ordinateurs.
Il est capable deffectuer des

entres/sorties

(moyens de communication entre lordi-
nateur et le monde extrieur : capteurs, actionneurs, priphriques divers) via des
circuits spcialiss (ports srie, ports parallle, USB, etc.) et surtout, dans le cadre des
applications de contrle-commande, via des cartes spcialises enchables nommes

cartes dacquisition

. Par exemple, on trouvera des cartes dacquisition pouvant
sencher dans des ports au format PCI, PCMCIA ou autre (voir 4.1.4, p. 128).
110

4.1 Architecture matrielle

4 Architectures systmes

Un

microcontrleur

est une unit de traitement optimise pour les entres sorties.
Gnralement, un microcontrleur est associ directement plusieurs types dentres/
sorties, et il ne ncessite pas lapport de cartes enchables supplmentaires. Il est
de ce fait plus compact quun microprocesseur muni de cartes dacquisition, mais
moins performant en terme de calculs.
Les units de calculs sont caractrises par une frquence dhorloge en hertz (Hz).
Cette frquence correspond au nombre de

cycles

par seconde effectus par lunit
de calcul. Chaque instruction de bas niveau excute par lunit de calcul ncessite
de un quelques cycles dhorloge.
La frquence dhorloge des microprocesseurs actuels se situe aux alentours de quel-
ques gigahertz (GHz), alors que les microcontrleurs sont cadencs (ce terme vient
du fait que lhorloge interne donne la cadence) quelques dizaines de mgahertz
(MHz).
Dans la suite, le terme gnrique

processeur

sera utilis pour dsigner un micro-
contrleur ou un microprocesseur. Il est noter que de plus en plus de processeurs
dupliquent certaines parties centrales an dtre capables dexcuter plusieurs ins-
tructions en parallle. Cependant, an de simplier la prsentation, on peut les voir
comme un regroupement de deux (ou plus) processeurs squentiels.

m

Mmoire

Les instructions dun programme, ainsi que les donnes et le contexte dexcution
du programme sont stocks dans la

mmoire centrale

(mmoire vive comme la
RAM pour

Random Access Memory

, ou mmoire FLASH plus lente que la RAM mais
rmanente).
Une mmoire se caractrise par sa taille, la taille des

mots mmoires

(taille de donnes
que le processeur et la mmoire changent chaque accs) et son

temps daccs

.
Le temps daccs est donn en frquence, soit en nombre daccs par seconde.
Gnralement, la mmoire centrale est relativement lente par rapport au processeur.
Dans le cas des microcontrleurs, la frquence daccs la mmoire centrale est
souvent la mme que la frquence du microcontrleur : pour charger ou dposer
un mot en mmoire, le processeur na pas attendre plus dun cycle. Dans le cas
des microprocesseurs, la mmoire centrale est souvent 5 10 fois plus lente que le
microprocesseur, cela implique quune communication avec la mmoire peut durer
5 10 cycles dhorloge du microprocesseur. Ainsi, lors du droulement dun pro-
gramme le chargement dune instruction partir de la mmoire centrale, ou laccs
une donne, peut durer plusieurs cycles processeur. Cependant, compare la
mmoire de masse, comme le disque dur par exemple, avec un temps daccs de
lordre de 10 millisecondes, une mmoire centrale, pouvant fonctionner plusieurs
centaines de mgahertz (temps daccs de lordre de quelques nanosecondes) fait
gure de mmoire extrmement rapide.
Dans un systme informatis, la taille est caractrise en

octets

. Un octet est une
entit compose de 8

bits

(bit

binary digit

, chiffre binaire). Toute information
(instruction, donne, information sur ltat interne, etc.) est reprsente en binaire sur
un certain nombre doctets (voir 4.1.3). Loctet est la plus petite entit adressable :
chaque octet possde une adresse en mmoire centrale.
=
4.1 Architecture matrielle

111


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

4 Architectures systmes

m

Fonctionnement dun processeur

Les instructions dun programme, mmorises sous forme doctets en mmoire cen-
trale, sont stockes squentiellement. Lexcution dun programme par un processeur
consiste donc, schmatiquement, charger une instruction partir de la mmoire,
lexcuter, aller chercher linstruction suivante et ainsi de suite. Un programme est
donc caractris par un

point dentre

: ladresse de sa premire instruction.
Les instructions sont composes dun certain nombre doctets (variable en fonction
de linstruction). Chaque octet est adressable et peut tre obtenu grce son adresse
en mmoire.
Le transfert dun mot entre la mmoire centrale et le processeur seffectue laide
du

bus mmoire

. La frquence du bus correspond la frquence de la mmoire
(gnralement, la frquence maximale dune mmoire centrale est suprieure ou
gale celle du bus mmoire : cest la frquence du bus mmoire qui sert de rf-
rence la vitesse de la mmoire). Un bus mmoire est un bus parallle : schmati-
quement, il est capable de faire passer en parallle un nombre de bits correspon-
dant au mot mmoire. Le nombre maximal doctets par seconde (dbit maximal)
changs entre le processeur et la mmoire correspond donc

frquence du bus
mmoire





taille du mot mmoire en octets

. Typiquement, la largeur dun mot mmoire
est de 8, 16, 32 ou 64 bits.
Les

registres

sont des mmoires internes au processeur permettant de stocker les
donnes manipules : les calculs ne sont pas effectus directement partir du contenu
de la mmoire centrale, mais les donnes de la mmoire sont dabord charges dans
des registres, partir desquels elles sont manipules par lunit de calcul. Le nombre,
le nom la fonction, et la taille des registres varient en fonction du processeur,
cependant certains registres ont des fonctions communes dun processeur un autre.
Ainsi, un registre particulier, nomm accumulateur, sert sur certains processeurs
stocker le rsultat de chaque calcul arithmtique ou logique. Sur dautres processeurs,
divers registres gnraux peuvent servir cette fonction. La taille de ce ou ces registres
est importante car elle donne la taille maximale des donnes manipules en une seule
instruction. Cette taille sappelle le

mot machine

, et correspond gnralement la
taille du mot mmoire. Pour les microcontrleurs, on trouve frquemment des mots
machines de 8 ou 16 bits et rarement 32 bits, alors que pour les microprocesseurs,
on trouve plutt des mots machine de lordre de 32 ou 64 bits.
Le processeur comprend notamment (gure 4.1) :
un squenceur de commandes, permettant dinitier et de contrler le droulement
dune instruction. Cest cet lment qui cadence le fonctionnement du processeur
la frquence dhorloge du processeur ;
un registre nomm

compteur ordinal

dont le rle est de donner ladresse en
mmoire de la prochaine instruction excuter ;
un registre dinstruction qui stocke linstruction en cours dexcution ;
un registre dadresse permettant de requrir ou modier des donnes ou instruc-
tions se situant une certaine adresse en mmoire centrale ;
une

unit arithmtique et logique

(UAL), se chargeant de lexcution des ins-
tructions comme un calcul en nombres entiers, une opration logique, ou une
112

4.1 Architecture matrielle

4 Architectures systmes

opration de manipulation binaire (oprations arithmtiques, logiques, manipu-
lation des reprsentations binaires) ;
des

registres gnraux

permettant entre autres choses de stocker les donnes
utilises lors des calculs, les rsultats, etc. ;
un

registre dtat

(

ags

), dont un des rles est de communiquer des informations
dtat de lunit arithmtique et logique.

m

Exemple dexcution dun programme

An dillustrer le fonctionnement dun processeur, voyons comment serait trait le
programme simple ci-aprs par un processeur de type PENTIUM


:

s i i >j a l or s i : =i - 1
s i non i : =i +5
f i n s i

Ce langage nest pas directement comprhensible par un processeur. Il faut dabord
le compiler en un chier excutable contenant du code directement comprhensible
par le processeur : ce code sappelle le

code machine

. Le code machine est quasiment
incomprhensible (cest une suite de nombres), mais il existe un langage, trs proche
du langage machine, nomm l

assembleur

, qui permet de lexprimer de faon lisible.
Contrairement aux langages de haut niveau, lassembleur est hautement dpendant
du processeur sous-jacent puisquil se base directement sur les registres et instructions
spciques du processeur. Il en rsulte que les assembleurs des diffrentes familles
de processeurs sont trs diffrents les uns des autres.
Souvent, le code machine ainsi que les adresses en mmoire sont reprsents en
notation

hexadcimale

(base 16, voir 4.1.3, p. 120).
Adresse
0x00000000
0x00000001
0x00000002
0x00000003
0x00000004
0x1FFFFFFC
0x1FFFFFFD
0x1FFFFFFE
0x1FFFFFFF
Processeur
UAL
Unit
Arithmtique
et Logique
R
e
g
i
s
t
r
e

d

t
a
t
BUS de donnes
BUS dadresse
Registres
Gnraux
Registre
Instruction
Dcodeur
Squenceur
Compteur
Ordinal
RAM de 512 MO

Figure 4.1 Reprsentation simplifie dun processeur et de la mmoire centrale :


les adresses mmoire sont notes en reprsentation hexadcimale (base 16).
4.1 Architecture matrielle

113


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

4 Architectures systmes

Le tableau 4.1 prsente la traduction du programme simple en langage de haut
niveau en code machine. An de comprendre ce code, la correspondance en assem-
bleur est donne pour chaque instruction.
Lorsque le processeur doit excuter cette portion de programme, le compteur ordi-
nal possde ladresse (en notation hexadcimale) 0x0040101E. Cette adresse est dis-
pose dans le registre dadresse et communique via le bus la mmoire centrale.
Cela a pour effet de copier le contenu de cette case mmoire dans le registre dins-
truction. Une instruction est compose dun

CODOP

(code opration) et d

op-
randes

. Le CODOP de cette instruction est 0xA1, qui signie copier le contenu
dune adresse mmoire 32 bits dans le registre gnral nomm EAX , et loprande
est ladresse de la case mmoire recopier. Cette instruction est dcode, puis
squence, pendant que le compteur ordinal est incrment de la longueur de lins-

Tableau 4.1

Traduction binaire et assembleur dun programme simple.

Sens Adresse
de linstruction
en notation
hexadcimale
Code machine
en notation
hexadcimale
Instruction
en assembleur

i est stock dans un
registre gnral (eax)

0040101E A1 E4 A6 40 00 mov e a x, dwor d pt r
[ i ( 40A6E4h) ]

j est stock dans un
autre registre gnral
(ecx)

00401023 8B 0D E0 A6 40 00 mov e c x, dwor d pt r
[ j ( 40A6E0h) ]

Prparation
du registre de pile

00401029 83 C4 10 a dd e s p, 10h

Comparaison de i et j,
le rsultat, se trouvent
sous la forme dun bit
0 ou 1 dans
le registre dtats,
est utilis par
linstruction suivante

0040102C 3B C1 c mp e a x, e c x

Si i < j sauter
ladresse 0x401033

0040102E 7E 03 j l e 401033h

eax :=eax-1

00401030 48 de c e a x

Sauter ladresse
0x401036

00401031 EB 03 j mp 401036h

eax :=eax+5

00401033 83 C0 05 a dd e a x, 5

Le registre eax est
copi ladresse de i

00401036 A3 E4 A6 40 00 mov dwor d pt r
[ i ( 40A6E4h) ] , e a x
114

4.1 Architecture matrielle

4 Architectures systmes

truction (il passe donc 0x00401023). Certaines instructions ncessitent plusieurs
accs mmoire, et le dcodeur dinstruction pourra se charger de requrir les ventuels
oprandes manquants lors du premier accs. Une requte la mmoire centrale a lieu
an de lire le contenu du mot machine contenant la valeur de

i

(4 octets partir
de ladresse 0x0040A6E4, correspondant la variable

i

dans le langage de haut
niveau) an de le stocker dans un registre gnral du processeur, en loccurrence le
registre 32 bits nomm EAX. La taille dun mot machine tant de 32 bits sur les
microprocesseurs de type PENTIUM


, un seul accs la mmoire est ncessaire
pour recopier

i

dans le registre EAX. La prochaine instruction peut alors tre lue
partir de la mmoire an dtre recopie dans le registre dinstruction, et excute
son tour.
La seconde instruction est aussi une instruction de dplacement de donne entre
la mmoire et un registre du processeur (son CODOP est donn sur les 2 octets
0x8B0D). Notons que tous les calculs (ici comparaison de

i

et

j

) ncessitent que les
oprandes soient prsents dans un registre du processeur.
Linstruction

c mp e a x, e c x

compare les registres contenant respectivement les
valeurs de

i

et

j

. Cette instruction est excute par lunit arithmtique et logique,
et son rsultat est accessible via le registre dtat, dont le bit

less or equal

est mis
1 si le rsultat de la dernire comparaison tait

infrieur ou gal

.
Les deux premires instructions sont donc de type change registres


mmoire
centrale, la troisime est une opration arithmtique, et la quatrime instruction
est un saut conditionnel

j l e 00401033h

. Ce saut est conditionn par le rsultat du
dernier calcul arithmtique (en loccurrence une comparaison) et se base donc sur
le registre dtat. Ici, si la dernire comparaison a donn le rsultat infrieur ou
gal , la prochaine instruction excuter se trouve ladresse 0x00401033, sinon
elle se trouve ladresse suivante (dj contenue dans le compteur ordinal). Les sauts
conditionnels ont pour effet de modier le fonctionnement normal du compteur
ordinal.
Linstruction suivante, cest--dire la dcrmentation du registre contenant

i

, nest
donc excute que si le rsultat du test est ngatif (on peut remarquer quil a t
invers par rapport au langage de haut niveau). Dans ce cas, linstruction suivante
(

j mp

) est excute, ce qui permet de sauter les instructions du bloc dinstructions
correspondant au cas

s i non

.
Dans le cas o le test a t positif, le cas

a l or s

est saut pour aller directement au
cas

s i non.
Enn, dans les deux cas, linstruction se trouvant ladresse 0x00401033 est ex-
cute, cest--dire que le contenu du registre EAX est transfr ladresse mmoire
correspondant la variable i.
Les optimisations ayant lieu au cur des processeurs actuels rendent difcile une
description globale du cheminement des informations. En effet, il existe diffrentes
optimisations permettant dacclrer la vitesse moyenne de traitement :
le prchargement des instructions (appel gnralement prefetch) permet au bus
dtre employ pour le chargement des prochaines instructions pressenties. Dans
ce cas, il est possible que toutes les instructions possibles soient prcharges et
stockes dans un tampon dinstructions an dtre plus rapidement accessibles ;
4.1 Architecture matrielle
115


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
le pipeline permet de commencer lexcution des prochaines instructions avant
mme que linstruction courante ne soit termine ;
la mmoire cache : il y a souvent un rapport de vitesse de 5 10 entre la vitesse
des microprocesseurs et la vitesse de la mmoire centrale. Cela implique qu cha-
que transfert dinformation entre la mmoire et le processeur, le processeur doit
attendre les instructions ou donnes dont il a besoin. Or, la plupart des pro-
grammes contiennent des boucles (donc utilisent souvent les mmes instructions)
et accdent souvent aux mmes donnes. Cela est appel le principe de localit.
An dacclrer les accs la mmoire, une mmoire cache est ajoute entre le
processeur et la mmoire : trs rapide (sa frquence daccs est la mme que celle
du processeur ou bien seulement deux fois plus lente), de petite taille (de lordre du
mgaoctet). La mmoire cache conserve les lments les plus rcemment accds, ce
qui, en vertu du principe de localit acclre grandement la vitesse de traitement ;
de plus en plus de microprocesseurs du commerce dupliquent certains circuits
an de pouvoir effectuer des traitements parallles. Ainsi, certains processeurs
utilisent une double unit de calcul, voire mme ont un cur double, ce qui leur
permet presque dtre quivalents deux processeurs.
Cet exemple permet dintroduire diffrents lments de base de larchitecture mat-
rielle, sans toutefois entrer dans les dtails. Il montre, de par lutilisation de la base
hexadcimale, quil est ncessaire davoir quelques notions sur les bases typiquement
utilises en informatique : les bases binaire et hexadcimales sont donc prsentes
au paragraphe 4.1.3. En effet, les adressages sont typiquement donns en base 16
qui est une reprsentation condense trs pratique du binaire. De mme, la matrise
de la base binaire, et donc hexadcimale (pour la reprsentation condense), se montre
indispensable pour toute personne ayant programmer un systme de contrle-
commande. En effet, ce type de systme fait souvent appel de la programmation
de bas niveau (au niveau octet, voire mme bit bit). An de matriser les oprations
de base bit bit, il est ncessaire davoir des notions en algbre boolenne, dont
une application directe est lalgbre binaire.
De plus, il est important pour un concepteur ou programmeur dapplications de
contrle-commande de matriser des notions de base en terme de types dentres/
sorties an de dcider de lemploi de tel ou tel type de matriel (microcontrleur,
microprocesseur).
Enn, cet exemple dmontre que mme les instructions de haut niveau les plus
simples se dcomposent le plus souvent en plusieurs instructions de bas niveau
(niveau assembleur et instructions machine). Ce point est primordial au regard des
applications multitche comme le sont les applications temps rel. Nous prsenterons
les difcults que cela engendre dans le paragraphe 4.2.
4.1.2 Algbre de Boole
Lalgbre boolenne est lalgbre dnie sur le domaine {vrai, faux} ou de faon
quivalente sur le domaine {1,0}, ce qui explique son emploi dans toutes les archi-
tectures informatises (systme binaire). Georges Boole, mathmaticien anglais
(1815-1864) proposa cette algbre prise aussi bien par les logiciens que par les
116
4.1 Architecture matrielle 4 Architectures systmes
informaticiens daujourdhui. Son nom est devenu clbre grce son algbre et
au type boolen prsent dans de nombreux langages de programmation.
Toute opration boolenne est dnie dans le domaine {vrai, faux}. Cependant, tant
donn que le but de cette partie est de permettre de comprendre les diffrents
types de manipulation binaire, il est important que le lecteur sache que vrai est assi-
mil 1 en binaire, et faux 0.
On dnit usuellement trois oprateurs (appels connecteurs) de base : le compl-
ment (ou non ) not , la conjonction (ou et ) note , et la disjonction
(ou ou ) note . Tous les connecteurs de lalgbre boolenne peuvent tre
obtenus partir de ces trois connecteurs (il est aussi possible de la dnir laide
de deux connecteurs).
La valeur dune formule boolenne, compose de connecteurs et de variables boo-
lennes (dont la valeur peut tre vrai ou faux) peut tre reprsente laide dune
table de vrit. Chaque ligne de la table donne une valeur possible aux variables, et
la valeur obtenue de la formule tudie. La table de vrit donne donc toutes les valeurs
possibles dune formule en fonction des variables. Par exemple, pour la variable
a{vrai, faux}, la table de vrit de a est donne dans le tableau 4.2. Ce tableau
prsente aussi les tables de vrits des principaux connecteurs : et , ou , impli-
cation , ou exclusif appel xor, quivalence . Cette table est prsente sous
la forme algbrique en utilisant les connecteurs boolens classiques, puis reprise sous
forme algbrique proche du binaire. En effet, le et boolen a des proprits
similaires la multiplication, puisque le faux est absorbant, de mme que le 0
pour la multiplication. Le vrai est absorbant pour le ou , ce qui fait penser
une somme dans laquelle on ne considrerait que les rsultat 0 ou diffrent de 0
(dans ce cas, 1). Le ou exclusif est vrai si un et un seul des oprandes est vrai,
cela signie quil est vrai si ses deux oprandes sont diffrents lun de lautre (le
domaine nayant que deux valeurs possibles). Le ou exclusif correspond lusage
du mot ou dans le langage usuel. Ainsi, le ou correspondant lafrmation
je me rendrai la runion en train ou en avion est un ou exclusif. A contrario, le
ou logique classique, dit ou inclusif , laisse la possibilit aux deux variables
dtre vraies. Lquivalence est vue comme lgalit de ses deux oprandes.
On dit que deux formules sont quivalentes si elles possdent la mme table de vrit.
Limplication est donne ici titre indicatif. La formule a b est quivalente la
formule (a) b, ce qui signie que le seul cas o elle est fausse correspond au cas
o a est vrai, et b est faux. Ainsi, lafrmation si javais des pouvoirs magiques,
alors je soulverais la tour Eiffel , qui est une implication, ne peut pas tre inrme
tant que la personne qui prtend cela na pas effectivement de pouvoirs magiques.
Il suft de considrer la faon dont on dmontre une implication en mathmatiques :
faire lhypothse que a est vrai, et dmontrer, dans ce cas seulement, que b est vrai.
La comparaison entre les oprateurs algbriques somme et produit ne sarrte pas
une smantique proche des oprateurs boolens et et ou . En effet, les opra-
teurs boolens possdent les mmes proprits de distributivit et dassociativit,
plus dautres lies la taille du domaine des boolens. Le tableau 4.3 donne quelques
proprits algbriques, ainsi que les reprsentations graphiques des oprateurs logi-
ques dans la norme amricaine (MIL STD 806) et la norme europenne (IEC 617).
4.1 Architecture matrielle
117


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
Les proprits algbriques peuvent tre vries trs simplement laide de tables
de vrit (tableau 4.3, pages suivantes).
Les principales proprits retenir sont les proprits absorbantes du faux sur
et (i.e. 0 . a = 0) et les proprits absorbantes du vrai sur ou (i.e. 1 + a = 1).
En effet, pour les manipulations de nombres binaires, notamment la cration de
masques binaires (voir 4.1.4), trs utile lors daccs au matriel par des primitives
bas niveau, ces rgles sont fondamentales.
4.1.3 Reprsentation de linformation
Bien que les premires machines calcul de lre lectromcanique fussent en base
dcimale, depuis lre de llectronique, tous les ordinateurs utilisent la base binaire
pour effectuer des calculs. La raison en est simple : une tension deux valeurs pos-
sibles, (0, n volts) ou bien ( n, + n volts), permet lutilisation intensive de transistors
(portes lectroniques souvrant ou se fermant en fonction dune faible tension
dentre). Les transistors sont les lments de base des processeurs modernes, ils
permettent dimplmenter aisment toutes les fonctions dalgbre boolenne, qui
servent aussi effectuer des calculs en arithmtique binaire. En effet, chaque chiffre
Tableau 4.2 Tables de vrit des connecteurs les plus usits.
a a
faux vrai
vrai faux
a b a b a b a b a b a b
faux faux faux faux faux vrai vrai
faux vrai faux vrai vrai faux vrai
vrai faux faux vrai vrai faux faux
vrai vrai vrai vrai faux vrai vrai
a b ab a + b a ? b a = b a b
0 0 0 0 0 1 1
0 1 0 1 1 0 1
1 0 0 1 1 0 0
1 1 1 1 0 1 1
118
4.1 Architecture matrielle 4 Architectures systmes
Tableau 4.3 Proprits algbriques usuelles des boolens.
Priorits des oprateurs
La priorit des
oprateurs est dfinie
comme suit (suprieur
signifie est plus
prioritaire que) : >
> > >
c a b d se lit (c (a b)) d c + ab = d se lit (c + (ab)) = d
Commutativit
Les connecteurs et ,
ou , xor ,
quivalent sont
commutatifs.
a b b a
a b b a
a b b a
(a b) (b a)
ab = ba
a + b = b + a
a b = b a ou (a ? b) = (b ? a)
(a = b) = (b = a)
Associativit
et et ou sont
associatifs ; attention
xor nest pas
associatif.
Par dfaut,
lassociativit choisie
est gauche.
a (b c) (a b) c
a (b c) (a b) c
a (b c) (a b) c
a(bc) = (ab)c
a + (b + c) = (a + b) + c
(a (b c)) ((a b) c)
lments neutres et absorbants
Vrai est absorbant
pour le ou mais
neutre pour le et .
Faux est absorbant
pour le et et neutre
pour le ou .
a vrai vrai
a vrai a
a faux a
a faux faux
a a a
a a a
a + 1 = 1
a . 1 = a
a + 0 = a
a . 0 = 0
a + a = a
a . a = a
Idempotence et complmentation
Le ou et le et
sont idempotents.
Rgles de
complmentation.
a a a
a a a
a a vrai
a a faux
a + a = a
a . a = a
a + a = vrai
a . a = faux
Distributivit
Le et est distributif
sur le ou . Le ou
est distributif sur le
et .
a (bc) ab ac
a bc (ab)(ac)
a(b + c) = ab + ac
a + bc = (a + b)(a + c)
4.1 Architecture matrielle
119


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
tant un bit (binary digit) valant 0 ou 1, absence ou prsence de courant, lalgbre
boolenne peut tre utilise pour les calculs numriques.
Cette section a pour objet dintroduire larithmtique binaire, ainsi que quelques
notions de changements de bases. Ces concepts sont fondamentaux pour la pro-
grammation de bas niveau (programmation des cartes dacquisition notamment).
Tableau 4.3 Proprits algbriques usuelles des boolens (suite).
Lois de De Morgan
Limpact du non sur
le et et le ou
(a b) a b
(a b) a b
(ab) = a + b
(a + b) = ab
quivalences de quelques formules
a a b a
a (a b) a
a a b a b
a (a b) a b
a b a b
a + ab = a
a(a + b) = a
a + (ab) = a + b
a(a + b) = a + b
a b = a + b
a
a
b
a
b
a
b
a
b
a
b
NON
ET
OU
XOR (OU exclusif)
NAND
NOR
EGAL
a
b
a IDENTIT
Norme MIL STD 806 Norme IEC 617
a
a+b
a + b
(a+b)
ab
a
(ab)
a
a+b
a + b
(a+b)
ab
a
(ab)
a
a
b
a
b
a
b
a
b
a
b
a
b
a
1
=1
&
?1
=1
&
1
?1
(a + b) (a + b)
120
4.1 Architecture matrielle 4 Architectures systmes
m Changements de base
Un nombre se reprsente dans une base b par une suite de chiffres b
i
compris entre
0 et b 1. Tout nombre se dcompose de faon unique en chiffres dans une base b :
b
k
b
k
+ b
k1
b
k1
+ + b
1
b
1
+ b
0
b
0
. Le nombre scrit dans la base b : b
k
b
k1
b
1
b
0
.
Ainsi, en systme dcimal, le nombre 3 412 correspond 3 10
3
+ 4 10
2
+ 1 10
1
+ 2 10
0
. Tout nombre x, que lon a lhabitude de manipuler sous sa forme dcimale,
correspond une quantit, qui se dcompose de faon unique dans toute base b
sous la forme dune suite de chiffres b
k
b
k1
b
1
b
0
, avec o a
est la partie entire infrieure de a et a b est a modulo b (i.e. reste de la division
de a par b). Ainsi, cette quantit peut se dcomposer en base 1 en 3 412 btons .
Pour passer une quantit dune base une autre, il suft dutiliser la division eucli-
dienne a bq + r : lorsque lon divise un nombre par une base b, on obtient
comme reste le chiffre des units. Ainsi, si lon souhaite effectuer des divisions eucli-
diennes successives de 3 412 par la base 10, on obtient 3 412 341 10 + 2. Le
chiffre des units est donc 2, et il y a 341 dizaines. 341 34 10 + 1, il y a donc
une dizaine et 34 centaines. 34 3 10 + 4, il y a donc 4 centaines et 3 milliers.
3 0 10 + 3, il ny a donc que 3 milliers. 3 412 se dcompose donc en base 10
par 3 milliers, 4 centaines, 1 dizaine, et 2 units, ce qui est vident.
Si lon souhaite convertir 3 412 dans une base b > 1 quelconque, il suft donc
deffectuer des divisions euclidiennes successives, la premire donne le chiffre des
units, la seconde celui des b-zaines , , la n
ime
celui des b
n1
-zaines . La
gure 4.2 reprsente les conversions de 3 412 en base 10, 2, 8 et 16.
Par convention, dans la suite, les nombres en binaire seront prxs par la lettre b
(sauf non ambigut), les nombres en octal seront prxs par la lettre o, les nom-
bres en hexadcimal seront prxs par 0x , alors que les nombres en dcimal ne
seront pas prxs du tout.
Certains changements de base se voient simplis lorsque lon passe dune base b
une puissance de b et vice-versa. Les bases frquemment utilises en informatique,
en plus du binaire qui est lunit physique utilise, sont loctal (base 8) et lhexa-
dcimal (base 16). En effet, un nombre reprsent en binaire est trs long, et dif-
cilement lisible. Or 8 2
3
et 16 2
4
. Chaque chiffre octal correspond donc
3 chiffres binaires, et chaque chiffre hexadcimal correspond 4 chiffres binaires.
Pour passer de la base 2 la base 8, il suft donc de regrouper les bits par 3 (en par-
tant bien entendu des bits de poids faible !!!), alors que pour passer de la base 8 la
base 2, il suft de reprsenter chaque chiffre octal par 3 bits. Il en va de mme
pour la base 16, sauf que les regroupements sont de 4 bits. La gure 4.3 donne un
exemple de conversion binaire-octal et binaire-hexadcimal.
Lune des illustrations du changement de base par division euclidienne peut tre faite
laide dun changement de base direct entre deux bases non usuelles : par exemple,
passage de la base 8 la base 16 (gure 4.4). Cela peut sembler troublant, car la
division euclidienne se fait directement en base 8 (les rgles daddition et de sous-
traction sont diffrentes de celles de la base 10 que chacun a lhabitude de manipuler,
b
i
x
b
i
---- b



=
=
=
=
=
=
= =
4.1 Architecture matrielle
121


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
3412
- 3412
0
2
1706
- 1706
0
2
853
- 852
1
2
426
- 426
0
2
213
- 212
1
2
106
- 106
0
2
53
- 52
1
2
26
- 26
0
2
6
- 6
0
2
3
- 2
1
2
1
- 0
1
2
0
2
13
- 12
1
3412
- 3408
4
8
426
- 424
2
8
53
- 48
5
8
6
- 0
6
8
0
3412
- 3408
4
16
213
- 208
5
16
13
- 0
13
16
0
3412 = b110101010100 = o6524 = 0xD54
3412
- 3410
2
10
341
- 340
1
10
34
- 30
4
10
3
- 0
3
10
0
0
*
2 0


+

0
*
2 1



+

1
*
2 2



+


0
*
2 3

+


1
*
2 4



+


0
*
2 5


+

1
*
2 6



+

0
*
2 7



+

1
*
2 8



+

0
*
2 9



+

1
*
2 1
0

+

1
*
2 1
1
4
*
8
0


+

2
*
8
1



+

5
*
8
2



+


6
*
8
3
2
*
1
0 0


+

1
*
1
0 1

+

4
*
1
0 2

+

3
*
1
0 3
4
*
1
6 0


+

5
*
1
6 1


+

1
3
*
1
6 2

Figure 4.2 Conversion de 3 412 en base 10, 2, 8, et 16.
1425 =b 10110010001
1425 =o2621
1425 =b 10110010001
2 6 2 1
1425 =0x591
5 9 1
Figure 4.3 Illustration de changement de base :
binaire-octal et binaire-hexadcimal.
o2621
- o20
o62
- o60
o21
- o20
o1
o20=16
o131
- o120
o11
o20
o5
- o0
o5
o20
o0
o
1
*
o
2
0
0

+

o
1
1
*
o
2
1

+

o
5
*
o
2
0
2
Figure 4.4 Changement de base direct entre base 8 et 16.
122
4.1 Architecture matrielle 4 Architectures systmes
ainsi par exemple o5 o2 o12). La division euclidienne pour convertir un nombre
octal en hexadcimal consiste donc diviser un nombre donn en base 8 par 16, la
division a lieu bien entendu en base 8, cest donc une division par o20. Notons
cependant quau vu des proprits des bases 8 et 16 par rapport la base 2, il est plus
rapide de transformer le nombre octal en binaire, puis de transformer ce nombre
par regroupements de 4 bits en hexadcimal. Cependant, le calcul montre bien
que o2621 0x591.
Lun des avantages du binaire est le faible nombre doprations de base ncessaires
lexcution des oprations arithmtiques. En binaire, il ny a que des tables de 0
et de 1 manipuler. Laddition est extrmement simple (gure 4.5).
m Reprsentation binaire des entiers positifs
La taille de la reprsentation dun entier en machine est bien entendu borne. Le
plus souvent, un entier peut tre reprsent sur 8 bits (type caractre), 16 bits (type
entier court), 32 bits (type entier long). Souvent, comme cest le cas en langage C,
le type entier (sans qualicatif supplmentaire) correspond la taille du mot machine,
soit le plus souvent 32 bits sur un microprocesseur, souvent moins sur un micro-
contrleur. Le choix de la taille de la reprsentation dun entier inue bien entendu
sur le domaine possible de lentier (voir tableau 4.4) puisqu laide de n bits, on
peut reprsenter 2
n
valeurs diffrentes. Notons que, par convention, le bit de poids
faible est numrot 0, et que les bits sont numrots dans lordre croissant jusquau
bit de poids fort, numrot n1 pour un nombre de n bits.
An dillustrer le rapport profond qui lit lalgbre boolenne avec la reprsentation
binaire, la gure 4.6 donne le circuit logique qui pourrait tre utilis pour addition-
ner deux nombres binaires. Soient a et b deux entiers reprsents sur n bits respecti-
vement par a
n1
a
1
a
0
et b
n1
b
n2
b
1
b
0
. La ralisation de a + b c (reprsent
par c
n1
c
n2
c
1
c
0
) est prsente sur la gure 4.6. Dans la ralit, les connecteurs
logiques sont raliss laide de transistors, et tout le cur des processeurs se base
sur lalgbre boolenne.
Dans le langage Ada, la taille de reprsentation des nombres peut varier en fonction
de limplmentation et de larchitecture matrielle (taille du mot machine) sous-
jacente. Cependant, un programmeur Ada peut dnir lui-mme le domaine dun
entier.
Les techniques utilises pour reprsenter les entiers signs et les nombres fraction-
naires (points xes et ottants) sont prsentes en annexe A.
=
=
1 1 1
b111001
+b011000
b1010001
57
+24
81
Figure 4.5 Addition de deux nombres entiers en binaire.
=
4.1 Architecture matrielle
123


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
m Oprations arithmtiques et logiques
Des exemples dadditions ont t prsents dans la section prcdente. La multipli-
cation utilise les mmes rgles quen numration dcimale. La division, quant elle,
est une division entire et utilise les mmes rgles quen numration dcimale.
Il est noter que dans toute base b, une multiplication par la base correspond
dcaler les chiffres vers la gauche, an dintroduire un 0 comme chiffre de poids
faible. Ainsi, 32 10 320. Il en est de mme pour le binaire : multiplier par 2
consiste dcaler gauche. La division entire par la base consiste enlever le chiffre
de poids faible : 321/10 32. Cela correspond un dcalage des chiffres vers la
droite.
Lorsque lon doit programmer bas niveau, il arrive frquemment que lon ait crer
des octets de toute pice (par exemple crer un octet dont le i
me
bit et le j
me
bit
sont 1, les autres tant 0 an de congurer une carte dacquisition) ou bien
Tableau 4.4 Intervalles de reprsentation des entiers.
Taille (en bits) Domaine [0..2
n
1] Nom du type
8 [0..255], [0..0xFF] C : unsigned char
LabVIEW : U8
16 [0..65535], [0..0xFFFF] C : unsigned short
LabVIEW : U16
32 [0.. 4294967295], [0..0xFFFFFFFF] C : unsigned long
LabVIEW : U32
Add
Add
Add
b S
Additionneur : (a+b)*2
i
+ R*2
i
= R*2
i+1
+ S*2
i
(prise en compte de la retenue prcdente)
a R
b S
a
R
a R
b S
Encapsulation du additionneur
(correspond au additionneur gauche)
a
i
b
i
a
i
b
i
R
i
(Retenue prcdente)

R
i+1
R
i+1
S
i
S
i
Demi-additionneur : (a+b)*
i
2 = R*2
i+1
+ S*2
i
(non prise en compte de la retenue prcdente)
Figure 4.6 Addition de deux entiers ralise laide de lalgbre boolenne.
=
=
124
4.1 Architecture matrielle 4 Architectures systmes
T
a
b
l
e
a
u

4
.
5


Q
u
e
l
q
u
e
s

r
e
p

r
e
s

e
n

b
i
n
a
i
r
e

e
t

h
e
x
a
d

c
i
m
a
l
e
.
P
r
o
p
r
i


a
l
g

b
r
i
q
u
e
U
t
i
l
i
s
a
t
i
o
n
s

t
y
p
e
E
x
e
m
p
l
e
s
1
6

=

2
4
P
a
s
s
a
g
e

a
i
s


b
i
n
a
i
r
e


h
e
x
a
d

c
i
m
a
l
O
c
t
e
t

d
o
n
t

l
e

b
i
t

5

(
6
e

b
i
t
)

e
s
t


1

:
b
0
0
1
0

0
0
0
0

=

0
x
2
0
O
c
t
e
t

d
o
n
t

t
o
u
s

l
e
s

b
i
t
s

s
o
n
t


1
,

s
a
u
f

l
e

b
i
t

3

:
b
1
1
1
1

0
1
1
1

=

0
x
F
7


a
b
s
o
r
b
a
n
t

e
t


n
e
u
t
r
e

s
u
r

l
e


e
t

r
i
f
i
e
r

q
u

u
n

b
i
t

e
s
t


1

d
a
n
s

u
n

o
c
t
e
t
L
e

b
i
t

2

(
3
e

b
i
t
)

d
e

l

o
c
t
e
t

k

e
s
t


1

s
i

e
t

s
e
u
l
e
m
e
n
t

s
i

:
k

e
t

0
x
0
4


0
L
e

b
i
t

d
e

p
o
i
d
s

f
o
r
t

d
e

l

o
c
t
e
t

k

e
s
t


1

s
i

e
t

s
e
u
l
e
m
e
n
t

s
i

:
k

e
t

0
x
8
0


0
L
e

b
i
t

i

d
e

l

o
c
t
e
t

k

e
s
t


1

s
i

e
t

s
e
u
l
e
m
e
n
t

s
i

:
k

e
t

(
1

d

c
a
l


g
a
u
c
h
e

d
e

i
)


0
V

r
i
f
i
e
r

q
u

u
n

b
i
t

e
s
t


0

d
a
n
s

u
n

o
c
t
e
t
L
e

b
i
t

2

d
e

l

o
c
t
e
t

k

e
s
t


0

s
i

e
t

s
e
u
l
e
m
e
n
t

s
i

:
k

e
t

0
x
0
4

=

0
L
e

b
i
t

d
e

p
o
i
d
s

f
o
r
t

d
e

l

o
c
t
e
t

k

e
s
t


0

s
i

e
t

s
e
u
l
e
m
e
n
t

s
i

:
k

e
t

0
x
8
0

=

0
L
e

b
i
t

i

d
e

l

o
c
t
e
t

k

e
s
t


0

s
i

e
t

s
e
u
l
e
m
e
n
t

s
i

:
k

e
t

(
1

d

c
a
l


g
a
u
c
h
e

d
e

i
)

=

0
A
c
c

d
e
r


u
n
e

p
a
r
t
i
e

d

u
n

n
o
m
b
r
e
O
b
t
e
n
i
r

l
e

2
e

o
c
t
e
t

d

u
n

n
o
m
b
r
e

e
n
t
i
e
r

k

c
o
d


s
u
r

3
2

b
i
t
s

:
(
k

d

c
a
l


g
a
u
c
h
e

d
e

8
)

e
t

0
x
F
F
M
e
t
t
r
e


0

u
n

b
i
t

d
a
n
s

u
n

n
o
m
b
r
e
M
e
t
t
r
e


0

l
e

b
i
t

5

d
e

l

o
c
t
e
t

k

:
k

:
=
k

e
t

n
o
n
(
0
x
2
0
)
M
e
t
t
r
e


0

l
e

b
i
t

i

d
e

l

o
c
t
e
t

k

:
k

:
=
k

e
t

n
o
n
(
1

d

c
a
l


g
a
u
c
h
e

d
e

i
)


a
b
s
o
r
b
a
n
t

e
t


n
e
u
t
r
e

s
u
r

l
e


o
u

M
e
t
t
r
e


1

u
n

b
i
t

d
a
n
s

u
n

n
o
m
b
r
e
M
e
t
t
r
e


1

l
e

b
i
t

5

d
e

l

o
c
t
e
t

k

:
k

:
=

k

o
u

0
x
2
0
M
e
t
t
r
e


1

l
e

b
i
t

i

d
e

l

o
c
t
e
t

k

:
k

:
=

k

o
u

(
1

d

c
a
l


g
a
u
c
h
e

d
e

i
)
4.1 Architecture matrielle
125


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
tester certains bits (celui-ci est-il 1, celui-l est-il 0 ?). Pour cela, on utilise les
oprateurs binaires qui sont directement issus de lalgbre boolenne. Il est donc bon
davoir quelques repres binaires et boolens (voir tableau 4.5). Rappelons (voir
4.1.2) que le 0 est absorbant pour le et , et neutre pour le ou , et que le 1 est
absorbant pour le ou et neutre pour le et . Rappelons de plus que la repr-
sentation binaire est peu lisible, et que dans un programme, il est gnralement
plus pratique dexprimer les valeurs binaires en hexadcimal (1 chiffre hexadcimal
= 4 bits).
Enn, voici une petite technique qui permet de trouver rapidement la reprsentation
binaire dun nombre, condition que celui-ci ne soit pas trop grand. Pour cela, il
suft de connatre les puissances de 2, et de faire mentalement quelques soustrac-
tions. Soit un nombre dcimal, par exemple 155, que lon veut reprsenter en binaire
(noter quau minimum, ce sera un octet non sign, car 155 > 127). On choisit la
plus grande puissance de 2 infrieure ou gale 155, soit 128. On place un 1 qui
correspond 128 (point nest ncessaire de prciser quil sagit de 2
7
), on retranche
128 155, il reste donc 27 exprimer en binaire. On passe alors toutes les puis-
sances de 2 de faon dcroissante : la suite du 1 correspondant 128, on note 0
pour 64, 0 pour 32, 1 pour 16 (reste 11), 1 pour 8 (reste 3), 0 pour 4, 1 pour 2
(reste 1), et 1 pour 1. On obtient donc la reprsentation binaire b10011011.
m Rcapitulatif sur la reprsentation des donnes
Dans tous les systmes informatiss, toute information, quelle soit instruction ou
bien donne, est reprsente sous forme binaire. Il en va de mme pour les caractres :
les caractres sont reprsents en mmoire sous la forme dun code numrique. Ce
code numrique drive de la table de caractres normalise par lANSI, qui a
dni, sur 7 bits, 128 caractres de base non accentus. Cette table adopte dans les
annes 1960, appele ASCII (American Standard Code for Information Interchange),
a eu plusieurs drivs, ainsi, les codes ASCII tendus ajoutent un bit la reprsen-
tation ASCII, ce qui permet dobtenir 256 caractres. Cela est loin dtre sufsant
pour reprsenter tous les caractres internationaux, donc les 128 caractres ajouts
(codes 128 255) dpendent dune table charge en fonction du pays. Le mme
principe est repris dans limplmentation Unicode de la norme ISO/IEC 10646.
Cette implmentation, reprise dans la plupart des logiciels actuels, propose des tables
de caractres sur 8, 16 et mme 32 bits. Lorsque sous MS Windows

on lance une
application console et que les accents ne sont pas bien afchs, cela est souvent d
au fait que lapplication ne prend pas en compte la bonne page dASCII tendu.
Lorsque lon navigue sur internet et quune page asiatique nest pas convenablement
afche, cela est d au fait que la plupart des navigateurs europens se basent sur
la page Unicode Latin-1, qui regroupe les caractres dEurope de louest en utilisant
une reprsentation sur 16 bits.
Les informations en mmoire peuvent correspondre, en fonction du contexte, des
instructions/oprandes, ou donnes quel que soit leur type. La gure 4.7 prsente
un rcapitulatif des diffrents formats utiliss pour reprsenter les donnes de base.
126
4.1 Architecture matrielle 4 Architectures systmes
4.1.4 Notions sur les entres/sorties
Le dernier point darchitecture matrielle abord concerne les diffrents types dentres/
sorties permettant une application de communiquer avec le monde extrieur.
Lorsque le processeur doit effectuer une entre/sortie, les temps daccs au matriel
sont sans commune mesure avec le temps de cycle processeur. Par consquent, an
dviter au processeur de perdre du temps de calcul lors de la ralisation dune
entre/sortie, le mcanisme des interruptions est utilis.
m Interruptions matrielles
Lorsque le processeur doit lire des informations de lextrieur, il peut le faire de deux
faons. La plus simple, mais la moins efcace, consiste faire de la scrutation
(aussi appele attente active ou polling) : le processeur lit en boucle ce qui arrive
sur une entre, sans savoir avant de lire sil y a des donnes intressantes . La plus
efcace, mais qui nest pas toujours possible, consiste utiliser les interruptions.
Le processeur peut tre en train deffectuer un calcul quelconque, mais lorsque des
donnes sont prtes, le processeur est interrompu dans son traitement, et un trai-
tement (gnralement trs court) appel routine de traitement dinterruption
(en anglais ISR pour Interrupt Service Routine) est effectu. Ainsi, le processeur ne
gaspille pas de temps vrier la prsence dinformations intressantes : il en est
prvenu par interruption. Gnralement, cest un dispositif physique ddi, appel
contrleur de bus dentres/sorties, qui est charg de gnrer des interruptions.
Il en va de mme pour lenvoi de donnes vers un bus dentres/sorties : le dbit
autoris par le bus pour le transfert dinformations est tellement faible par rapport
la vitesse du processeur quil serait obligatoire dattendre de nombreux cycles
ASCII
BCD
EBCDIC
ANSI
Unicode
Donnes
non numriques
Donnes 0 et 0
Donnes 0
Signe, valeur absolue
Complment 1
Complment 2
Binaire positif
Donnes
fractionnaires
Virgule fixe
Virgule flottante (IEEE)
Donnes
entires
Donnes
numriques
Figure 4.7 Diffrents formats de reprsentation de donnes.
4.1 Architecture matrielle
127


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
processeurs entre lenvoi de chaque mot mmoire. Grce aux interruptions, on utilise
gnralement un systme de buffer (zone de stockage dinformations) de donnes
mettre : le contrleur dentres/sorties se charge donc dmettre les donnes la
vitesse du bus, et prvient par interruption le processeur lorsque le buffer est vide
ou quasi-vide an que le processeur fournisse de nouvelles donnes mettre.
Ainsi, le processeur na pas attendre que le bus dentres/sorties soit libre, et il peut
se consacrer dautres traitements.
tant donn que le traitement effectu par un processeur est squentiel, comment
une interruption peut-elle tre traite ? Ltat dun programme est totalement carac-
tris par ltat des registres (notamment du compteur ordinal) et bien entendu sa
mmoire propre en mmoire centrale (instructions, donnes). Si lISR naffecte
pas la mmoire propre du programme en mmoire centrale, et si les registres sont
sauvegards, il est possible de changer sur interruption la valeur du compteur ordinal
pour la brancher sur ladresse de dbut des instructions de lISR, la routine sex-
cute alors, et la n de la routine, ltat du processeur est restaur. Le programme
en cours dexcution est donc interrompu, mais la n du traitement de linterrup-
tion, le processeur est remis dans le mme tat quau moment de linterruption :
il continue donc son excution comme sil navait pas t interrompu (gure 4.8).
Excution dun programme
Interruption
Processeur utilis
par un programme
Processeur utilis
par lISR
Sauvegarde du registre dtat
et du compteur ordinal
Sauvegarde de ltat des registres modifis par lISR
Traitement de lISR
Restauration des registres
Fin de linterruption
Restauration du registre dtat
et du compteur ordinal
Le programme reprend
comme si rien ne stait pass
Figure 4.8 Prise en compte dune interruption matrielle.
128
4.1 Architecture matrielle 4 Architectures systmes
Il peut tre possible dignorer compltement une interruption : cela sappelle dsarmer
une interruption. Linterruption pourra nouveau tre prise en compte lorsquelle
sera arme.
Pour retarder le traitement dune interruption (par exemple lors du traitement dune
autre interruption), on peut masquer une interruption. Dans ce cas, les requtes
dinterruptions sont si possible mmorises : ces requtes seront traites lorsque
linterruption sera dmasque.
m Bus dentres/sorties
Au niveau logiciel, la possibilit dutiliser les interruptions pour viter lattente active
se traduit par la possibilit deffectuer des lectures bloquantes. De plus, la plupart
du temps, les envois sur les bus dentres/sorties sont bufferiss et suspensifs pour
le programme les mettant. Cela signie quun programme qui envoie des donnes
sur un bus dentres/sorties (par exemple, un programme qui effectue un afchage
sur un terminal alphanumrique) envoie des donnes dans le buffer, puis se suspend
(le processeur peut tre utilis autre chose) jusqu ce quil y ait nouveau de la
place dans le buffer, etc., jusqu puisement des donnes mettre. Gnralement,
les entres/sorties utilisant des bus sont suspensives pour lmission de donnes et
bloquantes pour la rception, grce lutilisation des interruptions matrielles.
Le nombre des interruptions matrielles est limit sur un systme informatis (par
exemple, il y en a 16 sur les PC). Les interruptions sont utilises par les bus dentres/
sorties et autres lments dentres/sorties :
bus srie (norme RS-232) : lun des bus externes (permettant de brancher un
lment externe au systme informatis) les plus utiliss encore aujourdhui pour
communiquer avec du matriel dacquisition/commande intelligent . La com-
munication srie (transfert bit bit) est trs rpandue aussi bien au niveau des
microprocesseurs, qui cohabitent le plus souvent avec des puces capables de grer
des entres/sorties srie, quau niveau des microcontrleurs, qui intgrent trs
souvent ce type de communication. Ce bus est trs souvent utilis avec un pro-
tocole bidirectionnel de type ASCII (ce sont des caractres qui sont changs),
permettant au processeur denvoyer des commandes ou des informations de con-
guration, et de recevoir des informations de statut ou des donnes dacquisition.
Le type de matriel utilisant la communication srie est trs large : centrales
dacquisition de tempratures sur thermocouples, capteurs GPS, centrales iner-
tielles intgrant acclromtres, gyromtres et magntomtres, crans alphanum-
riques, etc. Cest un bus relativement simple programmer, car il existe de nom-
breuses bibliothques logicielles permettant de tirer parti de ce bus capable de
transporter des ots de donnes jusqu 128 000 bits/s ;
bus parallle : presque obsolte, ce bus externe permet une transmission de 8 bits
en parallle des dbits de 3 Mo/s. Il y a quelques annes, ctait un bus trs
utilis pour communiquer avec des imprimantes ;
bus USB (Universal Serial Bus) : ce bus externe hritier du bus srie permet,
dans sa version 1.0, des dbits de lordre de 1,5 Mo/s et dans sa version 2.0 des
dbits aux alentours de 60 Mo/s. Dans le monde de la micro-informatique, ce
bus a supplant les bus srie et parallle pour permettre la communication avec
4.1 Architecture matrielle
129


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
des lments varis qui peuvent tre relativement gourmands en dbits de donnes
(souris, clavier, webcams, imprimantes, scanners, modems, capteur GPS). Il a
lavantage de pouvoir transporter lalimentation vers le matriel lorsque celui-ci
consomme peu dnergie. Cependant, bien quil soit possible quil simpose dans
quelques annes sur le march des lments temps rel, il na pas encore fait de relle
apparition dans ce domaine, et peu de microcontrleurs intgrent un bus USB ;
bus FireWire (norme IEEE 1394) : ce bus srie externe concurrence lUSB 2.0
dans sa version a, offrant des dbits de lordre de 50 Mo/s. Ce bus est trs utilis
pour lacquisition vido numrique (le format de compression vido utilis, le for-
mat DV, est peu compress pour viter les pertes de qualit). Dans sa norme b,
offrant des dbits de lordre de 400 Mo/s, il concurrence le bus SCSI pour le
branchement de disques durs/lecteurs DVD ou CD externes. Il est pour linstant
peu prsent sur les microcontrleurs et dans le monde des systmes temps rel ;
bus SCSI (Small Computer System Interface) : en perptuelle amlioration, ce bus
externe parallle fournissant des dbits allant de 5 Mo/s (SCSI-1) 320 Mo/s
(Ultra-4-SCSI), permet notamment la connexion dun ordinateur des priph-
riques de stockage externe (disques durs externes, etc.) ;
bus PCMCIA (Personal Computer Memory Card International Association) : ce bus
externe parallle permettant des dbits de lordre de 130 Mo/s, prsent surtout
sur les ordinateurs portables, permet lutilisation de priphriques compacts (qui-
valent des priphriques PCI des ordinateurs de bureau). De format presque
identique (modulo un petit adaptateur), le format Compact Flash est de plus en
plus utilis pour des lments compacts facilement embarquables (comme des
GPS pour PC de poche) ;
bus ISA (Industry Standard Architecture) : presque obsolte, ce bus interne (lors-
quil est prsent, se trouve sur la carte mre des ordinateurs utilisant un micro-
processeur) permet de connecter diffrents types de cartes internes (vieille carte son,
vieille carte dacquisition) peu gourmandes en dbit de donnes ;
bus PCI (Peripheral Component Interconnect) : trs utilis pour brancher des cartes
internes (cartes dacquisition, cartes son, etc.) dans les ordinateurs, ce bus interne
parallle fournit des dbits de lordre de 1 Go/s ;
bus AGP (Advanced Graphic Port) : utilis exclusivement pour connecter des
cartes vido (carte se chargeant de lafchage graphique), ce bus interne parallle
est lun des bus dentres/sorties les plus rapides avec des dbits qui augmentent
continment (la version 8x permet un dbit de 2,1 Go/s) ;
bus ATA (Advanced Technology Attachment) : gnralement appel bus IDE
(Integrated Drive Electronics), ce bus parallle interne est gnralement utilis pour
communiquer avec les lments internes de stockage (disque dur, lecteur/graveur
de CD ou DVD, etc.). En perptuelle volution, ce bus permet des dbits de
133 Mo/s dans sa version Ultra DMA/133.
En thorie, le dbit maximal (bande passante) dun bus parallle devrait tre obtenu
par la frquence du bus largeur du bus, cependant, sur certains types de bus (comme
ISA), les informations de gestion du bus prennent une partie non ngligeable de la
bande passante. Dans lautre sens, de plus en plus de bus (AGP, SCSI) permettent
130
4.1 Architecture matrielle 4 Architectures systmes
Tableau 4.6 Rcapitulatifs sur les bus dentres/sorties.
Nom Norme
Largeur
en bits
Frquence
Dbit maximal
thorique
Applications
typiques
bus externes
Srie RS 232 1 240 Ko/s Tout type de capteurs
intelligents, modem
Parallle 8 3 Mo/s Presque plus utilis
USB Universal Serial
Bus
1 60 Mo/s Vido, imprimante,
souris, clavier
FireWire IEEE 1394 1 50 400 Mo/s Vido, disques
externes
SCSI Small Computer
System Interface
8/16/32 4,77
80 MHz
320 Mo/s Disque externe
PCMCIA Personal
Computer
Memory Card
International
Association
16 33 MHz 130 Mo/s Mmoire flash,
Cartes dacquisition,
rseau
bus internes
ISA Industry
Standard
Architecture
16 8 MHz 8 Mo/s Obsolte, servait
au branchement
de cartes internes
(son, acquisition)
PCI Peripheral
Component
Interconnect
32/64 133 MHz 1 Go/s Cur reliant
les diffrents bus
dentres/sorties
au microprocesseur
AGP Advanced
Graphic Port
32 66 8 2,1 Go/s Carte vido
ATA/IDE Advanced
Technology
Attachment /
Integrated Drive
Electronics
16 66 133 Mo/s Disque interne
4.1 Architecture matrielle
131


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
lenvoi de plusieurs donnes par cycle dhorloge. Cest dailleurs le cas pour les bus
spcialiss dans le transfert de donnes entre le processeur et la mmoire centrale.
Finalement, le bus dentres/sorties le plus utilis avec des lments dacquisition
externes est le bus srie. Quel que soit le bus employ, il est important de conserver
en mmoire que le fait daccder un priphrique via un bus dentres/sorties
(que ce soit en lecture ou en criture de donnes) est suspensif pour un programme.
Le tableau 4.7 donne quelques mesures communment utilises dans les systmes
informatiss, permettant de mieux apprhender le tableau 4.6.
m Entres/Sorties numriques et analogiques
Sur les microcontrleurs, on trouve des interfaces dentres/sorties que lon peut
connecter presque (modulo des botiers de conditionnement et des relais en puis-
sance) directement du matriel dacquisition ou commande (capteurs ou action-
neurs). On trouve le mme type dinterface pour les ordinateurs : elles se prsentent
le plus souvent sous la forme de cartes dextension (notamment au format ISA, PCI
ou PCMCIA) nommes cartes dacquisition. Deux types de signaux peuvent tre
manipuls par ce genre dinterface : les signaux numriques et les signaux analo-
giques.
Tableau 4.7 Mesures de frquences et de taille.
Mesures de frquence
kHz 10
3
cycles/s Frquences audibles (< 15 kHz)
MHz 10
6
cycles/s Frquence du bus de donnes (plusieurs centaines de MHz)
GHz 10
9
cycles/s Frquence dun microprocesseur (quelques GHz)
THz 10
12
cycles/s Frquence ondulatoire des ondes lumineuses (370 750 THz)
PHz 10
15
cycles/s Frquence ondulatoire des rayons X (> 30 PHz)
Mesures de capacit
k kilo 10
3
ko 2
10
1024 Taille dun petit fichier ASCII
M mga 10
6
Mo 2
20
1048576 Taille dun fichier MP3
(musique compresse)
G giga 10
9
Go 2
30
1073741824 Taille dune heure de film au format
MPEG2 (tlvision numrique)
T tra 10
12
To 2
40
1099511627776 Taille des informations stockes
dans une petite universit
P pta 10
15
Po 2
50
1125899906842624 Taille des informations stockes
par une socit spcialise dans
le stockage
132
4.1 Architecture matrielle 4 Architectures systmes
M Entres/sorties numriques
Les entres/sorties numriques sont de type tout ou rien (2 tats possibles qui cor-
respondent lectriquement par exemple 5 V, + 5 V). Ce type dentre peut tre
branch (via une adaptation de puissance et ou tension) des capteurs ou action-
neurs de type tout ou rien (TOR) (lectrovanne TOR, capteur de prsence, alimen-
tation). On appelle ligne une entre ou sortie numrique (physiquement corres-
pondant deux connecteurs : la masse numrique et la porteuse). Ltat dune
ligne est caractris par un bit (0 ou 1). Comme la plus petite entit adressable en
mmoire est loctet, les lignes sont regroupes par 8, formant ainsi un octet appel
port numrique. Il est possible de dnir des ports de taille multiple de 8 (ports
de 16 ou 32 bits par exemple). Chaque ligne dun port peut tre congure de faon
logicielle en entre (lecture sur un capteur) ou en sortie (criture vers un actionneur).
Gnralement, lutilisation dentres/sorties numriques se fait de la faon suivante
(gure 4.9) :
Conguration du port numrique laide dun octet de conguration de direction
des lignes. Le plus souvent, le bit i (i 0..taille du port-1) permet de congurer
la ligne i (i 0..taille du port-1). Par exemple, en fonction de la carte dacquisi-
tion ou du microcontrleur, un bit 1 peut correspondre mettre la ligne cor-
respondante en sortie, alors quun bit 0 congure la ligne en entre. Dans ce
cas, un octet de conguration valant 0x73 (b01110011) congurerait les lignes
6,5,4,1,0 en sortie et les lignes 7,3,2 en entre. Loctet de conguration 0x0
placerait tout le port en entre, alors que 0xFF (ou bien -1 grce la reprsentation
en complment 2 de ce nombre, qui nest constitue que de 1 en binaire) con-
gurerait le port en sortie. La conguration a gnralement lieu une seule fois en
dbut de programme.
Lecture dun port : les lignes se lisent toujours par port (dau moins un octet donc).
Par exemple, si le port est dun octet, la lecture renvoie un octet, dont la repr-
sentation binaire correspond ltat des lignes. Ainsi, si on lit loctet 0xA3
(b10100011) sur un port pralablement congur en entre, cela signie que
les lignes 7,5,1,0 sont 1 et que les lignes 6,4,3,2 sont 0. Si le port nest pas
totalement congur en entre, les bits lus correspondant aux lignes congures
en sorties ont des valeurs non signicatives.
criture sur un port : de mme que les lectures, les critures concernent toujours
un port entier. Il existe cependant une diffrence noter. En effet, supposons quun
port, congur totalement en sortie, ait toutes les lignes relies des actionneurs.
La sortie est maintenue de faon matrielle une certaine valeur (1 ou 0), qui
est la dernire valeur crite. Supposons alors que lon veuille modier ltat dun
seul actionneur, donc dune seule ligne. Il faut alors connatre ltat complet du
port, modier le bit correspondant lactionneur, puis crire cet octet sur le port
de sortie. Ce fonctionnement, bien que possible, nest pas trs pratique : en effet,
les applications de contrle-commande sont souvent multitches, et il arrive fr-
quemment que le composant logiciel commandant un actionneur ne sache pas
du tout dans quel tat se trouvent les autres actionneurs. Lide gnralement
retenue pour viter davoir soccuper de ce problme est dutiliser un masque.
Le principe est assez proche du ou des octets de conguration de port. Supposons
=
=
4.1 Architecture matrielle
133


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
que le port soit dun octet, on cre un octet masque : pour chaque bit 1, on
considre quil y a un trou dans le masque et que les bits correspondants un trou
dans le masque ont une action physique sur le port. Si le bit est 0, on considre
que le masque est opaque et que la ligne correspondante ne peut pas tre affecte.
Lcriture sur un port se base donc sur deux paramtres, chacun de la mme largeur
que le port : un masque, et une commande. Tout se passe comme si seuls les bits
de la commande correspondant un trou (bit 1) dans le masque pouvaient
arriver jusquaux lignes de sortie numrique. Par exemple (gure 4.10), si un port
dun octet est congur en criture, et si lon veut mettre 1 la ligne numro 6
sans toucher aux autres lignes, il suft de crer un masque valant 0x40 (1 dcal
de 6 gauche), et dappliquer une commande valant 0x40, ou mme 0xFF (octet
compos de 8 bits 1). Grce au masque, seule la ligne 6 est affecte, et mise 1.
Si lon souhaite mettre la ligne 6 0, on utilise le mme masque (0x40), et on
applique la valeur 0, seule la ligne 6 est affecte et mise 0.
Le dispositif de masque est gnralement purement logiciel. En fonction du niveau
de programmation disponible : soit via une bibliothque fournie, soit par adressage
direct la main, il peut tre ncessaire dimplmenter soi-mme la technique du
masque.
Port 0
Port 1
Ligne 0
Ligne 1
Ligne 2
Ligne 3
Ligne 4
Ligne 5
Ligne 6
Ligne 7
Ligne 0
Ligne 1
Ligne 2
Ligne 3
Ligne 4
Ligne 5
Ligne 6
Ligne 7
Sens des lignes du port 0
pour une configuration
b01100011 = 0x63
Sens des lignes du port 0
pour une configuration
b10111000 = 0xB8
Les masses et alimentations externes des relais
ne sont pas reprsentes
Exemple de masque
Exemple dciture sur le port 0
0
1
1
0
0
1
0
0
1
1
1
1
0
0
0
0
Exemple de lecture
sur le port 1

Capteur de prsence
0 V-12 Vcc
lectrovanne TOR
220 V ~
lment alimenter
en 24 V cc
Relais
lectrique
5 V-+5 Vcc 0 V-220 V~
Relais
lectrique
5 V-+5 V cc 0 V-24 Vcc
Relais
lectrique
5 V-+5 Vcc 0 V-12 Vcc
Figure 4.9 Lignes et ports numriques.
134
4.1 Architecture matrielle 4 Architectures systmes
Il est noter que le fait dcrire sur une ligne congure en entre na gnralement
aucun effet, et que le fait de lire sur une ligne congure en sortie donne des valeurs
non signicatives.
La communication logicielle avec les ports dentres/sorties seffectue au plus bas
niveau par utilisation des registres de la carte dacquisition. Une carte dacquisition
plaque ses registres sur des adresses spciques dites dentres/sorties. Ces adresses
sont caractrises par une adresse de base, et une taille des registres plaqus sur la
mmoire. Par exemple si une carte dacquisition utilise les adresses 0x210 0x213,
cela signie que son adresse de base est 0x210, et quelle plaque 4 octets de ses
registres partir de ladresse da base. Ainsi, il est possible que le registre plaqu sur
ladresse 0x210 corresponde aux 8 lignes du port 0, 0x211 aux 8 lignes du port 1,
0x212 aux 8 lignes du port 2, et 0x213 un octet de conguration de la carte. Le
fait dcrire sur un de ces octets a pour effet de modier ltat de la carte. Le fait de
lire un de ces octets a pour effet dinterroger la carte. Ces actions sont suspensives
pour un programme : dans ce cas, quil cherche lire ou crire sur une adresse
dentres/sorties, il peut tre suspendu jusqu la n de lentre/sortie. La lecture
nest pas bloquante : cela signie que mme si aucune valeur na chang depuis la
dernire lecture sur la carte, la lecture a lieu. Lutilisation basique qui est faite des
entres numriques est donc de type scrutation : il est ncessaire de lire les entres
en boucle.
Il existe cependant des types dentres capables de gnrer une interruption sur
front montant ou descendant (changement dtat 0 1 ou 1 0) : cela permet de
faire des lectures bloquantes, cest--dire de ne pas consommer de temps processeur
hors traitement des vnements qui changent ltat des entres. Il en est ainsi des
entres dites de type trigger, des entres de type compteur, ou bien entres suppor-
tant le pattern matching (capables de gnrer une interruption sur une diffrence
dentre).
Ligne 0
Ligne 1
Ligne 2
Ligne 3
Ligne 4
Ligne 5
Ligne 6
Ligne 7
Sens des lignes du port 0
pour une configuration 0xFF (criture)
Masque 0x40
Exemple dciture sur le port 0
0
0
0
0
0
0
1
0
1
1
1
1
0
0
0
0
Port 0
Seule la ligne 6 est modifie
Figure 4.10 Exemple de masque binaire numrique.
4.1 Architecture matrielle
135


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
Les entres de type trigger sont gnralement utilises pour synchroniser les acqui-
sitions sur une source externe, par exemple un trigger (qui se traduit par un signal
carr, soit passage de 0 1 puis passage de 1 0) priodique, ou bien un trigger
dclench lorsquun vnement extrieur survient.
Les entres/sorties de type compteur permettent de compter des fronts (montants
et ou descendants) de faon bloquante (utilisation des interruptions).
Les entres supportant le pattern matching (permettant de dclencher une inter-
ruption lorsque les entres changent), se trouvent sur du matriel assez coteux.
Elles sont utilises lorsque le temps de prise en compte des vnements extrieurs
doit tre trs court. En effet, lun des inconvnients du polling est quil est difcile de
garantir la prise en compte dun vnement en dessous dune priode de scrutation,
au minimum de lordre de la milliseconde.
M Entres/sorties analogiques
Lorsquun systme doit lire des valeurs externes pouvant varier dans le domaine
continu (thermocouple, capteur de position axiale) ou bien pouvoir commander
des actionneurs comme des lectrovannes rglables ou bien lacclration variable dun
moteur, il lui faut utiliser des entres ou sorties analogiques. Les entres/sorties
analogiques permettent de passer de la continuit du monde rel lunivers discret
des systmes informatiss et rciproquement.
Une entre analogique permet de brancher un lment externe pouvant dlivrer
une tension (gnralement, les entres analogiques permettent de lire des tensions de
lordre de 0-10 V ou 10 V-+ 10 V). Un circuit spcique, nomm Convertisseur
Analogique Numrique (CAN) est utilis pour convertir la tension dentre en valeur
numrique. La prcision de cette valeur numrique dpend de plusieurs facteurs :
la rsolution, cest--dire le nombre de bits utiliss pour reprsenter la tension
lue sous forme numrique (en binaire). Pour n bits de rsolutions, 2
n
valeurs de
tension diffrentes peuvent tre fournies par une entre analogique. Si le domaine
est 10 V-+ 10 V, alors 2
n
valeurs sont utilises pour reprsenter une gamme de
20 V. La nesse de la lecture est alors, en plus de la prcision physique de la
carte, de 20 V/2
n
. Typiquement, la rsolution est de lordre de 12, 16, ou 24 bits.
Avec une rsolution de 12 bits, deux valeurs successives reprsentables ont un cart
de 4,88 mV. En 16 bits, on obtient 300 V alors quen 24 bits, deux valeurs
successives sont spares de 1 V. Gnralement, il est possible dajuster de faon
logicielle le domaine dentre, ainsi, si lon sait que le signal lu se situe entre 0 et
5 V, la prcision de la conversion sera multiplie par 4 par rapport 10 V-
+ 10 V (car deux valeurs successives sont spares de 5 V/2
n
) ;
la gamme, caractris par la tension minimale et maximale pouvant tre lue,
typiquement 10 V-+ 10 V ;
le gain permet damplier le signal dentre : avec un gain de 10 et une gamme
de 0-10V, le domaine de lecture peut se situer entre 0 et 1 V, ce qui dcuple la
prcision de la lecture par rapport un gain de 1 ;
le bruit, pouvant provenir de diffrents facteurs extrieurs.
136
4.1 Architecture matrielle 4 Architectures systmes
Les entres analogiques sont caractrises aussi par la frquence dchantillonnage
du convertisseur analogique numrique. En effet, celui-ci est partag entre un certain
nombre dentres analogiques (par exemple 2, 4, 8, 16). Les entres analogiques
sont donc multiplexes sur un convertisseur qui a une certaine frquence de con-
version. Si lon souhaite utiliser plusieurs entres analogiques partageant le mme
convertisseur, la frquence maximale dchantillonnage est donne par frquence
dchantillonnage du convertisseur analogique numrique /nombre dentres. On trouve
aisment des entres analogiques permettant dchantillonner un signal quelques
centaines de milliers dchantillons par seconde. Le matriel permettant datteindre
des frquences de lordre de quelques mga-chantillons par seconde est plus coteux.
Certaines entres analogiques peuvent tre programmes pour dclencher une inter-
ruption sur certains seuils de tension.
Malheureusement, beaucoup de capteurs (thermocouples par exemple) dlivrent un
courant trop faible pour tre lu de faon able directement par des entres analo-
giques. On utilise donc souvent du matriel de conditionnement, dont le rle est
de ltrer, amplier ou rduire la tension en entre, et/ou isoler du courant dentre
qui le plus souvent ne doit pas excder 20 mA.
De faon symtrique au convertisseur analogique numrique, le Convertisseur
Numrique Analogique (CNA) permet une sortie analogique de prendre une valeur
numrique en entre, et de restituer en sortie une tension analogique. Comme les
sorties numriques, les sorties analogiques maintiennent une tension tant quon ne
change pas leur valeur dentre (si lon applique 4,33 V en sortie, cette tension est
maintenue jusqu ce que lon dcide dappliquer une autre tension). Par consquent,
un convertisseur est utilis pour chaque sortie, et le prix des sorties analogiques est
fortement inuenc par le nombre de sorties (contrairement aux entres qui partagent
le mme convertisseur analogique numrique).
Une sortie analogique est caractrise par :
le dlai de changement de valeur ;
la frquence de commande, frquence maximale de changement de valeur ;
la rsolution, dont le principe est similaire aux entres.
cause du fonctionnement discret des systmes informatiss, il faut avoir conscience
quon ne peut gnrer de faon parfaite un signal, par exemple un sinus : il est possible
de gnrer des paliers successifs qui, de loin, forment un sinus.
Du matriel de conditionnement (notamment en tension ou en courant, les sorties
analogiques tant souvent limites entre 4 et 20 mA) est souvent utilis entre les
sorties analogiques et les actionneurs commands.
La gure 4.11 prsente un schma simpli de carte dacquisition.
137
4.1 Architecture matrielle 4 Architectures systmes


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
B u s P C I ( m i c r o - o r d i n a t e u r )
I
n
t
e
r
f
a
c
e

b
u
s
H
o
r
l
o
g
e
C
o
m
p
t
e
u
r
(
2
4

b
i
t
s
)
C
o
m
p
t
e
u
r
(
2
4

b
i
t
s
)
I
n
t
e
r
f
a
c
e

d

e
n
t
r

e
s
/
s
o
r
t
i
e
s
n
u
m

r
i
q
u
e
s

p
r
o
g
r
a
m
m
a
b
l
e
M
u
l
t
i
p
l
e
x
e
u
r
1
6


1

A
m
p
l
i
f
i
c
a
t
e
u
r


g
a
i
n
p
r
o
g
r
a
m
m
a
b
l
e
A
m
p
l
i
f
i
c
a
t
e
u
r

c
h
a
n
t
i
l
l
o
n
n
e
u
r
B
l
o
q
u
e
u
r
C
o
n
v
e
r
t
i
s
s
e
u
r

1
2

b
i
t
s

n
u
m

r
i
q
u
e
-
a
n
a
l
o
g
i
q
u
e

I
n
t
e
r
f
a
c
e

d

e
n
t
r

e
s

a
n
a
l
o
g
i
q
u
e
s

(
1
6

v
o
i
e
s
)
C
o
n
v
e
r
t
i
s
s
e
u
r

1
2

b
i
t
s
n
u
m

r
i
q
u
e
-
a
n
a
l
o
g
i
q
u
e
C
o
n
v
e
r
t
i
s
s
e
u
r

1
2

b
i
t
s
n
u
m

r
i
q
u
e
-
a
n
a
l
o
g
i
q
u
e
C o n n e c t e u r d e n t r e s / s o r t i e s ( 1 0 0 b r o c h e s )
1
6

e
n
t
r

e
s

a
n
a
l
o
g
i
q
u
e
s
1

s
o
r
t
i
e

a
n
a
l
o
g
i
q
u
e
1

s
o
r
t
i
e

a
n
a
l
o
g
i
q
u
e
3
2

e
n
t
r

e
s
/
s
o
r
t
i
e
s
n
u
m

r
i
q
u
e
s

(
t
y
p
e

T
T
L
)
H
o
r
l
o
g
e

e
x
t
e
r
n
e
D

c
l
e
n
c
h
e
m
e
n
t
F
i
n

d
e

c
o
m
p
t
a
g
e
D
o
n
n

e
s
D

c
o
d
e
u
r
d

a
d
r
e
s
s
e
s
S

l
e
c
t
i
o
n
d
e
s

r
e
g
i
s
t
r
e
s
H
o
r
l
o
g
e
s
M

m
o
i
r
e

t
a
m
p
o
n
(
5
1
2

m
o
t
s
)
C
i
r
c
u
i
t
s

c
o
m
p
t
e
u
r
s
/
t
e
m
p
o
r
i
s
a
t
e
u
r
s
I
n
t
e
r
f
a
c
e

d

e
n
t
r

e
s
/
s
o
r
t
i
e
s

n
u
m

r
i
q
u
e
s
I
n
t
e
r
f
a
c
e

d
e

s
o
r
t
i
e
s

a
n
a
l
o
g
i
q
u
e
s

(
2

v
o
i
e
s
)
F
i
g
u
r
e

4
.
1
1


S
c
h

m
a

s
i
m
p
l
i
f
i


d
e

c
a
r
t
e

d

a
c
q
u
i
s
i
t
i
o
n
.
138
4.2 Architecture logicielle 4 Architectures systmes
4.2 Architecture logicielle
Sans le systme dexploitation (SE, Operating System, OS), le systme informatis nest
quune bote inutilisable. Le systme dexploitation fait linterface entre le matriel
et le logiciel (gure 4.12) : il prsente aux programmes une machine virtuelle,
relativement indpendante du matriel sous-jacent.
Ce chapitre na pas pour objectif de prsenter de faon exhaustive les rles dun
systme dexploitation. Il sattache dcrire quelques lments indispensables pour
la bonne comprhension des problmes lis au multitche. Il prsente donc la notion
de processus, dordonnancement, et de synchronisation de processus.
4.2.1 Processus
Lun des rles primordiaux des systmes dexploitation multitches (cest le cas
aujourdhui de la quasi-totalit des systmes dexploitation) est dassurer lexcution
de plusieurs programmes en parallle.
m Caractrisation des processus
Un programme en cours dexcution sappelle un processus. Un processus est une
instance de programme (il peut y avoir plusieurs processus dun mme programme,
par exemple, plusieurs processus du mme traitement de texte). chaque fois quun
programme est excut, un processus est cr. Il se voit attribuer de la mmoire, tout
ou partie de son code et de ses donnes est charg en mmoire centrale, et il est
caractris par le systme dexploitation grce un Bloc de Contrle de Processus
(BCP) contenant diverses informations (numro didentication, mmoire alloue,
chiers ouverts, temps dexcution, tat). Les tats dexcution dun processus
sont reprsents sur la gure 4.13.
Un processus en excution sexcute squentiellement sur le processeur. Lorsquil fait
une instruction bloquante (une entre/sortie par exemple), il se retrouve bloqu et
ne peut plus utiliser le processeur jusqu ce que lvnement attendu ait lieu. Dans
ce cas, il se retrouve dans ltat prt (cela signie quil attend de pouvoir sexcuter
sur le processeur). Lorsque le systme dexploitation le dcide, un processus en
excution peut tre prempt, cest--dire passer de ltat excut ltat prt.
Remarquons quil existe dautres tats possibles, comme ltat suspendu, dans lequel
Matriel
Systme dexploitation
Applications
Figure 4.12 Rle du systme dexploitation.
4.2 Architecture logicielle
139


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
on peut plonger un processus, jusqu sa reprise qui le remet dans ltat prt, ainsi
que ltat endormi, dans lequel un processus peut se trouver lorsquil dcide dattendre
pendant un certain temps.
Techniquement, la premption se droule de la faon suivante (gure 4.14) : une
interruption particulire, lhorloge temps rel (HTR), est utilise par le systme
dexploitation. Priodiquement (la dure dune priode sappelle un quantum),
linterruption horloge a lieu. LISR qui a lieu fait partie du systme dexploitation :
elle sauvegarde alors dans le bloc de contrle de processus ltat dexcution du
processus (ltat des registres), puis restaure dans le processeur ltat des registres de
lun des processus prt que le systme dexploitation choisit. Ce qui caractrise un
processus en excution sappelle un contexte. La premption consiste donc en un
changement de contexte. La commutation de contexte est ralise par une routine
spcique du systme dexploitation appele dispatcher. Souvent, dans les micro-
processeurs, le dispatcher est implment de faon matrielle.
chaque quantum de temps, le systme dexploitation prend donc la main grce
une ISR, interrompant ainsi le processus excut, et peut dcider de le prempter,
cest--dire dlire un autre processus. Dans les systmes dexploitation, lordre de
grandeurs du quantum de temps est de lordre de 10 100 ms, alors que dans les
systmes temps rel, on peut arriver 1 ms, voire mme en dessous.
Il faut remarquer que le temps dexcution du systme dexploitation et du dispatcher
peut ne pas tre ngligeable au regard du quantum de temps choisi. Le pourcentage
du temps processeur utilis par le systme dexploitation pour grer les processus
sappelle le surcot processeur ou overhead. Sur la gure 4.14, cet overhead est
visible sur la ligne SE du diagramme de Gantt. Typiquement, sur un systme dexploi-
Excut
Prt
Bloqu
Endormi
Attente dune dure
Rveil
Premption
lection
Attente bloquante
vnement attendu arriv
Inexistant
Existant
Cration et initialisation
Terminaison
Suppression
Suppression
Suppression
Figure 4.13 tats dun processus.
140
4.2 Architecture logicielle 4 Architectures systmes
tation classique, il y a plusieurs centaines dinterruptions par seconde (gestion de
lhorloge, du rseau, des priphriques et bus dentres/sorties) pour un overhead
infrieur 1 % du temps processeur.
m Ordonnancement de processus
La stratgie utilise pour choisir parmi les processus prts le prochain processus
excuter sappelle lordonnancement. Lordonnancement consiste simplement
ordonner les processus par priorit. Le dispatcher se charge de placer le contexte du
processus le plus prioritaire sur le processeur. Il existe plusieurs stratgies dordonnan-
cement spciques pour le temps rel qui seront abordes par la suite. Dans ce cha-
pitre, nous prsentons quelques stratgies de bases, utilises par les systmes dexploi-
tation.
Grce la premption et lordonnancement, tout se passe comme si les processus
pouvaient sexcuter en parallle. Dans la ralit, le systme dexploitation ralise
un entrelacement temporel des processus.
Notons que les exemples dordonnancement prsents ci-aprs sont trs acadmiques,
puisque les processus sont censs ne pas sendormir, se suspendre, ou mme effectuer
dactions suspensives ou bloquantes. En effet, lorsquun processus excute une instruc-
Droulement du processus P1
Interruption HTR : le contexte de P1 est
sauvegard et le contexte de P2 est restaur
Droulement du processus P2
Interruption HTR : le contexte de P2 est
sauvegard, et le contexte de P1 est restaur
Droulement du processus P1
P1
P1
SE
Autre vue : le diagramme de Gantt
Temps
Temps
Figure 4.14 Principe de lentrelacement temporel.
4.2 Architecture logicielle
141


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
tion suspensive ou bloquante, cette instruction fait un appel au systme dexploita-
tion, qui peut alors changer ltat du processus et lire un autre processus prt.
Il est important de retenir que seuls les processus prts concourent pour lobtention du
processeur. Nous citons ci-aprs quelques politiques dordonnancement rpandues :
FIFO (First In First Out) : premier arriv premier servi, lun des algorithmes
les plus simples, puisquil excute les processus dans leur ordre darrive. Dans
le cas o les processus ne se suspendent pas et nattendent pas, cet algorithme ne
ncessite aucune premption, car lorsquun processus commence son excution,
il nest pas interrompu jusqu sa terminaison.
Algorithme priorits : chaque processus est muni dune priorit. chaque
quantum, cest le processus prt de plus forte priorit qui est lu. En cas dgalit,
dautres rgles peuvent sappliquer, comme FIFO par exemple.
Algorithme du tourniquet (round robin) : les processus prts ont droit chacun
leur tour un quantum. Lorsquun cycle dattribution du processeur aux processus
est termin, un autre cycle du tourniquet commence.
On peut remarquer sur la gure 4.15 que la dnition de lalgorithme du tourniquet
laisse libre de grer le rveil des processus de diffrentes manires : ils peuvent tre
placs en dbut de tourniquet (comme sur la gure), ou en n de tourniquet.
Notons que sur la gure 4.15, le surcot processeur est nglig.
Symbolise linstant de cration
Algorithme dordonnancement FIFO
Algorithme dordonnancement du tourniquet (Round Robin)
P
1
P
2
P
3
P
4
P
1
P
2
P
3
P
4
Figure 4.15 Illustration des algorithmes FIFO et tourniquet.
142
4.2 Architecture logicielle 4 Architectures systmes
Les critres dvaluation des algorithmes dordonnancement utiliss dans les systmes
dexploitation classiques sont les suivants :
lquit caractrise le fait que le processeur est rparti de faon quitable entre
les processus. Ainsi, lalgorithme dordonnancement FIFO nest pas quitable,
car si un processus a une dure trs longue, les processus lancs aprs devront
attendre longtemps avant de pouvoir sexcuter. Si lon se place dans le contexte
dun systme dexploitation classique, cela signie que lutilisateur ne peut pas ex-
cuter de nouveau processus tant quun processus nest pas termin. Au contraire,
le tourniquet parat trs quitable puisquil partage le processeur de faon gale
entre les processus. Enn, les algorithmes priorit ne sont pas quitables pour
les processus peu prioritaires au regard des processus prioritaires ;
le temps dattente moyen/maximal reprsente la dure moyenne/maximale
pendant laquelle un processus reste dans ltat prt (en attente du processeur). Il
est vident que FIFO et les algorithmes priorit ntant pas quitables, ils ne
proposeront pas un temps dattente maximal trs intressant pour un grand
nombre de cas (il est bien sr possible de gnrer des cas particuliers en choisis-
sant les dates de rveil et les dures des processus de sorte observer un bon temps
dattente moyen ou maximal). Pour le tourniquet, le temps dattente maximal
dun processus est born : si lon nomme q la dure dun quantum, n le nombre
maximal de processus prts un instant, et d la dure dune premption par le
systme dexploitation, le pire temps dattente dun processus est (n 1)q + n d
(gure 4.16). Pour les algorithmes FIFO et priorits, le temps dattente de
chaque tche dpend des arrives et/ou priorits des autres tches ;
le temps de rponse dun processus est la dure sparant sa cration de sa termi-
naison. Ce critre est trs important pour les applications de contrle-commande.
Ce critre peut tre gnralis un ensemble de processus : dans ce cas, on parle
de temps de rponse moyen (moyenne des temps de rponse des processus) ou
maximal (plus grand temps de rponse parmi les processus). Gnralement, le
tourniquet nest pas un trs bon candidat vis--vis du temps de rponse moyen
et maximal par rapport FIFO (gure 4.17) car pour diminuer le temps dattente
SE
Temps
Dure du surcot
Temps dattente maximal
Dure dun quantum
P
1
P
2
P
3
P
4
Figure 4.16 Illustration du temps dattente.
4.2 Architecture logicielle
143


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
de chaque processus, il retarde un peu chacun dentre eux. Les algorithmes
priorits vont bien entendu, sauf pour quelques cas particuliers que lon peut
construire, diminuer le temps de rponse des processus prioritaires, mais augmenter
celui des processus moins prioritaires. Le moyen de diminuer le temps de rponse
moyen consisterait excuter dabord les processus ayant la dure restant ex-
cuter la plus courte (algorithme nomm SRPT pour Shortest Remaining Time First).
Cependant, cela supposerait de connatre a priori la dure des processus (algo-
rithme dordonnancement clairvoyant), ce qui nest pas raliste pour un systme
dexploitation gnraliste (nous verrons cependant au chapitre 8 que cest raliste,
et mme ralis pour certains systmes temps rel).
Pour caractriser un algorithme dordonnancement, on peut aussi utiliser la notion de
rendement (nombre de processus termins par quantum de temps), la dure du quan-
tum lui-mme ou le nombre de premptions, qui vont inuencer loverhead, etc.
Dans les systmes dexploitation gnralistes, la politique dordonnancement la plus
utilise est base sur une combinaison du tourniquet et des priorits, qui allient
lquit du tourniquet au rendement des algorithmes priorits pour les processus
jugs prioritaires. Cet algorithme dordonnancement sappelle MLF (Multi-Level
Feedback) et consiste utiliser un tourniquet par niveau de priorit, et partager le
processeur suivant la rgle du tourniquet entre les processus prts de plus forte
priorit. Lorsquun processus de faible priorit a attendu pendant un certain temps,
Temps de rponse

(P
1
) = 13 u.t.
Temps de rponse

(P
3
) = 11 u.t.
Temps de rponse

(P
2
) = 9 u.t.
Temps de rponse (P
1
) = 6 u.t.
Temps de rponse

(P
2
) = 10 u.t.
Temps de rponse

(P
3
) = 7 u.t.
Temps de rponse moyen FIFO = 8,67 u.t.
Temps de rponse moyen tourniquet = 10 u.t.
P
1
dure = 6 u.t.
P
1
dure = 4 u.t.
P
3
dure = 3 u.t.
P
1
dure = 6 u.t.
P
1
dure = 4 u.t.
P
3
dure = 3 u.t.
Algorithme dordonnancement du tourniquet (Round Robin)
Algorithme dordonnancement FIFO
Figure 4.17 Illustration du temps de rponse pour 3 processus.
144
4.2 Architecture logicielle 4 Architectures systmes
sa priorit augmente temporairement (il change de tourniquet) jusqu ce quil
obtienne un quantum de temps processeur. Sa priorit redescend alors son niveau
initial. La priorit des processus est alors dynamique.
4.2.2 La gestion de la concurrence
m Introduction
Des processus doivent pouvoir partager des ressources (matriel, variables, etc.) et
schanger des donnes. Par consquent, le systme dexploitation permet la com-
munication et la synchronisation de processus. Pour cela il offre des primitives de
communication et de synchronisation, souvent conformes ou proches de la norme
POSIX (voir chapitre 6).
Le fait que les processus puissent sexcuter en parallle entrane des problmes
appels problmes de la concurrence. Considrons pour illustrer cela un exemple :
laccs concurrent une variable partage par deux processus.
Deux processus (gure 4.18) partagent une variable x. Leur action est dincrmenter
x, puis de se terminer. Ils ont le mme code trs simple, que lon peut exprimer par
x : = x+1.
Processus A
x:=x+1
Processus B
x:=x+1
lection de A
Transfrer X dans registre R
x
R
Premption par B (sauvegarde du contexte de A dans son BCP)
BCP
A

R=0
CO
Transfrer X dans registre R
R
Incrmenter le registre R
R
Transfrer le registre R dans X
x
lection de A (restauration du contexte de A partir de son BCP)
R
Incrmenter le registre R
Transfrer le registre R dans X
R
x
0
0
0
1
1
0
1
1
Figure 4.18 Problme dexclusion mutuelle.
4.2 Architecture logicielle
145


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
Initialement, la variable x vaut 0. Lorsque les deux processus ont termin leur excu-
tion, sa valeur peut tre 1 ou 2 (cela est dtermin uniquement par les premptions).
On imagine facilement comment le rsultat nal de x peut valoir 2, voyons com-
ment il est possible dobtenir 1. Lincrmentation dune variable se dcompose au
minimum en trois instructions : copie de la variable dans un registre du processeur,
modication du registre, puis recopie du registre ladresse mmoire de la variable.
Supposons que le processus P
1
ait commenc son excution : il charge x dans un
registre du processeur, sa valeur est donc 0. Il est alors prempt par P
2
, les registres
de P
1
, y compris le registre contenant la valeur 0, sont sauvegards dans le contexte
de P
1
. P
2
sexcute alors entirement, cest--dire quil copie la valeur de x (donc 0)
dans un registre, incrmente le registre, et termine aprs avoir copi la valeur 1 du
registre ladresse de x. P
1
peut alors poursuivre son excution. Ses registres sont
restaurs : le registre utilis pour le calcul vaut donc 0, et le compteur ordinal cor-
respond linstruction dincrmentation du registre. Le registre passe donc 1,
valeur qui est copie ladresse de x.
Dans cet exemple, la variable x est appele une ressource critique : lment partag
par plusieurs processus. An de garantir que le rsultat vaut toujours 2, il faut garantir
que les processus ne peuvent pas sinterrompre mutuellement entre la lecture de x
et son criture (ce qui nempche pas un autre processus nutilisant pas x de les
interrompre). La portion de code allant de la lecture lcriture de x sappelle une
section critique. Le fait de garantir que les sections critiques de deux processus
accdant la mme ressource critique ne se premptent pas sappelle garantir le respect
de lexclusion mutuelle. On dit que les deux sections critiques doivent tre en exclu-
sion mutuelle. Ainsi, si lon respecte lexclusion mutuelle entre les sections critiques
de lexemple de la gure 4.18, la valeur nale de x est forcment 2.
m Exclusion mutuelle
Une possibilit de garantir lexclusion mutuelle est de masquer les interruptions
(empcher le processeur de grer les interruptions) : linterruption horloge temps rel
ntant plus traite, il ny a alors plus de premption. Cependant, cette solution
nest pas satisfaisante : aucun autre processus (pas mme le systme dexploitation)
na accs au processeur pendant la dure dune section critique. Cela signie quen
cas de non terminaison dun processus (code erron, calcul trs long sans aucune
entre/sortie), le ramorage du systme est obligatoire.
Lune des ides candides que lon peut avoir consiste utiliser une variable signiant
si la ressource est libre : par exemple 1 pour libre, 0 pour pris. Le code des processus
voulant entrer en section critique serait alors :
Ta nt que l i br e 1 a t t e ndr e
l i br e : =0
- - Ent r e e n s e c t i on c r i t i que
Le problme nest que repouss : en effet, un processus peut tre interrompu par un
autre entre le moment o il a constat que Libre tait 1 et le moment o il le met
0. On peut alors se retrouver avec plusieurs processus en section critique, car un
second processus peut lui aussi penser que la ressource est libre. Cest exactement
le mme type de problme que sur la gure 4.18. Il ny a aucune solution purement
146
4.2 Architecture logicielle 4 Architectures systmes
logicielle, et il est ncessaire dutiliser le matriel par masquage des interruptions,
mais seulement pendant une dure trs courte avec des fonctionnalits testes
pralablement.
M Le smaphore
Lun des outils logiciels (utilisant le matriel) les plus utiliss est le smaphore. Un
smaphore peut tre vu comme un verrou, quil est possible de prendre et de rendre
(on dit vendre ). Prendre un smaphore est une action bloquante : si le smaphore
est libre, il devient pris, par contre sil est dj pris, le processus voulant le prendre
passe dans ltat bloqu jusqu ce quil lui soit possible de prendre le smaphore.
Techniquement, le fait de tenter de prendre un smaphore qui nest pas libre a pour
effet de passer le processus dans ltat bloqu, et de placer le numro du processus
dans la le dattente du smaphore. Un smaphore est donc compos dun entier
et dune le dattente. Les actions prendre et vendre peuvent se drouler de la faon
suivante (cas dun smaphore binaire, cest--dire deux tats) :
Un s ma phor e S c ons i s t e e n un e nt i e r S. va l , e t une f i l e d a t t e nt e
d i de nt i f i c a t e ur s de pr oc e s s us S. f i l e .
Pr oc dur e Pr e ndr e ( S: i n out s ma phor e )
D but
Ma s que r l e s i nt e r r upt i ons
- - La pr oc dur e pr e ndr e ne doi t pa s t r e i nt e r r ompue
Si S. va l =0 a l or s
Aj out e r l e n de pr oc e s s us S. f i l e
D ma s que r l e s i nt e r r upt i ons
Pa s s e r da ns l t a t bl oqu e t a ppe l e r l e dispatcher
Si non
S. va l 0
D ma s que r l e s i nt e r r upt i ons
Fi nSi
Fi n
Pr oc dur e Ve ndr e ( S: i n out s ma phor e )
D but
Ma s que r l e s i nt e r r upt i ons
Si i l e xi s t e un pr oc e s s us da ns S. f i l e a l or s
Enl e ve r un pr oc e s s us de l a f i l e
Me t t r e c e pr oc e s s us da ns l t a t pr t
Si non
S. va l 1
Fi nSi
D ma s que r l e s i nt e r r upt i ons
Appe l a u dispatcher
Fi n
lintrieur des primitives, les interruptions sont masques an de les rendre non
premptibles : ces primitives sont atomiques, dans le sens o elles sont non inter-
ruptibles.
Il est important de bien comprendre que ce sont les processus qui excutent les
primitives Prendre et Vendre. Ces primitives, fournies par le systme dexploita-
tion ou prsentes dans les langages de programmation, utilisent le masquage des
interruptions an dexcuter des parties critiques (test de la valeur du smaphore,
mise jour de la valeur et de la le dattente). Un processus qui excute Prendre se
bloque si le smaphore nest pas libre, un processus qui excute Vendre rveille lui-
4.2 Architecture logicielle
147


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
mme un processus bloqu. Il ny a donc pas darbitre, et les processus eux-mmes
grent grce Prendre et Vendre le passage de ltat prt bloqu et de bloqu prt.
An dillustrer le fonctionnement du smaphore, supposons que trois processus A,
B, et C excutent chacun le code suivant en parallle :
S : Se ma phor e : = c r e r _s ma phor e ( " mut e x_x" , 1)
- - S e s t un s ma phor e pa r t a g pa r t ous l e s pr oc e s s us nomm mut e x_x
- - Ce s ma phor e c ommun pr ot ge l e s a c c s l a va r i a bl e x pa r t a g e pa r
- - l e s pr oc e s s us
Pr e ndr e ( S)
x : = x+1
Ve ndr e ( S)
Notons que le terme mutex (pour mutual exclusion) est souvent utilis pour dnommer
les smaphores permettant dassurer lexclusion mutuelle. Ici, mutex_x est un
smaphore du systme dexploitation utilisable par tous les processus : le premier
processus demandant crer ce smaphore cre effectivement le smaphore, avec
une valeur initiale de 1. La fonction c r e r _s ma phor e renvoie alors une rfrence
ce smaphore, qui est utilise en paramtre des fonctions Pr e ndr e et Ve ndr e . Aprs
que ce smaphore ait t cr, il est repr par son nom dans le systme. Les appels
suivants c r e r _s ma phor e ( " mut e x_x" , 1) se contentent alors de renvoyer la rf-
rence du smaphore dj existant. Cest donc le mme smaphore du systme qui
sera utilis par tous les processus utilisant un smaphore du mme nom.
Supposons que le processus A dbute son excution : il prend le smaphore (sa valeur
passe donc 0) et entre en section critique. Le processus B est cr et prempte le
processus A pendant sa section critique. Au moment o le processus B tente de
prendre le smaphore, il passe alors dans ltat bloqu et son numro est stock
dans la le dattente du smaphore. Supposons que C soit alors cr : de la mme
faon que le processus prcdent, il passe dans ltat bloqu au moment o il tente
de prendre le smaphore et son numro est stock dans la le dattente du smaphore.
Le processus A reprend alors la main. Lorsquil sort de sa section critique, il vend
le smaphore. Cela se traduit par le rveil du premier processus en attente (si lon
considre que la le dattente est gre en FIFO), qui peut alors entrer en section
critique. La valeur du smaphore ne change pas, puisque cela reviendrait lincr-
menter puis le dcrmenter. Il est important de remarquer que ce processus ne peut
pas savoir quil sest bloqu, tout se passe comme sil stait endormi en attendant
dentrer en section critique, sans sen apercevoir. A termine alors. Lorsque B termine
sa section critique, il passe C dans ltat prt : celui-ci peut son tour entrer en sec-
tion critique. C, lorsquil vend le smaphore la n de sa section critique, incr-
mente sa valeur puisquil ny a plus aucun processus en attente.
Que se passerait-il si la ressource critique tait telle que deux processus, mais pas
plus, pouvaient y accder en mme temps ? Il sufrait simplement dinitialiser le
smaphore la valeur 2. Nous aurions alors un smaphore que lon qualierait de
smaphore compte, la diffrence du smaphore binaire (prenant les valeurs 0
ou 1).
Lorsque lon utilise un smaphore compte, il est possible pour un processus de
demander Prendre ou Vendre plusieurs instances dun smaphore, les primitives
148
4.2 Architecture logicielle 4 Architectures systmes
Prendre et Vendre sont alors modies pour prendre en compte un paramtre qui
est le nombre dinstances concernes.
Lutilisation dun smaphore pour garantir lexclusion mutuelle est donc relativement
simple, puisquelle consiste entourer une section critique par la prise et la vente dun
smaphore utilis pour protger laccs la ressource. Lavantage est que le respect
de lexclusion mutuelle se fait cot processeur faible, puisque les processus en attente
dentre en section critique nutilisent pas le processeur (passage dans ltat bloqu).
Linconvnient de cette approche est le risque doublier de protger laccs une
ressource par un smaphore, doublier de le vendre, etc. Nous verrons dans la suite
que le smaphore est un outil important, trs utilis en programmation parallle
dans les langages de programmation base de langage C.
Parfois, il est intressant de nuancer le type daccs une ressource : accs en lecture
seule, ou accs en criture. Par exemple, il nest pas gnant que des processus faisant
un accs en lecture une base de donnes se premptent mutuellement pendant
un accs en lecture la base. Par contre, il faut garantir quun processus faisant un
accs en criture (modication dune ligne dune table par exemple) soit le seul en
section critique : aucun lecteur (processus faisant un accs en lecture), et bien sr
aucun autre crivain (processus modiant la base de donnes) ne doit pouvoir
avoir accs la base pendant sa modication (pendant quun crivain est en section
critique). Ce problme est appel problme du lecteur/crivain. Sa solution est trs
simple lorsque le nombre de lecteurs n est connu et born :
S ma phor e _bdd : s ma phor e ( n)
Pr oc e s s us l e c t e ur
i , i =1. . n
:
D but
Fa i r e t ouj our s
Pr e ndr e ( s ma phor e _bdd)
Li r e l a ba s e de donn e s
Ve ndr e ( s ma phor e _bdd)
Fa i t
Fi n
Pr oc e s s us c r i va i n
i , i =1. . m
:
D but
Fa i r e t ouj our s
Pr e ndr e ( s ma phor e _bdd, n)
- - on pr e nd l e s n i ns t a nc e s du s ma phor e
Modi f i e r l a ba s e de donn e s
Ve ndr e ( s ma phor e _bdd, n)
Fa i t
Fi n
Au plus, n lecteurs peuvent tre simultanment en section critique, mais lorsquun
crivain est en section critique, aucun autre crivain et aucun lecteur ne peut y tre.
On peut se demander comment est gre la demande de n instances dun smaphore
lorsquil ny a pas sufsamment dinstances disponibles. La valeur du smaphore
tombe alors 0, et le processus se bloque et il est mis dans la le dattente, avec en
plus linformation du nombre dinstances manquantes ce processus. Au fur et
mesure que des instances du smaphore sont vendues, ce nombre dinstances man-
quantes diminue. Lorsquil tombe 0, le processus est mis dans ltat prt. Grce
ce fonctionnement, si la le dattente est gre en FIFO, laccs la ressource critique
base de donnes aura lieu en FIFO, respectant ainsi lordre des demandes (lorsquun
4.2 Architecture logicielle
149


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
crivain se bloque, comme il prend toutes les instances disponibles du smaphore,
les lecteurs voulant prendre une instance du smaphore se retrouvent bloqus der-
rire lcrivain dans la le dattente, dans leur ordre darrive).
Le smaphore a de nombreuses utilisations possibles dans ce quon appelle la syn-
chronisation de processus. Ainsi, un autre problme classique de synchronisation
est le problme du producteur/consommateur : un processus produit des donnes
et les stocke dans une zone tampon, de taille borne (gure 4.19). Un second pro-
cessus consomme ces donnes. Le problme est de faire en sorte que le producteur
se bloque tant que le tampon est plein, et que le consommateur se bloque lorsque
le tampon est vide.
La solution au problme du producteur/consommateur illustre le fait que cela nest
pas forcment le mme processus qui prend et qui vend un smaphore.
Lorsque des processus peuvent utiliser en mme temps plusieurs ressources critiques,
il peut se produire un phnomne dinterblocage (ou deadlock) : un processus
dtient une ressource, mais a besoin dune autre ressource pour entrer en section
critique, alors que cette ressource est dj dtenue par un autre processus qui
attend lui-mme une autre ressource, etc. jusqu former un cycle. Voici un exemple
simple dinterblocage de deux processus :
s
1
: s ma phor e ( 1)
s
2
: s ma phor e ( 1)
Pr oc e s s us A :

Pr oc e s s us B :
Fa i r e t ouj our s

Fa i r e t ouj our s
Pr e ndr e ( s
1
) Pr e ndr e ( s
2
)
Pr e ndr e ( s
2
) Pr e ndr e ( s
1
)
s e c t i on c r i t i que

s e c t i on c r i t i que
Ve ndr e ( s
2
) Ve ndr e ( s
1
)
Ve ndr e ( s
1
) Ve ndr e ( s
2
)
Fa i t

Fa i t
On voit que si lun des processus dtient une ressource, et que lautre processus
dtient lautre ressource, alors les deux processus sont bloqus indniment : cest un
interblocage. Il existe plusieurs solutions au problme dinterblocage : par exemple, la
dtection, lvitement, la reprise aprs interblocage. On peut se faire une ide de la
complexit de la dtection dun interblocage sur un exemple classique : le dner
des philosophes (gure 4.20). Plusieurs philosophes sont assis autour dune table,
pensent, et mangent de temps en temps en utilisant des baguettes. Mais les factieux
Producteur
D but
Prendre(Libre)
Produire
D poser dans tampon
Vendre(Plein)
Fin
Libre taille_tampon
Plein 0
Consommateur
D but
Prendre(Plein)
Prendre dans tampon
Consommer
Vendre(Vide)
Fin
Tampon
Smaphores
Figure 4.19 Le problme du producteur/consommateur.
150
4.2 Architecture logicielle 4 Architectures systmes
cuisiniers nont dispos table quune seule baguette par philosophe : tout se passe
bien, jusqu ce que chaque philosophe, ayant faim au mme moment, ne saisisse
une baguette. Les processus sont alors en interblocage.
Une solution simple dvitement de linterblocage consiste, lorsque cela est pos-
sible, prendre les smaphores dans un ordre dtermin. Ainsi, chaque smaphore
peut tre numrot, et un processus ayant besoin de plusieurs ressources pour entrer
en section critique, ne peut demander prendre des smaphores que dans lordre
croissant de leur numro. Sur la gure 4.20, si lon numrote les baguettes de 0 3
dans le sens des aiguilles dune montre, alors trois des philosophes prendront la
baguette leur droite, puis la baguette leur gauche, et le quatrime prendra la
gauche avant la droite, rompant ainsi le cycle fatal. Nous verrons quil existe une
autre solution base sur lordonnancement des processus.
M Le moniteur
Nous avons vu que linconvnient des smaphores tait le risque doubli : une res-
source critique (par exemple une variable partage par plusieurs processus) est protge
par un smaphore. Il faut donc normalement prendre le smaphore avant tout
accs, et le vendre aprs. Cependant, sur une application relativement importante,
Philosophe
i,i=0..3
:
Faire toujours
Penser
Prendre(baguette
i
)
Prendre(baguette
i-1 mod 4
)
Manger
Vendre(baguette
i-1 mod 4
)
Vendre(baguette
i
)
Fait
Philosophe
0
Philosophe
3
Philosophe
1
Philosophe
2
Baguette
0 Baguette
1
Baguette
2
Baguette
3
Figure 4.20 Un exemple classique dinterblocage, le dner des philosophes.
4.2 Architecture logicielle
151


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
on pourrait oublier de protger un accs, ce qui aurait pour effet de compromettre
lexclusion mutuelle. Une solution alternative a t propose par Hoare en 1973 :
le moniteur. Le principe du moniteur est dencapsuler une ressource, et de ne per-
mettre son utilisation qu travers des primitives (procdures ou fonctions) qui
elles-mmes sont protges contre la rentrance. La rentrance dune primitive, une
fonction par exemple, a lieu lorsquun processus excute le code de la fonction, et
quil est interrompu par un autre processus excutant lui aussi la fonction. Au niveau
du moniteur, qui peut tre muni de plusieurs primitives, la notion de rentrance
stend lensemble des primitives du mme moniteur. Le moniteur se retrouve tel
quil a t dni par Hoare dans la norme POSIX (voir chapitre 5) et dans le langage
Java, et sous forme dun moniteur amlior , lobjet protg, dans le langage Ada 95
(voir chapitre 6).
De faon basique, un moniteur possde des variables internes, accessibles uniquement
via des primitives non rentrantes (gure 4.21), ce qui signie que lorsquun processus
excute une primitive dun moniteur, un autre processus qui voudrait utiliser une
primitive du mme moniteur se voit bloqu et mis dans la le dattente du moniteur.
Ainsi, la gestion dune section critique est trs simple, et il est impossible doublier
de garantir son exclusion mutuelle : il suft de ne rendre accessible la ressource
(une variable par exemple) qu travers le moniteur.
Par exemple, voici une variable x partage par plusieurs processus :
Moniteur moniteur_x
x : entier :=0
Proc dure incr menter
D but
x :=x+1
Primitives non rentrantes du moniteur
Incr menter
D cr menter
Lire
Attendre_valeur_positive
File dattente de processus bloqus
P
i
P
j
Variables prives invisibles de lextrieur
X: entier := 0
Un seul processus peut tre en cours
dexcution dune primitive du moniteur
Moniteur
Figure 4.21 Illustration dun moniteur.
152
4.2 Architecture logicielle 4 Architectures systmes
-- cause de la non r entrance, il est impossible que
-- deux processus aient acc s simultan ment x, via
-- incr mentation ou d cr mentation
Fin
Proc dure d cr menter
D but
x :=x-1
Fin
Fonction Lire renvoie entier
D but
Renvoyer x
Fin
Fin du moniteur
Il suft un processus voulant incrmenter x dappeler la procdure moniteur_x.
incr menter. Lexclusion mutuelle est garantie par la non rentrance.
Le moniteur est donc un outil de synchronisation plus simple utiliser que le
smaphore pour garantir lexclusion mutuelle. Cependant, comment faire en sorte
de bloquer un processus en attendant quune certaine condition soit ralise ? Pour
ce faire, tudions ci-aprs une solution incorrecte au problme du producteur/
consommateur :
Moniteur prod_cons
taille:entier -- taille du tampon
T:tampon(taille)
nombre_pris:entier:=0 -- nombre de cases prises dans le
tampon
Proc dure produire(e: l ment)
D but
Tant que nombre_pris=taille faire
-- le tampon est plein
rien
Fait
Mettre e dans T
nombre_pris:=nombre_pris+1
Fin
Fonction consommer renvoie l ment
D but
Tant que nombre_pris=0 faire
-- le tampon est vide
rien
Fait
nombre_pris:=nombre_pris-1
Enlever et retourner un l ment de T
Fin
Fin du moniteur
Cette solution nest pas satisfaisante. En effet, dune part, mme si elle pouvait fonc-
tionner, elle contiendrait de lattente active. Mais surtout, elle ne peut pas fonc-
tionner, tant donn que lorsquun processus se trouve dans la boucle tant que ,
il bloque laccs au moniteur, et empche alors lautre processus de modier nombre
_pris. Un processus entrant dans la boucle tant que reste donc indniment
dans cette boucle et bloque laccs au moniteur. Le moniteur propose donc deux
procdures : wait et signal. La procdure wait a pour effet de bloquer le proces-
sus appelant, librant ainsi le moniteur, jusqu lappel de la procdure signal.
lappel de cette procdure, les processus bloqus sur wait seront remis dans ltat
4.2 Architecture logicielle
153


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
prt et poursuivront leur excution. Ce sont ces procdures (voir code ci-aprs) qui
sont utilises lorsquun processus doit tre bloqu sous certaines conditions lint-
rieur du moniteur, jusqu ce quun autre processus vienne le rveiller. La solution
correcte au problme producteur/consommateur est donc :
Moniteur prod_cons
taille:entier -- taille du tampon
T:tampon(taille)
nombre_pris:entier:=0 -- nombre de cases prises dans le tampon
Proc dure produire(e: l ment)
D but
Tant que nombre_pris=taille faire
-- le tampon est plein
wait - le processus s endort jusqu au prochain
- signal
Fait
Mettre e dans T
nombre_pris:=nombre_pris+1
signal
-- r veille un ventuel consommateur bloqu
Fin
Fonction consommer renvoie l ment
D but
Tant que nombre_pris=0 faire
-- le tampon est vide
wait
Fait
nombre_pris:=nombre_pris-1
Enlever et retourner un l ment de T
signal
-- r veille un ventuel producteur bloqu
Fin
Fin du moniteur
Lorsquun processus doit produire (resp. consommer) une donne, il lui suft donc
dappeler prod_cons.Produire (resp. prod_cons.Consommer), et il ny a pas se
soucier de faire une utilisation correcte des smaphores comme dans la solution
base de smaphores.
m Ordonnancement de processus en prsence de ressources
Lordonnancement de processus a t abord laide dexemples trs acadmiques au
paragraphe 4.2.1, p. 140. Les processus taient considrs comme indpendants les
uns des autres. Lorsque des processus partagent une ou des ressources, ils peuvent
passer dans ltat bloqu an de permettre la garantie dexclusion mutuelle, lorsquils
tentent daccder un smaphore ou bien un moniteur. Il est trs intressant
dobserver limpact des sections critiques sur les algorithmes priorit, qui sont
trs utiliss dans les systmes temps rel et dans les systmes de contrle-commande,
ainsi que dans lalgorithme MLF utilis par nombre de systmes dexploitation gn-
ralistes.
Observons un effet possible de lexclusion mutuelle sur des processus (gure 4.22).
Trois processus sexcutent des niveaux de priorit diffrents. Le processus de priorit
haute partage une ressource avec le processus de priorit basse, et un processus de
priorit intermdiaire sexcute indpendamment des deux autres.
154
4.2 Architecture logicielle 4 Architectures systmes
Lorsque le processus de priorit basse est en section critique, le processus de priorit
haute ne peut bien sr pas entrer en section critique, il est donc bloqu : cela est
invitable. Cependant, le phnomne que lon observe sur la gure 4.22 est que le
processus de priorit intermdiaire, sil est prt au moment o le processus de faible
priorit est en section critique, obtient le processeur alors mme quun processus
de priorit haute est en attente. Ce phnomne sappelle une inversion de priorit
et est proscrire dans les systmes pour lesquels le temps de rponse est important.
La plupart des noyaux temps rel ou langages de programmation pour le temps
rel proposent une solution ce problme. Les solutions empchant linversion de
priorit sappuient sur les travaux sur la super priorit propose par Kaiser en
1982, et sur les protocoles priorit hrite et plafond proposs en 1987 par Sha,
Rajkumar et Lehoczky. Ces protocoles sont prsents au chapitre 8.
4.2.3 Gestion de la mmoire et mmoire virtuelle
Cette section expose la faon dont la plupart des systmes dexploitation grent la
mmoire (segmentation pagine) an de mieux affronter les problmes poss par le
paralllisme : identier les problmes dexclusion mutuelle, comprendre la notion
de rentrance, comprendre le mcanisme de la mmoire virtuelle qui peut sur certains
systmes dexploitation inuencer lordonnancement des processus, et leur dure
dexcution.
m Segmentation de la mmoire
Chaque processus possde sa mmoire propre : ceci sexplique par le fait quun sys-
tme dexploitation est plus robuste si chaque processus est cantonn dans un espace
mmoire clos. Au lancement dun processus, le systme dexploitation lui alloue de
la mmoire dans la mmoire centrale quil segmente en trois parties distinctes : le
segment de code, dans lequel il place les instructions du processus (voir tableau 4.1),
alloue un segment de pile (appel stack), et un segment de donnes (appel tas,
P
1
Algorithme dordonnancement priorits
P
2
P
3
Prendre(s)
Section critique
Prendre(s)
Vendre(s)
Vendre(s)
P
2
est bloqu
Priorit faible
Priorit forte
Priorit moyenne
Inversion de priorit
Figure 4.22 Inversion de priorit.
4.2 Architecture logicielle
155


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
ou heap) contenant les variables globales ou alloues dynamiquement pendant lex-
cution du processus. La gure 4.23 montre un exemple de segmentation. Cette seg-
mentation permet divers contrles : ainsi, il est vri que le compteur ordinal pointe
toujours vers une instruction situe dans le segment de code, on peut aussi vrier
que le segment de code nest pas modi par lexcution (segment en lecture seule),
et que la pile ne dborde pas sur un autre segment. Enn, le systme dexploitation
peut vrier, sauf demande contraire de la part du processus (comme un passage
en mode dbogueur, communication avec un autre processus, utilisation dadresses
dentres/sorties, etc.), que le processus ne va jamais lire ou crire en dehors de ses
segments. Cela permet de protger la mmoire dun processus des actions errones
ou malveillantes dautres processus.
Le segment de donnes sert stocker les variables globales, les variables rmanentes
des sous-programmes (par exemple, en langage C, celles dclares avec le mot cl
static), ainsi que les variables alloues dynamiquement (pointeurs).
Le segment de pile, quant lui, sert conserver les contextes de sous-programmes.
La pile est caractrise par ladresse du sommet. Le fait dempiler une valeur consiste
copier la valeur ladresse du sommet de pile, puis incrmenter le sommet de
pile de la taille de la valeur empile. En ralit, on occupe souvent un nombre de mots
machine entier, cest--dire que sur une machine mots de 32 bits, lempilement
dun lment de la taille dun octet incrmentera dun mot, donc 4 octets, le sommet
de pile : 3 octets sont perdus, mais le sommet de pile est toujours align sur les mots
machine, ce qui permet une optimisation daccs la mmoire centrale. Dpiler un
lment consiste supprimer llment en sommet de pile, en ralit, dcrmenter
le sommet de pile de la taille de llment : llment est toujours prsent, mais il sera
cras au prochain empilement.
Les instructions (codop + oprandes)
sous forme de code machine
Variables globales du programme, ou variables
alloues dynamiquement par pointeur
Pile dappel
Variables locales aux fonctions/procdures
Paramtres, rsultat et adresses de retour
des sous-programmes
Adresse de base du programme
Zone disponible pour la pile ou le tas
Code du programme
(segment de code)
Tas ou heap
(segment de donnes)
Pile ou stack
(segment de pile)
Figure 4.23 Exemple de segmentation de la mmoire dun processus.
156
4.2 Architecture logicielle 4 Architectures systmes
P
r
o
c

d
u
r
e

f
1
(
a
:

e
n
t
i
e
r
)
P
r
o
c

d
u
r
e

f
2
(
a
:
e
n
t
i
e
r
)
P
r
o
c

d
u
r
e

f
3
(
a
,
b
:

e
n
t
i
e
r
)
v
i
s
i
g
n
i
f
i
e

v
a
l
e
u
r

d
e

l
a

v
a
r
i
a
b
l
e

i
v
j

s
i
g
n
i
f
i
e

v
a
l
e
u
r

d
e

l
a

v
a
r
i
a
b
l
e

j
P
r
o
c
e
s
s
u
s
f
1
(
3
)
A
d
r
e
s
s
e

d
e

r
e
t
o
u
r

d
e

1

t
a
t

d
e

l
a

p
i
l
e
E
x

c
u
t
i
o
n

f
1
(
3
)
i
,

j
:
e
n
t
i
e
r

.
f
2
(
i
)
A
d
r
e
s
s
e

d
e

r
e
t
o
u
r

2
f
3
(
i
,
4
)
A
d
r
e
s
s
e

d
e

r
e
t
o
u
r

3
f
i
n
E
x

c
u
t
i
o
n

f
2
(
v
i
)

.
f
i
n
E
x

c
u
t
i
o
n

f
3
(
v
i
,
4
)

.
f
i
n
v
j
v
j
v
i
v
i
v
j
v
i
v
j
4
v
i
v
i
v
j
A
d
r
e
s
s
e
d
e

r
e
t
o
u
r

1
v
i
v
i
3
A
d
r
e
s
s
e
d
e

r
e
t
o
u
r

1
3
A
d
r
e
s
s
e
d
e

r
e
t
o
u
r

1
3
A
d
r
e
s
s
e
d
e

r
e
t
o
u
r

1
3
A
d
r
e
s
s
e
d
e

r
e
t
o
u
r

1
3
A
d
r
e
s
s
e
d
e

r
e
t
o
u
r

1
3
A
d
r
e
s
s
e
d
e

r
e
t
o
u
r

2
A
d
r
e
s
s
e
d
e

r
e
t
o
u
r

3

F
i
g
u
r
e

4
.
2
4

t
a
t
s

s
u
c
c
e
s
s
i
f
s

d
e

l
a

p
i
l
e

l
o
r
s

d
e

l

a
p
p
e
l

d
e

s
o
u
s
-
p
r
o
g
r
a
m
m
e
s
.
4.2 Architecture logicielle
157


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
Lorsquon appelle un sous-programme, les paramtres dappel du sous-programme
sont empils, puis une instruction machine CALL avec en paramtre ladresse du
sous-programme est excute. Cette instruction a pour effet dempiler la valeur du
compteur ordinal (cest--dire ladresse de linstruction suivant lappel du sous-
programme), puis de mettre ladresse du sous-programme dans le compteur ordinal.
Cela a pour effet dexcuter le sous-programme. La premire action effectue est alors
dempiler toutes les variables locales du sous-programme. Le sous-programme sait
que les paramtres qui lui ont t passs se trouvent dans la pile, un dcalage (offset)
calculable par rapport ses propres variables locales. la n du sous-programme,
les variables locales sont dpiles, et une instruction RET est appele. Cette instruc-
tion dpile le sommet de pile (qui est donc la valeur du compteur ordinal, cest--dire
ladresse de linstruction suivant lappel du sous-programme), et le met dans le comp-
teur ordinal. Le programme appelant continue alors son excution. La pile conserve
donc le contexte dexcution : au fur et mesure des appels de sous-programmes,
cest elle qui conserve le contexte dynamique (paramtres dappel, variables locales
et adresse suivant lappel du sous-programme) de lexcution.
Par exemple (gure 4.24), si un processus appelle un sous-programme f
1
qui lui-
mme appelle f
2
puis f
3
, on verra la pile contenir dabord les paramtres dappel de
f
1
et ladresse suivant lappel, puis les variables locales de f
1
. Ensuite seront empils
les paramtres dappel de f
2
et ladresse suivant lappel de f
2
dans f
1
; puis les variables
locales de f
2
. la n de f
2
, ses variables locales sont dpiles. Ladresse de retour de
la fonction permet alors de replacer le compteur ordinal sur linstruction suivant
lappel de fonction dans le code de f
1
. f
1
reprend donc son excution aprs avoir
dpil les paramtres dappel de f
2
. On se retrouve alors dans le mme tat que juste
avant lappel de f
2
. Il se passe la mme chose pour lappel du sous-programme f
3
.
la n de f
1
, ses variables locales sont leur tour dpiles, on retrouve alors en
sommet de pile ladresse de retour dans le programme principal, qui est son tour
dpile, ainsi que les paramtres dappel f
1
. On se retrouve alors dans le contexte
du programme principal.
Il est important de noter que les variables locales un sous-programme sont fugaces
lorsquon fait de la programmation multitche : nous verrons dailleurs travers
un exemple (voir chapitre 5) lune des erreurs possibles dues cette non rmanence.
m Pagination de la mmoire et mmoire virtuelle
Si lon observe les adresses des instructions et variables du tableau 4.1, on trouve
des valeurs de lordre de 0x400000, soit des adresses aux alentours de 4 Mo. Si lon
compare les adresses utilises par plusieurs processus sexcutant en parallle, on pourra
trouver des adresses identiques, qui ne correspondent pas aux mmes adresses phy-
siques. En effet, le systme dexploitation permet aux processus dutiliser un adressage
virtuel : pour un processus, tout se passe comme sil possdait les adresses 0 x,
sachant que le systme dexploitation se charge de faire une conversion de ladresse
virtuelle en adresse physique.
Le but de la pagination est le suivant : un trs grand espace mmoire peut tre allou
chaque processus, tel que la somme soit suprieure la taille de la RAM. La
mmoire centrale est dcoupe en cadres de taille identique (par exemple 4 Ko).
La mmoire dun processus charge en mmoire centrale rside alors dans un certain
158
4.2 Architecture logicielle 4 Architectures systmes
nombre de cadres. Au fur et mesure quun processus demande (resp. libre) de la
mmoire, une page de la taille dun cadre, lui est alloue (resp. est libre). Le nombre
de pages alloues est souvent suprieur au nombre de cadres de la mmoire physique.
Cest le disque dur qui permet de stocker les pages alloues en sus du nombre de
cadres, lintrieur dun chier dchange.
Lorsque la mmoire alloue dpasse la taille de la mmoire physique, un certain
nombre de pages de mmoire alloue aux processus rside en mmoire centrale, le
reste rside dans le chier dchange. Lorsquun processus a besoin daccder une
page qui se trouve dans le chier dchange, il faut librer un cadre de la mmoire
centrale an dy placer la page ncessaire. Cela implique une copie vers le chier
dchange de la page contenue dans le cadre. Le cadre de la RAM libr est utilis
pour stocker la page demande. Ce phnomne sappelle le swap, il est visible sur
un micro-ordinateur classique dans lequel plusieurs processus sont lancs : basculer
de lun lautre des processus, ou accder une fonctionnalit dun processus qui
na pas t utilise depuis longtemps a pour effet visible de faire fonctionner le disque
dur. Ce fonctionnement est d lchange des pages entre mmoire centrale et chier
dchange.
Lexcution est donc exible, car il est possible dallouer aux processus plus de mmoire
que la mmoire physique, mais parfois le systme est extrmement ralenti (comparer
les quelques nanosecondes ncessaires pour accder la RAM avec les quelques
millisecondes ncessaires un accs disque). Ladresse physique dune mme donne
peut donc varier pendant lexcution dun processus au l des changes entre mmoire
centrale et chier dchange. On distingue donc adresse physique dune donne
(adresse lie la mmoire physique) et adresse virtuelle (adresse relative au numro
de page, plus adresse dans la page). La pagination permet donc lutilisation dune
mmoire virtuelle.
La stratgie utilise pour choisir les pages placer dans le chier dchange repose
souvent sur le nombre daccs une page, et/ou sur sa dernire date daccs (principe
de localit). Le but de cette stratgie est de minimiser les dfauts de pages, cest--dire
le nombre dchanges entre mmoire centrale et chier dchange.
La transformation adresse virtuelle/adresse physique est gnralement effectue de
faon matrielle grce un dispositif appel MMU (Memory Management Unit)
prsent dans la plupart des microprocesseurs.
Voyons comment la MMU transforme une adresse virtuelle en adresse physique.
Pour simplier lexplication, nous supposerons que les pages sont de 4 Ko, soit
2
12
octets, et que 32 bits sont utiliss pour exprimer une adresse, ce qui implique
une mmoire adressable de 4 Go (2
32
octets). Une adresse de 32 bits est donc dcom-
pose en 20 bits donnant un numro de page, et 12 bits permettant de donner
ladresse dun octet relativement lintrieur de la page. En tout, le systme de MMU
peut alors grer 2
20
pages. Supposons que le systme possde une mmoire centrale
de 512 Mo, soit 2
17
cadres physiques de 4 Ko.
Un processus peut se voir allouer jusqu 4 Go de mmoire, mais chacune des pages
peut se trouver dans un cadre de la mmoire ou dans le chier dchange. Lorsquun
processus demande accder ladresse 32 bits a
31
a
30
a
1
a
0
, cette adresse est vue
par la MMU en p
19
p
18
p
1
p
0
y
11
y
10
y
1
y
0
(gure 4.25), soit 20 bits donnant un
numro de page du processus, et 12 bits donnant la position de loctet dans la page.
4.2 Architecture logicielle
159


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
Seule ladresse physique du dbut de la page doit tre retrouve. Il faut alors une
sorte dannuaire par processus, appele table des pages, qui fait la correspondance
entre numro de page logique, sur 20 bits, et adresse physique du cadre contenant
la page. Si la page nest pas en mmoire centrale, la MMU se charge de ly placer
avant de trouver ladresse physique du cadre correspondant. Donc la MMU se charge
deffectuer la correspondance entre les 20 bits de ladresse logique dune page dun
processus et les 20 bits de ladresse physique du cadre contenant la page (en effec-
tuant si ncessaire un swap pour placer la page en mmoire centrale).
Cependant, quand on fait les comptes, on saperoit quune page de 4 Ko peut con-
tenir 2
12
octets, ce qui nest pas sufsant pour contenir les ventuelles 2
20
adresses
physiques des pages. Il y a donc souvent un index des pages deux niveaux, avec
un certain nombre de pages indexes directement, les autres ncessitant laccs des
tables des pages de second niveau. En fonction des processus en cours dexcution,
le temps dexcution dun processus peut varier de faon signicative cause de la
mmoire virtuelle : en effet un accs physique la mmoire centrale cote gnra-
Adresse
logique
y
Table des pages
x
Adresse
physique
Numro de page
Dcalage dans la page
Adresse
logique
y
x
1
Adresse
physique
z
x
2
Table des pages
situe dans la page y
Un niveau de table
Table des pages
externe
d
d
d
d
z
y
x
1
x
2
x
Deux niveaux de table
0
1
0
1
...
...
0
1
...
Figure 4.25 Accs ladresse physique par table des pages.
160
4.3 Rseaux et bus de terrain 4 Architectures systmes
lement 5 10 cycles machine, et il peut falloir 3 accs pour accder une variable
(accs la table des pages de premier niveau, accs la table de second niveau, pour
obtenir ladresse physique du cadre contenant la variable), avec, suivant lutilisation
de la mmoire physique, possibilit davoir swapper pour utiliser ces 3 pages.
Dans le pire des cas, laccs une variable peut donc se compter en dizaines de milli-
secondes. Dans le meilleur des cas, les trois pages sont en mmoire centrale, et mme,
les valeurs ncessaires sont dans la mmoire cache (accs en un cycle machine) et
laccs la variable ne cote que trois cycles machine.
Sur un systme dexploitation utilisant la mmoire cache et la mmoire virtuelle,
laccs une variable peut ncessiter un temps pouvant aller de moins dune nano-
seconde plusieurs dizaines de millisecondes en fonction de lutilisation de la mmoire
cache et de la mmoire virtuelle par lensemble des processus.
4.3 Rseaux et bus de terrain
De plus en plus dapplications de contrle-commande utilisent le rseau, que ce soit
pour dlocaliser les capteurs ou pour utiliser plusieurs calculateurs voire mme passer
par internet pour interagir avec des oprateurs distants de plusieurs milliers de kilo-
mtres du procd contrl. Cette section a pour but de donner au lecteur quelques
ides sur lexistant dans le domaine des tlcommunications. Bien que diffrents
rseaux spcialiss, appels rseaux de terrain, aient t dvelopps dans le but de faire
communiquer des lments en temps dterministe, il faut noter lmergence des
rseaux gnralistes non dterministes en temps (notamment base de TCP/IP)
dans le monde du contrle de procd, notamment grce leurs performances leves
en terme de dbit.
4.3.1 Modes de communication
Que les donnes passent sur un mdium matriel (cble, bre optique) ou par
ondes hertziennes (ondes radio, lumineuses), il existe deux grands modes de
communication :
la communication point point, o deux entits, appeles nuds, communi-
quent directement ;
la communication par diffusion o un ensemble de nuds envoient des donnes
visibles par tous les nuds du rseau, et peuvent recevoir des informations direc-
tement de la part de nimporte quel nud du rseau.
En mode point point, diffrentes architectures de rseau peuvent tre employes
(gure 4.26). Larbitrage de laccs au mdium de communication peut tre centra-
lis (utilisation dun arbitre daccs) ou dcentralis. Dans tous les cas, lallocation
du mdium peut tre statique (dterminisme de temps daccs) ou dynamique (moins
de dterminisme, mais plus de exibilit).
Pour la communication par diffusion (gure 4.27), larchitecture la plus employe est
de type bus ou boucle pour les supports matriels, et de type ad-hoc pour les supports
immatriels.
4.3 Rseaux et bus de terrain
161


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
Pour le rseau internet, ces deux types de communication sont mlangs : des rseaux
locaux utilisent gnralement de la diffusion, et un nud particulier appel routeur
est connect en point point avec un autre routeur, lui-mme souvent point dentre
dun autre rseau local. Les connections point point sont souvent hirarchiques,
Maillage
toile
Arbre
Anneau
Figure 4.26 Architectures de communication point point.
BUS Anneau ( diffusion)
ou boucle
Radio ou satellite
Figure 4.27 Architectures de communication par diffusion.
162
4.3 Rseaux et bus de terrain 4 Architectures systmes
ce qui permet nimporte quel nud dun rseau local de communiquer avec
nimporte quel nud dun autre rseau local (gure 4.28), comme nous le verrons
avec le protocole TCP/IP.
4.3.2 Architecture des rseaux
tant donn que les rseaux sont utiliss pour connecter des systmes htrognes,
les approches rseaux se basent sur une architecture en couche. Le principe est quune
couche de niveau i dlivre des services une couche de niveau i + 1.
m Architecture en couches
Historiquement, le plus ancien modle en couches est toujours le plus utilis
aujourdhui : cest le modle physique, MAC, LLC, IP, TCP ou UDP (gure 4.29).
Lavantage dune architecture en couche est lindpendance dune couche par rapport
aux autres : une couche doit dlivrer un ensemble de services la couche au-dessus
delle, en se servant des services dlivrs par la couche du dessous. De plus, une couche
doit savoir dialoguer avec une mme couche distante : un dialogue entre couches
du mme niveau sappelle un protocole. Ainsi, les noms TCP, IP, ARP, etc. corres-
pondent des protocoles. La nalit est de faire en sorte que deux applications
changent des donnes, suivant un protocole dapplication. Pour cela, les applications
peuvent utiliser les services dune couche TCP. Ce protocole sert transfrer des
Rseau local
Rseau local
Routeur
ou passerelle
Routeur
ou passerelle
Figure 4.28 Structure dinternet ou le mlange des genres.
163
4.3 Rseaux et bus de terrain 4 Architectures systmes


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
A
p
p
l
i
c
a
t
i
o
n
D
o
n
n

e
s
S
e
g
m
e
n
t
D
a
t
a
g
r
a
m
m
e
T
r
a
m
e
B
i
t
s
1
0
1
1
1
0
1
1
0
0
1
1
0
0
1
1
0
0
1
0
1
0
0
1
0
1
1
1

P
D
U

(
P
r
o
t
o
c
o
l

D
a
t
a

U
n
i
t
)
O
b
t
e
n
t
i
o
n

a
d
r
e
s
s
e

M
A
C


p
a
r
t
i
r

d

u
n
e

a
d
r
e
s
s
e

I
P
,

d
i
f
f
u
s
i
o
n

d
e

s
o
n
a
d
r
e
s
s
e

I
P

e
t

s
o
n

a
d
r
e
s
s
e

M
A
C

R
e
c
h
e
r
c
h
e

a
d
r
e
s
s
e

I
P

d
e

l
a



p
r
o
c
h
a
i
n
e

m
a
c
h
i
n
e


a
t
t
e
i
n
d
r
e



p
o
u
r

t
r
a
n
s
m
e
t
t
r
e

l
e
s

d
o
n
n

e
s



d
e
s
t
i
n
a
t
i
o
n

(
r
o
u
t
a
g
e
)
,



f
r
a
g
m
e
n
t
a
t
i
o
n

v
e
n
t
u
e
l
l
e



P
r

p
a
r
a
t
i
o
n

v
e
n
t
u
e
l
l
e

d
e

l
a

m
i
s
e



e
n

o
e
u
v
r
e

d

u
n
e

c
o
n
n
e
x
i
o
n



l
o
g
i
q
u
e
,

s

q
u
e
n
c
e
m
e
n
t

d
e

t
r
a
m
e
s
,



p
e
u
t

a
j
o
u
t
e
r

c
o
n
t
r

l
e
s

d

e
r
r
e
u
r
,



p
o
s
s
i
b
i
l
i
t


d
e

r

m
i
s
s
i
o
n

s
i

e
r
r
e
u
r



A
j
o
u
t

a
d
r
e
s
s
e

p
h
y
s
i
q
u
e

d
e



d
e
s
t
i
n
a
t
i
o
n
,

g
e
s
t
i
o
n

d

a
c
c

s



a
u

m

d
i
u
m



T
r
a
n
s
f
e
r
t

d
e
s

b
i
t
s

a
p
r

s

e
n
c
o
d
a
g
e



s
u
r

l
e

m
e
d
i
u
m

d
e

c
o
m
m
u
n
i
c
a
t
i
o
n



G
e
s
t
i
o
n

c
o
n
n
e
x
i
o
n

l
o
g
i
q
u
e

a
d
r
e
s
s
e



I
P
:
p
o
r
t


a
d
r
e
s
s
e

I
P
:
p
o
r
t
,



f
r
a
g
m
e
n
t
a
t
i
o
n

v
e
n
t
u
e
l
l
e

d
e
s



d
o
n
n

e
s
,

g
e
s
t
i
o
n

d
e

l

o
r
d
r
e
,



c
o
n
g
e
s
t
i
o
n
,

r

m
i
s
s
i
o
n
s



R

a
s
s
e
m
b
l
a
g
e

v
e
n
t
u
e
l
R

a
s
s
e
m
b
l
a
g
e

v
e
n
t
u
e
l
C
o
u
c
h
e

P
h
y
s
i
q
u
e
C
o
u
c
h
e

M
A
C
M
e
d
i
u
m

A
c
c
e
s
s

C
o
n
t
r
o
l
C
o
u
c
h
e

L
L
C
L
o
g
i
c
a
l

L
i
n
k

C
o
n
t
r
o
l
C
o
u
c
h
e

A
R
P
A
d
d
r
e
s
s

R
e
s
o
l
u
t
i
o
n
P
r
o
t
o
c
o
l
C
o
u
c
h
e

I
P
I
n
t
e
r
n
e
t

P
r
o
t
o
c
o
l
C
o
u
c
h
e

T
C
P
T
r
a
n
s
m
i
s
s
i
o
n

C
o
n
t
r
o
l
P
r
o
t
o
c
o
l
D
o
n
n

e
s
E
n
-
t

t
e
T
C
P
E
n
-
t

t
e
I
P
D
o
n
n

e
s
E
n
-
t

t
e
T
C
P
E
n
-
t

t
e
L
L
C
E
n
-
t

t
e
I
P
D
o
n
n

e
s
E
n
-
t

t
e
T
C
P
E
n
-
t

t
e
M
A
C
Q
u
e
u
e
M
A
C
E
n
-
t

t
e
L
L
C
E
n
-
t

t
e
I
P
D
o
n
n

e
s
E
n
-
t

t
e
T
C
P
E
n
v
o
i

d
e
s

a
c
c
u
s

s

d
e

r

c
e
p
t
i
o
n
,



g
e
s
t
i
o
n

c
o
n
n
e
x
i
o
n
,

r
e
m
i
s
e

e
n



o
r
d
r
e
,

r

a
s
s
e
m
b
l
a
g
e

v
e
n
t
u
e
l



P
e
u
t

s

o
c
c
u
p
e
r

d
u

s

q
u
e
n
c
e
m
e
n
t



d
e
s

t
r
a
m
e
s
,

v

r
i
f
i
e
r

l
e
s

e
r
r
e
u
r
s
,



e
n
v
o
i

v
e
n
t
u
e
l

d

a
c
c
u
s




d
e

r

c
e
p
t
i
o
n



V

r
i
f
i
c
a
t
i
o
n

d

a
d
r
e
s
s
e

M
A
C
,



v

r
i
f
i
c
a
t
i
o
n

c
o
h

r
e
n
c
e

t
r
a
m
e



r
e

u
e



L
e
c
t
u
r
e

e
t

d

c
o
d
a
g
e

d
e
s

b
i
t
s



c
i
r
c
u
l
a
n
t

s
u
r

l
e

m

d
i
u
m



d
e

c
o
m
m
u
n
i
c
a
t
i
o
n



S
i
g
n
a
l
M

d
i
u
m

d
e

c
o
m
m
u
n
i
c
a
t
i
o
n

:



p
a
i
r
e

t
o
r
s
a
d

e
,

c

b
l
e

c
o
a
x
i
a
l
,

f
i
b
r
e

o
p
t
i
q
u
e
,

s
u
p
p
o
r
t

i
m
m
a
t

r
i
e
l

F
i
g
u
r
e

4
.
2
9


S
t
r
u
c
t
u
r
e

e
n

c
o
u
c
h
e

d
u

p
r
o
t
o
c
o
l
e

T
C
P
/
I
P
.
164
4.3 Rseaux et bus de terrain 4 Architectures systmes
donnes dapplication de faon able. An de dialoguer avec la couche TCP du nud
destination, TCP ajoute un en-tte qui sera lu et enlev du message lors de sa
rception par la couche TCP du nud destination.
Chaque couche ajoute ses propres donnes (sous forme dun en-tte et/ou queue)
aux donnes transmises par la couche du dessus lors de lenvoi de donnes. Lors de
la rception de donnes, chaque couche se sert de len-tte et/ou queue place par
la couche correspondante du nud metteur an de traiter les donnes reues.
Elle enlve ensuite ces informations qui sont spciques son niveau, pour passer
les donnes la couche de niveau suprieur. Lavantage dune telle approche est que,
quel que soit le support physique sous-jacent (cble, bre optique, air, vide), les
couches partir de LLC peuvent fonctionner de la mme faon. De plus, pour un
programmeur, le support de transmission employ est totalement transparent.
LISO (International Organization for Standardization), lAFNOR (Association
Franaise de Normalisation) et le CCITT (Comit Consultatif International Tl-
phonique et Tlgraphique, devenu depuis ITU pour International Communication
Union) ont normalis le modle OSI (Open Systems Interconnection) en couche,
qui est utilis par des rseaux dnis ultrieurement TCP/IP (comme par exemple
le protocole X.25 qui dnit comment une communication par modem et ligne
tlphonique se droule en point point). Ce modle est illustr sur la gure 4.30.
Les couches diffrent dans leur dcoupage, mais on peut raliser les associations sui-
vantes : couche 1 couche physique, couche 2 MAC + LLC +
1
/
2
ARP, couche 3
Couche 7
Couche 6
Couche 5
Couche 4
Couche 3
Couche 2
Couche 1
Application
Prsentation
Session
Transport
Rseau
Liaison
Physique
Systme B
Application
Prsentation
Session
Transport
Rseau
Liaison
Physique
Systme A
protocole
Application
protocole
protocole
Session
protocole
Transport
protocole
Rseau
protocole
Liaison
protocole
Physique
Support physique d'interconnexion
G
e
s
t
i
o
n
d
e

l
a

c
o
m
m
u
n
i
c
a
t
i
o
n
G
e
s
t
i
o
n
d
e

l
a

t
r
a
n
s
m
i
s
s
i
o
n
Figure 4.30 Structure en couche du modle OSI.
= =
4.3 Rseaux et bus de terrain
165


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
IP +
1
/
2
ARP, couche 4 et une partie de la couche 5 TCP, couches 5, 6, 7
Application.
Cet ouvrage na pas pour but de dcrire exhaustivement le fonctionnement de cha-
cun des protocoles existants, mais il dcrit succinctement le protocole gnraliste
le plus employ (TCP/IP) et un des rseaux de terrain les plus utiliss dans lindustrie
(CAN).
Certains paramtres peuvent inuencer le choix du type de mdium de communi-
cation utilis et de mode daccs :
le dbit binaire maximal, soit le nombre de bits par seconde que lon peut trans-
frer ;
la taille maximale dune trame en octets (une trame est une entit unitaire trans-
frable sur le mdium de communication) ;
le mdium physique utilis, sa tolrance, et sa rsistance aux lments extrieurs,
comme les perturbations lectromagntiques ou les conditions climatiques :
paire torsade, cble coaxial, bre optique, support immatriel ;
la distance maximale entre deux nuds vue directe ;
diffusion (bus, support immatriel, boucle) ou point point ;
le type de multiplexage utilis pour le passage des donnes : frquentiel, dans lequel
plusieurs messages peuvent tre transmis simultanment, chaque nud se par-
tageant une partie du mdium et/ou temporel, pour lequel les nuds ne peuvent
mettre que chacun leur tour. La plupart des rseaux destins transporter des
donnes utilisent le multiplexage temporel, an dutiliser intgralement la bande
passante si au moins un nud veut mettre ;
le dterministe ou non du temps daccs au mdium ;
le type daccs au mdium, par arbitre ou dcentralis ;
la condentialit des donnes (mme cryptes, les donnes transmises sur support
immatriel peuvent tre aisment reues par des nuds tiers).
m Protocoles rseaux gnralistes
M Couche 1 (physique)
Les bits peuvent tre transmis sous la forme de signaux en bande de base (2 ou 3 tats
lectriques diffrents servent passer les bits), ou bien en modulation (amplitude,
frquence et/ou phase). Les diffrents codages utiliss sont tudis an dviter
une dsynchronisation dhorloge, et an dtre tolrants aux perturbations lectro-
magntiques ou optiques. Cet ouvrage ne traite pas de traitement du signal, mais
le lecteur intress pourra se rfrer la bibliographie.
M Couche 2 (LLC, MAC)
La couche 2 du modle OSI correspond approximativement aux couches LLC
(Logical Link Control ) et MAC (Medium Access Control ) de la pile IP. Elle
soccupe notamment de la gestion de laccs au mdium : lorsque plusieurs nuds sont
susceptibles dmettre sur un mdium partag, des collisions de donnes peuvent
se produire, ncessitant une r-mission. Cela inue videmment sur le dterminisme
= =
=
166
4.3 Rseaux et bus de terrain 4 Architectures systmes
du temps de transmission dinformation entre deux nuds. Par consquent, cette
partie prsente quelques protocoles de niveau 2 an dinformer le lecteur sur le
dterminisme temporel quil est possible dobtenir.
La gure 4.31 prsente diffrents types daccs au mdium de communication.
Ethernet
La norme Ethernet (normalise IEEE 802.3) est la norme de niveau MAC la plus
rpandue lheure actuelle sur les rseaux locaux. Cette norme fait son apparition
sur le march industriel et concurrence dsormais les bus de terrain, car bien que
thoriquement moins robuste, elle a un cot nancier trs faible, des dbits moyens
trs levs, et des temps moyens daccs au mdium trs bas. Au niveau physique,
Ethernet utilise gnralement de la transmission numrique sur paires torsades
ou cbles coaxiaux. Les dbits sont importants, puisque suivant le matriel utilis,
on peut changer des donnes 10 Mbits/s, 100 Mbits/s, 1 Gbits/s, etc. La commu-
nication est de type diffusion (le plus souvent, sur un bus), et chaque nud est muni
dune adresse (sur 2 octets, ou plus, typiquement sur 6 octets) dite adresse MAC
ou adresse Ethernet.
Lorsquun nud met une trame (gure 4.32) destination dun autre nud, tous
les nuds du rseau la reoivent, mais seul le nud possdant ladresse destination
doit lire la trame.
En ralit, les bus Ethernet ont une forme dtoile ramie (gure 4.33). Dans le
protocole originel, toute trame mise par un nud est diffuse tous les nuds
Accs au mdium de communication
Rsolution de collision
CSMA/CD (Ethernet)
CSMA/DCR
CAN (CSMA/CA)
(Automobile)
ARINC 629 (CSMA/CA)
(Avionique)
FIP
DQDB
ARINC 629 : rseau avionique civile (1994)
CAN : Controller Area Network (1994)
CSMA/CD (Ethernet) : Carrier Sense Multiple Access/Collision Detection (1985)
CSMA/DCR : Carrier Sense Multiple Access/Deterministic Collision Resolution (1990)
CSMA/CA : Carrier Sense Multiple Access/Collision Avoidance (~ 1990)
FIP : Factory Instrumentation Protocol (1990)
DQDB : Dual Queue Dual Bus (1985)
FDDI : Fibber Distributed data Interface (~ 1990)
TDMA : Time Division Multiple Access (~ 1990)
Centralis
Distribution
du droit de parole
Distribu
Circulation
du droit de parole
Anneau jeton
FDDI
TDMA
Alatoire Contrl
Figure 4.31 Types daccs au mdium de communication.
4.3 Rseaux et bus de terrain
167


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
du rseau, ce qui revient considrer cette topologie comme un bus diffusion.
Chaque extrmit de ltoile ramie est un nud (ordinateur, imprimante, photo-
copieuse, matriel dacquisition/commande, etc.), alors que les intersections sont
constitues dlments rpteurs passifs (les hubs), ou actifs (les commutateurs, ou
switchs). Un hub relaie ce quil reoit sur une entre toutes ses sorties, alors quun
switch sinforme sur la topologie du rseau an de ne rpercuter les trames reues
que vers les branches concernes. Un switch est en fait une passerelle de niveau MAC.
Ethernet arbitre laccs au medium suivant le protocole daccs dcentralis non dter-
ministe CSMA/CD (Carrier Sense Multiple Access with Collision Detection) :
lorsquun nud souhaite mettre des donnes, il attend que le mdium soit libre
(pas dmission en cours) et met une trame contenant ses donnes. Tout en conti-
nuant mettre, il observe le rseau pendant 2 fois la dure maximale de propagation
dun message (temps daller/retour maximal dun signal entre les deux nuds les
plus loigns du rseau). Pendant cette dure appele tranche canal, il vrie que
ce quil lit sur le rseau correspond bien ce quil crit (i.e. il vrie quaucun autre
nud na pris linitiative dmettre presque en mme temps que lui). Sil saperoit
quil y a collision, il continue mettre sa trame avec des bits de bourrage an dtre
1500 o Taille 46 o
Taille 64 o
Prambule
(7 o)
Adresses source
et destination
(2x2 o ou 2x6 o)
Dlimiteur
de dbut
(1 o)
Longueur du champ
de donnes ou types
(2 o)
Contrle
de trame
(4 o)
Donnes Remplissage
Figure 4.32 Format dune trame Ethernet.
Switch
Switch
Hub
Hub
Routeur
Extrieur
Serveur
important
Trame envoye par a b :
le hub la diffuse toutes ses sorties, le switch slectionne la bonne sortie
a
b
Figure 4.33 Un bus Ethernet ressemble davantage une toile ramifie qu un bus.
168
4.3 Rseaux et bus de terrain 4 Architectures systmes
certain que tous les nuds concerns saperoivent aussi de la collision (il y a une
taille minimale de trame de 64 octets an dtre certain que deux stations entrant
en collision saperoivent de la collision, et que les nuds destination des trames
saperoivent aussi de la collision). Les deux nuds entrs en collision tirent alors
un nombre alatoire entre [0 et 2
n
tranche canal-1] avec n le nombre de tentatives
dmission de la trame. Au bout dun certain temps, non dterministe, si le rseau
nest pas surcharg, un nud pourra mettre sa trame. Si le rseau possde trop de
nuds et que le nombre de collisions est important, on parle dcroulement du
rseau.
La longueur maximale dun rseau Ethernet est fonction de la tranche canal, et de
la longueur minimale dune trame.
An de limiter les problmes dcroulement lorsque le nombre de nuds sur un
rseau Ethernet est important, lEthernet commut est apparu : il se base sur des
rpteurs actifs appels switchs. Leur rle est de collecter les adresses Ethernet des
nuds connects chacune de ses branches, ainsi, lorsquune trame arrive sur un
nud destination dune adresse, le switch ne relaie la trame que sur la branche
menant au nud destination. Les switchs permettent de rduire les espaces de
collision (un espace de collision est un espace dans lequel tout message est vu par
tous les nuds).
Enn, grce aux paires torsades, la communication entre les switchs ou hubs et les
nuds peut utiliser le full-duplex, cest--dire mettre et recevoir en mme temps
des trames.
Le protocole Ethernet est extrmement exible, performant, et bon march mais
non dterministe.
Rsolution dterministe des collisions
Pour permettre lutilisation du protocole CSMA lorsque le dterminisme est nces-
saire, le protocole CSMA/DCR (Deterministic Collision Resolution), norme
IEEE 802.3D, a t propos. Il introduit un mcanisme de priorits bas sur les
adresses : au lieu dattendre un temps alatoire, les nuds entrant en collision se
scindent en 2 groupes : les nuds plus prioritaires qui peuvent r-mettre, et les
nuds moins prioritaires, qui doivent attendre, ceci jusqu ce que seul un nud
prioritaire puisse mettre. On peut ainsi dterminer le temps maximal dattente du
mdium de communication en fonction de la priorit dun nud. En effet, avant
dmettre, un nud prioritaire attend au plus la dure dmission de la trame en
cours, puis tente sa chance au plus log
2
(n) fois (n tant le nombre de nuds voulant
mettre en mme temps que lui).
Wi-Fi
Une version sans l dEthernet a t normalise sous les normes IEEE 802.11,
appeles Wi-Fi (Wireless Fidelity). Ce protocole, utilisant une transmission ana-
logique base de dphasage (quadrature de phase), permet des dbits relativement
importants (55 Mbits/s pour la norme 802.11g). Les ondes radio utilises sont sur
la bande des 2,4 GHz (ou 5 GHz pour la norme 802.11a). Le mode daccs ne peut
pas tre de type CSMA/CD car deux nuds mettant vers un nud tiers peuvent
4.3 Rseaux et bus de terrain
169


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
entrer en collision sans sen apercevoir. la place, le protocole CSMA/CA (Colli-
sion Avoidance) peut tre utilis : les nuds ne peuvent bien entendu mettre que
lorsquil ny a pas dmission reue. Mais lmission se base sur un protocole avec
accus de rception de la part du nud destination. Un nud souhaitant mettre vers
un nud commence par mettre une trame Ready To Send (prt mettre) vers le
nud destination, contenant des informations sur le volume de donnes trans-
mettre et la vitesse de transmission, le nud destination, sil ne capte pas dautre
mission ou nattend pas dautre mission, rpond alors Clear To Send (mission
possible) et le nud peut mettre les donnes. Comme tous les nuds porte
ont pu entendre la trame Ready To Send, ils attendent le temps escompt de trans-
mission avant de tenter dmettre. Il y a deux types darchitecture pour les rseaux
Wi-Fi : une architecture centralise, nomme infrastructure, centralise autour
dun nud routeur (gnralement connect un rseau laire) nomm Access Point.
La seconde architecture est dite Ad-Hoc ou IBSS (Independant Basic Service Set) :
dans ce cas, chaque nud ne peut communiquer quavec dautres nuds vue directe.
Dans le cas dune infrastructure, un autre protocole daccs au mdium peut tre uti-
lis la place du CSMA/CA : cest le protocole arbitre centralis (lAccess Point)
PCF (Point Coordination Function) bas sur une mthode de scrutation.
Les normes 802.11 fournissent donc la possibilit de pouvoir communiquer sur des
supports immatriels, cependant, bien que la norme 802.11g fournisse en thorie
des dbits pouvant atteindre 55 Mbits/s, la distance entre les nuds, et les obstacles
(murs, cloisons) autorisent un dbit rel bien infrieur. De plus, il est important
de coupler ce protocole avec des techniques de cryptage, la possibilit de capter les
transmissions grande distance (quelques centaines de mtres, voire mme quelques
kilomtres avec une antenne directionnelle) a permis aux hackers dinventer un
nouveau passe-temps : le War-Driving, consistant rechercher les rseaux Wi-Fi mal
protgs et sy introduire.
Arbitrage distribu base de jeton
Certaines mthodes daccs contrl au mdium se basent sur un jeton (token).
Par exemple, la norme IEEE 802.4 dnit le bus jeton et la norme IEEE 802.5
dnit lanneau jeton, protocoles daccs au mdium dans lesquels une trame jeton
passe de nud en nud (de faon logique pour le bus jeton, de faon physique
pour lanneau jeton) : un nud ne peut mettre que lorsquil possde le jeton, et
ce pendant un temps ni. Le temps dattente maximal daccs au mdium est alors
born, et le dbit minimal allou un nud est quantiable. Des mcanismes de
priorit peuvent tre introduits dans ces deux normes.
La norme IEEE 802.6, nomme FDDI (Fiber Data Distributed Interface) est trs
proche de la norme anneau jeton, except que la transmission du jeton sadapte la
trs grande vitesse de propagation des trames sur de la bre optique, avec un objectif
orient temps de rotation maximum sur tout lanneau.
Les protocoles 802.4, 5 et 6 sont donc des protocoles daccs contrl mais dcentra-
lis bass sur la transmission dun jeton (physique pour les anneaux, logique pour
le bus).
170
4.3 Rseaux et bus de terrain 4 Architectures systmes
Arbitrage centralis
Des protocoles accs contrl de faon centralise ont t dnis, mais ils sont
relativement peu utiliss pour les rseaux gnralistes : tant donn que larbitre ne
peut pas savoir lavance quelle station voudra mettre, et de quelle bande passante
elle a besoin, une bonne partie de la bande passante est perdue par le mcanisme
dinterrogation des nuds. Larbitre interroge chaque nud, soit chacun leur tour
(scrutation) soit avec un message destin tous (test) an de savoir qui veut mettre.
Il alloue alors le mdium aux nuds, chacun leur tour.
Citons le protocole TDMA (Time Division Multiple Access) qui accorde un certain
temps chaque nud, quil veuille mettre ou non : ce mode dterministe et prio-
dique gaspille normment de bande passante.
M Couche 3 (rseau)
Quelles que soient les couches de niveau 1 et 2, elles assurent une transmission entre
deux ou n nuds vue directe, cest--dire que, pour la couche 2, deux nuds peu-
vent communiquer sils partagent le mme mdium de communication. La couche 3,
sappuyant sur la couche 2, a pour objet le routage des informations entre des
nuds pouvant appartenir diffrents rseaux locaux. Le protocole de couche 3 le
plus utilis est le protocole IP (Internet Protocol). Chaque nud visible sur un
rseau possde une adresse IP (en plus bien sr dune adresse de niveau infrieur,
comme une adresse Ethernet par exemple). Deux entits de couche 3 peuvent com-
muniquer partir du moment o il existe un chemin entre eux travers des nuds
appels routeurs. La communication physique passe de nud en nud vue directe,
mais la couche 3 se charge de choisir un chemin an dacheminer des donnes
entre deux nuds qui peuvent se trouver sur diffrents rseaux locaux.
Une adresse IP (dans la version 4) est une adresse constitue de 32 bits (gure 4.34)
note sous la forme de 4 chiffres compris entre 0 et 255, qui sera supplante par
une adresse sur 64 bits dans la norme IP version 6. part les adresses spciques
prives, IP version 4 dnit 5 classes dadresses IP.
Une adresse de classe A est compose dun octet dnissant un rseau (par exemple,
11.0.0.0 dnit un rseau de classe A), et de 3 octets dnissant les adresses des
nuds du rseau (un nud du rseau peut avoir ladresse 11.241.23.195), ce qui
permet aux gestionnaires dun rseau de classe A dadresser plus de 16 millions de
nuds (2
24
-2 machine, le sufxe .0.0.0 tant rserv pour adresser le rseau entier,
et le sufxe .255.255.255 diffuser chaque nud du rseau).
Une adresse de classe B est compose de deux octets dnissant le rseau (par
exemple, 130.15.0.0 est un rseau de classe B) et de deux octets pour dnir ladresse
dun nud du rseau (par exemple, 130.15.65.123), ce qui permet dadresser 2
16
-2
machine.
Enn, les rseaux de classe C sont dnis sur 3 octets (par exemple, 193.55.198.0
est un rseau de classe C), ce qui laisse la possibilit dadresser 254 nuds (par
exemple, 193.55.198.56).
Un organisme mondial, lICANN (Internet Corporation for Assigned Names
and Numbers) attribue des classes dadresses IP diffrents organismes continentaux,
4.3 Rseaux et bus de terrain
171


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
comme le RIPE (Rseaux IP Europens) qui alloue alors des classes dadresses aux
administrateurs de rseaux.
Gnralement, toutes les machines dun mme rseau local utilisent une adresse
de la mme classe dadresse. En thorie, une classe dadresse peut correspondre
physiquement un seul rseau local. Cependant, il est clair quil est impensable de
mettre 16 millions de nuds (cas des rseaux de classe A), voire mme 65 000
(rseaux de classe B), sur un mme rseau Ethernet : celui-ci scroulerait immdia-
tement sous le nombre de collisions. En pratique, une zone de collision dun rseau
Ethernet (zone de diffusion totale par hub par exemple) ne dpasse pas quelques
dizaines ou petites centaines de nuds (pas plus de 1 024 daprs la norme Ethernet).
Donc, les rseaux de classe A et B sont souvent dcoups en sous-rseaux. Pour ce
dcoupage, on utilise un masque de sous rseau. Ce masque, de la mme taille en
octets que ladresse IP, est utilis avec un et binaire sur ladresse dun nud. Ainsi,
si un nud possde une adresse a
1
.a
2
.a
3
.a
4
, et que le masque est m
1
.m
2
.m
3
.m
4
,
alors toute machine dadresse a
1
.a
2
.a
3
.a
4
telle que a
1
.a
2
.a
3
.a
4
et m
1
.m
2
.m
3
.m
4
= a
1
.a
2
.a
3
.a
4
et m
1
.m
2
.m
3
.m
4
est cense se trouver sur le mme rseau local, cest-
-dire vue directe. La premire tche de la couche IP est donc de dterminer si le
nud destination est vue directe. Pour cela, IP connat ladresse du nud dmis-
sion, le masque de sous-rseau du rseau local, et ladresse destination. Il suft
alors dutiliser la formule mon adresse et masque adresse destination et masque
an de dterminer si le nud destination est directement accessible : si cest le cas,
IP obtient grce ARP (Address Resolution Protocol) ladresse MAC du nud
destination, il lui suft alors dutiliser les services de la couche 2 pour mettre ses
donnes, appeles datagramme. Si le nud ne se trouve pas sur le mme rseau,
alors le datagramme est envoy vers une machine particulire du rseau, identie
comme passerelle ou routeur (gure 4.35), qui se charge de trouver une route jusquau
rseau du nud destination (gnralement, le routeur est connect un ou plusieurs
autres routeurs, le datagramme va donc traverser un certain nombre de routeurs,
0 Rseau Machine
1 Rseau Machine 0
Rseau
Groupe
Rserv
Machine 1 1 1
1 1 1 0
1 1 1 1 0
Adresses IP de classe A : prfixe < 127
Adresses IP de B : 128 prfixe 191
Adresses IP de classe C : 192 prfixe 223
Adresses IP de classe D : 224 prfixe 239
Adresses IP de classe E : 240 prfixe
Figure 4.34 Classes dadresses IP.
=
172
4.3 Rseaux et bus de terrain 4 Architectures systmes
dabord en remontant dans la hirarchie gographique, puis en redescendant vers
la rgion du rseau local destination). Au nal, un rseau de classe A, B, ou C ne
correspond pas rellement un rseau local : un rseau local est caractris par le
et binaire entre nimporte quelle adresse de nud a
i
du rseau local et le masque
de sous-rseau m
i
: sur la gure 4.35, ladresse dun rseau local est donc donne
sous la forme a
i
&m
i
.
Au cours du trajet suivi par les donnes, diffrents supports physiques sont traverss :
chacun a des contraintes sur la taille maximale des datagrammes transports. Le
datagramme original pourra donc tre fragment pendant le voyage, puis rassembl
larrive. Il est noter que la route emprunte par les datagrammes, ainsi que
leur ordre darrive et le fait mme quils arrivent destination, est indterministe.
En fonction des couches physiques choisies de machine machine, il est possible que
de tel tel nud, la transmission soit able, mais que de tel tel autre nud, la trans-
mission soit non able. Dans tous les cas, IP est un protocole rseau non able,
puisquil ny a aucune garantie dacheminement, et gnralement pas de garantie
de qualit de service (vitesse de transmission) bien que la norme IP version 6
tente dy apporter des amliorations.
IP permet donc dassurer le routage de datagrammes entre plusieurs rseaux htro-
gnes, ceci sans aucune garantie de abilit. Cest pourtant ce jour le protocole
de couche rseau le plus utilis.
Noeuda
1
Routeur r
1
(Passerelle par dfaut)
du rseau a
1
& m
1
Hte a
2
Application
TCP
IP:a
1
&m
1
?a2&m2
Ethernet
ARP
IP
Ethernet
ARP
FDDI
ARP
IP:r
2
&m
2
=a
2
&m
2
FDDI
ARP
Wi-Fi
ARP
Application
TCP
IP
Wi-Fi
ARP
Routeur r
2
(Passerelle par dfaut)
du rseau a
2
& m
2
Bus Ethernet Anneau FDDI Wi-Fi
Figure 4.35 Exemple de fonctionnement dIP.
4.3 Rseaux et bus de terrain
173


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
Notons que beaucoup dentreprises ou de domiciles sont quips de rseaux locaux
adresses IP prives, cest--dire quau plus un nud, le routeur du rseau local,
possde une adresse IP publique (sil ny a aucun nud pouvant communiquer avec
internet, on parle dun intranet). Ces adresses prives sont gnralement choisies
dans la classe A 10.0.0.0 ou la classe B 192.168.0.0. Elles peuvent tre alloues de
faon xe, ou bien de faon dynamique par exemple en utilisant le protocole DHCP
(Dynamic Host Conguration Protocol), dans lequel un nud se connectant au
rseau va interroger un serveur DHCP pour obtenir dynamiquement une adresse IP,
gnralement prive.
M Couche 4 (transport)
La couche transport sappuie sur la couche rseau : la couche rseau fournit des
services permettant une transmission non able dun nud un autre, quels que
soient les rseaux locaux auxquels ils appartiennent. Les deux protocoles de couche
transport les plus utiliss sont TCP (Transmission Control Protocol) et UDP
(User Datagram Protocol).
Dans la pile TCP/IP, la couche 4 est la dernire couche avant lapplication : les ser-
vices de la couche transport sont donc souvent directement utiliss par les processus.
Sur un nud, plusieurs processus peuvent utiliser le rseau (gure 4.36) : par exemple,
un navigateur internet, un logiciel de lecture de courrier, etc. Il faut donc distinguer
les donnes entrantes an de les communiquer un processus particulier. En effet,
ce sont des processus qui sexcutent sur un nud et qui communiquent travers
le rseau avec dautres processus distants. Lide est alors la suivante : il y a une adresse
de niveau MAC utilise pour la transmission physique vue directe, une adresse IP
pour la transmission de nud nud, et nalement une adresse de couche transport
permettant dadresser un processus particulier sur un nud. Pour les protocoles
TCP et UDP, cette adresse est un nombre sur 16 bits appel port. Un port est donc
une valeur allant de 0 65 535, qui sert discriminer les processus disposs recevoir
des donnes sur le rseau. Pour un processus, travaillant directement sur la couche
TCP ou la couche UDP, le moyen de communiquer avec un processus est de con-
natre ladresse IP du nud sur lequel ce processus sexcute, et le port utilis par le
processus. Ces informations caractrisent totalement une adresse de communication
entre deux processus.
Le protocole TCP est un protocole able connect, empchant la congestion du
rseau. Sa abilit est assure par un systme daccuss de rception. Une connexion
logique est constitue avant chaque change de donnes. Ce protocole est asymtrique :
lun des processus se dnit sur un nud comme prt accepter une connexion sur
un certain port : ce processus est appel un serveur. Au lancement du processus,
celui-ci prvient la couche TCP du systme dexploitation quil est lcoute dun
port (par exemple, cest gnralement le port 80 qui est utilis par un serveur web).
Lautre processus prendra linitiative de demander ouvrir une connexion avec le
serveur : ce processus est alors un client. Sur TCP, la communication est donc de
type client/serveur.
Ainsi, par exemple lorsquun processus de type navigateur internet est excut sur
un nud du rseau, et que lutilisateur souhaite se connecter un serveur web, le
processus charge la couche TCP deffectuer une connexion au port 80 du nud
174
4.3 Rseaux et bus de terrain 4 Architectures systmes
hbergeant le serveur web voulu. Un segment de demande douverture de connexion
TCP, appel SYN, est envoy travers les couches par la couche TCP : lentit
transmise par TCP sappelle un segment. Un segment est caractris notamment
par le port source et le port destination. Dans le cas dune demande douverture de
connexion, la couche TCP peut choisir un port source disponible : il sera utilis par
le serveur web pour rpondre au processus client. Le segment de demande douver-
ture de connexion est alors pass la couche IP avec pour consigne de faire parvenir
ces donnes (le segment pass par TCP est considr par IP comme un ensemble
de donnes) ladresse IP de destination. IP forme alors un datagramme (gure 4.29),
caractris notamment par ladresse IP source et ladresse IP de destination : le champ
de donnes du datagramme contient donc le segment TCP. Le datagramme IP est
alors pass la couche infrieure qui fait suivre aux couches jusquau niveau physique
(voir gure 4.29) an quil soit achemin vers le nud destination en traversant un
certain nombre de routeurs (gure 4.35). Lorsque le datagramme mis arrive la
couche IP du destinataire, celle-ci lit dans len-tte du datagramme que cest un
segment TCP qui est contenu dans les donnes du datagramme, elle enlve donc
len-tte IP et passe les donnes du segment (qui sont donc le segment TCP mis
par la couche TCP de ladresse source) la couche TCP. La couche TCP constate
MAC (Medium Access Control)
LLC (Logical Link Control)
IP (Internet Protocol)
TCP (Transfert Control Protocol)
Physique
ARP (Address Resolution Protocol)
Correspondance
avec le modle OSI
5, 6, 7
4
3
2
1
A
p
p
l
i
c
a
t
i
o
n
s

u
t
i
l
i
s
a
n
t

P
O
P

o
u

I
M
A
P
(
C
l
i
e
n
t
s

e
t

s
e
r
v
e
u
r
s

d
e

m
e
s
s
a
g
e
r
i
e
)
A
p
p
l
i
c
a
t
i
o
n
s

u
t
i
l
i
s
a
n
t

F
T
P
(
C
l
i
e
n
t
s

e
t

s
e
r
v
e
u
r
s

F
T
P
)
A
p
p
l
i
c
a
t
i
o
n
s

u
t
i
l
i
s
a
n
t

u
n

p
r
o
t
o
c
o
l
e
q
u
e
l
c
o
n
q
u
e

n
e

n

c
e
s
s
i
t
a
n
t

p
a
s
u
n
e

c
o
m
m
u
n
i
c
a
t
i
o
n

f
i
a
b
l
e
A
p
p
l
i
c
a
t
i
o
n
s

u
t
i
l
i
s
a
n
t

T
F
T
P
(
C
l
i
e
n
t
s

e
t

s
e
r
v
e
u
r
s

T
F
T
P
)
A
p
p
l
i
c
a
t
i
o
n
s

u
t
i
l
i
s
a
n
t

u
n

p
r
o
t
o
c
o
l
e
q
u
e
l
c
o
n
q
u
e

n

c
e
s
s
i
t
a
n
t

u
n
e
c
o
m
m
u
n
i
c
a
t
i
o
n

f
i
a
b
l
e
(
C
l
i
e
n
t
s

e
t

s
e
r
v
e
u
r
s

d
i
v
e
r
s
)

A
p
p
l
i
c
a
t
i
o
n
s

u
t
i
l
i
s
a
n
t

S
M
T
P
(
C
l
i
e
n
t
s

e
t

s
e
r
v
e
u
r
s

d
e

m
e
s
s
a
g
e
r
i
e
)
A
p
p
l
i
c
a
t
i
o
n
s

u
t
i
l
i
s
a
n
t

H
T
T
P
(
S
e
r
v
e
u
r

w
e
b
,

n
a
v
i
g
a
t
e
u
r
)
UDP
(User Datagram Protocol)
Figure 4.36 La pile TCP/IP et UDP/IP complte.
4.3 Rseaux et bus de terrain
175


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
quelle a affaire une demande douverture de connexion sur un port particulier.
Elle vrie si un processus lui a signal quil tait lcoute de ce port. Si oui, elle
prvient donc le processus quune connexion a t ouverte, cette connexion tant
caractrise par ladresse IP et le port du client, et par ladresse IP et le port du ser-
veur. Le nud contact sait donc vers quelle adresse et sur quel port il doit rpondre.
La couche TCP renvoie donc un segment de demande douverture de connexion,
contenant en mme temps un accus de rception du segment reu : la connexion
est tablie.
Par contre, si aucun processus ne stait dclar la couche TCP comme tant
lcoute du port demand, la couche TCP aurait rpondu avec un segment accus
de rception et RESET, signiant quelle a bien reu la demande douverture de
connexion, mais quelle la refuse.
Lorsquune connexion est ouverte, les deux processus distants, le client et le serveur,
peuvent schanger des donnes de faon able. En effet, une fois la connexion
tablie, ils peuvent communiquer de la faon suivante : lorsque lun des processus
veut envoyer des donnes, il passe ces donnes sous forme doctets la couche TCP
en lui demandant de transmettre ces donnes sur la connexion ouverte. Les donnes
sont alors encapsules dans un segment TCP (ajout dun en-tte avec port source
et destination), puis passes la couche IP, etc. jusqu arriver au processus distant,
qui peut alors les lire. Si ncessaire, la couche TCP peut fractionner les donnes
(si elles sont trop grandes pour tre mises dans un datagramme IP, caractris par une
MTU, Maximal Transfert Unit, donnant la taille maximale dun datagramme sur
le rseau : par exemple, 1 500 octets pour Ethernet, 4 470 octets pour FDDI), qui
seront alors rassembls par la couche TCP destination, avant dtre transmises au
processus (noublions pas que les couches IP des routeurs peuvent elles aussi frac-
tionner un datagramme transmis, qui dans ce cas sera rassembl par la couche IP
destination, avant dtre pass la couche TCP).
Chaque segment transmis se voit rpondre un accus de rception. Si au bout dun
certain temps, la couche TCP na pas reu daccus de rception pour un segment
transmis, elle dcide de le r-mettre. Au bout dun certain nombre de r-missions,
la couche considre la connexion perdue.
La fermeture dune connexion ne droge pas la rgle de laccus de rception :
envoi dun segment FIN par lune des couches TCP, rponse par un FIN, ACK de
la couche distante. La connexion est alors ferme de faon bilatrale.
La dcongestion du rseau, quant elle, est assure de la faon suivante : supposons
que deux machines doivent changer un gros volume de donnes. Un processus
transmet donc la couche TCP un nombre important doctets, qui utiliseront plu-
sieurs segments. Si tous les segments taient envoys ds la possibilit physique
dmettre sur le rseau local, les routeurs se retrouveraient saturs, leur mmoire
tampon, contenant des messages faire passer dun rseau un autre de dbit plus
faible, serait remplie, et ils ne pourraient plus prendre en compte les nouvelles donnes,
qui seraient perdues. Les donnes perdues seraient alors r-mises, ce qui saturerait
encore et encore les routeurs, qui scrouleraient comme des chteaux de cartes. An
dviter cela, TCP utilise une fentre glissante : le principe est quil existe une taille
de fentre f , congurable, correspondant par exemple 4 segments TCP de taille
maximale. La rgle est que la couche TCP ne doit pas mettre plus de f segments
176
4.3 Rseaux et bus de terrain 4 Architectures systmes
sans avoir encore reu daccuss de rception. Par exemple, avec une fentre quiva-
lente 4 segments, la couche TCP transmet sur la connexion 4 segments, dont elle
attend les accuss de rception. Ds quun accus de rception arrive, elle nattend
plus que 3 accuss de rception, elle peut alors mettre un segment supplmentaire,
ce qui la met en attente de 4 accuss de rception.
Pour une application, le protocole TCP/IP est donc extrmement intressant, car
il repose sur une transmission able, bien que non dterministe en temps. Sa pro-
grammation est trs simple, car tous les langages de programmation proposent des
bibliothques de fonctions pour programmer TCP/IP :
lapplication serveur prvient la couche TCP quelle dsire couter un certain port,
puis se met en attente sur ce port, lapplication se retrouve alors dans ltat bloqu,
et repassera dans ltat prt lorsquune connexion aura t tablie linitiative
dun client ;
lapplication client doit demander ouvrir une connexion TCP en fournissant
ladresse IP du serveur (abus de langage signiant ladresse IP du nud sur lequel
lapplication serveur est susceptible de sexcuter), ainsi que le port utilis par
celui-ci ;
une connexion TCP est alors ouverte. On peut y crire des donnes, comme on
pourrait les crire lcran ou dans un chier : les donnes crites sont transfres
la couche TCP qui se charge de les faire parvenir destination. Notons que lcri-
ture est doublement suspensive, dune part, localement, comme toute entre/
sortie, mais aussi cause du fait que lcriture de donnes est considre comme
effectue lorsque les accuss de rception ont t reus. On peut lire des donnes
sur une connexion comme on pourrait lire des donnes en provenance dun clavier :
lire des donnes consiste soit piocher des donnes dans une zone tampon des
donnes reues sur la connexion si des donnes sont prsentes, soit les attendre
si elles ne sont pas arrives, dans ce cas, la lecture est bloquante ;
un protocole dapplication doit bien sr avoir t pralablement dni, permet-
tant dtablir comment les applications pourront se comprendre (voir un exemple
au chapitre 7).
On peut remarquer quun seul processus peut utiliser un port, ce qui fait que pour
viter dempiter sur les ports utiliss par certaines applications serveur standard
(serveur HTTP web coutant par dfaut le port 80, serveur de chiers FTP coutant
par dfaut le port 21, serveur denvoi de courrier lectronique SMTP coutant le
port 25, etc.), les applications utilisateurs choisiront des numros de ports levs.
Le protocole UDP, quant lui, est nettement plus simple, puisque cest une version
non able et non connecte dun protocole de couche transport. Cependant, il est
beaucoup moins utile aux applications de contrle-commande, car il est gnant de
ne pas savoir si les donnes transmises ont bien t reues.
m Rseaux de terrain
Les rseaux de terrain sont des rseaux de communication ddis au contrle de
procds. Les besoins sont diffrents par rapport aux rseaux gnralistes :
4.3 Rseaux et bus de terrain
177


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
les volumes de donnes transfrs sont moins importants (donns sur ltat du
procd, informations provenant de capteurs ou commandes vers des actionneurs,
commande de supervision) ;
les contraintes de temps dues aux aspects temps rel du contrle ncessitent des
modes daccs dterministes au mdium ;
certains messages tant plus importants que dautres, des mcanismes de priorit
doivent tre introduits ;
face un environnement de terrain, le matriel utilis doit tre robuste ;
tant donne la criticit des donnes transmises, le contrle derreur doit tre
important ;
les nuds connects par un rseau de terrain sont souvent des calculateurs ayant
moins de puissance de calcul quun ordinateur, il faut donc des protocoles rela-
tivement simples ;
gnralement, un rseau de terrain est ddi une et une seule application (une
application de contrle-commande et ou de supervision/suivi de production).
Il est alors inutile de mettre en uvre les couches hautes du modle OSI (ta-
blissement dune connexion TCP entre deux processus par exemple), connexion
logicielle TCP Cependant, il est intressant dutiliser des connexions de bas
niveau (par exemple LLC) avec un contrle derreurs de bas niveau, et pourquoi
pas un mcanisme daccuss de rception de niveau LLC ;
en gnral, les nuds devant communiquer sont vue directe sur le rseau, la
plupart des protocoles de rseaux locaux sarrtent donc souvent la couche 2.
Cependant il existe pour la plupart dentre eux des nuds routeurs capables de
faire le lien entre diffrents rseaux de terrain et des rseaux gnralistes utilisant
TCP/IP.
M Le protocole CAN
Le protocole CAN (Controller Area Network), est un rseau de terrain trs utilis
en milieu industriel notamment dans le monde automobile (gure 4.37). De nom-
breux microcontrleurs du march intgrent une interface de communication CAN.
Ce protocole est 2 couches (physique, MAC/LLC) et se base sur de la diffusion
(quelle soit sur bus, ondes radio ou lumineuses) de bits en srie (comme le protocole
Ethernet), mais de faon synchrone. La seule contrainte sur le mdium est quil
permette un et logique matriel sur les bits transmis : si un nud met 0, et quun
autre met simultanment 1, alors le mdium doit transporter 0. Si tous les nuds
mettent 1, le mdium transporte 1.
Lmission synchrone est fondamentalement diffrente de lmission asynchrone
propose par la plupart des rseaux gnralistes : un signal de synchronisation passe
priodiquement sur le rseau, un top qui indique aux nuds quils peuvent, sils le
dsirent, mettre des donnes. Le synchronisme est trs pratique, puisquil existe
alors un temps commun tous les nuds. Cependant, il a un cot en bande passante
important : en effet, chaque bit a une dure gale deux fois la dure de propagation
dun signal de bout en bout sur le mdium : cela correspond la tranche canal
prsente pour CSMA/CD.
178
4.3 Rseaux et bus de terrain 4 Architectures systmes
Il ny a pas dadresse de nud pour CAN, et la trame CAN ne transporte pas dinfor-
mations sur la source ou la destination dun message. Par contre, un message est
caractris par un identiant (ID) : un ID est un nombre cod sur 11 bits (CAN 2.0A)
ou 29 bits (CAN 2.0B) permettant de transporter en mme temps lidentiant et
la priorit du message. Plus le nombre est faible, plus la priorit est leve. Ainsi, le
concepteur dune application utilisant CAN attribue une priorit aux messages, qui
vont typiquement encapsuler des donnes capteur ou actionneur, et un nud obser-
vant un message passer sur le rseau ne le lit que si lID lintresse. Cest une philo-
sophie totalement diffrente de la philosophie client/serveur : en effet, tant donn
quune application utilisant un rseau de terrain est dtermine lavance, le concep-
teur sait quels types de messages chaque nud doit recevoir.
En thorie, le principe est le suivant : les nuds synchronisent leur horloge sur les
messages mis. Lorsque le mdium est disponible, une station commence par mettre
un bit Start Of Frame 0 suivi de lID (priorit) du message en commenant par les
bits de poids fort. chaque bit mis, elle coute le rseau (elle doit donc attendre
un temps quivalent la tranche canal), an de vrier que ce quelle lit est ce quelle
a mis. chaque bit de lID ainsi mis, la station coute le mdium an de dter-
miner si elle peut continuer mettre : si la station a mis un 0 (bit dominant), elle
est sre de pouvoir continuer mettre, cependant, elle ne peut pas savoir sil existe un
autre nud ayant commenc en mme temps quelle mettre ( une dure de pro-
pagation prs sur le rseau) qui met elle aussi un 0. Par contre, si le nud met
un 1 (bit rcessif ), et lit un zro, cela signie quun autre nud ayant commenc
transmettre au mme moment a un numro dID plus petit, donc plus prioritaire
(le mdium assure un et physique entre les bits transmis). Dans ce cas, le nud
stoppe sa transmission et tentera de r-mettre son message la n de la transmission.
Dans le cas o un nud a pass entirement son ID, il peut alors continuer mettre
sa trame (gure 4.38). Pour augmenter la robustesse du protocole, celui-ci intgre
au niveau 2 un mcanisme daccuss de rception, et les nuds qui prennent en
compte un message envoient un accus de rception : cela consiste positionner le
1
er
bit du champ ACK 0. tant donn que la transmission est synchrone, le nud
Contrle
moteur
Contrle
freinage
Interface
rseaux
Contrle
suspension
Bote de
vitesse
Affichage
conducteur
Confort
Climatisation
Site monoprocesseur
OS : OSEK/VDX
Bus de terrain VAN
Bus de terrain
CAN
Angle volant
phares
Figure 4.37 Exemple de rseau de terrain CAN.
4.3 Rseaux et bus de terrain
179


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
4 Architectures systmes
mettant la trame se rend compte si sa trame a t reue par au moins un nud,
sans identier lequel.
Ce protocole entre dans la catgorie des CSMA/CA, car il vite les collisions. Ce
protocole est trs intressant pour les applications temps rel, puisque les messages
les plus prioritaires (donc gnralement les plus critiques) sont certains de pouvoir
passer prioritairement par rapport aux autres messages sur le rseau : au pire lorsquun
nud veut mettre un message, il doit attendre la n du message courant, et les
ventuels messages plus prioritaires.
De plus, le protocole CAN est trs rsistant aux fautes : diffrents niveaux de contrle
derreur ont t introduits :
contrle CRC (Cyclic Redundancy Check) la n de chaque trame qui permet
de vrier les donnes ;
contrle de la forme de la trame au niveau physique ;
accus de rception de chaque trame reue.
Lavantage principal de CAN dans les applications temps rel est quil est possible
dtudier a priori lordonnancement des messages sur le rseau : en effet, le rseau
peut tre vu comme un processeur gr de faon non premptive (un message ne peut
pas tre interrompu) mais utilisant un ordonnancement bas sur la priorit des mes-
sages, puisqu la n dun traitement, cest le message le plus prioritaire qui est mis.
La limitation principale de CAN est lie son mode synchrone dmission limitant
fortement les dbits ou longueurs de mdiums de communication. En effet, sur un
bus, un signal se propage environ 200 000 km/s. Ce qui signie que si le mdium
mesure n mtres, il faudra attendre 2n m/2 10
9
m/s n/10
9
secondes, soit n 10
9
secondes. Ce qui donne un dbit thorique maximal de 10
9
/n bits/s sur un bus de
n mtres. Pour un bus de 100 m, le dbit maximal pourrait tre de 1 Mbits/s.
Cependant, en pratique, ce dbit est atteint pour des bus dune longueur denviron
40 m.
Trame CAN 2.0B
Trame CAN 2.0A
SOF : Start Of Frame, bit dominant
SRR : Substitute Remote Request bit rcessif tel que si deux messages de mme ID 11 bits sont mis, le format 2.0A
est plus prioritaire
RTR : Remote Transmission Request, dtermine si cest une trame donne ou demande de donne
IDE : IDentifier Extension dtermine si cest une trame 2.0A ou 2.0B
DLC : Data Length Code, taille du champs donnes
ACK : champs accus de rception, lmetteur envoie 2 bits recessifs, le premier est remplac par un bit dominant par
les rcepteurs de la trame. Lmetteur voit donc au retour de sa propre trame lA/R
CRC : Cyclic Redundancy Check permet de dtecter les erreurs de transmission
r
0
, r
1
: bits rservs pour le futur
End of Frame
7 bits
End of Frame
7 bits
ACK
2 bits
ACK
2 bits
CRC
15 bits
CRC
15 bits
Donnes
0 8 octets
Donnes
0 8 octets
DLC
4 bits
DLC
4 bits
r
0
1 bit
r
0
1 bit
r
1
1 bit
RTR
1 bit
RTR
1 bit
IDE
1 bit
IDE
1 bit
SRR
1 bit
SOF
1 bit
Identifier long
18 bits
Identifier (ID)
11 bits
SOF
1 bit
Identifier (ID)
11 bits
Figure 4.38 Format de trame CAN.
=
180
4.3 Rseaux et bus de terrain 4 Architectures systmes
M Le protocole FIP
WorldFIP est une autre illustration de rseau de terrain trs utilis dans lindustrie.
Comme CAN, il permet de faire communiquer diffrents nuds, certains nuds
tant spcialiss dans des acquisitions de capteurs ou dans des commandes daction-
neurs. Le protocole a une philosophie trs particulire : son but, comme celui de
CAN, est de faire communiquer des nuds participant la mme application.
Cependant il se base sur 3 types de messages : variables transmises priodiquement
(rafrachissement priodique), variables transmises de faon apriodique, et messages
transmis de faon apriodique. Le protocole se base sur un arbitre grant laccs au
mdium (la redondance des arbitres permet daugmenter la robustesse) en se basant
sur un cycle (20 ms par exemple). Larbitre sait quel moment les variables prio-
diques doivent tre mises sur le rseau, il envoie donc une demande pour chaque
variable priodique intervalle rgulier. Un seul nud tant producteur pour une
variable, ce nud doit alors envoyer la valeur de la variable, qui pourra tre lue par
les nuds consommateurs de cette variable. Le reste du temps est accord au trac
apriodique (valeurs de variables, messages, ou informations de conguration). Les
dbits atteints par les rseaux de terrain WorldFIP peuvent atteindre 25 Mbits/s
sur de faibles distances (quelques dizaines de mtres), et de nombreux quipements
existent. Il est ainsi possible de relier par un routeur World/FIP-Ethernet un rseau
de terrain un rseau gnraliste (qui bien sr nest pas dterministe).
Le protocole FIP est compos des couches 1, 2 et 7. La couche application permet
notamment aux applications de sassurer de la cohrence temporelle et spatiale des
variables reues via le rseau. La cohrence temporelle consiste sassurer quune
variable est frache, cest--dire quelle a t lue dans le mme cycle temporel. La
cohrence spatiale permet un nud de savoir si les autres nuds consommant
les mmes variables que lui ont des valeurs identiques pour ces variables.
181


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

5 EXCUTIFS TEMPS REL

Un

excutif temps rel

peut tre employ la place dun systme dexploitation
gnraliste par un systme de contrle-commande lorsquil est soumis des contraintes
de temps, ou bien lorsquil doit tre embarqu sur un microcontrleur.

5.1 Introduction

5.1.1 Limitations des systmes dexploitation gnralistes

Lorsquune application de contrle-commande est soumise de fortes contraintes
de temps, lutilisation dun systme dexploitation gnraliste est inadapte, car leurs
objectifs sont les suivants :
garantir l

indpendance des processus

et les protger les uns vis--vis des autres
notamment grce la MMU (

Memory Management Unit

), ce qui implique une
mise en uvre lourde des communications entre les processus ;
augmenter la vitesse moyenne de traitement laide d

optimisations locales

:
utilisation dun cache disque permettant un accs asynchrone, mais non prdictible,
aux mmoires de masse ; utilisation des optimisations des processeurs tels les

pipelines

et la mmoire cache

nuisant la prdictibilit

du temps dexcution
(les optimisations processeur peuvent tre utilises par les noyaux temps rel aussi) ;
limiter le surcot processeur d au systme dexploitation, ce qui conduit souvent
une

gestion grossire du temps

: lunit de temps typique est la milliseconde
ou la dizaine de millisecondes ;
favoriser l

quit

dans lordonnancement au dtriment du

temps de rponse

,
utilisant des quanta de temps de lordre dune dizaine de millisecondes ;
faciliter la maintenance du systme en offrant de

nombreux processus de main-
tenance

en concurrence avec les processus des utilisateurs, ce qui augmente la
charge processeur et mmoire du systme ;
rendre transparente lutilisation de la mmoire, en utilisant la

mmoire virtuelle

,
ce qui

nuit la prdictibilit

.
De plus, pour arriver ces buts, les systmes dexploitation gnralistes sont le plus
souvent

monolithiques

. En dautres termes, le systme dexploitation est muni dun

noyau

de base permettant la gestion des processus, leur ordonnancement et la gestion
de la mmoire et de la mmoire virtuelle. Les modules spciques lis la gestion
182

5.1 Introduction

5 Excutifs temps rel

du matriel (entres/sorties, rseau, systmes de gestion de chiers, etc.) sont ajouts
au noyau pour offrir des services de plus haut niveau lutilisateur.
Lensemble regroupant le noyau et les modules est souvent appel un

excutif

:
toute ou partie de cet excutif est non premptible, cest--dire que lorsque certains
services sexcutent, un processus utilisateur, ou mme un autre service, ne peut pas
tre excut. Si lexcution de ces services ncessite quelques dizaines de millisecondes,
le contrle trs n, quelques microsecondes prs dun procd relve de limpossible.
Le temps mis par le systme dexploitation prendre en compte un vnement
(typiquement une interruption) en lanant la routine de traitement dinterruption lie
sappelle la

latence due au noyau

. Par exemple, lorsquun systme dexploitation
gnraliste est en surcharge (calcul intensif, combin de nombreuses entres/sorties,
notamment criture sur les disques durs), on peut atteindre une latence de plusieurs
centaines de millisecondes, ce qui est inacceptable pour un systme de contrle-
commande n.
Enn, une structure monolithique est moins

robuste

quune structure en tches de
service, dans laquelle un noyau (gure 5.1) gre les processus ou les tches, et o
les services de lexcutif sont fournis par des tches ou processus situs au niveau
utilisateur.
En cas derreur matrielle dans une structure en tches de service, le processus ou
la tche de service lie au dispositif matriel sarrte, mais le systme peut continuer
sexcuter, et les services quil fournissait sont alors indisponibles. Dans le cas dun
systme monolithique, le systme est arrt. Notons cependant que gnralement,
une structure monolithique est plus intgre, les services de lexcutif sont alors
plus performants en moyenne.
Modules
Noyau
Matriel Matriel Matriel
Processus utilisateur
Tche
utilisateur
Tche
de services
Tche
de services
Noyau
Figure 5.1 Structure monolithique contre structure en tches de service.
5.1 Introduction

183


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

5 Excutifs temps rel

5.1.2 Noyau, excutif et systme dexploitation temps rel

Le concept dindpendance des processus assur par un systme dexploitation gn-
raliste augmente la complexit des primitives de communication entre processus.
Or, nous avons vu avec la mthode DARTS quil tait ncessaire que les lments
constituant un systme de contrle-commande communiquent. Par consquent,
la plupart des systmes de contrle-commande et des systmes temps rel sont impl-
ments en utilisant des

tches

. Les tches, de mme que les processus, concourent
lobtention du ou des processeurs, et peuvent communiquer ou se synchroniser,
mais

a contrario

des processus, cest le mme espace mmoire quils partagent. Une
tche est donc caractrise par une pile et un pointeur dinstruction, mais partage
la mmoire avec les autres tches du mme processus.
Les

noyaux temps rel

assurent la gestion de tches (ordonnancement, outils de
synchronisation et de communication, gestion des interruptions) et de la mmoire.
Ils sont appels

micronoyaux

quand ils ont une faible

empreinte mmoire

(taille
mmoire ncessaire leur excution). Un noyau temps rel est apte tre embarqu
sur un microcontrleur ou un microprocesseur disposant de peu de mmoire.
Un

excutif

temps rel est une surcouche du noyau : il offre les services ncessaires
lutilisation des entres/sorties, du rseau, des

timers

, des chiers, etc. Le plus
souvent, ces services sont modulaires, et il est possible de congurer spciquement
un excutif en fonction de larchitecture utilise. Ces modules peuvent tre con-
gurs de faon monolithique ou sous forme de tches de service.
Un

systme dexploitation

temps rel est un systme dexploitation complet reposant
sur un excutif temps rel.
En fonction de l

architecture cible

(architecture sur laquelle le systme de contrle-
commande sexcute), un concepteur doit choisir entre systme dexploitation et ex-
cutif (il est rare que lon puisse se contenter dun noyau seul). Pour cela, le principal
critre est lempreinte mmoire. Un noyau utilise quelques kilo-octets, et chaque
module de lexcutif utilise quelques octets quelques kilo-octets, alors quun sys-
tme dexploitation ncessite plusieurs mga-octets de mmoire.
Comme nous lavons vu dans le chapitre 1, le principal inconvnient de lutilisation
dun excutif temps rel est la relative complexit de programmation. En effet,
programmer sur un excutif ncessite un

dveloppement crois

: un ordinateur,
appel

station de dveloppement

, sert dvelopper le code. On utilise alors un
compilateur crois, an de gnrer un code excutable qui sera charg sur la

cible

en vue de lexcution. Gnralement, les environnements de dveloppement crois
fournissent des outils dobservation et de dbogage de la cible. Malgr la prsence
de ces outils, un dveloppement sur excutif est gnralement beaucoup plus long
et laborieux quun dveloppement sur systme dexploitation, ce qui va dans le sens
de la justication de lutilisation dun cycle en W (le premier V, sur simulateur, est
gnralement excut sur un systme dexploitation, ce qui permet de rduire le
temps de mise au point du second V qui a lieu sur la cible).
Les architectures matrielles tant trs volutives, la plupart des excutifs temps rel
disponibles supportent plusieurs processeurs/microcontrleurs quips de cartes
de dveloppement. Un ensemble doutils de dveloppement pour un excutif temps
rel est donc typiquement compos dune base commune indpendante du support
184

5.2 Concepts des excutifs temps rel

5 Excutifs temps rel

matriel, et dun ensemble doutils et librairies spciques une cible. Cet ensemble
doutils est regroup sous la forme dun ensemble de pilotes de priphriques, de
fonctions spciques (gestion de la mmoire, accs aux matriels spciques, etc.)
nomm

BSP

(

Board Support Package

).
En gnral, les excutifs temps rel sont moins ouverts, moins exibles, et optimisent
moins la vitesse moyenne des traitements que les systmes dexploitation gnralistes,
mais ils favorisent la prdictibilit temporelle.

5.2 Concepts des excutifs temps rel

Les langages de programmation utiliss pour dvelopper une application sappuient
sur les services fournis par lexcutif temps rel an de grer des tches, de les faire
communiquer, se synchroniser, de grer le temps, de traiter les interruptions mat-
rielles. Ces services inuencent ltat des tches, sur lequel sappuie lordonnanceur
an de grer lexcution du systme.

5.2.1 Gestion des tches

Les noyaux temps rel grent les tches (gure 5.2) suivant le mme principe que les
systmes dexploitation gnralistes. Cependant, tant donn que les tches sont gres
nement, certains noyaux distinguent la cration et linitialisation dune tche.
Une tche est initialement

cre

, ainsi, elle devient

existante

mais non initialise.
Elle doit tre

initialise

, ce qui la met dans ltat

prte

. Cest dans cet tat quelle
requiert un processeur. Lorsque lordonnanceur le dcide, suivant la politique dordon-
nancement choisie, cette tche se voit allouer un processeur an dtre

excute

.
De ltat

excute

, une tche peut tre

prempte

, ou bien se

bloquer



en attendant
un message, un vnement, ou bien laccs une ressource. Lorsquelle se met en
attente pendant un certain temps ou bien jusqu une certaine date, on dit quelle
est

endormie

(notons que les tats

bloque

et

endormie

sont smantiquement trs
proches, et quils peuvent tre confondus).
Une tche peut gnralement tre

supprime

partir de tout tat. An de prvenir
la perte dune ressource suite la suppression dune tche la dtenant, certains ex-
cutifs proposent des primitives de protection contre la suppression.
Il est noter que de nombreux noyaux temps rel proposent ltat supplmentaire

suspendue

qui peut tre atteint depuis nimporte quel autre tat, et qui interdit
une tche dtre excute jusqu sa reprise.

5.2.2 Outils de communication et de synchronisation

Ce paragraphe prsente les outils de communication et de synchronisation permet-
tant aux tches dinteragir. Auparavant, nous revenons sur les outils de base que sont
les smaphores et les moniteurs, qui seront utiliss par la suite pour donner une
implmentation doutils de communication et de synchronisation, ainsi que sur les
variables conditionnelles. En effet, tous les outils ne sont pas ncessairement pro-
poss par les excutifs, et le concepteur dune application doit parfois lui-mme les
implmenter, en utilisant les outils de base.
5.2 Concepts des excutifs temps rel

185


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

5 Excutifs temps rel

m

lments de base

M

Smaphores

Nous avons prsent au chapitre 4 loutil smaphore : un smaphore est une variable
soit binaire (deux tats sont possibles : libre et pris), soit

n

-aire. Dans le cas des sma-
phores

n

-aires, appels

smaphores compte

, la valeur 0 indique que le smaphore
est pris, et une valeur diffrente de zro indique quil y a un certain nombre dins-
tances libres.
Un

smaphore binaire

(gure 5.3a) est caractris par une valeur boolenne et une
le dattente de tches en attente du smaphore. La le dattente peut tre gre,
en fonction de lexcutif sous-jacent, soit de faon FIFO, soit sous la forme de
plusieurs les FIFO gres par priorit des tches dsirant accder au smaphore.
Souvent appel

mutex

(

mutual exclusion

) lorsquil est utilis pour assurer lexclusion
mutuelle, le smaphore binaire peut tre coupl, suivant les excutifs, avec un pro-
tocole priorit hrite ou bien un protocole priorit plafond an dviter le
phnomne dinversion de priorit (voir 5.2.4). Dans le cas du protocole priorit
Attente dune dure
ou dune date
Rveil
Premption
lection
Attente
bloquante
vnement
attendu arriv
Inexistant
Initialisation
Terminaison
Suppression
Suppression
Suppression
Cration
Endormie
Excute
Bloque
Prte
Cre
Existante
Existante
mais non initialise
Figure 5.2 Graphe simplifi des tats possibles
des tches gres par un noyau temps rel.
186

5.2 Concepts des excutifs temps rel

5 Excutifs temps rel

plafond, il est ncessaire de caractriser le smaphore par une priorit plafond
(gure 5.3b), cest--dire la plus grande priorit parmi les tches susceptibles de luti-
liser.
Un

smaphore compte

ou smaphore compteur (gure 5.4a) peut tre utilis pour
garantir une exclusion mutuelle lors de laccs une ressource multi-instance, ou
encore permettre un accs de type lecteur/crivain une ressource, ou bien encore
pour effectuer une synchronisation compte (voir 5.2.2, p. 201). Dans les deux
premiers cas, comme le

mutex

, il peut tre coupl un protocole de gestion de res-
source (gure 5.4b).
Notons enn quil existe une variante spcique du smaphore dans la norme POSIX
(voir 5.3.1, p. 219) : le

rwlock

(smaphore daccs de type lecteur/crivain), qui
sera abord dans le cadre de la description de la norme.

M

Moniteurs

Nous avons vu au chapitre 4 que le moniteur tait un outil strictement plus puissant
que le smaphore. Il existe deux types de moniteur :
Le moniteur classique, appel

moniteur de Hoare

, dans lequel la non rentrance
des primitives est couple avec un mcanisme dattente (

wait

) et de rveil (

signal

)
permettant de mettre en attente ou rveiller une tche accdant au moniteur sous
certaines conditions.
Le

moniteur la Ada

(

objet protg

) permet de mettre une garde (barrire
logique) lentre de chaque primitive du moniteur, ce qui permet une gestion
tat
(1=libre, 0=pris)
File(s)
de tches
en attente
tat
(1=libre, 0=pris)
File(s)
de tches
en attente
Priorit
plafond
Smaphore binaire priorit plafond
(b) (a)
Smaphore binaire
Figure 5.3 Caractrisation dun smaphore binaire :
(a) sans protocole de gestion de ressource ou avec protocole priorit hrite,
(b) avec protocole priorit plafond.
Valeur
(n0)
File(s) dattente
{tches, nombre
dinstances requises}
Valeur
(n0)
File(s) dattente
{tches, nombre
dinstances requises}
Priorit
plafond
(b)
Smaphore compteur priorit plafond
(a)
Smaphore compteur
Figure 5.4 Caractrisation dun smaphore compteur :
(a) sans protocole de gestion de ressource ou avec protocole priorit hrite,
(b) avec protocole priorit plafond.
5.2 Concepts des excutifs temps rel

187


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

5 Excutifs temps rel

plus ne et plus transparente des conditions daccs que dans le cas du moniteur
de Hoare. De plus, cette gestion est plus efcace dans le cas o il y a plusieurs
conditions de rveil : seule la tche concerne est rveille par le changement dtat
du moniteur, contrairement au cas du moniteur de Hoare dans lequel toutes les
tches en attente sur

wait

sont rveilles sur un signal et doivent alors valuer
leur condition an de se remettre en attente, ou de poursuivre leur excution.
De plus, le moniteur la Ada possde une distinction native accs en lecture/
accs en criture, ce qui permet plusieurs tches daccder au moniteur en lecture
en mme temps.
An dillustrer la diffrence existant entre les deux types de moniteur, considrons
un problme simple : limplmentation dun double smaphore (ensemble de deux
smaphores, pouvant tre requis simultanment, par exemple rseau et port
srie ). Comme cela a t dit au chapitre 4, ce type dexemple ne doit tre vu que
comme un exemple purement acadmique.
Limplmentation illustrative propose possde 6 primitives :
prendre_rseau prend le smaphore rseau ;
vendre_rseau vend le smaphore rseau ;
prendre_rs232 prend le smaphore srie ;
vendre_rs232 vend le smaphore srie ;
prendre_tout prend les deux smaphores ;
vendre_tout vend les deux smaphores.
Deux variables boolennes internes (rseau_libre et rs232_libre) donnent ltat des
smaphores.
Limplmentation dun tel moniteur la Hoare est donne ci-dessous :
Moniteur Communication :
rseau_libre, rs232_libre : boolen := vrai
Procdure prendre_rseau
Dbut
tant que rseau_libre = faux faire
- on attend que le rseau soit libre
wait
fait
rseau_libre := faux
Fin
Procdure vendre_rseau
Dbut
rseau_libre := vrai
signal
Fin
Procdure prendre_rs232
Dbut
tant que rs232_libre = faux faire
- on attend que le port srie soit libre
wait
fait
rs232_libre := faux
Fin
188
5.2 Concepts des excutifs temps rel 5 Excutifs temps rel
Nous pouvons remarquer que lorsque par exemple une tche libre le rseau, les
ventuelles tches en attente sur le port srie sont rveilles pour rien. Le moniteur
la Ada vite cet cueil en introduisant des gardes (conditions dentre) lentre
des primitives :
Procdure vendre_rs232
Dbut
rs232_libre := vrai
signal
Fin
Procdure prendre_tout
Dbut
tant que rseau_libre = faux faire
- on attend que le rseau soit libre
wait
fait
tant que rs232_libre = faux faire
- on attend que le port srie soit libre
wait
fait
rseau_libre := faux
rs232_libre := faux
Fin
Procdure vendre_tout
Dbut
rseau_libre := vrai
rs232_libre := vrai
signal
Fin
Moniteur Communication :
rseau_libre, rs232_libre : boolen := vrai
Procdure prendre_rseau quand rseau_libre
-- Lorsquune tche entre ici, le rseau est forcment libre
Dbut
rseau_libre := faux
Fin
Procdure vendre_rseau
Dbut
rseau_libre := vrai
Fin
Procdure prendre_rs232 quand rs232_libre
-- Lorsquune tche entre ici, le port srie est forcment libre
Dbut
rs232_libre := faux
Fin
Procdure vendre_rs232
Dbut
rs232_libre := vrai
Fin
Procdure prendre_tout quand rseau_libre et rs232_libre
-- Lorsquune tche entre ici, toutes les ressources sont libres
Dbut
rseau_libre := faux
rs232_libre := faux
Fin
5.2 Concepts des excutifs temps rel
189


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
On pourra apprcier la facilit de programmation du moniteur la Ada par rapport
celle du moniteur de Hoare, prsent notamment dans la norme POSIX et Java.
Notons que le protocole priorit plafond existe pour le moniteur la Ada.
Le moniteur de Hoare, qui ne distingue pas les conditions dattente, peut utiliser
une seule le FIFO (ou un ensemble de les FIFO classes par priorit de tches).
Le moniteur la Ada possde une le (ou un ensemble de les) par primitive
daccs, la discrimination de la condition daccs tant effectue au niveau de chaque
primitive.
La diffrence de confort de programmation se ressent donc dans la caractrisation
des deux types de moniteurs (gure 5.5).
M Variables conditionnelles
Peu dexcutifs et de langages de programmation proposent nativement le moniteur
(except Ada partir de la version 95). La primitive wait dun moniteur de Hoare
consiste, de faon atomique (non premptible), librer le verrou du moniteur et
placer la tche dans ltat bloque en attente dun signal dans le moniteur, puis au
moment du signal, rveil de la tche et prise du verrou. Ce fonctionnement nest pas
implmentable par smaphore, et ncessiterait une portion de code non premptible.
De nombreux excutifs proposent donc un outil appel variable conditionnelle
(gure 5.6) effectuant lors dun wait, de faon atomique, : libration du verrou,
passage de la tche ltat bloque en attente de la variable conditionnelle, puis au
moment du signal, rveil et prise du verrou.
Notons quen gnral, il est possible de prendre en compte les priorits des tches
en attente dune mme variable conditionnelle.
Procdure vendre_tout
Dbut
rseau_libre := vrai
rs232_libre := vrai
Fin
Verrou
Variables
internes
File(s) dattente
de tches sur wait
Verrou
de lecture
Verrou
dcriture
primitive: file(s)
dattente de tches
Priorit
plafond
Variables
internes
(a)
Moniteur de Hoare
(b)
Moniteur la Ada
Figure 5.5 Caractrisation (a) dun moniteur de Hoare, (b) dun moniteur la Ada.
File dattente
de tches
Verrou
du moniteur
Variable conditionnelle
Figure 5.6 Caractrisation dune variable conditionnelle.
190
5.2 Concepts des excutifs temps rel 5 Excutifs temps rel
Les variables conditionnelles sont des outils de base conjointement utiliss avec des
smaphores dexclusion mutuelle pour la construction de moniteurs de Hoare, comme
le montre ci-dessous limplmentation de lexemple prsent au paragraphe 5.2.2,
p. 186.
verrou : smaphore_mutex -- smaphore binaire dexclusion mutuelle
rseau_libre, rs232_libre : boolen := vrai
condition_rseau, condition_rs232 : variable_conditionnelle
Procdure prendre_rseau
Dbut
prendre(verrou)
tant que rseau_libre = faux faire
- on attend que le rseau soit libre
wait(condition_rseau, verrou)
-- de faon atomique, libration du verrou et attente
-- de la condition_rseau
fait
rseau_libre := faux
vendre(verrou)
Fin
Procdure vendre_rseau
Dbut
prendre(verrou)
rseau_libre := vrai
signal(condition_rseau)
-- signal de la condition_rseau
vendre(verrou)
Fin
Procdure prendre_rs232
Dbut
prendre(verrou)
tant que rs232_libre = faux faire
- on attend que le port srie soit libre
wait(condition_rs232, verrou)
-- de faon atomique, libration du verrou et attente
-- de la condition_rs232
fait
rs232_libre := faux
vendre(verrou)
Fin
Procdure vendre_rs232
Dbut
prendre(verrou)
rs232_libre := vrai
signal(condition_rs232)
vendre(verrou)
Fin
Procdure prendre_tout
Dbut
prendre(verrou)
tant que rseau_libre = faux faire
- on attend que le rseau soit libre
wait(condition_rseau, verrou)
fait
tant que rs232_libre = faux faire
- on attend que le port srie soit libre
wait(condition_rs232, verrou)
5.2 Concepts des excutifs temps rel
191


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
Lutilisation de variables conditionnelles permet dafner la condition de rveil dune
tche, ce qui rapproche le moniteur de Hoare implment par variable conditionnelle
du moniteur la Ada.
M Signaux
Les signaux sont des vnements (sans donnes) pouvant tre envoys une ou plu-
sieurs tches simultanment. Il y a deux types de signaux : les signaux synchrones,
internes une tche ou un processus, et les signaux asynchrones, provenant dautres
tches ou processus, ou bien de source matrielle externe.
Il est important de noter que la smantique synchrone/asynchrone concernant les
signaux est totalement diffrente de la smantique utilise dans le cas des commu-
nications. En effet, une communication synchrone caractrise le fait que lmetteur
et le rcepteur dun message effectuent ensemble une communication, alors que
dans le cas asynchrone, laction dmettre est totalement dconnecte de laction
de recevoir. Dans le cas des signaux, le terme synchrone caractrise un signal interne
une tche, alors que le terme asynchrone caractrise un signal externe.
Signaux synchrones
Un signal synchrone est le rsultat dun vnement interne une tche. Cet v-
nement est trait immdiatement (de faon synchrone son occurrence) par la tche.
Lorsquun vnement interne a lieu (par exemple erreur arithmtique comme une
division par zro par exemple, ou une violation de segmentation mmoire, ou bien
le redimensionnement dune fentre graphique gre par une tche, etc.), une occur-
rence du signal synchrone associ a lieu. chaque signal est associe une action par
dfaut. Typiquement, laction par dfaut consiste terminer la tche, ou bien le pro-
cessus pre, ou encore ne rien faire. Une tche peut dnir une action spcique
effectuer lorsquelle reoit un signal synchrone. De mme, elle peut dnir lensemble
des signaux quelle veut bloquer (il y a certains signaux qui ne peuvent pas tre
bloqus).
Signaux asynchrones
Les signaux asynchrones sont des signaux provenant dune source externe ladresse
dune tche ou un processus (signal priv), ou bien plusieurs tches et/ou plusieurs
processus (signal public).
fait
rseau_libre := faux
rs232_libre := faux
vendre(verrou)
Fin
Procdure vendre_tout
Dbut
prendre(verrou)
rseau_libre := vrai
rs232_libre := vrai
signal(condition_rseau)
signal(condition_rs232)
vendre(verrou)
Fin
192
5.2 Concepts des excutifs temps rel 5 Excutifs temps rel
Le principe fondamental repose sur la sensibilisation des tches diffrents signaux.
Il y a deux faons pour une tche de se sensibiliser un signal : une tche peut
dclarer une ASR (Asynchronous Service Routine) et la lier un signal ; la tche devient
alors rceptive au signal, et lorsque le signal a lieu, lASR est appele dans le contexte
(en utilisant la mme pile dexcution) de la tche, interrompant le traitement en
cours. Il est aussi possible pour une tche de se mettre explicitement en attente dun
signal : la tche devient donc bloque et loccurrence de lvnement la fait passer
dans ltat prte.
Lmission dun signal priv a pour destination une tche ou un processus, alors quun
message public peut tre destination de plusieurs tches dun processus.
Lorsquun signal priv est envoy un processus, la dernire tche (chronologique-
ment) stre sensibilise lvnement peut percevoir lvnement. Lorsquun signal
public est envoy un processus, toutes les tches sensibilises au signal peuvent le
percevoir. Lutilisation de signaux publics suppose lexistence dun rpartiteur doccur-
rences : se sensibiliser un signal revient se dclarer auprs du rpartiteur, une
occurrence concernant un processus est alors envoye au rpartiteur, qui soccupera
de prvenir chaque tche sensibilise. Le signal initial sera donc envoy sous la forme
de n signaux vers les tches sensibilises. Cette implmentation ncessite que le
rpartiteur ait une priorit plus importante que celle des tches sensibilises.
Si une tche devant recevoir un vnement nest pas prte le recevoir au moment
o loccurrence a lieu, il y a trois faons dont les occurrences non prises en compte
peuvent tre gres :
signal fugace : si loccurrence ne peut tre prise en compte, elle est perdue
(gure 5.7) ;
signal
Occurrence
non prise
en compte
wait
signal
Prise
en compte
du signal
wait
Occurrence
prise
en compte

t
a
t
d
u

s
i
g
n
a
l
T

c
h
e

m
e
t
t
r
i
c
e
T

c
h
e

s
e
n
s
i
b
l
e
a
u

s
i
g
n
a
l
signal
non
signal
excute
prte
excute
prte
bloque
en attente
du signal
Figure 5.7 Signal fugace,
les occurrences non prises en compte immdiatement sont perdues.
5.2 Concepts des excutifs temps rel
193


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
signal mmoris : si elle ne peut tre prise en compte, loccurrence est mmorise.
Si une autre occurrence du mme vnement a lieu dici sa prise en compte, elle
est ignore (gure 5.8). Ce type de mmorisation suppose quune tche (typique-
ment tche recevant le signal) rinitialise loccurrence ;
signal compte : les occurrences non prises en compte immdiatement sont
comptes pour utilisation ultrieure (gure 5.9), dans ce cas, la prise en compte
du signal suppose une dcrmentation du compte.
m Communication par message
Il existe diffrents outils permettant dassurer des communications par messages :
bote aux lettres ;
tube ;
socket ;
rendez-vous ;
tableau noir ;

Chacun de ces outils a ses spcicits propres qui sont prsentes dans les paragraphes
suivants.
signal
wait
signal
wait
signal
Occurrence
mmorise
wait
Occurrence
non prise
en compte
Prise
en compte
du signal
Occurrence
prise
en compte

t
a
t
d
u

s
i
g
n
a
l
T

c
h
e

m
e
t
t
r
i
c
e
T

c
h
e

s
e
n
s
i
b
l
e
a
u

s
i
g
n
a
l
signal
non
signal
excute
prte
excute
prte
bloque
en attente
du signal
Figure 5.8 Signal mmoris,
au plus une occurrence est mmorise.
194
5.2 Concepts des excutifs temps rel 5 Excutifs temps rel
M La bote aux lettres
La bote aux lettres permet une communication asynchrone puisque lanalogie exis-
tant entre communication asynchrone et communication par bote postale permet
dapprhender trs simplement le concept.
Une bote aux lettres (gure 5.10) est constitue dune zone dchange tampon
(buffer) dans laquelle une tche dite mettrice peut dposer des donnes. La taille
de la zone dchange est donne par le nombre de messages maximum multipli
par la taille de chaque message.
Les donnes de la bote aux lettres sont gres en FIFO (i.e. premier dpos/premier
retir) ou bien avec une le FIFO par niveau de priorit. Une tche dite rceptrice,
retire les donnes dans lordre darrive ou de priorit. En fonction du langage support
et de limplmentation, la priorit peut tre :
signal
wait
signal
wait
signal
Occurrence
mmorise
Occurrence
mmorise
wait
1 2 1
Nombre doccurrences mmorises n
Occurrence
prise
en compte

t
a
t
d
u

s
i
g
n
a
l
T

c
h
e

m
e
t
t
r
i
c
e
T

c
h
e

s
e
n
s
i
b
l
e
a
u

s
i
g
n
a
l
signal
non
signal
excute
prte
excute
prte
bloque
en attente
du signal
Figure 5.9 Signal compte,
le nombre doccurrences non prises en compte est mmoris.
Message
1
Message
2
File de messages
de la bote aux lettres
mettrice Rceptrice
Figure 5.10 Bote aux lettres FIFO.
5.2 Concepts des excutifs temps rel
195


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
oriente message (gure 5.11) : le message est muni dune priorit inuenant
lordre dans lequel il va tre lu ;
oriente tche (gure 5.12) : la priorit du message est lie la priorit de la tche
mettrice, ce qui na de sens que si plusieurs tches sont mme dmettre des
messages dans la mme bote aux lettres.
On parle de communication asynchrone car, en rgle gnrale, une tche mettrice
na pas besoin dattendre que la tche rceptrice soit lcoute pour lui envoyer des
donnes.
Cependant, les communications par botes aux lettres prsentent quelques
contraintes :
si la bote est vide, une tche dsirant recevoir des donnes est mise en attente
dans ltat bloque jusqu ce que des donnes aient t dposes dans la bote ;
une bote aux lettres a une taille borne, et lorsquune tche doit dposer des
donnes dans une bote pleine, en fonction de limplmentation choisie, soit le
message le plus ancien est cras par le nouveau, on parle alors de bote aux lettres
crasement (ou bien de RT FIFO), soit la tche passe dans ltat bloque
jusqu ce que des donnes aient t retires de la bote, on parle alors de bote
aux lettres sans crasement. Dans le cas gnral, le terme bote aux lettres dsignera
une bote sans crasement, et on prcisera avec crasement dans le cas contraire.
Remarquons que le concept de bote aux lettres (sans crasement) est identique
au problme producteur/consommateur prsent au chapitre 4.
Messages lus en priorit
Message
2
Message
1
Message
3
mettrice Rceptrice
File de messages urgents
File de messages normaux
Figure 5.11 Bote aux lettres priorits de messages.
Rceptrice
Messages lus en priorit
Messages lus en dernier
mettrice
de priorit forte
mettrice
de priorit faible
mettrice
de priorit moyenne
Message
2
Message
4
Message
1
Message
3
Figure 5.12 Bote aux lettres priorits de tches mettrices.
196
5.2 Concepts des excutifs temps rel 5 Excutifs temps rel
Une bote aux lettres est gnralement utilise pour une communication entre une
mettrice et une rceptrice ou bien n mettrices et une rceptrice. Bien que cela soit
possible, il est assez rare que lon utilise une bote aux lettres pour faire communiquer
n mettrices et m rceptrices.
Les botes aux lettres peuvent tre attente borne aussi bien pour lmission que
pour la rception : en cas dattente dpassant un dlai spci, une mission ou rcep-
tion de message est avorte, la primitive renvoyant alors une erreur.
Une bote aux lettres (gure 5.13) peut donc tre reprsente par un tampon de
messages qui peut tre soit une le, soit un ensemble de les classes par priorits,
une le dattente de tches dsirant mettre (cas o la le est pleine et sans crasement),
et une le dattente de tches en attente de message (cas o la le est vide). Comme
pour les messages, ces les dattente peuvent tre gres en FIFO ou bien gres sous
forme de les de priorits.
Lorsque le langage utilis ne propose pas le type de bote aux lettres dsir, il est
possible den implmenter simplement partir de smaphores, en utilisant la tech-
nique du producteur/consommateur prsente au chapitre 4, ou bien de manire
plus lgante en utilisant des moniteurs (voir 5.2.2, p. 186). Nous prsentons
quelques implmentations de botes aux lettres base de moniteurs dans le
chapitre 6.
M Le tube
Un tube (ou pipe) permet comme la bote aux lettres une communication unidirec-
tionnelle par passage de messages. Cependant, la philosophie du tube repose sur le
concept de ots doctets (comme tout priphrique Unix), exactement comme dans
un chier : une tche transmettant des donnes travers un tube les envoie comme
un ot doctets dans un chier (gure 5.14). Les donnes insres les unes la suite
des autres dans un tube, bien que pouvant tout fait tre stockes sur disque, sont
destines tre lues en FIFO par une autre tche. Le tube utilise un concept assez
proche du producteur/consommateur. Un producteur place n octets dans le tube
chaque fois quil veut transmettre un message vers le consommateur, qui prlvera
File(s) dattente
dmettrices
Tampon = file(s)
de messages
File(s) dattente
de rceptrices
Bote aux lettres
Tampon = file(s)
de messages
File(s) dattente
de rceptrices
Bote aux lettres crasement
Figure 5.13 Composition dune bote aux lettres.
Rceptrice mettrice
Message
2
Message
1
Figure 5.14 Tube de communication.
5.2 Concepts des excutifs temps rel
197


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
les messages n octets par n octets. Le tube est bloquant en lecture, mais non bloquant
en criture : dans le cas o le tube est plein, lcriture ne se bloque pas et renvoie une
erreur au producteur. En effet, thoriquement, un tube peut tre stock sur disque
et donc utiliser un tampon limit seulement par la taille du disque.
Un tube peut donc tre vu comme une bote aux lettres avec perte de messages dans
le cas o il est plein. Sa structure (gure 5.15) est limite une le doctets pouvant
tre stocke sur disque, et une le dattente de rceptrice(s).
Cet outil de communication tant mme dutiliser des chiers physiques, il noffre
aucune garantie de dlai de communication.
M Le socket
Le socket est un outil de communication bidirectionnelle (gure 5.16) par message
implment sur un protocole rseau (typiquement TCP ou UDP). Il permet deux
processus, ou tches, de communiquer aprs tablissement dune connexion de type
client/serveur (voir 4.3.2, p. 173).
Les messages sont des ots doctets, comme pour le tube. Chaque lment commu-
niquant est muni de deux tampons : lun pour les messages envoyer (par exemple,
le protocole TCP, utilisant la technique du fentrage TCP, peut tre amen attendre
un accus de rception avant de continuer lmission de segments TCP supplmen-
taires, la bande passante tant limite, des donnes peuvent tout simplement tre
en attente daccs au mdium de communication), et lautre pour les messages reus
mais non encore lus.
Le socket permet une communication entre 2 tches ou processus (socket TCP ou
UDP classique), ou bien entre n tches ou processus (cas de la multidiffusion impl-
mente sur UDP).
Un socket se caractrise au niveau de chaque lment communiquant (gure 5.17) par
deux tampons borns : les donnes arrives mais non lues, et les donnes en attente
Tampon = file
doctets
File dattente
de rceptrices
Tube
Figure 5.15 Composition dun tube.
Flot doctets
Flot doctets
Client
Serveur
Figure 5.16 Communication par socket.
198
5.2 Concepts des excutifs temps rel 5 Excutifs temps rel
denvoi, et une le dattente par tampon pouvant contenir la tche ou processus
communiquant sur le socket.
M Le rendez-vous
Le rendez-vous est un mode de communication synchrone bidirectionnelle : on
peut le comparer une communication tlphonique. Ce mode de communication
est assez rarement mis en uvre (il tait prsent dans Ada 83, mais a t rendu
obsolte par larrive des moniteurs dans Ada 95).
Une tche, dite acceptante, attend un rendez-vous (gure 5.18) comme par analogie
on pourrait tre en attente devant un tlphone. Une tche dite appelante peut
demander effectuer un rendez-vous avec une tche acceptante, de la mme faon
quon pourrait tlphoner quelquun.
Un rendez-vous na lieu que lorsque la tche acceptante est sur une instruction accept
et que la tche appelante demande lobtention du rendez-vous : la tche appelante
peut passer des donnes la tche acceptante, puis est bloque jusqu la n du rendez-
vous excut par la tche acceptante. Des donnes peuvent alors tre passes de la
tche acceptante la tche appelante. Les chronogrammes dexcution possibles
dun rendez-vous sont donns sur la gure 5.19.
Lacceptation de rendez-vous, de mme que la demande de rendez-vous, sont des ins-
tructions bloquantes, un rendez-vous peut donc tre caractris (gure 5.20) par
un pointeur vers la tche acceptante, son tat (en attente de rendez-vous ou non),
et une le dattente gre en FIFO ou bien un ensemble de les dattente FIFO
gres par niveau de priorit des tches appelantes.
Le rendez-vous peut se ramener lutilisation de deux botes aux lettres (que nous
nommerons dans lexemple qui suit bal_demande_rdz et bal_n_rdz).
Socket
File dattente
dmission
Tampon de sortie
= file doctets
Tampon dentre
= file doctets
File dattente
de rception
Figure 5.17 Caractrisation dun socket au niveau dun processus ou dune tche.

Demander rendez-vous(a, b)

a
b
Tche acceptante Tche appelante

Fin rendez-vous(a, b)

Accept rendez-vous(a, b)(a: paramtre in, b: paramtre out)faire


Figure 5.18 Principe du rendez-vous.
5.2 Concepts des excutifs temps rel
199


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
bal_demande_rdz : bote aux lettres
-- utilise pour demander un rendez-vous la tche
acceptante
Tche demandant le rendez-vous :
crer bote aux lettres prive bal_fin_rdz
-- botes aux lettres utilise par la tche
-- acceptante pour signifier la fin du rendez-vous

envoyer un message contenant les paramtres
dentre du rendez-vous et lidentifiant de
bal_fin_rdz
attendre un message dans bal_fin_rdz
-- le message contenant les paramtres de sortie du
-- rendez-vous sont contenus dans le message reu

Tche acceptant le rendez-vous :

attendre un message dans bal_demande_rdz
-- attente de rendez-vous, le message reu contient
-- les paramtres dentre et lidentifiant
-- bal_fin_rdz de la bote aux lettres dans
-- on peut signifier la fin du rendez-vous

-- actions effectues lors du rendez-vous
envoyer dans bal_fin_rdz les paramtres de sortie
du rendez-vous
Tche appelante
Rendez-vous
Acceptation
de rendez-vous
Tche acceptante
Fin
du rendez-vous

Demande
de rendez-vous
Demande
de rendez-vous

Temps
Rendez-vous
Temps
Acceptation
de rendez-vous
Fin
du rendez-vous
(a) (b)
Figure 5.19 Chronogrammes dexcution possibles dun rendez-vous :
(a) la demande a lieu avant lacceptation, (b) lacceptation a lieu avant la demande.
Tche
acceptante
tat (en attente,
pas en attente)
File(s) dattente
dappelants
Rendez-vous
Figure 5.20 Caractrisation dun rendez-vous.
200
5.2 Concepts des excutifs temps rel 5 Excutifs temps rel
On peut noter que dans cette implmentation, la bote aux lettres de demande de
rendez-vous est ncessairement publique, car toute tche peut demander un rendez-
vous, alors que la bote utilise pour signier la n du rendez-vous est spcique
chaque tche demandant le rendez-vous.
Remarque : il est possible, notamment en Ada, dutiliser un mcanisme dhritage de
priorit lorsquune tche prioritaire est en attente dune autre tche moins prioritaire.
M Le tableau noir
Le tableau noir (gure 5.21) est conceptuellement le plus simple des moyens de
communication asynchrone : il utilise une zone de mmoire commune pouvant
contenir un message. Lcriture dun message crase le message prcdent, et la lecture
est non bloquante et non destructive (une valeur dj lue peut tre relue tant quelle
na pas t crase par une criture).
Entre processus, il existe des mcanismes particuliers de dclaration de zone de
mmoire commune (le segment mmoire des processus est protg des autres pro-
cessus). Entre tches, le mcanisme sapparente lutilisation dune variable classique.
Il ncessite cependant un mcanisme de protection garantissant lexclusion mutuelle :
en effet, il peut tre dommageable quune tche modiant le message soit interrompue
par une tche lisant le message, car ce dernier pourrait alors tre incohrent. Par contre,
il nest pas gnant que plusieurs lectures aient lieu en mme temps. Le mcanisme
de protection dun tableau noir sapparente au problme du lecteur/crivain vu
au chapitre 4.
Lun des problmes qui se pose souvent est le choix dune valeur initiale pour ce type
doutil de communication.
Le mcanisme dexclusion mutuelle utilis est typiquement un smaphore binaire,
ou si le langage support le propose un smaphore en lecture/criture. Dans les deux
Tableau noir
Donne Lecteur crivain
Figure 5.21 Communication par tableau noir : la lecture est non destructive.
Mcanisme(s)
dexclusion
mutuelle
Tableau noir
Valeur actuelle
Figure 5.22 Caractrisation dun tableau noir.
5.2 Concepts des excutifs temps rel
201


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
cas, si possible, il convient dutiliser un protocole de gestion de ressources (protocole
priorit plafond ou dfaut priorit hrite) an dviter le phnomne dinver-
sion de priorits.
M Bilan sur la communication par message
La gure 5.23 (page suivante) prsente un panorama des concepts -outils utiliss
pour la communication par message.
m Synchronisation
La synchronisation consiste assurer des proprits de fonctionnement mutuel des
tches. Ainsi, lexclusion mutuelle, prsente au chapitre 4, ncessite une synchro-
nisation. De la mme faon, si une tche doit absolument avoir eu lieu avant une
ou plusieurs autres, sans pour autant avoir transmettre de message, la contrainte de
prcdence est une synchronisation. Enn, si plusieurs tches doivent sattendre
en un point donn de leur code, une synchronisation de type rendez-vous a lieu
( ne pas confondre avec le rendez-vous prsent au paragraphe 5.2.2, p. 191).
M Exclusion mutuelle
Ce type de synchronisation a t vu au chapitre 4 : il sagit dempcher les sections
critiques utilisant la mme ressource de se prempter mutuellement. Une variante de
lexclusion mutuelle correspond distinguer laccs en lecture de laccs en criture :
dans ce cas, plusieurs lectures peuvent avoir lieu simultanment.
Une synchronisation dexclusion mutuelle est donc dnie (gure 5.24) par une
ressource et une le dattente pouvant tre gre en FIFO ou en les FIFO classes
par priorit des tches.
Comme dans le cas du tableau noir, pour lequel la valeur (stocke un emplacement
mmoire) est une ressource critique, le mcanisme dexclusion mutuelle utilis est
typiquement un smaphore binaire, ou si le langage support le propose un smaphore
en lecture/criture. Dans les deux cas, si possible, il convient dutiliser un protocole
de gestion de ressources (protocole priorit plafond ou dfaut priorit hrite)
an dviter le phnomne dinversion de priorits.
M Synchronisation n/1
La synchronisation n /1 (n producteurs, 1 tche en attente de dclenchement) traduit
une contrainte de prcdence. Typiquement, une tche ntant active que sur cer-
taines conditions (dclenchement par une autre tche, ou bien dclenchement suite
une interruption) est en attente de synchronisation et sexcute sur dclenchement
de celle-ci.
Files(s)
dattente
Ressource
Exclusion mutuelle
Figure 5.24 Caractrisation dune exclusion mutuelle.
202
5.2 Concepts des excutifs temps rel 5 Excutifs temps rel
S
o
c
k
e
t

B
i
d
i
r
e
c
t
i
o
n
n
e
l
l
e

B
l
o
q
u
a
n
t
e

e
n

l
e
c
t
u
r
e

B
l
o
q
u
a
n
t
e

e
n

c
r
i
t
u
r
e

p
o
u
r

T
C
P

B
o

t
e

a
u
x

l
e
t
t
r
e
s

c
r
a
s
e
m
e
n
t

U
n
i
d
i
r
e
c
t
i
o
n
n
e
l
l
e

B
l
o
q
u
a
n
t
e

e
n

l
e
c
t
u
r
e

G
e
s
t
i
o
n

d
e
s

p
r
i
o
r
i
t

s

t

c
h
e
s

o
u

m
e
s
s
a
g
e
s
T
u
b
e

U
n
i
d
i
r
e
c
t
i
o
n
n
e
l
l
e

B
l
o
q
u
a
n
t
e

e
n

l
e
c
t
u
r
e

T
a
b
l
e
a
u

n
o
i
r

U
n
i
d
i
r
e
c
t
i
o
n
n
e
l
l
e

N
o
n

b
l
o
q
u
a
n
t
e
(

c
r
a
s
e
m
e
n
t
,

l
e
c
t
u
r
e
n
o
n

d
e
s
t
r
u
c
t
i
v
e
)

B
i
d
i
r
e
c
t
i
o
n
n
e
l
l
e

S
y
n
c
h
r
o
n
e

G
e
s
t
i
o
n
d
e
s

p
r
i
o
r
i
t

s

t

c
h
e
s
R
e
n
d
e
z
-
v
o
u
s
A
v
e
c

c
r
a
s
e
m
e
n
t
S
a
n
s

c
r
a
s
e
m
e
n
t
T
a
m
p
o
n

b
o
r
n

L
o
c
a
l
e
C
o
m
m
u
n
i
c
a
t
i
o
n

p
a
r

m
e
s
s
a
g
e
B
o

t
e

a
u
x

l
e
t
t
r
e
s
U
n
i
d
i
r
e
c
t
i
o
n
n
e
l
l
e
B
l
o
q
u
a
n
t
e

e
n

l
e
c
t
u
r
e
B
l
o
q
u
a
n
t
e

e
n

c
r
i
t
u
r
e
G
e
s
t
i
o
n

d
e
s

p
r
i
o
r
i
t

s
t

c
h
e
s

o
u

m
e
s
s
a
g
e
s
L
o
c
a
l
e

o
u

d
i
s
t
a
n
t
e
T
a
m
p
o
n

(
q
u
a
s
i
)

n
o
n

b
o
r
n

N
o
n

b
l
o
q
u
a
n
t

e
n

l
e
c
t
u
r
e
N
o
n

b
l
o
q
u
a
n
t
e

e
n

c
r
i
t
u
r
e
(

c
r
a
s
e
m
e
n
t

d
u

p
l
u
s

a
n
c
i
e
n

m
e
s
s
a
g
e
)
N
o
n

b
l
o
q
u
a
n
t
e

e
n

c
r
i
t
u
r
e
(
a
v
e
c

p
e
r
t
e
s
)

p
o
u
r

U
D
P
N
o
n

b
l
o
q
u
a
n
t
e

e
n

c
r
i
t
u
r
e
a
v
e
c

p
e
r
t
e
s

l
o
r
s
q
u
e
l
e

t
a
m
p
o
n

e
s
t

p
l
e
i
n
B
l
o
q
u
a
n
t

e
n

l
e
c
t
u
r
e
F
i
g
u
r
e

5
.
2
3


O
u
t
i
l
s

d
e

c
o
m
m
u
n
i
c
a
t
i
o
n

p
a
r

m
e
s
s
a
g
e
.
5.2 Concepts des excutifs temps rel
203


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
Une synchronisation de tche peut tre binaire ou compte : lorsquune tche est
en attente sur une synchronisation binaire, si un dclenchement na pas t pris en
compte et quun second dclenchement a lieu, il crase le dernier dclenchement et
la tche en attente ne sera dclenche quune fois. Dans le cas dune synchronisation
compte, le nombre de dclenchements non pris en compte est mmoris, et la
tche en attente de synchronisation sera dclenche autant de fois que la synchro-
nisation est dclenche. Ces deux smantiques sont similaires aux smantiques
associes aux signaux mmoriss et signaux compte (voir 5.2.2, p. 191).
Une synchronisation compte (gure 5.25a) peut tre caractrise par une le
dattente (qui contiendra au plus une tche en attente) et un entier contenant le
nombre de dclenchement non encore pris en compte.
Une synchronisation binaire (gure 5.25b) peut tre caractrise par un boolen
traduisant ltat de la synchronisation (dclenche ou non), et une le dattente
contenant au plus une tche.
Deux implmentations de synchronisation une tche sont facilement ralisables :
la premire repose sur un smaphore (binaire pour une synchronisation binaire,
compte pour une synchronisation compte), la seconde repose sur les signaux privs
(mmoriss ou compte). On utilise gnralement limplmentation base sur un
smaphore (voir ci-aprs), les signaux tant moins rpandus sur les excutifs que
les smaphores.
Implmentation dune synchronisation compteur
syncho : smaphore compte initialis 0
Tche dclenchante

vendre(synchro)
-- dclenchement de la tche en attente

Tche en attente

prendre(synchro)
-- attente de dclenchement, le smaphore nest
-- disponible qu la suite dun dclenchement

File dattente File dattente
Nombre
de dclenchements
non pris en compte
un dclenchement
en attente ? (boolen)
Synchronisation n/1 compte
(a)
Synchronisation n/1 binaire
(b)
Figure 5.25 Caractrisation dune synchronisation n/1 (a) compte, (b) binaire.
204
5.2 Concepts des excutifs temps rel 5 Excutifs temps rel
M Synchronisation diffusion
La synchronisation diffusion est une extension n producteurs, et m tches en
attente de dclenchement de la synchronisation n/1. Si le nombre de tches en attente
est connu, cela revient utiliser m synchronisations n /1. Cependant, dans ce cas,
un rpartiteur de synchronisation doit tre utilis. Lordre de prise en compte des
dclenchements doit tre cohrent avec les priorits des tches dclenches (dclen-
chement de la tche la plus prioritaire dabord), ce qui implique que soit le rparti-
teur connat les priorits des tches, soit il est plus prioritaire que toutes les tches
en attente de synchronisation.
Le principe est assez semblable celui des signaux asynchrones publics vus au para-
graphe 5.2.2, p. 191. Comme pour les synchronisations n /1, la synchronisation
diffusion peut tre binaire (correspond au signal mmoris, voir gure 5.8) ou
compte (correspond au signal compte, voir gure 5.9).
On peut implmenter une synchronisation diffusion laide de signaux ou bien
de smaphores (sur le principe des synchronisations n /1) coupls un rpartiteur.
Ce type de synchronisation est trs rarement utilis dans les systmes temps rel et
les systmes de contrle-commande. En cas de besoin, on prfrera le dterminisme
de plusieurs synchronisations n /1 avec rpartiteur (voir exemple dimplmentation
ci-aprs).
M Rendez-vous synchronis
Dans les rares cas o lon souhaite que n tches soient en mme temps un empla-
cement spcique de leur excution, on y dnit lattente dun rendez-vous synchro-
nis n tches. Un rendez-vous synchronis est caractris par un nombre de tches
attendues au rendez-vous, et une le dattente de tches arrives au rendez-vous
(gure 5.26).
Synchronisation compteur diffusion n/m
synchro_rpartiteur : smaphore compte initialis 0
synchros : tableau de m smaphores compte initialiss 0
Tche dclenchante

vendre(synchro)
-- dclenchement du rpartiteur

Tche rpartiteur (priorit>=max(priorits) des tches en attente
Faire toujours
prendre(synchro)
-- attente de dclenchement
Pour i allant de 1 m faire
vendre(synchros[i])
-- dclenchement de chaque tche en attente
Fait
Fait
Tche en attente numro i

prendre(synchros[i])
-- attente de dclenchement (via le rpartiteur)

5.2 Concepts des excutifs temps rel
205


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
Une tche excutant une attente de rendez-vous est insre dans la le dattente et
passe dans ltat bloque sauf si elle est la dernire tche attendue au rendez-vous.
Lorsque le nombre de tches attendues est arriv au rendez-vous, toutes les tches
de la le dattente passent dans ltat prte.
Lorsque le rendez-vous synchronis nest pas disponible, il peut tre implment
laide dun signal public mmoris (ou bien de smaphores et dun rpartiteur) et
dun smaphore protgeant lentier comptant le nombre de tches arrives au rendez-
vous.
On pourrait penser quun signal fugace conviendrait, car on peut penser que lorsque
les tches du rendez-vous sont toutes arrives, elles sont forcment toutes en attente
du signal, qui serait donc pris en compte par toutes les tches du rendez-vous.
Le problme est quil est possible, la tche devant vendre le smaphore avant de se
mettre en attente du signal, que lavant-dernire tche arrivant au rendez-vous soit
prempte par la dernire tche arrivant au rendez-vous entre la libration du sma-
phore et lattente du signal. Dans ce cas, le signal ne rveillerait pas lavant-dernire
tche.
Rendez-vous synchronis 3 tches
nombre_tches_attendues : entier := 3
nb_tches_arrives : entier := 0
-- nombre de tches arrives au rendez-vous
mutex : smaphore binaire
-- garantit lexclusion mutuelle des accs
nombre_tches_attendues
s : signal public fugace
-- signal dclench lorsque le rendez-vous peut avoir lieu
Tche i

-- attente du rendez-vous
prendre(mutex)
nb_tches_arrives := nb_tches_arrives + 1
si nb_tches_arrives = nombre_tches_attendues alors
signaler(s)
-- rveil de toutes les tches arrives
vendre(mutex)
sinon
vendre(mutex)
attendre(s)
-- attente du rendez-vous
fin si

Rendez-vous synchronis
Nombre de tches
attendues
File dattente
de tches
arrives
Figure 5.26 Caractrisation dun rendez-vous synchronis.
206
5.2 Concepts des excutifs temps rel 5 Excutifs temps rel
5.2.3 Gestion des interruptions
Il y a deux types dinterruption : les interruptions logicielles, et les interruptions
matrielles.
m Interruptions logicielles
Les interruptions logicielles sont dclenches par une tche (ou lexcutif lui-mme)
lors de son fonctionnement : par exemple dbordement lors dun calcul, erreur de
segmentation, dfaut de page sur pagination, division par zro, etc. Dans ce cas,
cest la tche de traiter elle-mme linterruption. Enn, certaines interruptions
logicielles auront pour effet de rinitialiser le systme (erreur de parit lors dun
transfert entre la mmoire centrale et le processeur, erreur du bus de donnes, etc.).
Une interruption logicielle peut se traduire sous la forme de signal synchrone (voir
5.2.2, p. 191).
m Interruptions matrielles
Les interruptions matrielles sont gnres par une source externe au processeur,
comme par exemple un contrleur de dispositif dentres/sorties (clavier, priphrique
de stockage) ou bien une horloge qui peut tre programme an de dclencher
une interruption au bout dun certain temps ou une certaine date. Dans ce cas,
il faut quun traitement associ au noyau ait lieu, son rle principal sera de relayer
linterruption vers la tche de traitement adquate.
Physiquement, une interruption matrielle est apporte par une ligne dinterruption.
Le nombre dinterruptions possibles est limit par le matriel, ainsi, sur une archi-
tecture de type x86, il y a 16 interruptions matrielles. Les interruptions matrielles
sont souvent appeles IRQ (Interrupt ReQuest ).
Une table nomme vecteur dinterruption, contient ladresse de dbut du traitement
logiciel excuter pour chaque interruption. Ce traitement logiciel est excut
dans le contexte du noyau (en utilisant sa pile, et en interrompant le programme en
cours dexcution) ou bien avec une pile spcique aux traitements dinterruptions.
La table contient aussi un bit par interruption signiant si une interruption a eu lieu.
Le traitement sappelle une routine de traitement dinterruption (ISR) : ce traite-
ment commence ventuellement par prvenir llment matriel qui a signal linter-
ruption que celle-ci a t prise en compte. Certaines architectures matrielles prvoient
en effet quun lment matriel doive attendre dobtenir un acquiescement de leur
interruption avant den signaler dautres : cela permet dtre certain quaucune inter-
ruption nest perdue. Ce processus doit tre trs rapide, cela explique en partie quil
nest en aucun cas possible deffectuer une opration bloquante dans une routine de
traitement dinterruption.
Une routine de traitement dinterruption ne doit en aucun cas tre rentrante (le
traitement dune interruption ne doit pas tre interrompu par le traitement de cette
mme interruption). Lors du traitement dune interruption, on masque donc gn-
ralement linterruption traite elle-mme. Si elle survient nouveau, le bit informant
de loccurrence de linterruption est mis 1 dans le vecteur dinterruptions, mais
celle-ci devra attendre avant dtre traite.
5.2 Concepts des excutifs temps rel
207


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
Si le traitement dinterruptions est hirarchis, et quune interruption plus prioritaire
que celle qui est traite survient, alors la routine de traitement dinterruption est
elle-mme interrompue par le traitement de linterruption prioritaire. Dans le cas
o le systme nest pas hirarchis, ou bien dans le cas o une interruption moins
prioritaire survient, son traitement est mis en attente. Dans un systme hirarchis,
tout se passe comme si les interruptions moins prioritaires taient masques pendant
le traitement dune interruption.
La faon dont le processeur traite une interruption consiste, aprs le traitement de
chaque instruction (ce qui peut ncessiter plusieurs cycles processeur), vrier si
une interruption non masque a eu lieu (bit 1 dans le vecteur dinterruptions). Si
cest le cas, et que le traitement en cours na pas une priorit suprieure linter-
ruption elle-mme, il interrompt le programme en cours pour appeler la routine
de traitement de linterruption la plus prioritaire si il y a un mcanisme de priorits.
Linterruption sexcutera dans un contexte privilgi (soit dans le contexte noyau,
soit dans un contexte spciquement dni pour le traitement des interruptions).
Rappelons que la routine de traitement dune interruption se doit dtre rapide et
ne peut pas effectuer dinstruction bloquante ou suspensive, ce qui comprend toutes
les entres/sorties, lenvoi de message dans une bote aux lettres mme crasement
cause de la possibilit de se bloquer sur le mcanisme dexclusion mutuelle de mani-
pulation de la le de messages, etc. Par consquent, pour un systme temps rel, le
traitement dune interruption consiste dclencher une tche de traitement de linter-
ruption (gure 5.27). Une tche dclenche par une routine de traitement dinter-
ruption sappelle une DSR (Deffered Service Routine) et na aucune limitation daction
puisque cest une tche ordinaire. Une DSR est dclenche par synchronisation :
le rle dune routine de traitement dinterruption se borne alors dclencher la
synchronisation (typiquement en vendant un smaphore, voir 5.2.2, p. 201).
Gnralement, on utilise une synchronisation compte an que la tche puisse
prendre en compte plusieurs interruptions survenues lors de son traitement dune
interruption.
5.2.4 Gestion du temps
La gestion du temps sur les systmes dexploitation gnralistes se base sur une horloge
de faible rsolution (de lordre de la milliseconde) ou bien utilise de faon grossire
une horloge de haute rsolution.
ISR
(Routine de traitement
dinterruption)

Vendre(synchro)
DSR
(Tche de traitement
de linterruption)
Faire toujours
Prendre(synchro)

Fait
Interruption
Figure 5.27 Principe de fonctionnement du traitement dune interruption matrielle.
208
5.2 Concepts des excutifs temps rel 5 Excutifs temps rel
En effet, typiquement, lhorloge est programme de sorte dclencher une inter-
ruption priodiquement. Cette interruption, traite comme toutes les autres, voit son
traitement aboutir lexcution de lordonnanceur, qui value les priorits des tches
et appelle le dispatcher. Celui-ci rtablit alors le contexte de la tche la plus prioritaire.
Un excutif temps rel gre nement le temps, et sa rsolution peut approcher la
micro seconde. Il nest pas concevable de traiter une interruption chaque micro
seconde. La stratgie gnralement utilise consiste utiliser un ou plusieurs circuits
programmables spcialiss dans la gestion du temps. Ces circuits peuvent tre pro-
gramms de sorte :
dclencher priodiquement une interruption, typiquement, ce type de program-
mation est utilis par lexcutif pour dclencher priodiquement lordonnanceur.
Plusieurs excutifs qualient la priode ainsi utilise de tick : le noyau prend la
main chaque tick ;
dclencher une interruption une certaine date, ce qui permet typiquement une
tche de se rveiller priodiquement, avec une rsolution temporelle importante ;
dclencher une interruption au bout dun certain temps, ce qui permet typique-
ment une tche de sendormir pendant un certain temps, ou bien de surveiller
la dure dun traitement par chien de garde : le traitement est lanc paralllement
au dcompte dune horloge, ce qui permettra le cas chant deffectuer une action
spcique au cas o le traitement prendrait un temps plus lev que prvu.
Ainsi, seules les interruptions correspondant des instants programms ont lieu,
permettant ainsi une extrme nesse temporelle, sans nuire aux performances du
systme.
Les excutifs et systmes dexploitation temps rel se basent donc sur les horloges
pour proposer lune des deux mthodes suivantes de gestion du temps :
Noyau dirig par le temps : seule la notion de tick permet de grer le temps,
les tches ou processus ne peuvent tre rveills que sur des ticks, cest le cas par
exemple des excutifs VxWorks

(voir 5.4.1) et RTEMS (voir 5.4.3).


Noyau dirig par les vnements : les horloges sont programmables leur gra-
nularit la plus ne, et il est possible de rveiller une tche ou un processus de
faon trs ne, cest le cas par exemple des excutifs et systmes dexploitation
de type POSIX et OSEK/VDX.
Les noyaux dirigs par les vnements sont strictement plus puissants que les ex-
cutifs dirigs par le temps : il est possible sur les premiers dobtenir un fonctionnement
similaire aux derniers, mais linverse nest pas vrai. Les noyaux dirigs par les v-
nements peuvent atteindre une rsolution dhorloge de lordre de la microseconde,
voire moins, alors que sur un noyau dirig par le temps il est quasi impossible sans
dispositif matriel additionnel datteindre une rsolution infrieure quelques cen-
taines de microsecondes (de plus, ce grain temporel, le surcot processeur d au
noyau est prohibitif ).
Enn, notons que beaucoup de tches sont priodiques, et il faut avoir conscience
des problmes inhrents un code comme ce qui suit :
5.3 Principales normes temps rel
209


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
Soit t linstant o la tche est active, il lui faut un temps non nul pour effectuer
les actions, dautant que dautres tches peuvent utiliser le processeur et la retarder.
Linstruction dattente dun dlai a donc lieu une date t + e
1
, la tche nest donc
rveille quau plus tt la date t + priode + e
1
. Il lui faut ensuite un temps e
2
avant darriver linstruction dattente, ce qui dcale son prochain rveil au plus tt
la date t + 2priode + e
1
+ e
2
. Et ainsi de suite chaque priode. Ce phnomne
sappelle la drive des horloges. Par consquent, une tche priodique se doit de
reposer sur un rveil par date (on peut calculer les dates de rveil dsires en fonc-
tion dun instant initial) et non par dlai.
5.3 Principales normes temps rel
Ce paragraphe prsente deux normes temps rel, POSIX et OSEK. Les outils et
concepts dnis dans ces normes dnissent les services rendus par un excutif ou
un systme dexploitation compatible avec ces normes, appliques au langage C.
Cependant, le langage utilis par un programmeur tirant parti de ces services peut tre
un autre langage que le C (typiquement Ada). Il existe dautres normes temps rel,
comme ITRON/BTRON, norme principalement dveloppe au Japon.
5.3.1 La norme POSIX
m Introduction
POSIX (Portable Operating System Interface) est un standard initialement normalis
en 1988 par lIEEE sous le nom de P1003 et par lISO/IEC sous le nom ISO/IEC-
9945. Le but de cette norme est de normaliser laccs aux services offerts diffrents
niveaux par les systmes dexploitation Unix, de sorte assurer le plus de portabilit
possible aux programmes.
La norme a volu depuis 1988 et est encore en volution. En ralit, POSIX est un
ensemble de normes, regroupes sous le nom 1003.na (o n est la partie, et a lamen-
dement, comme 1003.1b qui est lamendement b de la partie 1) sous le standard
IEEE et sous forme de parties de la norme ISO/IEC-9945.
Diffrents groupes de travail participent llaboration de cette norme, et le standard
volue perptuellement an de rendre compte des besoins modernes. La plupart
des aspects du systme dexploitation Unix sont normaliss, du rseau au systme
de chiers en passant par le temps rel, linterfaage avec diffrents langages de pro-
grammation, etc. Les standards proposs concernent des interfaces et non pas des
Tche une_tche_priodique
Dbut
Faire toujours
-- des actions
Attendre une dure gale une priode
Fait
Fin
210
5.3 Principales normes temps rel 5 Excutifs temps rel
implmentations, qui sont laisses libres aux dveloppeurs de systmes dexploitation,
excutifs ou noyaux conformes tel ou tel ensemble de standards POSIX.
An de donner un aperu des travaux relatifs POSIX, le tableau 5.1 prsente un
aperu de ltat des standards POSIX en dcembre 2003 (la table complte des stan-
dards POSIX est donne en annexe B).
Tableau 5.1 Standards POSIX.
Nom IEEE Nom Notes
1003.1 Interface systme (System Interface) Dfinit linterface de programmation
systme dun systme dexploitation
POSIX Dernire version 2004. Depuis
2001, intgre diffrents amendements
donns ci-aprs.
1003.1b Extensions temps rel
(Realtime Extensions)
Dernire version 1993, intgre dans
1003.1 depuis 2001.
1003.1c Tches (Threads) Dernire version 1995, intgre dans
1003.1 depuis 2001.
1003.1d Extensions temps rel additionnelles
(Additional Realtime Extensions)
Dernire version 1999.
1003.1h Tolrance aux fautes (Fault Tolerance) Dernire version 2000 Devenu 1003.25.
1003.1i Corrections aux extensions temps rel
(Fixes to 1003.1b)
Dernire version 1995, intgre dans
1003.1 depuis 2001.
1003.1j Extensions temps rel avances
(Advanced Realtime extensions)
Dernire version 2000.
1003.5 Interface Ada avec 1003.1
(Ada Binding to 1003.1)
Dernire version 1997.
1003.5a Mise jour Ada (Ada Update) Abandonn en 1996.
1003.5b Ada temps rel (Ada Realtime) Dernire version 1996.
1003.13 Profils temps rel (Realtime Application
Environment Profile)
Dernire version 1998.
1003.25 Tolrance aux fautes (Fault Tolerance) Nouveau nom de 1003.1h.
En dveloppement depuis 1999.
2003.1 Mthodes de test pour mesurer
la conformit 1003.1
(Test Methods for 1003.1)
Dernire version 2000.
2003.1b Mthodes de test pour mesurer
la conformit 1003.1b
(Test Methods for 1003.1b)
Dernire version 2001.
5.3 Principales normes temps rel
211


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
Beaucoup de systmes dexploitation, dexcutifs temps rel et de noyaux temps rel
se disent conformes POSIX. Il est donc important de savoir quel ensemble de
parties et damendements le distributeur se rfre, ainsi que lanne prise en compte.
Lanne est trs importante puisque les amendements 1003.1b et 1003.1c sont direc-
tement inclus dans la norme 1003.1 depuis 2001, alors quils ne ltaient pas avant.
Typiquement, un systme dexploitation de type Unix/Linux est compatible toute
ou partie de la norme POSIX.1 (i.e. 1003.1). La socit/organisme distribuant ce
systme informe donc gnralement les utilisateurs potentiels des tests de conformit
POSIX effectus (par exemple un test de type 2003.1, pratiqu par un organisme
comme lOpen Group).
m POSIX et le temps rel
Ce qui intresse gnralement le concepteur dune application de contrle-commande,
ventuellement temps rel, est la conformit aux normes POSIX dites temps rel,
cest--dire la conformit aux normes 1003.1b, 1c, 1d (avant 1994 numrotes respec-
tivement 1003.4, 4a et 4b), 1i, 1j (avant 1994 1003.4d) et 1003.13. Depuis 1994,
la renumrotation de la norme POSIX a vu la suppression des parties 1003.4, dites
temps rel, intgres pour la plupart comme amendements de 1003.1, les fonc-
tionnalits multitches, et la gestion du temps devant alors passer fonctionnalits
quasi standard des systmes de type Unix.
Il convient dtre particulirement attentif aux tests de conformit appliqus aux
systmes dits conformes POSIX 1003.xy, car il arrive parfois que seules les interfaces
compatibles POSIX soient implmentes, mais que les fonctions associes soient
vides (non implmentes).
Malgr le but de POSIX, qui est duniformiser les interfaces de programmation sur
systme de type Unix, le concepteur dune application temps rel peut donc se heurter
aux problmes de fonctions POSIX non implmentes, notamment spciques au
temps rel. Ainsi, il nest pas certain que tel ou tel programme implment en pur
POSIX soit portable tel quel sur tout systme conforme POSIX .
Ces problmes sont heureusement cantonns des portions de plus en plus congrues,
et on peut esprer quau l des mois ou des annes, les systmes Unix et Linux seront
de plus en plus conformes POSIX, notamment tous les amendements de la
partie 1003.1.
Les paragraphes suivants donnent quelques lments sur les normes POSIX orientes
temps rel. Le rle de ces paragraphes est de fournir au lecteur les points dentre
ncessaire une utilisation des fonctionnalits POSIX.
M POSIX 1003.1b et 1003.1i : programmation temps rel
Lamendement POSIX 1003.1b (1993) corrige par le 1003.1i en 1995, propose
notamment les outils suivants :
IPC (Interprocess Communication) regroupant communication par bote aux lettres,
smaphores, et tableau noir permettant des processus de communiquer et se
synchroniser ;
signaux temps rel ;
chiers temps rel ;
212
5.3 Principales normes temps rel 5 Excutifs temps rel
ordonnancement ;
horloges haute prcision ;
mmoire non virtuelle.
Communication et synchronisation de processus
Trois outils sont dnis pour permettre aux processus de communiquer et se synchro-
niser : les botes aux lettres nommes message queues, les smaphores, et les tableaux
noirs (nomms shared memory) : ce sont les IPC.
Un IPC pouvant tre utilis par plusieurs processus (rappelons que la mmoire des
processus est prive), il est cr par le systme dexploitation et caractris par un nom
sous forme de chane de caractres. Lorsquun processus demande crer un IPC
partag, il lui donne un nom : si le nom nest pas dj utilis par un IPC du mme
type, le systme dexploitation cre alors lobjet, et le processus rcupre un identiant
dIPC lui servant utiliser cet objet. Si le nom correspond un IPC du mme type
(bote aux lettres, tableau noir, smaphore) dj existant, alors le systme lui renvoie
lidentiant de lIPC dj existant.
Botes aux lettres nommes
La manipulation dune bote aux lettres nomme se fait laide de fonctions dont
le nom est prx par mq_ pour message queue. Ainsi, la fonction mq_open cre
une nouvelle bote ou bien ouvre une bote aux lettres existantes.
La diffrence entre crer et ouvrir rside dans lexistence ou non du nom de la bote
aux lettres. En effet, lorsque deux processus doivent communiquer travers une
bote aux lettres nomme par exemple ma_bal , on ne sait gnralement pas lequel
des deux processus excutera le premier linstruction mq_open, cest donc le premier
mq_open qui crera la bote, celle-ci tant inexistante, le second ouvrira la bote
ma_bal sans la crer, celle-ci existant dj.
Une message queue est une bote aux lettres borne sans crasement, avec possibilit
daffecter une priorit aux messages.
Lors de la cration, on dnit les attributs de la bote aux lettres comme le nombre
maximal de messages et la taille de chaque message.
Les envois et attentes de messages sont effectus avec les fonctions mq_send
et mq_receive. Notons que lamendement 1003.1j ajoute la possibilit de borner
lattente lors des envois ou rceptions de messages (dans ce cas, si le dlai ou bien
la date maximale est dpass, la fonction retourne une erreur).
Notons quil existe une interface alternative, nomme XSI (X/Open System Interface),
manipulant les mmes botes aux lettres, dans laquelle les fonctions sont nommes
msgrcv, msgsnd
Smaphores
Les smaphores sont bass sur le mme principe que les message queues : ouverture ou
cration dun smaphore avec sem_open. Un smaphore nomm (nom gnralement
donn aux smaphores POSIX.1b) est un smaphore compte. On peut prendre un
smaphore avec la fonction sem_wait et le librer avec la fonction sem_post. Notons
que comme dans le cas des botes aux lettres, lamendement 1003.1j ajoute la pos-
sibilit de faire des attentes bornes une dure ou une date.
5.3 Principales normes temps rel
213


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
De mme, une interface XSI alternative existe. Linterface XSI augmente les possibi-
lits des smaphores POSIX en permettant de manipuler des tableaux de smaphores.
Cet outil est intressant puisquil vite les risques dinterblocage : lorsquun processus
doit prendre plusieurs smaphores, sil utilise les primitives de prise de tableau de
smaphores, le cycle menant linterblocage est impossible, car les smaphores
sont pris dans un ordre dtermin (voir chapitre 4).
Notons quaucun mcanisme de gestion de ressource (protocole priorit hrite
ou plafond) nest disponible pour les smaphores nomms.
Tableaux noirs
La mmoire des processus tant protge, le mcanisme de tableau noir nest possible
quen utilisant des zones mmoire spciquement partages. Celles-ci portent le nom
de shared memory, et sont cres ou ouvertes par la fonction shm_open. Aprs
avoir ouvert/cr une zone de mmoire partage, on peut la calquer sur une variable
du processus avec la fonction mmap : tout accs la variable est alors un accs la
zone de mmoire partage, et non pas laccs une variable interne au processus.
Ce mcanisme, de mme que le mcanisme de tableau noir se couple gnralement
un smaphore an de garantir lexclusion mutuelle des accs.
Comme pour les autres IPC, les tableaux noirs peuvent tre accds partir dune
interface XSI.
Signaux temps rel
Les signaux temps rel sont des signaux asynchrones avec donnes caractriss par
un numro, situ entre deux constantes dpendantes de larchitecture : SIGRTMIN
et SIGRTMAX. Un tel signal peut arriver un processus suite lappel de la fonction
kill (envoi de signal, comme son nom ne lindique pas), ou raise (envoi de signal
soi-mme) ou bien la n dune horloge (dlai programm, ou date programme),
ou bien encore vnement envoy la suite dune interruption matrielle
La spcicit des signaux temps rel par rapport aux signaux non temps rel est quun
signal mis est forcment reu (grce un mcanisme de les de signaux), quils
supportent la notion de priorit, et quils fonctionnent sur un mode hirarchis :
le traitement dun signal asynchrone peut tre interrompu par le traitement dun
signal plus prioritaire (sauf si le signal est explicitement masqu). De plus, il est
possible dassocier une valeur un signal temps rel.
Un processus peut masquer ou dmasquer chaque signal temps rel. Typiquement,
un processus utilisant les signaux temps rel commence par masquer lensemble des
signaux (fonction sigemptyset), puis dnir une action pour chacun des signaux
quil souhaite traiter (fonction sigaction). Le traitement a lieu soit par lappel dune
fonction excute dans le contexte initial du processus (premption du traitement en
cours), soit par la cration dune tche qui excutera une fonction dans son contexte
propre.
Il est possible dattendre explicitement un ou plusieurs signaux (fonction sigwait).
Notons que certaines fonctions bas niveau masquent les signaux pendant leur excu-
tion (comme la plupart des fonctions manipulant les IPC, les fonctions manipulant
les signaux elles-mmes, etc.). Si plusieurs signaux arrivent et ne peuvent tre traits,
214
5.3 Principales normes temps rel 5 Excutifs temps rel
ils sont, si possible, placs dans des les dattente. Lorsque le processus est prt
traiter un signal, il commence par traiter les signaux de plus petit numro.
Fichiers temps rel
Les chiers temps rel asynchrones utilisent des tampons de donnes crire (ou lire)
en mmoire vive, et se chargent de piloter la mmoire de masse de sorte ne pas
ralentir les processus souhaitant utiliser des chiers. Une opration de lecture ou
dcriture est donc initie par un processus, mais celui-ci na pas attendre que lop-
ration soit effectue pour continuer son excution. Le processus peut tre prvenu
par signal la n de lopration. Les oprations en attente sont traites en respectant
la priorit attribue lopration.
Ordonnancement
POSIX offre deux niveaux de programmation concurrente : processus et tches
(threads). Lordonnancement peut donc se faire deux niveaux : local (gure 5.28)
et global (gure 5.29), avec une possibilit de mixer les deux niveaux (gure 5.30).
Dans le cas dun ordonnancement local, le modle dordonnancement utilis est
hirarchique : les processus sont en concurrence pour le processeur (tout se passe
comme sil y avait une le dattente par niveau de priorit). lintrieur dun pro-
cessus multitche, les tches sont aussi gres par priorit, et le temps allou au
processus est rparti aux tches le composant. Ainsi, sur la gure 5.28, toutes les
tches sont ordonnances lintrieur de leur processus.
Processus
i
Ordonnanceur
Processus
i
Processus
j
Processus
k
Tche
j,r
Tche
j,n
Tche
j,p
Tche
l,q
Figure 5.28 Ordonnancement POSIX local.
5.3 Principales normes temps rel
215


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
Le problme du modle local est que lorsquune tche fait une action bloquante,
par exemple une entre/sortie, le processus entier est bloqu. De plus, les diffrentes
tches dun processus ne peuvent tre ordonnances simultanment si plusieurs
processeurs sont disposition.
Dans un ordonnancement global (gure 5.29), chaque lment, quil soit tche
ou processus, est ordonnanc au mme niveau. Linconvnient est quil est ncessaire
deffectuer un appel systme, plus lourd quun appel de fonction interne au pro-
cessus, an de modier un paramtre inuenant lordonnancement. Cependant,
les tches dun mme processus ne se bloquent pas lorsque lune des tches du proces-
sus fait une entre/sortie bloquante, et elles peuvent tre excutes simultanment
sur plusieurs processeurs.
Dans un ordonnancement mixte, on peut choisir pour chaque tche si elle doit
tre ordonnance localement ( lintrieur de son processus pre) ou globalement.
Ainsi, sur la gure 5.30, la tche Tche
l,q
est ordonnance au niveau local, alors que
les autres tches sont ordonnances au niveau global. Avec un choix judicieux des
tches locales et globales, les avantages des deux approches peuvent tre cumuls.
POSIX impose au minimum 32 niveaux de priorit, et propose quatre politiques
dordonnancement :
SCHED_FIFO : la tche prte ou le processus prt ayant la plus forte priorit
au niveau global se voit attribuer le processeur. En cas dgalit, SCHED_FIFO
excute les tches ou processus dans leur ordre darrive dans la le des tches
prtes.
Ordonnanceur
Processus
j
Processus
i
Processus
i
Processus
k
Tche
j,n
Tche
l,q
Tche
j,r
Tche
j,p
Figure 5.29 Ordonnancement POSIX global.
216
5.3 Principales normes temps rel 5 Excutifs temps rel
SCHED_RR : fonctionne comme SCHED_FIFO en se basant sur les priorits.
En cas dgalit, SCHED_RR (RR signie Round Robin ou tourniquet) se base sur
un quantum de temps, et applique lalgorithme du tourniquet (voir chapitre 4).
SCHED_OTHER : dni par limplmentation.
SCHED_SPORADIC : dnie en 1998 dans POSIX.13, cette politique dordon-
nancement se base sur la technique du serveur sporadique (voir chapitre 8). Le
principe consiste allouer priodiquement une certaine quantit de temps pro-
cesseur des tches. La quantit de temps sappelle la capacit du serveur. Au fur
et mesure quune tche utilisant un serveur sporadique sexcute, la capacit
du serveur diminue. Si la capacit tombe 0, la priorit de la tche tombe une
priorit faible. La politique de base est la politique SCHED_FIFO.
Notons quen cas dordonnancement local ou hirarchique, la politique dordon-
nancement choisie au niveau global, peut tre diffrente de la politique dordon-
nancement choisie au niveau local.
Horloges
Deux amliorations sont apportes aux horloges temps rel par rapport aux horloges
classiques : la rsolution dhorloge et la gestion du temps absolu (an dviter la
drive des horloges, notamment pour les tches priodiques).
Toutes les oprations proposes peuvent utiliser une horloge, appele CLOCK_
REALTIME. Normalement, cette horloge reprsente le temps coul depuis le
1
er
janvier 1970 00 h 00. Cette horloge a une rsolution au pire de 20 ms, mais,
Processus
j
Processus
i
Processus
i
Processus
k
Tche
j,n
Tche
j,r
Tche
l,q
Ordonnanceur
Tche
j,p
Figure 5.30 Ordonnancement POSIX mixte.
5.3 Principales normes temps rel
217


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
en fonction de larchitecture matrielle sous-jacente, on peut attendre une rsolution
de lordre de la microseconde. An de prvoir une granularit temporelle trs ne au
niveau des horloges, la structure reprsentant une date ou une dure a une rsolution
dune nanoseconde. Cependant, lorsque lon utilise une dure ou bien une date,
les fonctions de gestion de temps arrondissent la granularit de lhorloge.
Comme il est possible de modier lhorloge CLOCK_REALTIME, une seconde
horloge a t introduite dans la norme (attention cette horloge est optionnelle dans
les implmentations). Cette horloge, nomme CLOCK_MONOTONIC, a comme
son nom lindique, une proprit de monotonie : elle est modie par lhorloge phy-
sique, mais ne peut pas, normalement, tre modie par programme.
Deux autres horloges peuvent optionnellement exister : CLOCK_CPU_TIME,
donnant le temps processeur consacr un processus, et CLOCK_THREAD_CPU-
TIME_ID donnant le temps processeur consacr une tche. Ces deux horloges,
mises 0 au moment du lancement dun processus ou dune tche, sont gnralement
utilises pour calculer la dure dexcution des tches ou processus.
Les horloges CLOCK_REALTIME et CLOCK_MONOTONIC fonctionnent sur
deux modes :
le mode one shot consiste associer une horloge soit une dure, soit une date
absolue (la dure ou date est arrondie la rsolution de lhorloge) an de crer
un timer. Lorsque le timer expire, cest--dire lorsque lhorloge atteint la dure
dsire ou bien atteint la date absolue dsire, une action, typiquement lenvoi
dun signal, a lieu. Le mode one shot est utilis pour attendre exceptionnellement
un certain temps ou une certaine dure, ou programmer un chien de garde (watch-
dog timer) associ une opration potentiellement longue ou bloquante, etc. ;
le mode priodique : le mode priodique consiste crer un timer priodique :
on associe une horloge une date de premire expiration (ou bien une dure
jusqu la premire expiration) du timer, et une priode dexpiration. Tout se passe
comme si on avait un timer one shot qui expire de manire strictement priodique
partir de sa premire expiration. Ce mode est extrmement intressant dans le
cas de tches priodiques.
Lorsque les deux horloges (temps rel et monotone) sont disponibles, il est conseill
dutiliser lhorloge temps rel pour donner une date absolue un timer, et lhorloge
monotone pour donne un dlai.
Les principales fonctions associes aux horloges sont donnes dans le tableau 5.2.
POSIX est un systme dirig par les vnements (voir 5.2.4).
Gestion de la mmoire
An dviter les indterminismes lis lutilisation de la mmoire virtuelle, la norme
POSIX.1b dnit le concept de mmoire bloque. Il est possible, laide des fonc-
tions mlock et mlockall de forcer toute ou partie de la mmoire dun processus
rsider en mmoire centrale. La mmoire bloque ne peut pas faire lobjet de swap
(voir 4.2.3, p. 157).
De mme, un chier peut tre plac en mmoire centrale avec la fonction mmap,
ce qui permet des temps daccs presque dterministes.
218
5.3 Principales normes temps rel 5 Excutifs temps rel
M POSIX 1003.1c et 1003.1j : tches POSIX
Lamendement POSIX.1c dnit le concept de tches ou pthread. Plus lgres
manipuler que les processus eux-mmes, des tches POSIX appartenant un processus
partagent le mme espace mmoire global (elles ont le mme tas), et se distinguent
notamment par une pile diffrente, ainsi que des attributs particuliers (priorit,
type dordonnancement, signaux).
Lordonnancement des tches peut seffectuer au niveau interne au processus (local),
au niveau noyau (global), ou bien de faon mixte (voir 5.3.1, p. 214).
Tches POSIX
Une tche est cre par la fonction pthread_create. Ses arguments principaux sont
des attributs de tches, un pointeur de fonction (cette fonction est le code de la tche)
et un pointeur pouvant contenir le ou les arguments passer la fonction.
Les attributs dune tche ne sont pas portables et ne sont pas dnis par la norme
POSIX, ils peuvent dnir notamment :
le type dordonnancement appliquer la tche (local ou global) ;
la taille de la pile sur les architectures matrielles qui le ncessitent ;
une priorit ou bien la dnition dun serveur sporadique associ la tche
(voir 5.3.1, p. 214) ;
ltat dtach ou attach de la tche. En effet, on peut excuter une tche de faon
synchrone (join), dans ce cas, le crateur de la tche attend la terminaison de celle-ci
avant de poursuivre sont excution. Ou bien les tches peuvent tre dtaches
(detach state), ce qui les rend indpendantes de leur crateur. Typiquement, si les
tches sont cres par la procdure principale dun processus, et que lon veut viter
Tableau 5.2 Principales fonctions POSIX de gestion dhorloges.
clock_getres Renvoie la rsolution dune horloge, soit lcart sparant deux ticks. La
rsolution est dfinie en fonction de larchitecture sous-jacente et ne
peut normalement pas tre modifie par programme. Elle donne la
prcision maximale des dates ou dures utilises par les timers.
timer_create Cre un timer dans un processus, tel quil envoie un signal asynchrone
expiration(s).
timer_settime Dclenche un timer soit en mode one shot, soit en mode priodique,
avec des dlais ou des dates absolues. Le signal choisi lors de la cration
est envoy au processus expiration(s) du timer.
nanosleep Endort le processus (ou la tche) appelant pendant une certaine dure
ou jusqu une date absolue (utilise lhorloge CLOCK_REALTIME).
clock_nanosleep Identique nanosleep sauf que lhorloge utilise peut tre diffrente
de CLOCK_REALTIME.
5.3 Principales normes temps rel
219


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
la terminaison prmature du processus avant la terminaison des tches, on pourra
attacher les tches cres la procdure principale du processus.
Aprs sa cration, il est possible de modier les attributs dune tche, et par exemple
de lattacher son crateur. Pour cela, il est ncessaire de connatre lidenticateur
dune tche, renvoy lors de la cration. Une tche peut connatre son propre identi-
ant grce la fonction pthread_self.
Synchronisation et communication de tches
POSIX dnit pour les tches des outils de communication et de synchronisation
plus lgers, plus rapides, et plus puissants que les IPC. Les plus intressants sont les
mutex, les smaphores en lecture/criture, et les variables conditionnelles.
Tous les outils de synchronisation sont dnis laide dattributs, comme le sont les
tches. Lutilisation dattributs, modiables par cls, rend POSIX utilisable sur des
architectures varies, au dtriment de la portabilit du code : certains attributs peuvent
exister sur une plateforme, mais pas sur une autre.
Un attribut spcique, nomm pshared, permet de rendre un outil de synchronisation
visible lintrieur dun processus uniquement, ou bien tous les processus.
Enn, notons la possibilit deffectuer des attentes bornes sur les instructions blo-
quantes des objets de synchronisation et de communication (soit en dure, soit
jusqu une certaine date).
Smaphores binaires
Les smaphores binaires (ou mutex) sont ddis lexclusion mutuelle. Les attributs
dun mutex permettent de choisir le protocole de gestion de ressource associ au mutex
(priorit plafond immdiat ou bien priorit hrite).
On peut noter lexistence de fonctions permettant deffectuer une attente borne
(soit en dure, soit jusqu une date dtermine) sur un smaphore.
Les tches en attente dun smaphore sont classes en les FIFO priorits.
Smaphores en lecture/criture
POSIX.1c propose les smaphores en lecture/criture (rwlocks) : ce sont des sma-
phores binaires que lon peut utiliser en lecture ou en criture. La fonction pthread_
rwlock_rdlock permet de requrir le smaphore en lecture, alors que pthread_rwlock_
wrlock requiert le smaphore en criture.
Aucun protocole de gestion de ressources nest dni sur les smaphores en lecture/
criture.
Variables conditionnelles
Comme nous lavons vu au paragraphe 5.2.2, p. 189, les variables conditionnelles
reprsentent un outil puissant, permettant de crer des moniteurs. POSIX.1c pro-
pose cet outil, nomm pthread_cond. Aprs sa cration (pthread_cond_init), une
variable conditionnelle peut servir, conjointement avec un mutex, synchroniser des
tches.
Il faut cependant tre attentif au fait que si plusieurs tches sont susceptibles dtre
bloques simultanment sur la mme variable conditionnelle, un appel lquivalent
de signal (pthread_cond_signal) ne rveille quune seule tche bloque sur la variable
220
5.3 Principales normes temps rel 5 Excutifs temps rel
conditionnelle. Dans le cas o plusieurs sont susceptibles dtre bloques sur une
variable conditionnelle, on peut tre amen utiliser la fonction (pthread_cond_broad-
cast) qui rveille toutes les tches bloques sur une variable conditionnelle.
Il est noter quil est possible deffectuer une attente borne sur une variable condi-
tionnelle. Lattente borne sur une variable conditionnelle ntant jamais signale
est une technique utilise pour rendre une tche priodique, comme nous le verrons
au chapitre 6.
Rendez-vous
Lamendement 1003.1j introduit les rendez-vous synchroniss (voir 5.2.2, p. 204)
sous le nom de pthread_barrier. Aprs cration dun rendez-vous synchronis
(pthread_barrier_init) pour un certain nombre de tches, des tches peuvent
sattendre mutuellement sur une instruction pthread_barrier_wait. Lorsque le
nombre de tches requises est arriv au rendez-vous, celles-ci sont rveilles et peu-
vent poursuivre leur excution.
Notons quune attente de rendez-vous ne peut pas tre borne dans le temps.
SpinLocks
Lamendement 1003.1j introduit les spinlocks, aussi appels Test and Set Lock. Cet
outil de synchronisation, antrieur au smaphore, fonctionne de la faon suivante :
un verrou est dni par un entier valant 0 lorsquil est ouvert, et 1 lorsquil est ferm.
Verrouiller un spinlock (instruction pthread_spin_init) consiste, de faon atomique,
lire la valeur actuelle du verrou et mettre celui-ci 1. Aprs avoir verrouill un
spinlock, on peut donc tre sr que le verrou est mis. On peut donc alors observer
la valeur lue avant la fermeture du verrou : si elle valait 0, le verrou tait ouvert, et
la tche est responsable de sa fermeture. Dans le cas contraire, si le verrou tait dj
ferm (valeur 1), alors une autre tche avait dj mis le verrou.
Lutilisation de spinlocks est trs risque, car lutilisation de la fonction pthread_spin_
lock effectue une attente active sur le verrou (boucle testant le verrou jusqu ce quil
soit disponible). Ce mcanisme est cependant extrmement rapide et peut tre utilis
notamment dans le cas multiprocesseur.
M POSIX 1003.13 : profils temps rel
Nous avons vu lors de la description sommaire des extensions temps rel POSIX,
ainsi que dans le tableau de lannexe B, que la norme POSIX tait trs vaste, et
englobait une partie non ngligeable de ce qui dnit un systme dexploitation
complet.
Un excutif temps rel se doit dtre compact et davoir une petite empreinte mmoire
(occupation mmoire) an dtre embarqu sur une architecture de type petit micro-
processeur ou microcontrleur. De plus, ce type darchitecture matrielle ne fournit
que rarement tous les services fournis par un systme dexploitation (gestion mat-
rielle du changement de contexte, mmoire virtuelle, systmes de chiers).
POSIX.13 dnit donc des prols (voir tableau 5.3), restreignant les lments uti-
liss. Ces prols sont prxs par PSE (prol denvironnement gnrique), puis 5
(numro des prols temps rel), et sont au nombre de quatre : PSE 51, PSE 52,
PSE 53 et PSE 54.
5.3 Principales normes temps rel
221


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
Le prol PSE 51 est utilis pour un systme embarqu minimaliste, typiquement
un systme embarqu de contrle-commande. Un tel prol a une empreinte mmoire
de quelques kilo-octets.
Le prol PSE 52, proposant un systme de chiers en plus du prol PSE 51, nest
pas (ou trs peu) implment. Il serait utile dans le cas dun systme de contrle-
commande enregistrant des donnes sur un disque embarqu.
Le prol PSE 53 est typiquement utilis la place du prol PSE 51 sur un systme
embarqu multiprocesseur sur lequel on ne souhaite pas rpliquer de noyau sur
chaque processeur.
Le prol PSE 54 englobe les autres prols, mais a une empreinte mmoire beaucoup
plus importante. Il est typiquement utilis sur une architecture de type PC ou autre
micro-ordinateur.
5.3.2 La norme OSEK/VDX
m Introduction
La norme OSEK/VDX est ne en 1995 de la fusion dun consortium de construc-
teurs dautomobiles allemands (OSEK est lacronyme de Offene Systeme und deren
Schnittstellen fr die Elektronik im Kraftfahrzeug) et dun consortium de constructeurs
dautomobiles franais (VDX est lacronyme de Vehicle Distributed eXecutive).
Tableau 5.3 Profils temps rel dfinis dans POSIX 1003.13.
PSE 51 Profil de systme
temps rel minimaliste
(Minimal Realtime
System Profile)
Dfinit un systme multitche un seul processus, sans sys-
tme de fichiers (les seuls fichiers utiliss sont les fichiers sp-
ciaux, moyens daccder aux interfaces dentres/sorties).
Ncessite un processeur (ou microcontrleur) et de la mmoire.
Ne ncessite pas de support matriel pour la pagination
(MMU), ni de priphriques standard (console, clavier, pri-
phriques de stockage).
PSE 52 Profil de systme
de contrle temps rel
(Realtime Controller
System Profile)
Extension du profil PSE 51 avec prise en compte dun systme
de fichiers supportant un accs asynchrone. Ne ncessite pas
de MMU.
PSE 53 Profil de systme
temps rel ddi
(Dedicated Realtime
System Profile)
Extension multiprocessus de PSE 51, avec un systme de fichier
simpliste (pas de hirarchie comme les rpertoires).
PSE 54 Profil de systme
temps rel gnraliste
(Multi-Purpose Realtime
System Profile)
Multiprocessus, avec systme de fichiers. Autorise les inter-
actions avec un utilisateur. Implmente POSIX.1, 1b, 1c et ou
5b, 2 et 2a. PSE 54 dfinit un systme dexploitation minimal,
avec priphriques dentres/sorties, priphriques de stoc-
kage, pagination de la mmoire, support rseau Supporte
la prsence de tches temps rel et non temps rel.
222
5.3 Principales normes temps rel 5 Excutifs temps rel
Le but de la norme OSEK/VDX est de dnir un excutif adapt au contrle
embarqu dans les systmes automobiles, composs de plusieurs units de contrle
distribues sur un ou plusieurs rseaux de terrain. La normalisation a pour effet de
diminuer les cots dintgration de composants entre les constructeurs automobiles
et les instrumentiers.
Bien quinitialement conue pour le domaine automobile, cette norme est trs bien
adapte dautres domaines, comme les applications de contrle-commande. Moins
utilise que POSIX dans le cas gnral, elle a lavantage dtre plus facile daccs,
de par sa spcialisation.
Ce paragraphe prsente sommairement ltat de cette norme dans sa seconde version,
labore en 1997, ainsi que la norme portant sur les communications qui en est
sa troisime version.
La norme OSEK/VDX dnit un ensemble dobjets pour lesquels un excutif
OSEK/VDX doit ou peut dnir un ensemble de services. Les objets sont :
les tches ;
les interruptions ;
les synchronisations ;
les timers ;
les messages ;
les erreurs.
La plupart des objets sont dnis de faon statique llaboration de lexcutif et de
lapplication. En effet, le type de cible typique est un microcontrleur, dont les per-
formances en vitesse de traitement et mmoire sont nettement infrieures celles dun
microprocesseur. De plus, la ligne directrice de la norme est de favoriser le dter-
minisme et la stabilit. Il ne faut donc pas sattendre trouver les mmes fonction-
nalits que dans POSIX : bien que la plupart des objets OSEK/VDX puissent tre
congurs en ligne, ceux-ci ne peuvent pas tre dtruits ou crs dynamiquement.
La mise en place dun programme tournant sur OSEK/VDX utilise donc non seule-
ment lexcutif et le code source utilisateur (en C), mais aussi une description statique
du systme, donne sous la forme de sources OIL (OSEK Implementation Language).
Les sources OIL associes un systme fournissent llaboration du programme
les renseignements sur les objets susceptibles dexister sur le systme.
La gure 5.31 reprsente le mode de dveloppement typique dun systme sexcu-
tant sur OSEK/VDX.
Ce choix, bien que moins exible que POSIX, prsente des avantages indniables,
notamment en ce qui concerne les techniques de validation, notamment temporelles,
pouvant tre employes.
m Les objets OSEK/VDX
M Les tches
An de permettre un traitement optimis des tches simples par le noyau, OSEK/
VDX distingue deux types de tches : les tches basiques, et les tches tendues.
5.3 Principales normes temps rel
223


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
Les tches basiques ne peuvent pas se bloquer (attente dvnement, message, res-
source) entre deux activations successives. Elles ne possdent donc pas dtat
bloque (gure 5.32). De plus, une tche est cre de faon statique, il ny a donc
pas dtat inexistante contrairement la gure 5.2. Linitialisation, quant elle, est
effectue automatiquement au dmarrage de lexcutif. Notons quune tche ne se
termine jamais (i.e. son contexte, la mmoire utilise, etc. ne sont jamais librs) et
que le mot terminer signie se mettre en attente dactivation dans la terminologie
OSEK/VDX. Ici, le terme endormie correspond suspendue.
Les tches tendues peuvent se bloquer durant leur excution (gure 5.33). Typique-
ment, une tche se bloque en attendant une synchronisation ou une ressource.
Comme dans la norme POSIX, une tche est dnie par une fonction. Cependant,
contrairement celle-ci, une tche nest pas cre dynamiquement, mais est dnie
statiquement dans le chier OIL, ainsi que tous les objets de synchronisation et de
communication.
Une tche basique ne peut donc pas se bloquer pendant son excution, ce modle
peut donc typiquement implmenter une tche priodique (endormie ente chaque
activation) ou encore une tche en attente de message, de synchronisation, ou dinter-
ruption chacune de ses occurrences. Cependant, il faut noter que dans ce cas,
une telle tche ne peut pas accder une ressource critique, puisque le mcanisme
dexclusion est potentiellement bloquant.
Excutable
pour la cible
diteur de liens
crois
pour microcontrleur
cible
Compilateur
Gnrateur
Fichiers
de configuration
(langage OIL)
Source C ou binaire
des pilotes
Fichiers
de configuration
traduits en C
Fichiers source
utilisateur
(langage C)
Source C ou binaire
de lexcutif
Figure 5.31 Mode de dveloppement typique dun systme sexcutant sur OSEK/VDX.
224
5.3 Principales normes temps rel 5 Excutifs temps rel
Dans le cas o une tche peut attendre un message, une interruption, synchronisation
ou encore accder une ressource pendant son excution, il conviendra dutiliser
une tche tendue.
De faon gnrale, laccent est mis sur la prdictibilit du systme, par consquent,
plusieurs restrictions sont appliques. La terminaison dune tche ne peut provenir
que de son propre appel TerminateTask.
Lexcutif propose un certain nombre de services pour grer les activations de tches :
ActivateTask permet dactiver une tche endormie ;
ChainTask permet une tche de se terminer en activant une autre tche.
terminer
activer
lection premption
Endormie
Excute
Prte
Figure 5.32 tats possibles dune tche basique.
Endormie
lection
premption
activer relcher
Bloque
Excute
Prte
terminer attendre
Figure 5.33 tats possibles dune tche tendue.
5.3 Principales normes temps rel
225


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
M Synchronisation et communication de tches
OSEK/VDX met laccent sur les concepts du multitche (exclusion mutuelle, com-
munication par message, attente dinterruption) plus que sur les outils contrairement
POSIX. Il en rsulte que les outils fournis correspondent des concepts, et il
sensuit une relative simplicit de comprhension.
Exclusion mutuelle
Lexclusion mutuelle est assure par la dnition de ressources (de faon statique dans
le langage OIL), qui correspondent des smaphores binaires dexclusion mutuelle,
grs avec le protocole priorit plafond immdiat, an dviter linversion de
priorit et de borner la dure de blocage dune tche en attente dune ressource.
OSEK/VDX fournit deux primitives, GetResource et ReleaseResource pour prendre
et vendre une ressource. Tenter de prendre une ressource non disponible a pour
effet de placer une tche dans ltat bloque.
Notons ici une spcicit dOSEK/VDX : il existe des ressources internes qui sont
prises implicitement par les tches lies cette ressource ds quelles sexcutent. Si
plusieurs tches sont lies la mme ressource interne, on parle alors dun groupe
de tches. Lorsquune tche du groupe sexcute, elle hrite automatiquement de
la priorit plafond de la ressource interne (daprs le protocole priorit plafond
immdiat), cest--dire de la plus haute priorit des tches du groupe. Il en rsulte
quune tche du groupe ne peut tre prempte que par une tche de priorit sup-
rieure la priorit de la tche la plus prioritaire du groupe. Une extension naturelle
de la notion de ressource interne est le mode non premptible des tches : si toutes
les tches sont lies une mme ressource interne, alors une tche prte ne peut pas
tre prempte par une autre tche, tant donn quelle hrite pendant son excution
de la priorit plafond de la ressource, cest--dire de la priorit la plus forte des tches.
Le langage OIL propose cependant un moyen plus simple de rendre des tches non
premptibles, en proposant tout simplement la premptibilit comme attribut de
tche au moment de sa dnition.
Synchronisation par vnements
Les vnements, dnis de faon statique dans le langage OIL, sont des synchroni-
sations binaires de type n /1 : chaque tche tendue est lie un certain nombre
dvnements, quelle seule peut attendre. Un vnement est dailleurs dni par le
nom de son propritaire et son nom propre, tant donn quune tche peut tre lie
plusieurs vnements.
OSEK/VDX propose une primitive de dclenchement (SetEvent ), une primitive
dattente dvnement (WaitEvent ) qui est distingue de leffacement de lvnement
(ClearEvent). Seule la tche propritaire dun vnement a le droit de lattendre et de
leffacer.
Communication par message
OSEK/VDX a t cr initialement pour le monde de lautomobile, dans lequel
les architectures de contrle-commande sont de type calculateurs relis par un rseau
de communication de type rseau de terrain (comme CAN ou VAN). Les commu-
226
5.3 Principales normes temps rel 5 Excutifs temps rel
nications entre les tches se calquent naturellement sur ce type darchitecture. Pour
le programmeur, le fait quune communication ait lieu entre deux tches du mme
calculateur ou bien entre deux tches situes sur des calculateurs distincts se doit
dtre le plus transparent possible, tout en utilisant au mieux les mediums de com-
munication.
Les communications par message sont de type communication n/m (n mettrices,
et m rceptrices possibles pour un message). Dans le cas dune communication de
type bote aux lettres, si un message a m rceptrices, chacune dentre elles est munie
dune le dattente de messages gre en FIFO, et consomme ses messages indpen-
damment des autres rceptrices (i.e. chaque message envoy est dpos dans chacune
des les dattente de rceptrices de ce message).
Le type de communication peut aussi tre de type tableau noir (i.e. la lecture est non
bloquante et non destructive, et le message lu est le message le plus rcemment crit).
Gnralement, la taille des messages est statique, mais il est possible, modulo quel-
ques restrictions, de dnir des messages de taille dynamique. Des messages vides
peuvent aussi tre transmis, dans ce cas, ils servent de synchronisation entre tches
pouvant se trouver sur des calculateurs distincts. Par consquent, lexcutif fournit
trois primitives denvoi de message : SendMessage (envoi dun message de taille xe),
SendDynamicMessage (envoi dun message de taille dynamique), et SendZeroMessage
(envoi dun message vide).
Un mme message peut tre simultanment transmis de faon interne et sur un
medium de communication, si par exemple une rceptrice se trouve sur le mme cal-
culateur que lmettrice, et quune autre rceptrice se trouve sur un autre calculateur.
An doptimiser lutilisation du medium, plusieurs messages envoys sur le medium
de communication peuvent tre regroups dans le mme paquet (typiquement, sa
taille est fonction du protocole de communication sous-jacent). Ce paquet, nomm
I-PDU (Interaction layer Processor Data Unit ), constitu dun ou plusieurs messages,
pourra alors tre mis physiquement destination dun ou plusieurs calculateurs
distants. Notons que le fait que la communication soit oriente messages facilite
lutilisation dun protocole de type CAN (voir 4.3.2, p. 177).
La gure 5.34, extraite de la norme OSEK/VDX, montre le schma simpli de
communication par message sur un calculateur muni de lexcutif OSEK/VDX.
Notons la prsence de ltrage possible lmission vers un calculateur distant (typi-
quement, un ltre pourra viter les envois de valeurs identiques dun mme message
sur le rseau).
De mme, il est possible deffectuer un ltrage la rception de message, de sorte
ne prendre en compte que les messages jugs intressants (par exemple, message
diffrent des prcdents).
Enn, il existe diffrentes notications permettant aux tches dtre averties, soit de
larrive dun message (ce qui est logique), soit du dpart dun I-PDU, ou encore
dune erreur, ou dune violation dchance.
OSEK/VDX permet de dnir des messages priodiques, qui seront automatique-
ment envoys chaque priode. Chaque message peut tre muni dune chance :
si le message nest pas reu dans le dlai imparti, une notication de violation
dchance est envoye.
5.3 Principales normes temps rel
227


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
M Gestion des interruptions
Deux types de traitement dinterruptions sont proposs : les ISR (Interrupt Service
Routine) de niveau 1, nutilisant pas de primitives de lexcutif (sauf le masquage/
dmasquage dinterruptions), censes tre trs rapides, et les ISR de niveau 2 nayant
pas de limitations.
Typiquement, il est impossible pour une ISR de niveau 1 de dclencher une tche sur
interruption.
Une hirarchie de traitement est implicite : les ISR de niveau 1 sont plus prioritaires
(voir 5.3.2, p. 228) que les tches et les ISR de niveau 2.
Comme tous les objets grs par OSEK/VDX, la dnition des ISR, et leur niveau,
est faite de faon statique dans le chier OIL.
Pendant le fonctionnement dune application, il est ais de dsarmer/armer toutes
les interruptions pouvant tre dsarmes (primitive DisableAllInterrupts et EnableAll-
Interrupts) : dans ce cas, ces interruptions sont tout simplement ignores. De mme,
on peut masquer/dmasquer toutes les interruptions (rappelons que le traitement
dune interruption masque est retard au dmasquage de linterruption) avec les pri-
mitives SuspendAllInterrupts et ResumeAllInterrupts. On peut aussi choisir de masquer/
dmasquer les interruptions lies des ISR de niveau 2. tant donne la hirarchie
inhrente aux deux niveaux dinterruptions, il est impossible de masquer seulement
les ISR de niveau 1.

5
I-PDU

transmettre
I-PDU
reu
Couches rseau
Communication interne
Communication externe
Indication de rception
Extraction de message(s)
ReceiveMessage
Couche dinteraction
Communication interne
Communication externe
Application
Requte de transmission
Notification
Message arriv
Erreur
Violation dchance
Envoi effectu
Filtrage Filtrage
Filtrage
Filtrage
SendMessage
Figure 5.34 Paradigme de communication par message OSEK/VDX.
228
5.3 Principales normes temps rel 5 Excutifs temps rel
M Horloges
linstar de POSIX, OSEK/VDX impose la prsence dau moins une horloge,
mais en fonction de larchitecture, plusieurs horloges peuvent tre disponibles.
Comme dans POSIX (voir 5.3.1, p. 216), il est possible de dnir des timers
priodiques, ou bien one-shot, et cela de faon relative ou absolue.
On peut lier une tche, un vnement, ou bien une fonction (considre presque
comme une ISR de niveau 1) un timer : chaque expiration dun timer, la tche lie
celui-ci est active, ou lvnement est dclench ou bien la fonction est excute.
Les timers sont dnis de faon statique dans le chier OIL.
Enn, notons quOSEK/VDX est un excutif dirig par les vnements (voir 5.2.4).
M Ordonnancement
Chaque tche est munie dune priorit, ne pouvant tre modie que temporaire-
ment lors dun hritage de priorit d au protocole priorit plafond immdiat.
De mme, chaque interruption se voit munie dune priorit (normalement, les inter-
ruptions sont plus prioritaires que les tches, et que lordonnanceur lui-mme).
Lordonnancement de base est de type SCHED_FIFO (voir 5.3.1, p. 214), cest-
-dire que les tches prtes sont places dans des les dattente FIFO gres par
priorit. Lune des spcicits OSEK/VDX est que lordonnancement peut tre
premptif, non premptif, ou mixte.
Si elle est premptible, la tche en excution peut tre prempte en vue de llection
dune autre tche lorsque :
une tche plus prioritaire est active (ActivateTask) ;
une tche plus prioritaire devient prte suite loccurrence dun vnement, la
libration dune ressource, larrive dun message, etc. ;
une tche devient plus prioritaire (suite la diminution de la priorit de la tche
excute due la n dun hritage de priorit) ;
sur une instruction excute par la tche en excution : libration explicite du
processeur grce la primitive Schedule (dans ce cas, la tche est mise la n de
la le FIFO de son niveau de priorit), libration dune ressource, appel dune
primitive bloquante, comme accs une ressource non disponible, attente dun
vnement non dclench, etc. ;
sur la n dune routine de traitement dinterruption.
Remarque
Lorsquune tche est prempte, elle reste en tte de la le dattente de son niveau de priorit.
Une tche non premptible ne peut tre prempte en vue de llection dune autre
tche qu sa propre initiative, cest--dire lappel dune primitive bloquante, ou
bien un appel explicite de Schedule.
Enn, nous avons abord le concept de groupes de tches au paragraphe 5.3.2,
p. 225, pour lesquels les tches dun groupe sont rendues non premptibles les
unes par rapport aux autres laide de lutilisation dune ressource interne.
5.3 Principales normes temps rel
229


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
La norme recommande explicitement de rendre les tches courtes (dont la dure
est de lordre de quelques dures de changement de contexte) non premptibles, et
les tches plus longues premptibles.
M Particularits dOSEK/VDX
Crochets
An de pouvoir modier le comportement standard du systme lors dvnement
particulier (erreurs, activation et terminaison de tche, lancement et terminaison
du systme), il est possible de dnir des crochets (hook). Un crochet est une
fonction excute avec une priorit plus haute que celle des tches, non interruptible
par les ISR de niveau 2.
Gestion des erreurs
Chaque primitive de lexcutif retourne un code derreur : un code diffrent de
E_OK correspond une erreur dapplication (tche non dnie, tche termine alors
quelle possde encore des ressources) ou bien une erreur critique (erreur mat-
rielle, de mmoire).
Contrairement un noyau C standard, il nest pas ncessaire de tester indpendam-
ment la valeur de chaque retour de fonction de lexcutif, puisquen cas derreur,
un crochet nomm ErrorHook est excut. Il est alors possible dans cette fonction
dobtenir toutes les informations concernant lerreur ayant eu lieu, et de prendre
les dispositions ncessaires.
Modes de fonctionnement
Beaucoup darchitectures, notamment les microcontrleurs, supportent diffrents
types dexcution : programme charg en RAM, en ROM, ou dans une mmoire
FLASH, etc. De plus, pendant la phase de dveloppement, le dbogage doit absolu-
ment tre actif, alors que lors de la mise en fonctionnement, il est rare de consacrer
de la mmoire an dautoriser le dbogage.
Par consquent, OSEK/VDX prvoit la dnition de diffrents modes de fonction-
nement dans les chiers OIL.
Prols
Comme POSIX qui dnit diffrents prols an de permettre la normalisation
dexcutifs implmentant un sous-ensemble des fonctionnalits prvues, OSEK/
VDX dnit 4 prols dnissant des sous-ensembles de la norme. Le nom donn
aux prols est Basic ou Extended Conformance Class.
Les deux classes de conformit basiques (BCC1 et BCC2) ne fournissent que des
tches basiques. Les excutifs BCC1 ne mmorisent pas les activations multiples
dune tche (si une tche est en cours de fonctionnement et quelle est active, cette
activation nest pas mmorise). Ils nautorisent quune seule tche active par niveau
de priorit, et ne proposent quune seule ressource interne : le processeur. Il nest
donc pas possible de mixer tches premptibles et non premptibles : les tches sont
soit toutes premptibles, soit toutes non premptibles.
230
5.4 Exemples dexcutifs temps rel 5 Excutifs temps rel
Les classes de conformit tendue permettent lutilisation des tches tendues. Il est
noter que les excutifs ECC1 ne mmorisent pas, linstar de BCC1, les activations
multiples de tches (alors que pour ECC2, les activations multiples de tches basiques
sont possibles). De plus, les excutifs ECC1 nautorisent quune seule tche active
par niveau de priorit.
Notons enn que la norme impose seulement 8 niveaux de priorits de tches dis-
tincts pour les excutifs BCC, et 16 pour les ECC.
De mme, 4 prols de communication sont dnis (Com Conformance Class). Les
prols CCCA et CCCB ne proposent que les communications internes. CCCA est
limit aux messages sans le dattente. Les prols CCC0 et CCC1 correspondent
CCCA et CCCB avec un support des communications externes.
5.3.3 La norme Ada
Le langage Ada lui-mme est une norme, supportant diffrentes implmentations,
le langage Ada est prsent au chapitre 6.
Les implmentations de la norme Ada reposent sur un excutif ou noyau, pouvant
tre lui-mme conforme POSIX ou encore OSEK.
5.4 Exemples dexcutifs temps rel
Il y a un nombre considrable dexcutifs temps rels sur le march, gratuits ou
commerciaux. Il est trs difcile dobtenir une valuation prcise du poids de chaque
excutif ou systme dexploitation temps rel sur le march. La gure 5.35 prsente
les rsultats dun sondage de 10 000 utilisateurs du site internet de lOpen Group.
0
2
4
6
8
10
12
14
16
Excutifs utiliss principalement Excutifs utiliss dans le futur Excutifs en valuation
V
x
W
o
r
k
s
p
S
O
S
P
r
o
p
i

t
a
i
r
e
Q
N
X
W
i
n
d
o
w
s

N
T
O
S
-
9
V
R
T
X
L
y
n
x
O
S
W
i
n
d
o
w
s

N
T
-
i
R
M
X
W
i
n
d
o
w
s

N
T
-
R
T
X
W
i
n
d
o
w
s

C
E
N
u
c
l
e
u
s
R
T
-
L
i
n
u
x
C
h
o
r
u
s
A
u
t
r
e

C
/
O
S
H
y
p
e
r
k
e
r
n
e
l
O
S
E
V
R
T
X
Figure 5.35 Utilisation des excutifs temps rel par les internautes
inscrits sur le site Open Group, sondage effectu en 2001.
5.4 Exemples dexcutifs temps rel
231


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
La plupart des excutifs utilisent un dveloppement crois, et fournissent un certain
nombre doutils de traage dapplication, dvaluation de performances et de dbo-
gage. La gure 5.36 prsente larchitecture logicielle typique utilise lors dun dvelop-
pement crois.
Il est assez difcile dvaluer un excutif temps rel, car les besoins des concepteurs
dapplications de contrle-commande peuvent tre radicalement diffrents. Il en
rsulte que certains noyaux ou excutifs (offrant des possibilits similaires celle
dOSEK/VDX, ou au prol 51 POSIX) ciblent principalement des microcontrleurs,
alors que les systmes dexploitation offrant une interface POSIX complte ou quasi
complte ciblent principalement les micro-ordinateurs.
Le tableau 5.4 prsente quelques critres prendre en compte.
5.4.1 VxWorks 5.x
VxWorks est lexcutif temps rel le plus rpandu sur le march. Certains lments
descriptifs ci-aprs peuvent tre absents sur certaines cibles.
Nom : VxWorks.
Type : micro noyau et tches de service, permettant un dveloppement incrmental
(possibilit de modier le code applicatif sans redmarrer la cible).
Socit : WindRiver.
Noyau : Wind.
Environnement de dveloppement : Tornado II.
Systmes htes : Win32 (Windows95/98/NT/2000/XP), Solaris, HP-UX, Linux.
Cibles : Familles x86, PowerPC, Coldre, m68k, Arm, StrongArm, MIPS,
SuperH Chaque cible dispose de plusieurs dizaines de BSP spciques.
Support multiprocesseur : oui avec lextension VxMP.
Gestion de
configurations
Compilateur
crois
Ordinateur ou carte de dveloppement
Outils de traage,
valuation
de performances
Dbogueur
diteur
de liens
diteur
Sources
ou binaire
noyau et excutif
Sources
utilisateur
Liaison (srie, parallle, TCP/IP)
Station de dveloppement (Hte)
Cible
Sources
et configuration
du BSP
Gestion
de projets
Agent
de dbogage
Communication avec la cible
Environnement de dveloppement intgr
Processeur ou microcontrleur cible
BSP
Noyau
Excutif
Application utilisateur
Figure 5.36 Architecture logicielle typique lors dun dveloppement crois.
232
5.4 Exemples dexcutifs temps rel 5 Excutifs temps rel
T
a
b
l
e
a
u

5
.
4


C
r
i
t

r
e
s

d

v
a
l
u
a
t
i
o
n

d

u
n

e
x

c
u
t
i
f

t
e
m
p
s

r

e
l
.
I
n
t
e
r
f
a
c
e
s

d
e

p
r
o
g
r
a
m
m
a
t
i
o
n

n
o
r
m
a
l
i
s

e
s
L
a

p
l
u
p
a
r
t

d
e
s

e
x

c
u
t
i
f
s

p
r
o
p
o
s
e
n
t

p
l
u
s
i
e
u
r
s

i
n
t
e
r
f
a
c
e
s

d
e

p
r
o
g
r
a
m
m
a
t
i
o
n
,

c
o
m
p
a
t
i
b
l
e
s

a
v
e
c

t
e
l
l
e

o
u

t
e
l
l
e

n
o
r
m
e
t
e
m
p
s

r

e
l
.

C
e
s

i
n
t
e
r
f
a
c
e
s

o
n
t
-
e
l
l
e
s


c
e
r
t
i
f
i

e
s

?
P
e
u
t
-
o
n

p
r
o
g
r
a
m
m
e
r

e
n

P
O
S
I
X
,

s
i

o
u
i
,

s
u
r

q
u
e
l

e
n
s
e
m
b
l
e

d
e

n
o
r
m
e
s
,

s
u
r

q
u
e
l

p
r
o
f
i
l

?

P
e
u
t
-
o
n

p
r
o
g
r
a
m
m
e
r

e
n
O
S
E
K
/
V
D
X
,

s
i

o
u
i
,

s
u
r

q
u
e
l

p
r
o
f
i
l

?

P
e
u
t
-
o
n

p
r
o
g
r
a
m
m
e
r

e
n

I
T
R
O
N

?

S
i

o
u
i
,

s
u
r

q
u
e
l

p
r
o
f
i
l

?
R
i
c
h
e
s
s
e

d
e
s

b
i
b
l
i
o
t
h

q
u
e
s

d
e

p
r
o
g
r
a
m
m
a
t
i
o
n
Y

a
-
t
-
i
l

u
n

s
u
p
p
o
r
t

d
e
s

c
a
l
c
u
l
s


v
i
r
g
u
l
e
s

f
l
o
t
t
a
n
t
e
s

?

E
s
t
-
i
l

l
o
g
i
c
i
e
l

o
u

m
a
t

r
i
e
l

?

Y

a
-
t
-
i
l

u
n
e

c
o
m
m
u
n
a
u
t


d
e
d

v
e
l
o
p
p
e
u
r
s

m
e
t
t
a
n
t

e
n

c
o
m
m
u
n

l
e
u
r

s
a
v
o
i
r
-
f
a
i
r
e

e
n

p
a
r
t
a
g
e
a
n
t

d
u

c
o
d
e

?
L
a
n
g
a
g
e
s

d
e

p
r
o
g
r
a
m
m
a
t
i
o
n

s
u
p
p
o
r
t

s
A
u

m
i
n
i
m
u
m
,

l

a
s
s
e
m
b
l
e
u
r

e
s
t

s
u
p
p
o
r
t

,

l
a

p
l
u
p
a
r
t

d
e
s

e
x

c
u
t
i
f
s

s
o
n
t

a
c
c
o
m
p
a
g
n

s

d
e

c
o
m
p
i
l
a
t
e
u
r
s

p
e
r
m
e
t
-
t
a
n
t

d
e

p
r
o
g
r
a
m
m
e
r

e
n

C
,

v
o
i
r
e

e
n

C
+
+

o
u

e
n
c
o
r
e

e
n

A
d
a
.
C
i
b
l
e
s

s
u
p
p
o
r
t

e
s
M
i
c
r
o
p
r
o
c
e
s
s
e
u
r
s

e
t

m
i
c
r
o
c
o
n
t
r

l
e
u
r
s

s
u
p
p
o
r
t

s
.
B
S
P

(
B
o
a
r
d

S
u
p
p
o
r
t

P
a
c
k
a
g
e
)
L
i
b
r
a
i
r
i
e
s

s
p

c
i
f
i
q
u
e
s

a
u
x

c
a
r
t
e
s

d
e

d

v
e
l
o
p
p
e
m
e
n
t

s
u
r

m
i
c
r
o
c
o
n
t
r

l
e
u
r
,

a
u
x

d
i
f
f

r
e
n
t
e
s

s
p

c
i
f
i
c
i
t

s

e
t

o
p
t
i
m
i
-
s
a
t
i
o
n
s

d
e
s

m
i
c
r
o
p
r
o
c
e
s
s
e
u
r
s
,

e
t
c
.
C
e
r
t
i
f
i
c
a
t
i
o
n
U
n

c
r

d
i
t

s
u
p
p
l

m
e
n
t
a
i
r
e

e
s
t

a
c
c
o
r
d


a
u
x

e
x

c
u
t
i
f
s

c
e
r
t
i
f
i

s

s
u
i
v
a
n
t

d
e
s

n
o
r
m
e
s

c
o
m
m
e

l
a

D
O
-
1
7
8
B
.
N
o
y
a
u
,

e
x

c
u
t
i
f

o
u

s
y
s
t

m
e

d

e
x
p
l
o
i
t
a
t
i
o
n

?
L
e
s

n
o
y
a
u
x

e
t

e
x

c
u
t
i
f
s
,

p
l
u
s

l

g
e
r
s
,

i
m
p
o
s
e
n
t

u
n

d

v
e
l
o
p
p
e
m
e
n
t

c
r
o
i
s


(
s
t
a
t
i
o
n

d
e

d

v
e
l
o
p
p
e
m
e
n
t

e
t

c
i
b
l
e
s
o
n
t

d
i
s
t
i
n
c
t
s
)
,

a
l
o
r
s

q
u

u
n

s
y
s
t

m
e

d

e
x
p
l
o
i
t
a
t
i
o
n

p
e
r
m
e
t

u
n

d

v
e
l
o
p
p
e
m
e
n
t

s
u
r

l
a

c
i
b
l
e

e
l
l
e
-
m

m
e
.
D
i
r
i
g


p
a
r

l
e

t
e
m
p
s

o
u

l
e
s

n
e
m
e
n
t
s
L
e

n
o
y
a
u

s
e

b
a
s
e
-
t
-
i
l

s
u
r

u
n

t
i
c
k

(
d
i
r
i
g


p
a
r

l
e

t
e
m
p
s
)

o
u

s
u
r

l
a

p
r
o
g
r
a
m
m
a
t
i
o
n

d

h
o
r
l
o
g
e
s

(
d
i
r
i
g


p
a
r

l
e
s

-
n
e
m
e
n
t
s
)

p
o
u
r

g

r
e
r

l
e

r

v
e
i
l

d
e
s

t

c
h
e
s

?
A
r
c
h
i
t
e
c
t
u
r
e

d
u

n
o
y
a
u
O
n

p
r

r
e
r
a

s
o
u
v
e
n
t

u
n

n
o
y
a
u

d
e

t
y
p
e

n
o
y
a
u

e
t

m
o
d
u
l
e
s

o
u

t

c
h
e
s

d
e

s
e
r
v
i
c
e


u
n
e

s
t
r
u
c
t
u
r
e

m
o
n
o
l
i
t
h
i
q
u
e
.
T
o
l

r
a
n
c
e

a
u
x

f
a
u
t
e
s
P
o
s
s
i
b
i
l
i
t

t
r
e

i
n
f
o
r
m


d
e
s

f
a
u
t
e
s

e
t

d
e

l
e
s

t
r
a
i
t
e
r
.
S
u
p
p
o
r
t

p
o
u
r

a
r
c
h
i
t
e
c
t
u
r
e

m
o
n
o

o
u

m
u
l
t
i
p
r
o
c
e
s
s
e
u
r
T
y
p
e

d

o
b
j
e
t
s

a
c
t
i
f
s
S
u
p
p
o
r
t

d
e
s

a
r
c
h
i
t
e
c
t
u
r
e
s

l
o
g
i
c
i
e
l
l
e
s

m
u
l
t
i
t

c
h
e
s
,

m
u
l
t
i
p
r
o
c
e
s
s
u
s
,

o
u

l
e
s

d
e
u
x
.
A
l
g
o
r
i
t
h
m
e

d

o
r
d
o
n
n
a
n
c
e
m
e
n
t
D

t
e
r
m
i
n
i
s
t
e
,


p
r
i
o
r
i
t

s

f
i
x
e
s

o
u

v
a
r
i
a
b
l
e
s
,

d
u
r

e

d

u
n

c
h
a
n
g
e
m
e
n
t

d
e

c
o
n
t
e
x
t
e

(
r
e
l
a
t
i
v
e
m
e
n
t

a
r
c
h
i
t
e
c
t
u
r
e
m
a
t

r
i
e
l
l
e

s
o
u
s
-
j
a
c
e
n
t
e
)
.
P
r
o
t
o
c
o
l
e

d
e

g
e
s
t
i
o
n

d
e

r
e
s
s
o
u
r
c
e
s
S
u
p
p
o
r
t

d
u

p
r
o
t
o
c
o
l
e


p
r
i
o
r
i
t

s

p
l
a
f
o
n
d
s

(
d
e

p
r

r
e
n
c
e
)

o
u

h

r
i
t

e
s
.
233
5.4 Exemples dexcutifs temps rel 5 Excutifs temps rel


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
N
o
m
b
r
e

d
e

n
i
v
e
a
u
x

d
e

p
r
i
o
r
i
t

s
T
y
p
i
q
u
e
m
e
n
t
,

c
e
l
a

v
a

d
e

8

a
u

m
i
n
i
m
u
m

p
o
u
r

c
e
r
t
a
i
n
s

n
o
y
a
u
x


2
5
6

o
u

p
l
u
s

p
o
u
r

d

a
u
t
r
e
s
.

C
o
m
m
e
n
t

l

o
r
d
o
n
-
n
a
n
c
e
u
r

g

r
e
-
t
-
i
l

l
e
s

t

c
h
e
s

d
e

m

m
e

n
i
v
e
a
u

d
e

p
r
i
o
r
i
t


(
F
I
F
O
,

t
o
u
r
n
i
q
u
e
t
)

?
N
o
m
b
r
e

m
a
x
i
m
a
l

d
e

t

c
h
e
s
T
y
p
i
q
u
e
m
e
n
t
,

c
e
l
a

v
a

d
e

8

a
u

m
i
n
i
m
u
m

p
o
u
r

c
e
r
t
a
i
n
s

n
o
y
a
u
x


2
5
6

o
u

p
l
u
s

p
o
u
r

d

a
u
t
r
e
s
.
S
u
p
p
o
r
t

m

m
o
i
r
e
E
m
p
r
e
i
n
t
e

m

m
o
i
r
e

(
t
a
i
l
l
e

d
u

n
o
y
a
u

l
u
i
-
m

m
e
,

e
t

d
e
s

d
i
f
f

r
e
n
t
s

m
o
d
u
l
e
s


i
n
t

g
r
e
r
)
.

T
a
i
l
l
e

m
a
x
i
m
a
l
e

d
e

l
a
m

m
o
i
r
e

(
p
i
l
e
)

a
l
l
o
u


u
n
e

t

c
h
e

o
u


u
n

p
r
o
c
e
s
s
u
s

(
c
o
d
e
,

p
i
l
e

e
t

t
a
s
)
.

P
r
o
t
e
c
t
i
o
n

d
e

l
a

m

m
o
i
r
e

s
i

m
u
l
t
i
p
r
o
-
c
e
s
s
u
s
.

A
l
l
o
c
a
t
i
o
n

d
y
n
a
m
i
q
u
e

d
e

m

m
o
i
r
e
.

M

m
o
i
r
e

v
i
r
t
u
e
l
l
e
.
G
e
s
t
i
o
n

d
e
s

i
n
t
e
r
r
u
p
t
i
o
n
s
I
n
t
e
r
r
u
p
t
i
o
n
s

h
i

r
a
r
c
h
i
s

e
s

o
u

n
o
n
,

p
o
s
s
i
b
i
l
i
t


o
u

n
o
n

p
o
u
r

u
n
e

I
S
R

d

t
r
e

i
n
t
e
r
r
o
m
p
u
e
,

f
l
e
x
i
b
i
l
i
t


d
e

p
r
o
-
g
r
a
m
m
a
t
i
o
n
.
G
e
s
t
i
o
n

d
e
s

h
o
r
l
o
g
e
s
N
o
m
b
r
e

e
t

p
r

c
i
s
i
o
n

d
e
s

h
o
r
l
o
g
e
s
,

g
r
a
n
u
l
a
r
i
t


t
e
m
p
o
r
e
l
l
e
,

p
o
s
s
i
b
i
l
i
t


d
e

t
r
a
v
a
i
l
l
e
r

e
n

d
u
r

e
s

e
t

e
n

d
a
t
e
s
.
S
u
p
p
o
r
t

r

s
e
a
u
S
u
p
p
o
r
t

p
o
u
r

T
C
P
/
I
P
,

C
A
N

E
n
t
r

e
s
/
S
o
r
t
i
e
s
F
a
c
i
l
i
t

u
t
i
l
i
s
a
t
i
o
n

d
e
s

i
n
t
e
r
f
a
c
e
s

d

e
n
t
r

e
s

s
o
r
t
i
e
s
.

E
x
i
s
t
e
n
c
e

d
e
s

p
i
l
o
t
e
s

d
e

p

r
i
p
h

r
i
q
u
e
s

u
t
i
l
i
s

s
.
S
y
s
t

m
e
s

d
e

f
i
c
h
i
e
r
s
L

e
x

c
u
t
i
f

g

r
e
-
t
-
i
l

l
e
s

s
y
s
t

m
e
s

d
e

f
i
c
h
i
e
r
s
,

s
i

o
u
i

s
u
r

q
u
e
l

m
o
d

l
e

(
h
i

r
a
r
c
h
i
e

d
e

r

p
e
r
t
o
i
r
e
s

o
u


p
l
a
t
,

s
y
s
t

m
e
c
o
m
p
a
t
i
b
l
e

U
n
i
x
,

W
i
n
d
o
w
s

)
G
e
s
t
i
o
n

d

u
n
e

c
o
n
s
o
l
e

a
l
p
h
a
n
u
m

r
i
q
u
e

o
u

g
r
a
p
h
i
q
u
e
L
a

p
l
u
p
a
r
t

d
e
s

e
x

c
u
t
i
f
s

p
e
r
m
e
t
t
e
n
t

l
a

m
i
s
e

e
n

u
v
r
e

d

u
n
e

c
o
n
s
o
l
e

a
l
p
h
a
n
u
m

r
i
q
u
e

(
s
o
i
t

d
i
r
e
c
t
e
m
e
n
t

s
u
r

u
n

c
r
a
n
,

s
o
i
t

v
i
a

u
n
e

c
o
m
m
u
n
i
c
a
t
i
o
n

s

r
i
e

R
S
-
2
3
2
)
.

C
e
r
t
a
i
n
s

p
e
r
m
e
t
t
e
n
t

u
n

a
f
f
i
c
h
a
g
e

g
r
a
p
h
i
q
u
e

(
s
o
i
t

d
i
r
e
c
t
e
m
e
n
t
s
u
r

u
n

c
r
a
n

d
a
n
s

l
e

c
a
s

d
e
s

s
y
s
t

m
e
s

d

e
x
p
l
o
i
t
a
t
i
o
n
,

s
o
i
t

s
u
r

u
n

c
r
a
n

s

p
a
r

)
.
F
a
c
i
l
i
t


d
e

d

v
e
l
o
p
p
e
m
e
n
t
Q
u
e
l
s

s
o
n
t

l
e
s

s
y
s
t

m
e
s

d

e
x
p
l
o
i
t
a
t
i
o
n


p
a
r
t
i
r

d
e
s
q
u
e
l
s

o
n

p
e
u
t

d

v
e
l
o
p
p
e
r

s
u
r

l

e
x

c
u
t
i
f

?

Y

a
-
t
-
i
l

u
n

e
n
v
i
r
o
n
-
n
e
m
e
n
t

d
e

d

v
e
l
o
p
p
e
m
e
n
t

i
n
t

g
r

d
i
t
e
u
r

p
e
r
m
e
t
t
a
n
t

l
a

c
o
m
p
i
l
a
t
i
o
n
,

l
e

t
r
a
n
s
f
e
r
t

d
u

c
o
d
e

e
t

l
e

d

b
o
g
a
g
e
d
i
s
t
a
n
t

d
a
n
s

l
a

m

m
e

a
p
p
l
i
c
a
t
i
o
n
)

?

P
e
u
t
-
o
n

m
o
d
i
f
i
e
r

l
e

c
o
d
e

s
o
u
r
c
e

s
a
n
s

r

i
n
i
t
i
a
l
i
s
e
r

l
a

c
i
b
l
e

(
d

v
e
l
o
p
p
e
m
e
n
t
i
n
c
r

m
e
n
t
a
l
)

?
E
x
t
e
n
s
i
b
i
l
i
t


d
u

n
o
y
a
u
L
e

s
y
s
t

m
e

e
s
t

d
i
s
p
o
n
i
b
l
e

s
o
u
s

f
o
r
m
e

d
e

s
o
u
r
c
e
s

p
o
u
v
a
n
t

t
r
e

m
o
d
i
f
i

s
,

o
u

b
i
e
n

s
o
u
s

f
o
r
m
e

d

u
n

f
i
c
h
i
e
r
b
i
n
a
i
r
e

i
m
m
u
a
b
l
e

?

P
e
u
t
-
o
n

a
s
s
o
c
i
e
r

(
h
o
o
k
)

d
e
s

t
r
a
i
t
e
m
e
n
t
s

s
p

c
i
f
i
q
u
e
s

a
u
x

d
i
f
f

r
e
n
t
s

n
e
m
e
n
t
s

(
c
h
a
n
g
e
-
m
e
n
t

d
e

c
o
n
t
e
x
t
e
,

d

b
u
t

e
t

f
i
n

d
e

t

c
h
e
,

e
t
c
.
)

?
C
o

t
,

r
o
y
a
l
t
i
e
s
,

e
t

s
u
p
p
o
r
t

t
e
c
h
n
i
q
u
e

e
t
/
o
u

c
o
m
m
u
n
a
u
t
a
i
r
e
C
o

t

d
e

l

a
c
q
u
i
s
i
t
i
o
n

d
u

s
y
s
t

m
e

e
t

d
e

l

e
n
v
i
r
o
n
n
e
m
e
n
t

d
e

d

v
e
l
o
p
p
e
m
e
n
t
,

c
o

v
e
n
t
u
e
l

d
u

d

p
l
o
i
e
m
e
n
t
d

a
p
p
l
i
c
a
t
i
o
n
s

u
t
i
l
i
s
a
n
t

l
e

s
y
s
t

m
e
.

L
e

s
u
p
p
o
r
t

t
e
c
h
n
i
q
u
e

e
s
t

u
n

f
a
c
t
e
u
r

d

t
e
r
m
i
n
a
n
t

l
o
r
s

d
e

l
a

m
i
s
e

e
n

u
v
r
e
d

u
n

e
x

c
u
t
i
f
,

d
e

m

m
e

q
u
e

l
a

l
a
r
g
e
u
r

d
e

l
a

c
o
m
m
u
n
a
u
t


d
e
s

u
t
i
l
i
s
a
t
e
u
r
s
.

E
n

e
f
f
e
t
,

p
l
u
s

i
l

y

a

d

u
t
i
l
i
s
a
t
e
u
r
s
,
p
l
u
s

o
n

t
r
o
u
v
e
r
a

d
e

f
o
r
u
m
s

d

c
h
a
n
g
e
s

d

e
x
p

r
i
e
n
c
e
s
,

d
e

c
o
d
e

s
o
u
r
c
e
,

e
t
c
.
234
5.4 Exemples dexcutifs temps rel 5 Excutifs temps rel
Interface native de programmation : fonctions spciques.
Interface POSIX : limite au prol 52, POSIX 1003.1b (limite au fait quil ny
a pas de support multiprocessus), 1003.1c (pthread) et un sous-ensemble basique
de 1003.1.
Interface OSEK/VDX : non disponible pour VxWorks, mais disponible pour le
systme frre OSEKWorks.
Interface ITRON : a priori non, mais quelques sites internet japonais semblent
parler dune interface ITRON compatible avec VxWorks.
Langages de programmation supports : C/C++ de base, mais plusieurs autres
langages sont disponibles via des produits de socits tiers (par exemple, la socit
Aonix propose un compilateur Ada pour VxWorks).
Support multiprocessus : non.
Gestion du temps : dirig par le temps.
Gestion mmoire : non protge par dfaut, protection possible avec lextension
VxVMI, allocation dynamique possible.
Support rseau : la plupart des protocoles rseaux sont supports.
Systmes de chiers : FAT, NFS, raw, TrueFFS.
Niveaux de priorit : 256 (plus le numro est petit, plus la priorit est leve).
Nombre de tches : limit uniquement par la taille mmoire.
Type : commercial.
Rsolution dhorloge : 60 Hz par dfaut, mais peut descendre jusqu 1 000 Hz
(ou plus avec un surcot processeur important).
Ordonnancement : priorits, avec un tourniquet par niveau de priorit.
Priorits variables : oui.
Protocole de gestion de ressources : protocole priorits hrites.
Remarques : De nombreux outils de suivi permettent danalyser de faon dtaille
lexcution sur la cible, reprsentant sur un graphe aussi bien lordonnancement
que les appels systmes.
VxWorks utilise donc nativement une interface de programmation multitche pro-
pritaire. Linterface POSIX est implmente par les primitives natives de VxWorks.
Il est noter quil est trs difcile dutiliser un temps absolu en utilisant les primi-
tives natives de VxWorks, et quil faut pour cela utiliser les primitives POSIX (comme
nanosleep).
VxWorks se caractrise aussi par la possibilit trs simple, laide de lenvironnement
de dveloppement Tornado II, de congurer loisir le BSP utilis. Ainsi, du prol
PE 52 disponible, il est relativement simple dallger la fabrication du noyau pour
se rapprocher dun prol plus lger lorsque la cible possde peu de ressources.
m Gestion du temps
La rsolution dhorloge est limite par la faon dont VxWorks

gre le temps.
Lunit de base est le tick : la frquence doccurrence des ticks peut tre programme,
ce qui a pour effet de programmer le matriel de sorte gnrer une interruption
5.4 Exemples dexcutifs temps rel
235


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
dhorloge priodique. chaque interruption dhorloge correspond un tick (gure 5.37),
VxWorks

prend alors la main an deffectuer lordonnancement du systme, de


grer les rveils ventuels des tches (une tche peut sendormir an dattendre un
certain nombre de ticks), etc.
Bien que cela soit en gnral possible, il est dconseill daugmenter la frquence des
ticks au-del d1 kHz (ce qui offre une rsolution d1 milliseconde) car cela impli-
querait un surcot processeur important. Le principal problme d cette impl-
mentation est que la granularit du systme est relativement grossire par rapport aux
noyaux dirigs par les vnements.
Linterface de programmation VxWorks

est relativement simple comprendre et


manipuler. Lors de la phase de dveloppement, on utilise gnralement une tche
tShell fournissant un shell (invite de commande permettant lutilisateur de dialo-
guer avec lexcutif ) qui permet, via une console contrle par la cible ou bien par
lhte, de lancer directement des fonctions C charges sur la cible, et de grer les
tches (obtenir des informations, tuer les tches). Il est aussi trs facile, via le sup-
port rseau trs tendu, daccder au systme de chiers de lhte ou dune autre
machine du rseau.
Diffrents choix trs pratiques ont t effectus : ainsi, la tche tLogTask, permettant
denregistrer une trace dexcution (log) peut tre utilise laide de la fonction logMsg
an dafcher ou enregistrer du texte dans un chier, ce qui facilite le suivi du fonc-
tionnement de lapplication sans appeler directement des fonctions dafchage ou
dcriture dans un chier (fprintf ), cest--dire sans ajouter dappel suspensif pertur-
bant lordonnancement de lapplication.
m Gestion des tches
Les tats possibles dune tche VxWorks

, ainsi que les noms de primitives natives


impliquant les transitions entre ces tats, sont donns sur la gure 5.38.
La mmoire est partage par lexcutif et toutes les tches, comme cela est prsent sur
la gure 5.39. Chaque tche VxWorks

, comme chaque tche utilisateur, est caract-


rise uniquement pas sa pile : elle contient donc les variables locales la tche ainsi
que son contexte dexcution (voir 4.2.3, p. 154). Notons que les interruptions
sont traites en utilisant une pile prdnie.
Les tches sont cres (taskInit et taskActivate ou taskSpawn qui est la combinaison
des deux actions) et dtruites (taskDelete) dynamiquement. Lors de la cration, tant
donne la gestion mmoire employe, il est ncessaire de spcier explicitement la
taille de la pile allouer une tche, ainsi que des paramtres (10 en tout) passer
la tche. Il est aussi ncessaire de spcier explicitement si la tche utilise les registres
temps

tick et excution
de lordonnanceur
Figure 5.37 Gestion du temps par VxWorks

.
236
5.4 Exemples dexcutifs temps rel 5 Excutifs temps rel
t
a
s
k
I
n
i
t
t
a
s
k
R
e
s
u
m
e
t
a
s
k
R
e
s
u
m
e
t
a
s
k
S
u
s
p
e
n
d
t
a
s
k
S
u
s
p
e
n
d
semGive
semTake Dlai coul
msgQReceive
E
l
e
c
t
i
o
n
t
a
s
k
R
e
s
u
m
e
t
a
s
k
A
c
t
i
v
a
t
e
t
a
s
k
S
u
s
p
e
n
d
P
r

e
m
p
t
i
o
n
Endormie En attente
Prte
Suspendue
Excute
msgQSend taskDelay
Figure 5.38 tats dune tche VxWorks.
Donnes
Pile tche 3
Pile tche 2
Pile tche 1
Pile rserve aux ISR

Pile tExcTask
Code
Figure 5.39 Modle de gestion mmoire
(les positions relatives sont donnes titre purement indicatif).
5.4 Exemples dexcutifs temps rel
237


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
de calculs virgule ottante an de dterminer si le changement de contexte dune
tche ncessite leur sauvegarde. An dviter le risque quune ressource ne soit pas
libre avant la terminaison dune tche, il existe un mcanisme de protection de
tche : entre les instructions taskSafe et taskUnsafe, une tche ne peut pas tre tue.
Une tche peut modier sa priorit ou la priorit dune autre tche laide de lins-
truction taskPrioritySet. Elle peut aussi se rendre non premptible (mais interruptible
par le traitement des interruptions) entre les instructions taskLock et taskUnlock.
Les tches sexcutent en mode dtach, ce qui explique que le code suivant soit
erron :
Ce petit programme, lorsquil est charg sur la cible, permet de lancer, par exemple
laide du shell, la fonction LancerTache. L il y a de trs fortes chances que les entiers
afchs ne correspondent pas du tout aux entiers attendus. En effet, si LancerTache
est excute dans le contexte de la tche tShell, la variable tableau est alloue sur la
pile de cette tche. Lorsque la fonction se termine, cette variable se voit crase par
la suite de lexcution de tShell. Lorsque la tche cre sexcute, ladresse du tableau
correspond un tableau qui a t cras par dautres valeurs dans la pile de tShell.
Il est donc ncessaire de dclarer le tableau passer en paramtres dans le tas, cest-
-dire en variable globale. La version correcte de ce petit programme est donc :
void UneTache(int *tableauEntiers, int tailleTableau) {
/* Fonction implmentant une tche affichant un tableau
Entre : un tableau dentier index de 0
tailleTableau-1 */
int i ;
for (i=0 ; i<tailleTableau ; i++) {
printf("%d",tableauEntiers[i]);
}
}
void LancerTache() {
int tableau[]={0,3,5} ; /* Tableau de 3 entiers */
taskSpawn("affiche tableau",150,0,2048,(FUNCPTR)
UneTache, (int)tableau,3,0,0,0,0,0,0,0,0) ;
/* Cration et activation de la tche nomme "affiche
tableau", implmente par la fonction UneTache, de priorit
150, nutilisant pas les virgules flottantes, munie dune
pile de 2 Ko, prenant en paramtres un tableau dentiers et
sa taille. Noter que VxWorks fournit 10 paramtres entiers,
et que la taille dun pointeur est la taille dun entier,
ce qui permet deffectuer sans problmeune coercion de type.
Noter aussi la ncessit de donner 10 paramtres, mme si
seulement 2 sont utiles la fonction */
}
int tableau[]={0,3,5} ; /* Tableau de 3 entiers allou
dans le tas */ void LancerTache() {
taskSpawn("affiche tableau",150,0,2048,
(FUNCPTR)UneTache, (int)tableau,3,0,0,0,0,0,0,0,0) ;
}
238
5.4 Exemples dexcutifs temps rel 5 Excutifs temps rel
m Outils de synchronisation et de communication
En plus de linterface POSIX 1003.1b et 1003.1c, sur laquelle nous ne revenons pas
ici, VxWorks

propose ses propres outils de communication et de synchronisation,


qui sont plus rapides daprs la documentation.
Trois types de smaphores sont proposs : le smaphore binaire (cr par semBCreate),
le smaphore compteur (cr par semCCreate) et le smaphore dexclusion mutuelle
(cr par semMCreate) sont pris ou vendus par les mmes primitives semTake et
semGive. La spcicit du smaphore dexclusion mutuelle est quil est possible de
lui adjoindre le protocole de gestion de ressources priorit hrite.
Notons quil est possible lors de la prise de smaphore de borner lattente maximale
de celui-ci.
La communication par message est assure laide de botes aux lettres FIFO sans
crasement, grant deux niveaux de priorit de messages (normal et urgent). Une
bote aux lettres est cre avec msgQCreate qui se voit donner la taille de la le, la taille
maximale dun message, et un paramtre disant si les tches en attente doivent tre
traites en FIFO ou suivant leur niveau de priorit. Lenvoi de message (msgQSend ) et
lattente de message (msgQReceive) peuvent tre borns dans leur temps dattente
maximal.
m Horloge et chiens de garde
Comme nous lavons dit en introduction du paragraphe 4.1, la granularit de VxWorks
est le tick. Cela rend la manipulation du temps assez grossire, et linstruction dattente
fournie par VxWorks est une instruction dattente relative taskDelay qui prend en
paramtre un nombre (entier) de ticks. Le seul moyen daccder un temps absolu
(modulo la granularit des ticks) est dutiliser linterface POSIX.
Les chiens de garde (watchdogs) permettent de programmer lexcution dune fonc-
tion qui se dclenchera au bout dun certain nombre de ticks. Il faut noter que la
fonction excute par un chien de garde na pas le droit dutiliser dinstruction blo-
quante ou suspensive (une entre/sortie par exemple), puisquelle est excute dans
le contexte de la tche tExcTask, de priorit maximale.
m Gestion des interruptions
La gestion des interruptions est extrmement simple puisque VxWorks permet
dassocier des fonctions (ISR) aux interruptions laide de la fonction intConnect.
Comme les chiens de garde, les ISR nont pas le droit aux instructions bloquantes
ou suspensives car elles sont excutes dans le contexte de tExcTask. Elles sont donc
gnralement implmentes de sorte dclencher une synchronisation permettant
dactiver une tche de traitement de linterruption (DSR), comme cela est dcrit
au paragraphe 5.2.3, p. 206.
m Avantages et inconvnients
Lavantage indniable de VxWorks sur la plupart de ses concurrents est sa simplicit
de mise en uvre grce aux trs nombreux BSP existants, aux fonctionnalits de
dveloppement incrmental, la possibilit dintgrer des tches de service comme
une tche de shell, une tche de trace, une tche de gestion rseau, etc. De plus,
5.4 Exemples dexcutifs temps rel
239


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
pour un novice, linterface de programmation est trs simple prendre en main.
Les outils de suivi (notamment WindView) permettent dobtenir des informations
trs utiles, et trs pdagogiques, sur lapplication en fonctionnement. Notons aussi
quil est relativement ais de congurer le BSP choisi son bon vouloir. Enn,
notons la prsence dun simulateur permettant de tester une application sur lhte,
dont linconvnient, dans sa version de base, est quil nimplmente pas les protocoles
rseau.
Linconvnient majeur de VxWorks est sa granularit temporelle grossire, et la dif-
cult de grer un temps absolu. Sa granularit temporelle est due au fait que le noyau
est gr par le temps (voir 5.2.4), ce qui implique un surcot important ds lors
que lon souhaite travailler granularit ne. Il est bien sr possible dinstaller soi-
mme une gestion plus ne du temps, en programmant une horloge physique, et
en travaillant sur les interruptions gnres par celle-ci. Enn, linterface de program-
mation spcique est moins intressante que ne le serait une interface normalise.
5.4.2 OSEKturbo
OSEKturbo est un excutif temps rel conforme OSEK/VDX, prols ECC1 et com-
munication CCCB (communication interne uniquement) dans la version de base.
Comme la norme, celui-ci, extrmement lger et rapide, est principalement dve-
lopp pour des microcontrleurs (8, 16 ou 32 bits).
Nom : OSEKturbo.
Type : micro noyau.
Socit : Metrowerks.
Noyau : OSEKturbo.
Environnement de dveloppement : CodeWarrior.
Systmes htes : Win32 (Windows95/98/NT/2000/XP).
Cibles : plusieurs microcontrleurs PowerPC, ARM, NEC V850, C16x
Support multiprocesseur : non.
Interface native de programmation : OSEK/VDX.
Interface POSIX : non.
Interface OSEK/VDX : BCC1, ECC1, communication CCCA, CCCB.
Interface ITRON : non.
Langages de programmation supports : C.
Support multiprocessus : non.
Gestion du temps : dirig par les vnements.
Gestion mmoire : non protge.
Support rseau : de base, non.
Systmes de chiers : aucun.
Niveaux de priorit : 62.
Nombre de tches : 64 tches actives au plus.
Type : commercial.
240
5.4 Exemples dexcutifs temps rel 5 Excutifs temps rel
Rsolution dhorloge : dnie par lhorloge interne du microcontrleur, ou
bien par des horloges matrielles spciques. Possibilit dobtenir une rsolution
en dessous de la microseconde.
Ordonnancement : conforme OSEK/VDX.
Priorits variables : non (sauf lors dun hritage de priorit d au protocole
priorit plafond).
Protocole de gestion de ressources : protocole priorit plafond immdiat.
Remarques : De nombreux outils de suivi permettent danalyser de faon dtaille
lexcution sur la cible, lordonnancement, les temps de rponse des tches.
OSEKturbo est un micro noyau extrmement lger permettant de gnrer des pro-
grammes de quelques centaines doctets ou quelques Ko. Il est compltement com-
patible OSEK/VDX, ce qui facilite sa prise en main. Nous pouvons aussi citer, fait
rarissime, la prsence dun outil danalyse dordonnanabilit.
Les inconvnients sont les inconvnients de la norme OSEK/VDX (absence de
systme de chiers par exemple, dnition statique de lapplication) et ses avantages
sont les avantages de la norme OSEK/VDX, soit principalement le dterminisme,
et la possibilit datteindre une trs grande rsolution dhorloge. En effet, OSEK/
VDX est dirig par les vnements (voir 5.2.4) : les interruptions horloges impli-
quent uniquement la dcrmentation des timers, et seule lexpiration dun timer
implique un travail supplmentaire.
5.4.3 RTEMS
RTEMS (Real-Time Executive for Multiprocessor Systems) version 4.6 est lun des ex-
cutifs temps rel gratuits et open source les plus riches que lon puisse trouver. Issu
initialement dun projet militaire (il a notamment t dvelopp pour le contrle
de missiles), cet excutif sest enrichi au l des annes et des versions.
Nom : RTEMS.
Type : noyau et tches de service.
Socit : OAR Corporation.
Noyau : RTEID/ORKID.
Environnement de dveloppement : divers outils en ligne de commande.
Systmes htes : Unix, Linux, Win32 (sous lenvironnement Cygwin, portage des
outils Unix sur systme Win32).
Cibles : Chaque utilisateur tant mme de dvelopper un BSP, la plupart des
processeurs et microcontrleurs sont supports (de faon ofcielle ou non). Il faut
cependant sattendre, lorsque lon utilise un BSP non ofciel, tre confront
quelques bogues.
Support multiprocesseur : oui.
Interface native de programmation : interface spcique.
Interface POSIX : limite au prol 52, implmentation presque complte de
POSIX 1003.1b (limite au fait quil ny a pas de support multiprocessus),
1003.1c et 1003.1h.
5.4 Exemples dexcutifs temps rel
241


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
Interface OSEK/VDX : a priori non.
Interface ITRON : une partie de linterface uITRON 3.0 (linterface est en cours
de dveloppement).
Langages de programmation supports : C/C++, Ada.
Support multiprocessus : non.
Gestion du temps : dirig par le temps.
Gestion mmoire : non protge (il est possible de protger certains segments
contre lcriture).
Support rseau : la plupart des protocoles rseaux classiques sont implments.
Systmes de chiers : In Memory File System (IMFS), FAT12, FAT16, FAT32,
NFS et TFTP pour accs distant un systme de chiers.
Niveaux de priorit : 255 (1 tant la priorit la plus forte).
Nombre de tches : limit uniquement par la taille mmoire.
Type : GPL (General Public License) et Open Source.
Rsolution dhorloge : dnie par lhorloge interne du processeur ou micro-
contrleur, ou bien des horloges matrielles spciques. Possibilit dobtenir une
rsolution en dessous de la microseconde.
Ordonnancement : priorits, avec un tourniquet par niveau de priorit, Rate
Monotonic.
Priorits variables : oui.
Protocole de gestion de ressources : priorit hrite et priorit plafond immdiat.
Remarques : le systme tant Open Source, la communaut de dveloppeurs met
largement son exprience en commun, ce qui compense le manque denviron-
nement de dveloppement intgr.
Les concepts de base de RTEMS sont assez proches des concepts de base de
VxWorks

, notamment dans la gestion du temps base sur des ticks.


Il souffre donc des mmes avantages et inconvnients (notamment au niveau de la
gestion du temps par ticks impliquant une granularit grossire, et obligeant recourir
des horloges physiques et aux interruptions) que VxWorks. Il a lavantage dtre
gratuit et Open Source mais linconvnient de ne pas fournir denvironnement de
dveloppement intgr simple mettre en uvre. Enn, citons la possibilit dutiliser
un compilateur Ada sans avoir acqurir une extension.
5.4.4 RTLinux
RTLinux est lun des systmes dexploitation temps rel bas sur Linux. Ses principales
caractristiques sont :
Nom : RTLinuxPro/RTLinuxFree.
Type : micro noyau accompagn dun systme dexploitation Linux.
Socit : FSMLabs/communaut de dveloppeurs.
Noyau : RTCore.
242
5.4 Exemples dexcutifs temps rel 5 Excutifs temps rel
Environnement de dveloppement : outils de dveloppement du monde Unix.
Systmes htes : le systme lui-mme, avec Linux ou Unix. Ce systme peut
tourner sur diffrents processeurs (famille x86 partir du 386, PowerPC, ARM,
StrongARM, XScale, MIPS, Alpha).
Cibles : le systme hte.
Support multiprocesseur : non.
Interface native de programmation : POSIX 1003.1c et 1j (pthread).
Interface POSIX : prol 51.
Interface OSEK/VDX : non.
Interface ITRON : non.
Langages de programmation supports : C/C++, Ada en partie.
Support multiprocessus : non (supports bien entendu dans la partie Linux non
temps rel).
Gestion du temps : dirig par les vnements.
Gestion mmoire : la mmoire des tches temps rel peut tre protge dans la
version pro avec lextension PSDD (certaines tches temps rel peuvent se voir
allouer un espace mmoire protgs de la zone non temps rel).
Support rseau : la pile UDP/IP sur Ethernet, et CAN.
Systmes de chiers : non (prol 51) mais laccs aux systmes de chiers est
effectu par le noyau Linux non temps rel charg au-dessus du noyau RTCore.
Niveaux de priorit : 1 000 000.
Nombre de tches : limit uniquement par la taille mmoire.
Type : commercial pour RTLinuxPro, GPL (General Public License) pour RTLinux-
Free.
Rsolution dhorloge : dnie par lhorloge interne du processeur. Possibilit
dobtenir une rsolution de lordre de la microseconde.
Ordonnancement : conforme POSIX.
Priorits variables : oui.
Protocole de gestion de ressources : priorit plafond immdiat.
Initialement, RTLinux a t dvelopp sur le mode de lOpen Source. Les deux per-
sonnes lorigine du projet ont ensuite fond la socit FSMLabs qui dveloppe la
version pro de RTLinux, tout en conservant la version libre. Suite cela, la version
libre volue peu. Ceci explique quil y ait deux versions de RTLinux. En tant que
systme dexploitation, RTLinux se base sur un micro noyau temps rel RTCore
(conforme au prol 51 de la norme POSIX) situ entre le matriel et un systme
dexploitation Linux trs lgrement modi. Le noyau mule alors le matriel et
les horloges (gure 5.40) pour le noyau Linux, qui obtient le processeur quand il
nest pas utilis par une tche temps rel. Ce concept permet dallier la exibilit
dun systme dexploitation (Linux) au dterminisme dun systme dexploitation
temps rel.
5.4 Exemples dexcutifs temps rel
243


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
5 Excutifs temps rel
RTLinux est lune des adaptations de Linux au temps rel. Diffrentes techniques
sont utilises par les systmes dexploitation temps rel bass sur Linux pour rduire
la latence (voir 5.1.1) du noyau.
La premire consiste modier les primitives du noyau an dinsrer des points de
premption ou de diminuer au maximum les parties non premptibles de celui-ci
(Patch Low Latency, Preempt Kernel ).
La seconde, utilise par RTLinux et le systme dexploitation RTAI, rest quant lui
logiciel libre, consiste utiliser un micro noyau temps rel fournissant une machine
virtuelle un noyau Linux. Celui-ci est lgrement modi de sorte lempcher
de masquer les interruptions ou de les dtourner directement (rle du gestionnaire
dinterruptions du noyau RTCore), et les horloges quil utilise sont en fait simules
par le noyau RTCore. Ainsi, la granularit temporelle de RTLinux peut descendre
jusqu la microseconde sans surcot processeur, puisque seules les interruptions
correspondant des expirations de timers impliquent un traitement particulier de
lexcutif (qui peut dailleurs consister gnrer une interruption horloge simule
pour Linux).
Le noyau Linux est ordonnanc dans les temps creux laisss par les tches temps rel
RTLinux, ce qui permet dexcuter des processus non temps rel sur la partie Linux.
Les processus non temps rel sont des processus Linux classiques, par consquent,
ils ont accs toute la richesse de ce systme dexploitation gnraliste (accs au
systme de chiers, aux priphriques non temps rel, au rseau, une interface
graphique, etc.).
An de permettre une communication entre les tches temps rel et des processus
non temps rel sans perdre le dterminisme li au noyau temps rel, RTLinux fournit
Noyau
RTCore
Noyau Linux
Processus non temps rel
tche tche
Processus non temps rel
Processus non temps rel
tche
RT FIFO
Ordonnanceur
Linux
Pilote de priphriques
Gestionnaire
dinterruptions
Gestionnaire
dinterruptions
Ordonnanceur
temps rel
Tche
temps rel
Tche
temps rel
Tche
temps rel
Espace mmoire
non virtuelle
Interruption
Matriel
Machine virtuelle
Applications
Machine relle
Figure 5.40 Architecture RTLinux.
244
5.4 Exemples dexcutifs temps rel 5 Excutifs temps rel
un outil de communication par messages : les les temps rel (RT FIFO) et la
mmoire partage (mbuff ) entre processus non temps rel et tches temps rel.
Une le temps rel est vue comme un chier de caractres du ct du processus non
temps rel lutilisant (ouverture, lecture et criture bloquantes ou non, fermeture), et
comme un tube (voir 2.2.2, p. 196) non bloquant en lecture du ct de la tche
temps rel lutilisant.
An de palier le manque de bote aux lettres dans la norme POSIX 1003.1c, RTLinux
propose aussi un mcanisme de bote aux lettres spcique (rt_mq).
Les avantages de RTLinux sont lis au fait quil est conforme au prol 51 de POSIX,
sa gestion du temps, et surtout sa cohabitation avec Linux. Son inconvnient
majeur est li lempreinte mmoire norme prise par Linux, do une limitation
des cibles potentielles.
245


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

6 PROGRAMMATION
DES SYSTMES MULTITCHES

Aprs une brve prsentation des langages C, Ada, et LabVIEW, ce chapitre prsente
des rgles de passage dune conception DARTS une application de contrle-
commande.
Nous supposons que le lecteur est familier avec au moins un langage de program-
mation impratif ou bien ots de donnes. Par consquent, la prsentation des trois
langages de programmation supports est faite en commun, de sorte quavec la con-
naissance dun des trois langages (ou dun langage proche), le lecteur puisse rapide-
ment se faire une ide des deux autres.

6.1 Programmation C, Ada et LabVIEW

6.1.1 Prsentation gnrale des trois langages

Nous avons choisi dans cet ouvrage de prsenter limplmentation de systmes de
contrle-commande travers trois langages de programmation :
le langage C, car parmi les reprsentants des langages impratifs, cest le langage
le plus rpandu pour limplmentation de systmes de contrle-commande.
De plus, il est le langage de rfrence pour les systmes dexploitation, et est la
base de diffrentes normes comme POSIX et OSEK/VDX ;
le langage Ada, recommand dans les systmes haut niveau de sret ;
le langage LabVIEW, langage graphique ots de donnes, est quant lui trs
utilis dans le contrle de procds industriels.
Ce chapitre na pas pour objectif de prsenter exhaustivement les normes et langages
sus-cits, mais de les prsenter dans le but dimplmenter une conception DARTS.

m

Le langage C

Le langage C a vu le jour la n des annes 60. Son rle initial tait de permettre
la portabilit de la majeure partie du code dun systme dexploitation dune archi-
tecture matrielle une autre. En 1973, il est utilis avec succs pour crire un sys-
tme dexploitation. Depuis, son utilisation na cess de crotre et il est le langage
utilis dans limplmentation de la majeure partie des systmes dexploitation. Cest
aujourdhui encore lun des langages de programmation les plus utiliss.
246

6.1 Programmation
C, Ada et LabVIEW

6 Programmation
des systmes multitches

Le langage C est un langage de type

impratif

(en opposition aux langages dcla-
ratifs, fonctionnels, ots de donnes ou orients objets) compil. Il est faiblement typ,
compilation spare. Le langage C est sensible la casse (majuscules/minuscules).
Le langage C dispose dune bibliothque exceptionnelle de composants logiciels, et la
quasi-totalit des langages de programmation peuvent sinterfacer avec le langage C.
Le langage C est fait pour le multiprocessus, mais pas pour le multitche, ce qui
explique lmergence de diffrentes normes temps rel dont POSIX (chapitre 5)
est le reprsentant le plus rpandu.
Le langage C est assez proche de la machine, compar aux langages modernes. Cet
inconvnient est cependant un atout indniable lorsque lon doit faire de la program-
mation bas niveau, comme dans la programmation des entres/sorties spciques
aux applications de contrle-commande.
Le langage C est un langage de programmation normalis. Aujourdhui, des centaines
de compilateurs C et environnements de dveloppement associs existent, aussi
bien en logiciel libre (le plus connu tant

GNU C Compiler

,

GCC

) quen logiciel
commercial.

m

Le langage Ada

Lide du langage Ada nat au milieu des annes 70 sous limpulsion du dpartement
de la dfense amricain du constat suivant : il ny avait pas de langage universel
pour la programmation des systmes embarqus. La diversit des langages utiliss
sur les diffrents projets cotait cher en validation, formation, maintenance, etc.
Un concours a alors t lanc et parmi les quatre propositions de langages nalistes
(reprsents anonymement par 4 couleurs), le langage

green

a t choisi. Il porte le
nom dAda en mmoire du premier programmeur au monde : Augusta Ada Byron.
Ada est un langage impratif typage fort, compil, modulaire, compilation spare.
Il permet le traitement des exceptions, et la gnricit. Tout a t mis en uvre pour
quil soit le plus sr possible. De plus, il est nativement multitche : en langage
Ada, une tche est un type que lon peut instancier. Ada est insensible la casse
(majuscules/minuscules).
Sa premire version a t normalise en 1983 : elle prsentait des lacunes notamment
au niveau des facilits de communication entre les tches (seul le rendez-vous avec
donnes existait). La seconde version, Ada 95, permet la programmation objet et
surtout toute forme de communication asynchrone et synchronisation grce lintro-
duction de moniteurs (objets protgs).
Ada est un langage normalis. Plusieurs compilateurs Ada existent sur la plupart des
plateformes. Le plus connu des compilateurs libres est

GNAT

.

m

Le langage LabVIEW

Le langage LabVIEW est un des rares reprsentants des langages ots de donnes.
Cest un langage graphique, typ, modulaire, et en tant que langage ots de donnes,
il est naturellement parallle.
Contrairement C et Ada, LabVIEW est un environnement de dveloppement
propritaire, dvelopp par la socit

National Instruments

. LabVIEW se base sur le
langage G (il semble que cela soit la seule implmentation de ce langage).
6.1 Programmation
C, Ada et LabVIEW

247


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

6 Programmation
des systmes multitches

LabVIEW est un langage relativement rcent, puisquil a fait son apparition sur

Macintosh

au milieu des annes 80. Initialement, il tait ddi la programmation
dinstruments virtuels utilisant des cartes dacquisition de la socit

National Ins-
truments

. Lexemple typique dun instrument virtuel, souvent repris pour prsenter
lintrt initial de LabVIEW, est un oscilloscope logiciel se basant sur une carte
dacquisition multifonctions : loscilloscope est compos dun certain nombre de
fonctionnalits internes, et dune interface utilisateur. De mme, tout programme ou
sous-programme LabVIEW est reprsent par une interface graphique, nomme

face avant

et une description du fonctionnement interne sous forme de ots de
donnes, nomme

diagramme

.
Depuis, le langage LabVIEW a volu et sest largi au l des versions successives,
jusqu devenir un langage complet de programmation, plaant LabVIEW parmi
les langages les plus agrables utiliser pour les applications de contrle-commande.

6.1.2 lments de programmation compars

m

Types et littraux

M

Langage C

Le tableau 6.1 prsente les types de base du langage C.
Notons en particulier le fait que le type

int

, trs employ, est souvent reprsent par
la taille dun registre de calcul. De nombreuses personnes assument de plus quune
variable de type

int

a la taille sufsante pour contenir une adresse (un pointeur).
Le fait que diffrents types aient une longueur dpendante de larchitecture sous-
jacente proscrit lutilisation de valeurs constantes lorsque lon manipule des tailles de
donnes. Un oprateur, nomm

sizeof

, est toujours utilis lorsque lon doit connatre
la taille en octets dune variable, dune constante ou bien dun type. Ainsi, sur une
architecture 32 bits classique,

sizeof(int)

vaut 4.
Notons labsence du type

boolen

: en langage C, les tests peuvent seffectuer sur
nimporte quel type de valeur : si la valeur est nulle, le test est faux, si la valeur est
non nulle, le test est vrai.
Toute variable doit tre dnie avant son utilisation et avant toute instruction du
mme bloc (un bloc est dni entre accolades et correspond un groupe de dnitions
et instructions).

int i; /* Dclaration dun entier i non initialis */
float d=1.51E+2f; /* Dclaration dun flottant double prcision d
initialis 151 */
unsigned a,b; /* Dclaration de deux entiers non signs */
char c=a + 1 ; /* Dclaration dun caractre valant b (code ASCII
suivant celui de a) */

Un

type enregistrement

est construit laide du constructeur

struct

:

struct Complexe { /* Un complexe est compos de deux flottants */
float reel;
float imaginaire;
};
struct Complexe C; /* Dclaration dune variable de type struct
Complexe */
C.reel = 3.5; /* Accs au champ "reel" de C */
248

6.1 Programmation
C, Ada et LabVIEW

6 Programmation
des systmes multitches

Tableau 6.1

Types de base en langage C.

Type Description
Taille
(en bits)
Domaine Exemples de littraux

int entier gnralement
16 ou 32
-2

n-1

..2

n-1

-1
avec n taille
des registres
de calcul
dcimal : 152, -15
octal : 0230, -017
hexadcimal : 0x98, -0xF
unsigned entier non sign gnralement
16 ou 32
0..2

n

-1 dcimal : 152U
octal : 0230U
hexadcimal : 0x98U
char caractre 8 -128..127 caractre : a
ou code octal \141,
ou caractre non
imprimable \n,\t
unsigned
char
caractre
non sign
8 0..255 caractre : a
ou code octal \141, ou
caractre non imprimable
\n,\t
short entier court 16 -2

16

..2

16

-1 dcimal : 152, -15
octal : 0230, -017
hexadcimal : 0x98, -0xF
unsigned
short
entier court
non sign
16 0..2

16

-1 dcimal : 152UL
octal : 0230ul
hexadcimal : 0x98uL
long entier long 32 (parfois 64) -2

31

..2

31

-1 dcimal : 152L, -15L
octal : 0230L, -017L
hexadcimal : 0x98L, -0xFL
unsigned
long
entier long
non sign
32 (parfois 64) 0..2

32

-1 dcimal : 152uL
octal : 0230ul
hexadcimal : 0x98UL
long long entier trs long 64 -2

63

..2

63

-1 dcimal:152LL,-15LL
octal :0230LL,-017LL
hexadcimal :0x98LL, -0xFLL
unsigned
long long
entier trs long
non sign
64 0..2

64

-1 dcimal : 152ULL
octal : 0230ull
hexadcimal : 0x98ULL
float flottant simple
prcision
gnralement
32
voir norme
IEEE 754
152F, -15f
1.52E+2f, -1.5E+1F
double flottant double
prcision
32 ou 64 voir norme
IEEE 754
152.0, -15.0
1.52E+2, -1.5E+1
long double long flottant
double prcision
64, 80 ou 128 voir norme
IEEE 754
152.0L, -15.0L
1.52E+2L, -1.5E+1L
6.1 Programmation
C, Ada et LabVIEW

249


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

6 Programmation
des systmes multitches

Noter lemploi obligatoire du mot cl

struct

lors de lutilisation du type. Pour viter
cette lourdeur syntaxique, on peut utiliser le mot cl

typedef

qui permet de nommer
un type. Dans lexemple ci-aprs, le mme type enregistrement est dclar de faon
anonyme, mais dni par le nom

Complexe

:

typedef struct {
float reel;
float imaginaire;
} Complexe;
Complexe C; /* Dclaration dune variable de type Complexe */
Complexe C2={1,3.5}; /* C2 vaut 1+3.5i */

Un

type numr

, rarement utilis en langage C, se dnit avec le mot cl

enum

:

enum couleurs {rouge, vert, bleu};
/* En fait, rouge vaut 0, vert vaut 1 et bleu vaut 2 */
enum couleurs couleur=vert; /* dfinition de la variable couleur,
valant vert */

An dviter la lourdeur de rptition du mot cl

enum

, on utilise souvent le nom-
mage de type, comme pour les types enregistrement :

typedef enum {rouge, vert, bleu} couleurs;
/* Ici, enum {rouge, vert, bleu} est nomm couleurs */
couleurs couleur=vert; /* dfinition de la variable couleur, valant
vert */

Le constructeur de type

union

permet de dnir une superposition (union) de
plusieurs types.

typedef union {
char c;
short s;
} mon_union; /* les champs c et s sont superposs */
/* la taille de lunion est max(sizeof(char),sizeof(short))=2 octets
*/
mon_union m;
m.s = 0x8054; /* m.s vaut 0x8054, du mme coup, m.c vaut 0x54 */
m.c = 0; /* m.c vaut 0, du mme coup m.s vaut 0x8000 */

Rappelons que C a un typage faible. Ainsi, lexemple suivant passe parfaitement sur
la plupart des compilateurs.

m.c = a+3+vert; /* en introduction sur C, nous parlons de typage
faible : on affecte un caractre la somme dun caractre, dun
entier et dune couleur, soit le code ASCII de e */

M

Langage Ada

Le tableau 6.2 prsente les types de base du langage Ada.
linstar du langage C, la norme Ada nimpose pas de taille pour les types num-
riques. Gnralement, cest la taille dun registre de calcul.
La norme prvoit, mais nimpose pas, la prsence de types numriques courts,
longs, ou trs longs : ainsi,

Long_Integer

correspond un entier long,

Short_Natural

correspond un entier non sign court,

Long_Long_Float

correspond un ottant
trs long, etc.
250

6.1 Programmation
C, Ada et LabVIEW

6 Programmation
des systmes multitches

Le fait que diffrents types aient une longueur dpendante de larchitecture sous-
jacente proscrit lutilisation de valeurs constantes lorsque lon manipule des tailles de
donnes. Le langage Ada dnit des

attributs

permettant dobtenir diverses infor-
mations notamment sur les types et sur les variables. Ainsi, par exemple, lexpression

IntegerSize

donne la taille des entiers,

IntegerFirst

donne le plus petit entier et

IntegerLast

le plus grand.
Notons que Ada propose un constructeur de types point xe (

delta

).
Toute variable doit tre dnie avant son utilisation.

i: integer; -- Dclaration dun entier i non initialis
d:float :=1.51E+2; -- Dclaration dun flottant initialis 151
a, b : natural; -- Dclaration de deux entiers non signs
c: character := charactersucc(a);
-- Dclaration dun caractre valant b (caractre successeur de a)

Un

type enregistrement

est construit laide du constructeur de types

record

:

type Complexe is record
-- Un complexe est compos de deux entiers
reel : float;
imaginaire : float;
end record;
C : Complexe ; -- Dclaration dune variable de type Complexe

Noter lemploi obligatoire du mot cl

type

lors de la dclaration dun nouveau type.
Un

type numr

se dnit de la faon suivante :

Tableau 6.2

Types de base en langage Ada.

Type Description Taille (en bits) Domaine Exemples de littraux

integer entier gnralement
16 ou 32
-2

n-1

..2

n-1

-1
avec n taille des
registres de calcul
dcimal : 152, -15
octal : 8#230#, -8#17#
hexadcimal : 16#98#, -16#F#
natural entier
non sign
gnralement
16 ou 32
0..2

n

-1 comme integer
positive entier
positif
gnralement
16 ou 32
1..2

n

comme integer
character caractre 8

null

..
correspondant
0..255
a, b, cr, lf
boolean boolen gnralement 8 true, false true, false
float flottant
simple
prcision
gnralement 32 voir norme IEEE
754
1.52E+2, -1.5E+1
delta nombre
point fixe
dpend de
la dfinition
dpend de la
dfinition
1.52E+2, -1.5E+1
6.1 Programmation
C, Ada et LabVIEW

251


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
type Couleur is (Trefle, Carreau, Coeur, Pique);
Coul : Couleur := Carreau;
Comme en langage C, une correspondance implicite est effectue entre valeur de
type numr et entier : Tree correspond 0, Carreau 1, etc. Cependant, contrai-
rement C, Ada conserve une distinction relle entre type numr et type entier,
et lexpression suivante est refuse par un compilateur Ada :
Coul := 1; -- Refus par le compilateur
Cependant, comme pour tout type discret, lutilisation dattributs permet doprer
une conversion avec les entiers ou bien les chanes de caractres :
Coul := CouleurVal(1); -- CouleurVal(1) vaut Carreau
Coul := CouleurValue("Trefle"); -- CouleurValue("Trefle") vaut
Trefle
I := CouleurPos(Coul); -- I vaut 0, position de Trefle
Il ny a pas en langage Ada de constructeur de type union.
Le langage Ada propose des faons trs exibles de crer des types en contrlant
nement leur reprsentation binaire. La faon de procder est prsente au para-
graphe 6.1.2, p. 282.
M Langage LabVIEW
LabVIEW tant un langage graphique, cest de faon graphique que lon choisit le
type dune variable. Dans ce langage, tout est ot. Lorigine dun ot a un type, qui
dnit le type dun ot. Lorigine dun ot peut tre une variable dentre
nomme commande, et la n dun ot, une variable de sortie du ot nomme
indicateur.
Chaque programme, ou sous-programme LabVIEW sappelle un instrument virtuel
(virtual instrument ou vi ). La philosophie est de dnir un instrument par son
interface graphique, ou face avant, et son programme ou diagramme. La gure 6.1
montre un vi prenant en paramtre un entier a, lui appliquant un calcul (a + 1)/2
an dafcher le rsultat b. a en tant que paramtre dentre sappelle une commande
(pour commande utilisateur, modiable via linterface graphique) et b en tant que
paramtre de sortie visible par lutilisateur, sappelle un indicateur. Au dbut du
programme, les constantes et les commandes produisent une valeur sur chacun des
ots (ls) auxquels ils sont connects. Ds quune valeur est disponible sur chacun
des ots en entre, le vi devient excutable. Il est alors excut et produit ses valeurs
en sortie, qui leur tour rendent dautre vi excutables, etc. Ds quun ot est dis-
ponible en entre dun indicateur, la valeur est afche sur llment correspondant
de la face avant.
La gure 6.2 montre quun numrique, sil est entier, peut tre sign ou non (prxe
I pour sign, U pour non sign), sur 8, 16, ou 32 bits. Les nombres entiers peuvent
donc tre de type I8, I16, I32, U8, U16, ou U32. Les nombres rels, peuvent tre
reprsents suivant la norme IEEE 754 par un ottant de 32, 64 ou 80 128 bits
selon la plateforme.
Les littraux numriques se voient graphiquement imposer un type, et peuvent tre
reprsents en dcimal, octal, hexadcimal ou binaire, etc. La couleur des ots des
lments graphiques a une smantique. Ainsi, graphiquement, les ots de donnes
252
6.1 Programmation
C, Ada et LabVIEW
6 Programmation
des systmes multitches
dentiers (signs ou non, quelle que soit leur taille) sont reprsents en bleu. Les ots
de donnes de rels sont reprsents en orange.
Les boolens, normalement implments sur 8 bits, sont reprsents graphiquement
en vert. Les chanes de caractres sont distingues des tableaux en langage LabVIEW.
Reprsentes en rose, celles-ci sont des types de base du langage.
La gure 6.3 montre une commande de type enregistrement (cluster en langage
LabVIEW), et la faon dont on y accde.
Correspondance entre face avant et diagramme
Face avant Diagramme Commande Indicateur
Figure 6.1 Un programme simple en langage LabVIEW.
Flottants
Commande numrique
Entiers signs
Entiers non signs
Complexes
Figure 6.2 Types numriques en langage LabVIEW.
6.1 Programmation
C, Ada et LabVIEW
253


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
Les ots de donnes de type cluster peuvent tre de deux couleurs : marron ou rose.
Ils sont marron lorsque tous les champs sont numriques, il est alors possible de
raliser des oprations arithmtiques champs champs (sur la gure 6.3, on peut
additionner deux clusters rectangles, et obtenir un cluster rectangle de hauteur la
somme des hauteurs, et de largeur la somme des largeurs). Lorsquau moins un des
champs est non numrique, le l est de couleur rose, et nautorise pas deffectuer
Cluster Accs aux champs du cluster
Figure 6.3 Type enregistrement en langage LabVIEW.
Cration dune numration
numration
Choix de la valeur initiale
Figure 6.4 numration en langage LabVIEW.
254
6.1 Programmation
C, Ada et LabVIEW
6 Programmation
des systmes multitches
des oprations arithmtiques directement sur les clusters. La gure 6.4 montre une
numration.
Comme on le voit sur la gure 6.5, le typage est faible par dfaut, comme en
langage C, cependant les coercions (changements de types) implicites sont visibles
sur le diagramme (point gris).
m Pointeurs, tableaux et mmoire dynamique
M Langage C
Le langage C fait trs peu de distinction entre pointeur et tableau. Un tableau est
une zone mmoire contigu permettant de stocker un certain nombre de valeurs du
mme type.
Un tableau est construit de la faon suivante :
int t1[3]; /* t1 est un tableau de 3 entiers non initialiss */
long T[5] = {2512,-15,42,56.32}; /* T est un tableau de 5 entiers
longs initialis */
Complexe c, tc[5]; /* c est un complexe, tc est un tableau de 5
complexes */
Un tableau de taille n sindexe de 0 n 1.
t1[0]=3; /* La 1re case de t1 reoit 3 */
tc[4]=C; /* La dernire case de tc reoit la valeur de C */
C=tc[0]; /* C reoit la valeur de la premire case de tc */
Ainsi, la gure 6.6 prsente lorganisation en mmoire du tableau T en supposant
que ladresse de dbut du tableau soit 0x22FF48. La valeur de T est ladresse de T[0],
et ladresse de T[i] vaut T+i*sizeof (long).
La gure 6.6 montre que C ne conserve aucune information sur la taille du tableau.
Il est donc tout fait possible de dborder (i.e. accder une case non existante)
du tableau sans sen apercevoir pendant le droulement dun programme.
Il est trs important de savoir quun tableau en lui-mme nest quune adresse en
langage C, ainsi laffectation de tableau ncessite une recopie mmoire :
long T[5] = {2512,-15,42,56.32};
long T2[5];
T2 = T ; /* T2 contient maintenant ladresse de T (figure 6.7)*/
Point gris symbole
de coercion implicite
Division euclidienne
Figure 6.5 Coercion implicite en langage LabVIEW.
6.1 Programmation
C, Ada et LabVIEW
255


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
La recopie de tableau ncessite une recopie mmoire :
long T[5] = {2512,-15,42,56.32};
long T2[5];
memcpy(T2, T, sizeof(T)) ; /* T2 contient maintenant une copie de T*/
De la mme faon, la comparaison de tableau consiste comparer ladresse de base
des tableaux, mais pas leur valeur. An de comparer deux tableaux de mme taille,
il faut effectuer une comparaison mmoire :
int identiques ;
identiques = memcmp(T2, T, sizeof(T)) ; /* vrai (diffrent de 0) si
les contenus de T et T2 sont identiques, octet par octet */
Les tableaux multidimensionnels sont dclars de la faon suivante :
long T3[2][5]; /* tableau de 2*5 entiers longs */
long T4[][3] = {0,1,2,3,4,5}; /* la taille de la premire dimension
est donne implicitement */
long i=T4[0][2] ; /* i vaut 2 */
Un pointeur se dnit en langage C laide du caractre * :
long i, *pt; /* pt est un pointeur vers un entier long */
pt = &i; /* pt contient ladresse de i */
*pt = 3; /* la valeur pointe par pt (cest--dire i) vaut 3 */
0x22FF48 0x22FF4C 0x22FF50 0x22FF54 0x22FF58
T[0] T[1] T[2] T[3] T[4]
sizeof (T) = 20
2512 -15 42 56 32
T
0x22FF48
Figure 6.6 Reprsentation mmoire dun tableau en langage C.
2512 -15 42 56 32
0x22FF48 0x22FF4C 0x22FF50 0x22FF54 0x22FF58
T[0] T[1] T[2] T[3] T[4]
sizeof (T) = 20
T
T2
0x22FF48
0x22FF48
Figure 6.7 Laffectation de tableau nest quune affectation dadresse en langage C.
256
6.1 Programmation
C, Ada et LabVIEW
6 Programmation
des systmes multitches
Loprateur & utilis avant une variable est un oprateur de rfrencement (&i
donne ladresse de i). Loprateur * plac avant une expression (ici *pt) est un op-
rateur de drfrencement, cest--dire quil permet daccder ladresse donne par
lexpression (ici, ladresse de i).
long **pt2 ; /* ici pt2 est un pointeur de pointeur dentier long */
pt2 = &pt; /* pt2 contient ladresse de pt */
*(*pt2) = 4 ; /* i vaut maintenant 4 */
Pointeurs et tableaux sont extrmement proches, puisquils contiennent tous les deux
une adresse. La diffrence fondamentale entre les deux est quun tableau voit sa
mmoire alloue au moment de sa dclaration, ainsi, 20 octets sont allous au
tableau, dont ladresse est le dbut de ces 20 octets lors de la dclaration de :
long T[5];
La taille dun tableau est donc xe. Les pointeurs se substituent aux tableaux lorsque
lon doit utiliser un tableau de taille dynamique. Pour cela, on alloue la main
lespace ncessaire grce aux fonctions malloc ou calloc :
long *pt;
pt = (long*)malloc(sizeof(long)); /* pt pointe vers 4 octets allous*/
/* du code */
free(pt); /* libration de lespace mmoire allou pt */
pt = (long*)calloc(10,sizeof(long)); /* pt pointe vers un tableau de
10 entiers longs initialiss 0 */
pt[1]=3; /* la seconde case du tableau reoit 3 */
/* du code */
free(pt); /* libration de lespace mmoire allou pt */
On peut noter quen langage C, toute mmoire alloue doit tre rendue (grce la
fonction free). Notons que la diffrence entre calloc et malloc, mis part le nombre
de paramtres, est que calloc initialise chaque octet de mmoire alloue 0.
Notons aussi quil est ncessaire de faire une coercion explicite de lespace mmoire
cr par malloc et calloc, de type void * (void est le type muet), en long*.
Les chanes de caractres sont des tableaux de caractres. Un caractre spcial, \0,
de code ASCII 0, signie la n dune chane de caractres. Ainsi, une chane de
caractres de n caractres occupe au moins n + 1 octets : les n caractres plus le
caractre de n de chane.
char ch[]="une chaine"; /* Dclaration dune chane de caractres */
char *ch2 = "abc"; /* Pointeurs et tableaux peuvent presque
indiffremment tre utiliss */
char *ch3=ch2; /* ch3 pointe sur la mme chane que ch2 */
La gure 6.8 montre comment ces chanes de caractres sont gres en mmoire.
Les chanes de caractres tant fondamentalement des tableaux, laffectation dune
chane une autre copie ladresse de la chane, mais pas le contenu de la chane
elle-mme.
int taille_ch;
char ch[512], *copie_ch; /* Dclaration dune chane de caractres de
512 caractres ch, et dun pointeur */
printf("Entrez une chane"); /* Affichage de "Entrez une chane" */
scanf("%s",ch); /* lecture dune chane au clavier */
6.1 Programmation
C, Ada et LabVIEW
257


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
taille_ch = strlen(ch); /* taille_ch vaut la longueur de ch, sans
compter le caractre fin de chane */
copie_ch=(char *)malloc(sizeof(char)*(taille_ch+1)); /* Allocation
mmoire non initialise (utilisation de malloc) de taille juste
suffisante (taille de ch + le caractre de fin de chane) pour copier
la chane lue */
strcpy(copie_ch,ch); /* recopie de la chane ch dans copie_ch */
/* code ...*/
free(copie_ch); /* libration de la mmoire alloue copie_ch */
Les fonctions spciques aux chanes de caractres parcourent la ou les chanes jus-
quau caractre de n de chane. Ainsi, strcpy copie les caractres un un en incluant
le caractre de n de chane et termine. De mme, la comparaison de chanes, effec-
tue par strcmp, sarrte au premier caractre de n de chane rencontr.
M Langage Ada
Ada gre de faon fondamentalement diffrente pointeurs et tableaux, an de per-
mettre un suivi sr du droulement des programmes.
Un type tableau se dnit laide du mot cl array :
type Tab is array (1..5) of Integer;
-- type tableau indic de 1 5
T1: Tab := (1, 3, 5, 7, 9);
-- Dclaration de tableau initialis
T2 : Tab := (others=>4);
-- Dclaration de tableau initialis par agrgat
-- toutes les valeurs valent ainsi 4
Contrairement C, laffectation de tableaux effectue une recopie, et la comparaison
compare effectivement le contenu des tableaux. Laffectation de deux tableaux de
taille diffrente lve une exception ( 6.1.2, p. 276).
T1(1) := 3; -- la 1re case de T1 vaut 3
T2 := T1; -- T1 est recopi dans T2
Un tableau de taille dynamique est dclar de la faon suivante :
Caractre de fin de chane,
nomm aussi '\0'
0x23FF45
0x23FF20
0x23FF20
ch
ch2
ch3
'u' 'n' 'e' ' ' 'c' 'h' 'a' 'i' 'n' 'e' 0
'a' 'b' 'c' 0
0x23FF45
0x23FF20
Figure 6.8 Exemple de chanes de caractres en langage C.
258
6.1 Programmation
C, Ada et LabVIEW
6 Programmation
des systmes multitches
type Tab is array (natural range <>) of Integer;
-- type tableau dentiers de taille dynamique
T1: Tab(1..5) := (1, 3, 5, 7, 9);
-- Dclaration de tableau de taille 5 initialis indic de 1 5
T2 : Tab(0..3) := (others=>4);
-- Dclaration de tableau de taille 4 indic de 0 3
Notons quen langage Ada, les indices de tableau sont dpendants de la dclaration
du type. Notons aussi que tout type discret peut servir indicer un tableau. Ainsi,
le code suivant est correct :
type Bus_Externe is (RS232, Parallele, USB, FireWire, SCSI);
type Tableau_Debit is array (RS232..SCSI) of Integer;
-- Type tableau indic par un type numr
Debits : Tableau_Debit;
On peut ainsi accder par exemple Debits(RS232).
Les chanes de caractres sont de type String, dont la dnition est :
type String is array (Positive range <>) of Character;
Les pointeurs sont dnis par le mot cl access :
type Pt_Entier is access Integer; -- Type pointeur sur entier
P : Pt_Entier; -- Pointeur initialis null
Lallocation dynamique se fait laide de loprateur new, le drfrencement se
fait en adjoignant .all un pointeur :
P:= new Integer; -- allocation dynamique
P.all := 3; -- rfrencement du pointeur
Notons quil est possible daffecter une valeur au pointeur au moment de lallocation :
P:= new Integer(3); -- allocation dynamique et initialisation
Ada, qui est un langage sr, ne permet pas de rfrencer une variable quelconque.
Il est ncessaire pour cela de dire explicitement que la variable peut tre rfrence
par pointeur grce au mot cl aliased, et de permettre au type pointeur le rfren-
cement (mot cl access all ) :
type Pt_Entier is access all Integer;
I : aliased Integer;
P : Pt_Entier;
Ainsi, P peut rfrencer I :
P := Iaccess; -- P pointe sur I
Notons que contrairement C, Ada est muni dun ramasse miettes (garbage col-
lector) charg de rcuprer la mmoire dynamique ntant plus utilise. Il nest donc
pas ncessaire, sauf cas exceptionnel, de librer explicitement la mmoire alloue.
M Langage LabVIEW
LabVIEW permet de crer des tableaux de faon graphique (gure 6.9), mais na
pas la notion explicite de pointeur. En effet, la notion de pointeur nest pas com-
patible avec la philosophie ot de donne. Les pointeurs sont cependant accessibles
6.1 Programmation
C, Ada et LabVIEW
259


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
pour certains objets graphiques via des rfrences, ou des variables locales de faon
simplier certains types de programmation.
LabVIEW propose divers outils fonctionnant sur les tableaux (indexation, calcul
de la taille, construction, concatnation). Les tableaux sont indics de 0 n 1
comme en langage C. Notons que les ots de donnes tableaux sont reprs par
un trait pais conservant la couleur du type contenu dans le tableau. Il est ainsi
possible, comme sur les clusters, deffectuer directement des oprations arithmtiques
sur des tableaux entiers.
Lallocation mmoire est ralise de faon transparente, et LabVIEW vrie pendant
les oprations sur les tableaux quil ny a pas dbordement. La lecture dune case
allant au-del de la n dun tableau donne la valeur par dfaut du type (0 pour les
types numriques).
Les tableaux multidimensionnels sont crs de faon similaire.
Valeur non dfinie
Indice correspondant la 1
re
case visible
Figure 6.9 Cration dune commande de type tableau en langage LabVIEW.
Noter la diffrence
dpaisseur des traits
Figure 6.10 Manipulation de tableaux en langage LabVIEW.
260
6.1 Programmation
C, Ada et LabVIEW
6 Programmation
des systmes multitches
m Structures de contrle
M Langages C et Ada
La diffrence syntaxique entre structures de contrle C et Ada rside surtout dans
le fait quen langage C, une structure de contrle contient une seule instruction ou
bien un bloc (entre accolades) dinstructions, alors quen langage Ada, un bloc
contient des instructions et se termine au(x) mot(s) cl(s) terminateurs de blocs
(par exemple if, end id ).
Tableau 6.3 Structures de contrle en langage C et Ada.
C Ada
int T[10];
int i,j;
for (i=0;i<10;i++) {
T[i]=i;
}
j=0;
while (j<10) {
T[j]=j;
j++;
}
j=0;
do {
T[j]=j;
j++;
} while (j<10);
if (T[2]>=2) {
T[3]=1;
} else if (T[2]<1) {
T[3]=-1;
} else {
T[3]=0;
}
switch (T[2]) {
case 1:
T[3]=1;
T[4]=5;
break;
case 2:
T[3]=3;
T[4]=6;
break;
default:
T[2]=4;
}
T : array(1..10) of integer;
j:integer;
for i in 1..10 loop
T(i)=i-1;
end loop;
j:=1;
while j<=10 loop
T(j):=j-1;
j:=j+1;
end loop;
j:=1;
loop
T(j):=j-1;
j:=j+1;
exit when j>10;
end loop;
if T(3)>=2 then
T(4)=1;
elsif T(3)<1 then
T(4)=-1;
else
T(4)=0;
end if;
case T(2) is
when 1=>
T(3):=1;
T(4):=5;
when 2=>
T(3):=3;
T(4):=6;
when others=>
T(2):=4;
end case;
6.1 Programmation
C, Ada et LabVIEW
261


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
Nous pouvons noter que les indices de boucle ne sont pas dclars en langage Ada,
et que les indices de tableaux ne commencent pas ncessairement 0. Notons aussi
lemploi obligatoire de break la n de chaque alternative dune structure de choix
en langage C.
Notons aussi quen langage Ada, il est plus lgant de parcourir un tableau en uti-
lisant les attributs de tableau : ainsi, lexpression Trange vaut Trst..Tlast, cest-
-dire 1..10 pour lexemple donn sur le tableau 6.3. Donc, de faon plus lgante,
la boucle pour du tableau 6.3 peut scrire :
for i in Trange loop
T(i)=i-1;
end loop;
Notons aussi une subtilit lors de lvaluation des boolens, ayant un impact sur
les structures de choix : en langage C lvaluation des boolens est une valuation
paresseuse, ainsi le code C suivant est correct :
char ch[512]; /* Ch est indic de 0 511 */
scanf("%s",ch); /* Lecture au clavier de ch dau plus 10 caractres */
int i=0;
/* Recherche du caractre . */
while (i<sizeof(ch) && ch[i]!=. && ch[i]!=0) {
/* Tant que i est dans la chane et ch[i] diffrent de . et pas fin
de chane */
i++;
}
if (i<sizeof(ch) && ch[i]==.) {
/* Si on na pas dpass la fin de la chane et que i est lindice dun
caractre . */
printf("Il y a un . au caractre %d",i+1);
} else {
printf("Il ny a pas de point");
}
En effet, les expressions boolennes tant values paresseusement, si la premire
condition est fausse, le reste nest pas valu. Ainsi, on nessaie pas daccder au-del
de la chane ch.
Au contraire, en langage Ada, les expressions boolennes sont par dfaut values
compltement, ainsi, le code Ada suivant est erron, car mme si i est au-del de la
n de la chane, on accde Ch(i) :
Ch: String(1..512); -- Ch est indic de 1 512
I: Integer := 0;
Longueur: Integer;

Get_Line(Ch,Longueur); -- Lecture de Ch au clavier,


-- Longueur vaut la longueur de la chane lue
-- Recherche du caractre .
while (i<=Longueur and Ch(i)/=.) loop
-- Tant que i est dans la chane et ch(i) diffrent de .
i:=i+1;
end loop;
if (i<Longueur and ch(i)=.) then
-- Si on na pas dpass la fin de la chane
-- et que i est lindice dun caractre .
Put("Il y a un . au caractre "&IntegerImage(I+1));
262
6.1 Programmation
C, Ada et LabVIEW
6 Programmation
des systmes multitches
-- IntegerImage convertit un entier en chane de caractres
-- & est la concatnation
else
Put("Il ny a pas de point");
end if;
Ada propose les oprateurs and then et or else permettant une valuation paresseuse
dune expression boolenne.
M Langage LabVIEW
LabVIEW propose presque les mmes structures de contrle que C et Ada : la boucle
pour (gures 6.11 et 6.12), la boucle tant que (gure 6.13), la structure
conditionnelle (gure 6.14) qui ne se distingue de la structure de choix (gure 6.15)
que par la condition si cest un boolen, cest une structure conditionnelle, si
cest un autre type de base (entier, type numr, chane de caractre), alors cest
une structure de choix.
Notons sur la gure 6.11 la prsence dun registre dcalage, outil trs souvent
utilis dans les boucles. En effet, daprs la philosophie du ot de donnes : un nud
ne peut sexcuter que lorsque tous ses ots de donnes en entre sont prsents, il
ne peut pas y avoir de cycle. Par consquent, il ne serait pas possible de prendre un
l en sortie de boucle (ici, la moyenne des tempratures lues) et de le remettre en
entre de boucle. Cest pour cela que lon utilise le registre dcalage.
Notons aussi quan de faciliter lutilisation de boucles pour sur les tableaux,
LabVIEW fournit un mcanisme dindexation/dsindexation automatique de tableau.
Ainsi, sur la gure 6.12, le tableau en entre est index automatiquement (noter la
prsence de petits crochets sur le bord de la boucle) : la valeur prise dans le tableau
Registre dcalage :
valeur litration i
Registre dcalage :
valeur litration i-1
Valeur du registre dcalage
litration -1
Indicateurs visibles
sur la face avant
Figure 6.11 Boucle pour en langage LabVIEW.
6.1 Programmation
C, Ada et LabVIEW
263


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
de tempratures lindice de boucle i est le contenu de la i
me
case du tableau.
Dans ce cas, le programmeur na pas donner le nombre ditrations de boucle :
celui-ci est implicitement la taille du tableau en entre.
Sur la gure 6.12, un tableau est index automatiquement. Ce tableau, de mme
que tout ot sortant dune structure de contrle, nest cr qu la n de la boucle.
Tout se passe comme si les valeurs taient accumules lintrieur de la boucle, et
ntaient disponibles qu la n de celle-ci.
Une boucle tant que est caractrise par une condition darrt, prenant un para-
mtre boolen : sur la gure 6.13, ce paramtre est en bas droite, et sort de la boucle
la n de la premire itration pour laquelle le paramtre envoy la condition darrt
est vrai. En fait, la boucle tant que LabVIEW est une boucle faire jusqu
lorsque la condition darrt est affuble dun point rouge, et une boucle faire tant
que lorsque la condition darrt ne possde pas de point rouge.
Noter sur la gure 6.14 que toute structure de contrle est considre comme un
nud dans LabVIEW : si un ot sort dans un cas (ici une chane de caractres), alors
il doit sortir dans tous les cas.
Indexation automatique
Indexation automatique
i
me
valeur de tempratures C
Figure 6.12 Boucle pour avec indexation automatique en langage LabVIEW.
Figure 6.13 Boucle tant que en langage LabVIEW.
264
6.1 Programmation
C, Ada et LabVIEW
6 Programmation
des systmes multitches
Les deux cas possibles
Figure 6.14 Structure conditionnelle en langage LabVIEW.
3 cas possibles
Mme principe que la structure conditionnelle,
avec un type discret autre que boolen en entre
Cas par dfaut (inutile ici)
Figure 6.15 Structure de choix en langage LabVIEW.
6.1 Programmation
C, Ada et LabVIEW
265


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
Notons lexistence dune structure de contrle indite par rapport C et Ada : la
structure squence. En effet, LabVIEW est naturellement parallle car tous les nuds
prts sexcuter peuvent tre excuts, dans nimporte quel ordre. Lorsque lon
souhaite forcer un ordre dexcution, on pourra donc tre amen utiliser la structure
squence.
m Sous-programmes
M Langage C
En C, tout sous-programme est une fonction, prenant des paramtres en entre
uniquement et renvoyant une valeur. Le prototype dune fonction C deux arguments
est :
type_de_retour nom_fonction (type1 argument1, type2 argument2) ;
Par exemple, la fonction calculant le plus grand commun diviseur de deux entiers
a pour prototype :
int pgcd(int a, int b);
/*
Entre: a,b deux entiers
Retourne: le plus grand commun diviseur de a et b
Convention: pgcd(0,b) = pgcd(a,0) = 1
*/
Lquivalent dune procdure dans dautres langages (sous-programme ne renvoyant
pas de valeur) se fait en spciant un type de retour void. Ainsi, le prototype dune
fonction dafchage dentier peut tre :
void afficher(int a);
/*
Entre: a entier afficher
Entrane: affiche a
*/
tant donn que tous les arguments sont passs par valeur (les valeurs des arguments
sont recopies directement sur la pile au moment de lappel), an de passer un
paramtre en sortie ou en entre sortie, de sorte le modier dans la fonction, on
passe son adresse. Voici le prototype dune fonction transformant un mot en son
mot miroir (rappelons quun tableau est fondamentalement un pointeur) :
void miroir(char * ch);
/*
Entre/Sortie: ch
Entrane: ch = miroir(ch)
*/
Le problme est quil est alors difcile de distinguer, typiquement lorsquon passe
un tableau ou un pointeur en paramtre une fonction, si celui-ci est un paramtre
dentre, ou bien dentre/sortie. Pour distinguer cela, observons sur le prototype
de la fonction de recopie de chane de caractres lemploi du mot cl const (constant) :
char *strcpy(char *destination, const char *source)
/*
Entre: source
266
6.1 Programmation
C, Ada et LabVIEW
6 Programmation
des systmes multitches
Sortie: destination
Entrane: copie de source dans destination
Ncessite: sizeof(destination)>=strlen(source)+1
Retourne: ladresse de destination
*/
Les sous-programmes se dclarent plat , cest--dire quen langage C, il y a un
contexte global, dans lequel on dclare tous les types globaux, variables globales, et
constantes globales, ainsi que tous les sous-programmes. Un sous-programme par-
ticulier, nomm main (principal), est le programme principal, cest--dire le point
dentre du programme.
Voici un exemple de sous-programme et son utilisation dans un programme principal :
#include <stdio.h> /* inclusion des en-ttes dfinissant scanf et
printf */
#include <math.h> /* inclusion des en-ttes dfinissant abs */
int pgcd (int A, int B) {
/*
Entre: A,B deux entiers
Retourne: le plus grand commun diviseur de A et B
Convention: pgcd(0,B) = B, pgcd(A,0) = A
*/
int r;
int a=abs(A); /* Nous travaillons en valeur absolue */
int b=abs(B);
if (b>a) {
return pgcd(b,a);
}
r = a % b; /* Reste de la division entire */
if (r==0) {
return b;
} else {
return pgcd(b,r);
}
}
void main() {
int a,b;
printf("Donnez deux entiers:"); /* Affichage de texte */
scanf("%d %d",&a,&b); /* Lecture de a et b */
/* a et b sont passs par adresse car modifis par scanf */
printf("%d",pgcd(a,b));/*Affichage du rsultat de la fonction */
}
Remarque
Gnralement, les types de retour de fonction sont des types scalaires. Lutilisation de tableaux comme
types de retour est proscrire, car rappelons que laffectation de tableaux ne fait quune copie
dadresse et pas de contenu. Ainsi, un tableau cr lintrieur dune fonction est perdu ds la n
de celle-ci. En effet, en tant que variable locale, un tableau est cr dans la pile lors de lappel dune
fonction, et la pile est libre au retour de celle-ci ( 4.2.3, p. 154).
M Langage Ada
En Ada, il existe deux types de sous-programmes : les fonctions qui renvoient une et
une seule valeur, et ne prenant que des paramtres en entre (IN), et les procdures,
ne renvoyant pas de valeur mais pouvant prendre des paramtres en entre ou en
6.1 Programmation
C, Ada et LabVIEW
267


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
entre/sortie (IN OUT). Le prototype dune fonction en langage C deux argu-
ments est :
function Nom_Fonction(Arg1:Type1 ; Arg2 :Type2) return Type_Retour;
Le prototype dune procdure prenant un argument en entre, et lautre en entre/
sortie est :
procedure Nom_Procedure(Arg1:Type1 ; Arg2 : in out Type2);
Remarquons quimplicitement, un argument est en entre.
Par exemple, la fonction calculant le plus grand commun diviseur de deux entiers
a pour prototype :
function Pgcd(a: Integer; b: Integer) return Integer;
-- Entre: a,b deux entiers
-- Retourne: le plus grand commun diviseur de a et b
-- Convention: Pgcd(0,b) = Pgcd(a,0) = 1
Le prototype dune procdure daffichage dentier peut tre :
procedure Afficher(a : Integer);
-- Entre: a entier afficher
-- Entrane: affiche a
Les sous-programmes peuvent se dclarer lintrieur dautres sous-programmes
dans quelques cas trs rares. Contrairement au langage C, on travaille rarement en
contexte global en langage Ada. Gnralement, tout sous-programme, type, variable,
constante est dclar dans des paquetages (modules). Un chier au moins contient
une procdure seule : cest le programme principal (qui ne sappelle pas ncessaire-
ment main).
Voici un exemple de sous-programme et son utilisation dans un programme prin-
cipal. Pour plus de simplicit, avant la prsentation des paquetages, nous utilisons,
fait rare, un sous-programme interne une procdure :
with Ada.Text_Io, Ada.Integer_Text_Io;
use Ada.Text_Io, Ada.Integer_Text_Io;
-- utilisation des paquetages dfinissant put_line et get dentiers
procedure Test_Pgcd is -- Procdure principale
function Pgcd (I : Integer; J : Integer) return Integer is
-- Entre: I,J deux entiers
-- Retourne: le plus grand commun diviseur de I et J
-- Convention: pgcd(0,J) = J, pgcd(I,0) = I
R,A,B : Integer;
begin
A:=abs(I); -- Travail en valeur absolue
B:=abs(J);
if B>A then
return Pgcd(B,A);
else
R := A mod B; -- Reste de la division entire
if R=0 then
return B;
else
return Pgcd(B,R);
end if;
end if;
268
6.1 Programmation
C, Ada et LabVIEW
6 Programmation
des systmes multitches
end; -- Fin de la fonction Pgcd
-- Variables de la procdure principale
A,
B : Integer;
begin
Put_Line("Donnez deux entiers"); -- Affichage de texte
Get(A);
Get(B); -- Lecture des deux entiers au clavier
Put(Pgcd(A,B)); -- Affichage du rsultat lcran
end;
M Langage LabVIEW
Le langage LabVIEW est ingalable pour les tests unitaires de sous-programmes
car chaque programme est potentiellement un sous-programme. En effet, lorsquon
conoit un vi, les commandes sont les entres utilisateur, et les indicateurs les sorties
utilisateur. Le principe de lencapsulation LabVIEW permet de passer les commandes
dun vi par un autre vi, qui devient ainsi vi appelant, et rcupre les indicateurs
comme paramtres de sortie.
An dillustrer ce concept, considrons le vi donn sur la gure 6.15 qui transforme
une temprature donne dans une unit quelconque en degrs Celsius. Il peut tre
excut pendant la phase de dveloppement an de le tester. Ensuite, il est prt tre
utilis en tant que sous-programme. Pour cela, il suft de se placer sur sa face avant
et de visualiser les connecteurs sur licne du vi (gure 6.16). L, il ne reste plus qu
identier le fait que le vi possde un paramtre dentre et un paramtre de sortie
pour le transformer en sous-programme.
An de rendre le vi plus simple reconnatre dans les vi qui lutilisent, il reste
dessiner un icne personnalise, et le documenter (proprits du vi, documentation).
Icone pass en mode connecteurs
Identification
des connecteurs
Documentation
Figure 6.16 Sous-programme en langage LabVIEW.
6.1 Programmation
C, Ada et LabVIEW
269


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
Ainsi, laide contextuelle de LabVIEW permet dobtenir la documentation du vi
lorsque le pointeur de la souris est dessus. Pour linsrer dans un autre vi, un glisser-
dposer du chier ou de licne suft.
Notons une limitation de LabVIEW : le langage ne permet pas la rcursivit (voir
le calcul du plus grand commun diviseur sur la gure 6.17). Cela nest que trs
exceptionnellement gnant, tout algorithme rcursif pouvant sexprimer de faon
non rcursive. De plus, les algorithmes rcursifs mettent en jeu une utilisation trs
importante de la pile dappel et doivent tre proscrits dans les applications haut
niveau de sret.
m Modularit et visibilit
M Langage C
La gure 6.18 montre une hirarchie typique lie llaboration dun programme C.
Nous distinguons sur cette gure diffrents types dlments :
le chier excutable (extension .exe sur une plateforme Microsoft, ou sans
extension spcique sur des plateformes Unix ou Macintosh) ;
les objets (extension .o ou .obj ) permettent de reprsenter en code inter-
mdiaire trs proche du langage machine, les sous-programmes et les variables
globales ou spciques un module ;
les modules, entours sur la gure 6.19, reprsentent un arbre de dpendance
lors de la compilation. Un module dnit un ensemble de sous-programmes et
de variables globales ou spciques au module ;
Si R0, pgcd(A,B)=pgcd(B,R),
de plus, par construction, BR0
Valeur absolue
Le flot ne sort
qu la fin de la boucle,
donc lorsque B divise A
Dans le cas faux,
les fils sont simplement inverss
Division euclidienne
Figure 6.17 Pas de rcursivit en langage LabVIEW.
270
6.1 Programmation
C, Ada et LabVIEW
6 Programmation
des systmes multitches
gnralement, hormis le module intgrant le programme principal, les modules
sont composs de deux parties : un corps de module (extension .c donnant
limplmentation du module et dnissant les variables et constantes de module
ou globales), et un chier den-ttes de module, donnant la spcication de
linterface du module. Typiquement, cette spcication consiste en la dnition
de signatures des sous-programmes fournis par le module, ainsi que de constantes
et de variables dclares dans le chier .c ;
des librairies de modules prcompils permettent de regrouper diffrents objets
en un seul chier. Les chiers en-ttes dnissant les interfaces des modules restent
quant eux sous la forme de chiers .h .
Un programme est donc gnr partir de la compilation des modules, indpen-
damment les uns des autres. Sur la gure 6.19, nous utilisons la commande cc c
qui compile un module en un objet. Ce type de commande est typique du monde
Unix/Linux, ainsi que des compilateurs libres (GNU) que lon peut trouver sur la
plupart des plateformes.
Il reste ensuite laborer le chier excutable : il est compos dun sous-ensemble
de lunion de tous les sous-programmes, variables et constantes utilises lors de lex-
cution de la fonction main. Cest au moment de ldition de lien que la cohrence
est vrie : tous les symboles utiliss (sous-programmes, variables, constantes) sont-
ils implments ? Pour trouver chaque symbole, lditeur de liens puise les dnitions
et implmentations requises dans les objets et librairies fournis. Pendant llaboration,
il vrie quil ny a aucun symbole dni plusieurs fois.
Bien entendu, ces phases sont gres de faon transparente par la plupart des environ-
nements de dveloppement intgrs, mais il est important de connatre le droule-
dition de liens
cc-o pgcd.exe main.o-lstd-lm
dpend de
produit
compilation
cc-c main.c
Corps de module
(programme principal)
Corps de module
En-tte de module
En-tte de module
Fichier
excutable
Objet
Objet
main.o main.c
pgcd.o pgcd.c
compilation
cc-c pgcd.c
Librairie prcompile
libm.a
=
math.o
+
pgcd.h
math.h
En-tte de module
Librairie prcompile
libstd.a
=
stdio.o
+string.o
+mem.o
+
stdio.h
string.h

pgcd.exe
Figure 6.18 Hirarchie lors de llaboration dun programme crit en langage C.
6.1 Programmation
C, Ada et LabVIEW
271


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
ment prcis du processus an de comprendre et dviter les erreurs dues une hirar-
chie de compilation mal construite.
La compilation dun module seffectue en deux phases : un prprocesseur interprte
un langage macro an de remplacer toutes les macros par leur valeur. Le chier ainsi
prprocess , est compil en un objet (gure 6.19). Le langage macro commence
chacune de ses instructions par le caractre #. Ainsi, linstruction #define permet
dassocier un nom logique une suite dinstructions. Typiquement, ce type de
dnition est utilis pour les constantes de programme et les macros. Ainsi, sur la
gure 6.19, les constantes MAX_TEMP et MIN_TEMP sont substitues par leur
valeur par le prprocesseur.
Cest aussi une instruction prprocesseur qui permet de faire rfrence des
chiers den-ttes. Le prprocesseur se contente dinsrer leur contenu au chier
prprocess. Lors de la compilation du chier ainsi obtenu, le compilateur ne voit
donc aucune diffrence entre corps de module (le chier .c) et en-ttes de module.
Il en rsulte que ldition de lien du code suivant gnre une erreur :
/* Fichier temperature.h
Module contenant des dfinitions de fonctions de gestion de la
temprature courante */
float temperature_courante;
/* Variable globale
temprature courante en C */
float temperature_K();
/* retourne la temprature courante en K */
float temperature_F();
/* retourne la temprature courante en F */
void mettre_a_jour_temperature();
/* Met jour la temprature courante en C */
Prprocesseur
#include "temperature.h"
#define MAX_TEMP 90
#define MIN_TEMP 13

if (t>MAX_TEMP)

typedef structef {
int p,t;
}t_pression_temperature;

typedef structef {
int p,t;
}t_pression_temperature;

if (t>90)

Compilation
Compilation (par exemple, gcc -c temperature.c)
temperature.c
temperature.h
Code objet
temperature.o
Figure 6.19 Prprocesseur C.
272
6.1 Programmation
C, Ada et LabVIEW
6 Programmation
des systmes multitches
/* Fichier temperature.c
Corps de module contenant limplmentation des fonctions de gestion de
la temprature courante */
#include "temperature.h"
/* implementation des fonctions dclares dans
len-tte de module */
float temperature_K()
{
...
}
...
/* Fichier main.c contenant le programme principal */
#include "temperature.h"
void main() {
/* programme principal utilisant le module temperature */
...
}
En effet, lors de la compilation du chier temperature.c, la variable tempera-
ture_courante est dclare. Lors de la compilation du chier main.c, la mme
variable est dclare de nouveau. Par consquent, lors de ldition de lien, une erreur
vient du fait que cette variable est dclare plusieurs fois.
Par consquent, il est indispensable de pallier ce type de problme lorsque lon
programme de faon modulaire en langage C. Lune des techniques les plus utilises
consiste ne jamais faire de dclaration de variable dans un en-tte, et protger
un en-tte contre une insertion multiple dans le mme chier. Sur lexemple de code
prcdent, la faon de procder devient alors :
#ifndef _TEMPERATURE_H_
/* Ce qui suit est ignor jusqu linstruction #endif
si le symbole _TEMPERATURE_H_ est dj dfini */
#define _TEMPERATURE_H_
/* Dfinition prprocesseur empchant le fichier
dtre insr plusieurs fois dans la compilation
du mme fichier .c : le symbole _TEMPERATURE_H_ est
dfini lors de la premire inclusion de ce fichier
lors de la phase de prprocessing*/
extern float temperature_courante;
/* Rfrence externe une variable globale,
la variable globale nest pas dclare, mais on dit
explicitement au compilateur quelle est dclare quelque
part dans le programme. En loccurrence, elle est dclare
dans le corps du module */
float temperature_K();
/* retourne la temprature courante en K */
float temperature_F();
/* retourne la temprature courante en F */
void mettre_a_jour_temperature();
/* Met jour la temperature courante en C */
#endif
/* Fin du fichier den-tte */
6.1 Programmation
C, Ada et LabVIEW
273


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
/* Fichier temperature.c
Corps de module contenant limplmentation des fonctions de gestion de
la temprature courante */
#include "temperature.h"
/* implementation des fonctions dclares dans
len-tte de module */
float temperature_courante;
/* dclaration effective de la variable globale */
float temperature_K()
{
...
}
...
/* Fichier main.c contenant le programme principal */
#include "temperature.h"
void main() {
/* programme principal utilisant le module temperature */
...
}
M Langage Ada
Contrairement aux compilateurs C, les compilateurs Ada diffrencient corps de
module et en-tte de module. Un en-tte de module, ou spcication de module, est
un chier dextension .ads (pour Ada specication). Un corps de module est impl-
ment dans un chier dextension .adb (pour Ada body). Un module Ada est appel
paquetage ou package. Il y a trois sortes dunits de compilation en langage Ada :
les spcications de paquetages, les corps de paquetage et les procdures ou fonc-
tions pouvant se trouver directement dans une unit de compilation (extension .adb).
Typiquement dans un programme modulaire, on trouve un certain nombre de
paquetages et une unit de compilation contenant une procdure : le programme
principal.
La gure 6.20 prsente une hirarchie de programme modulaire en langage Ada.
compilation
dition de liens
Corps de module
(programme principal)
Fichier excutable
Spcification
de module
compilation
compilation
pgcd.ads
pgcd.adb
Corps de module
pgcd.o
Objet
pgcd.exe
Ada.Text_io
Ada.Integer_Text_io
Modules prcompils
pgcd.ali
Test_pgcd.o
Objet
Test_pgcd.adb
dpend de
produit
Figure 6.20 Hirarchie lors de llaboration dun programme crit en langage Ada.
274
6.1 Programmation
C, Ada et LabVIEW
6 Programmation
des systmes multitches
Sur cette gure, nous distinguons un module pgcd (paquetage pgcd) dcompos
en un corps (chier pgcd.adb) et une spcication (chier pgcd.ads) dont le contenu
serait le suivant :
package Pgcd is
function Calcul_Pgcd (I : Integer; J : Integer) return Integer;
-- Entre: I,J deux entiers
-- Retourne: le plus grand commun diviseur de I et J
-- Convention: pgcd(0,J) = J, pgcd(I,0) = I
end Pgcd;
On peut noter lemploi du mot cl package permettant de dnir une unit de
compilation de type spcication de module.
Le code source du corps de paquetage, dni par les mots cls package body, est
donn ci-aprs :
package body Pgcd is
-- Noter que contrairement C, il est inutile de prciser
-- que le corps de paquetage utilise la spcification: cela est
-- implicite
function Calcul_Pgcd (I : Integer; J : Integer) return Integer is
-- Entre: I,J deux entiers
-- Retourne: le plus grand commun diviseur de I et J
-- Convention: pgcd(0,J) = J, pgcd(I,0) = I
R,A,B : Integer;
begin
A:=abs(I); -- Travail en valeur absolue
B:=abs(J);
if B>A then
return Calcul_Pgcd(B,A);
else
R := A mod B; -- Reste de la division entire
if R=0 then
return B;
else
return Calcul_Pgcd(B,R);
end if;
end if;
end; -- Fin de la fonction Calcul_Pgcd
end Pgcd; -- Fin du paquetage
La procdure principale, place dans le chier Test_pgcd.adb, est :
with Ada.Text_Io, Ada.Integer_Text_Io,pgcd;
use Ada.Text_Io, Ada.Integer_Text_Io,pgcd;
-- utilisation des paquetages prdfinis dfinissant les
-- entres/sorties de type texte et entier,
-- ainsi que du paquetage pgcd
procedure Test_Pgcd is -- Procdure principale
A,
B : Integer;
begin
Put_Line("Donnez deux entiers"); -- Affichage de texte
Get(A); -- Lecture des deux entiers au clavier
Get(B);
Put(Calcul_Pgcd(A,B)); -- Affichage du rsultat
end;
6.1 Programmation
C, Ada et LabVIEW
275


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
Lemploi des mots cls with et use, placs gnralement en dbut dunit de com-
pilation, permet de faire rfrence aux spcications de paquetage concernes.
Lemploi de la clause with M donne une unit de compilation la visibilit des
types, variables, sous-programmes, etc. dnis dans la spcication du module M.
Cependant, lemploi de ces lments doit alors tre prx par le nom du module.
Ainsi, pour utiliser la fonction F dnie dans le module M, il faut crire son nom
complet, soit M.F. On peut utiliser la clause use M, qui permet dobtenir une visi-
bilit directe, ce qui permet dappeler la fonction F sans prxer son nom par M.
Ada dnit en fait des espaces de noms lis aux modules. Ainsi, toute ambigut
peut tre leve si une unit de compilation utilise plusieurs modules dnissant
des lments ayant le mme nom.
Notons enn que dans tous les cas, il est fortement recommand dutiliser un nom
de chier identique au nom du paquetage ou du sous-programme contenu (i.e. si un
paquetage sappelle temperature, alors les chiers limplmentant sappellent tempe-
rature.ads et temperature.adb).
De nombreux concepts permettant de grer nement la visibilit des types et sous-
programmes contenus dans les paquetages, la gnricit, les modules imbriqus, etc.,
ne sont pas explicits ici.
M Langage LabVIEW
Le langage LabVIEW permet une modularit par sous-programme (vi) : en effet,
lorsquun sous-vi est cr, il peut tre intgr dans un autre vi directement par
nom de chier (par glisser/dposer du chier sur le diagramme du vi par exemple).
Gnralement, on organise les vi par types dans des dossiers du systme de chiers,
en les regroupant par thme.
m Traitement des erreurs
M Langage C
La gestion des erreurs en langage C est relativement basique : une partie des fonctions
susceptibles de renvoyer une erreur (accs un chier, au rseau, conversions chane
de caractres/nombre, etc.) renvoient un entier reprsentant le statut derreur.
Gnralement, une valeur de retour nulle est renvoye sil ny a pas eu derreur, et -1
ou un code derreur est renvoy en cas derreur. Dans le cas o le code derreur lui-
mme nest pas renvoy par la fonction, celle-ci modie une variable globale, nomme
errno (numro derreur), qui contient le code de lerreur venant de survenir.
Les fonctions renvoyant un pointeur (allocation mmoire, ouverture de chier, etc.)
renvoient un pointeur null (valant 0) lorsquune erreur est survenue. L encore,
la variable errno peut tre consulte an de connatre le code de lerreur.
Par consquent un code source C traitant les erreurs est une succession de structures
conditionnelles : la valeur de retour de chaque fonction susceptible de gnrer une
erreur est teste. Si lon saperoit dune erreur, celle-ci est immdiatement traite.
Ce type de mcanisme diminue la lisibilit des programmes.
Nous prsentons ci-dessous un exemple de code C grant les erreurs : dans le cas
normal, un chier est ouvert, un traitement non dtaill ici a lieu, puis le chier
est ferm.
276
6.1 Programmation
C, Ada et LabVIEW
6 Programmation
des systmes multitches
#include <stdio.h>
/* Inclusion de la librairie systme dentres/sorties standard
Noter lemploi de <nomfichier> au lieu de "nomfichier"*/
#include <errno.h>
int main () {
FILE *f; /* f est un descripteur de fichier, destin pointer
sur une structure reprsentant un fichier */
int retval;/* variable utilis lorsque lon veut conserver une
valeur de retour */
if (!(f=fopen("monfichier","r"))) {/* Ouverture dun fichier en
lecture. */
/* Si fopen renvoie null */
/* Noter lemploi des doubles parenthses :
en langage C, laffectation renvoie une valeur, ainsi, lexpression
(a=b), en plus daffecter b a, renvoie la valeur de b. Cette valeur
peut alors tre teste : est-elle nulle ? */
printf("Erreur %d lors de louverture du fichier",errno);
/* affichage du numro derreur */
return(errno); /* Terminaison du programme en renvoyant le
code derreur */
}
/* Traitements divers */
if ((retval=fclose(f))) { /* Fermeture du fichier. */
/* Si fclose renvoie une valeur non nulle, cest un code derreur */
printf("Erreur %d lors de louverture du fichier",retval);
/* affichage du numro derreur */
return(retval); /* Terminaison du programme en renvoyant
le code derreur */
}
return 0; /* Normalement, un programme se terminant sans erreur
devrait renvoyer la valeur 0 */
}
Cet exemple met en vidence lun des cueils lis lutilisation du C : le traitement
des erreurs rend le code difcile lire.
Notons enn que le mcanisme utilisant errno nest pas compatible avec le multi-
tche : en effet, rien nempche une autre tche de modier le contenu de la variable
errno entre le moment o lerreur survient dans une tche et le moment o celle-ci
lit la valeur du code derreur. Par consquent, certains excutifs, comme VxWorks

par exemple, dnissent une variable errno par tche.


M Langage Ada
Ada gre les erreurs suivant un mcanisme dexception. Le concept dexception
est proche du concept dinterruption logicielle prsent au chapitre 5. Chaque
bloc dinstructions peut tre muni dune partie traite exception . Si une erreur a
lieu, une exception correspondant au type derreur est leve. Lexcution du bloc en
cours est alors interrompue. Si le bloc contient un traitement pour cette exception,
alors ce traitement est excut, le bloc se termine, et le programme continue au niveau
du bloc appelant ou englobant. Si le bloc ne contient pas de traitement pour cette
exception, alors lexception est propage au bloc appelant ou englobant. Si une excep-
tion nest pas traite, elle arrive au bloc de plus haut niveau (programme principal,
ou bien tche) et ce bloc arrte son excution. Si cest dans le programme principal
6.1 Programmation
C, Ada et LabVIEW
277


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
lui-mme que lexception est propage, alors le programme sarrte (un message
derreur est alors afch).
Ce mcanisme permet de grer les erreurs sans nuire la lisibilit dun programme,
contrairement la gestion des erreurs en langage C. Ainsi, lexemple trait en langage
C au paragraphe 6.1.2, p. 276 est repris ci-aprs en langage Ada :
with Ada.Text_Io;
use Ada.Text_Io;
-- Paquetage standard permettant les entres/sorties
procedure Test_Fichier is
F: File_Type;
-- Descripteur de fichier
begin
Open(F,In_File,"monfichier");
-- Ouverture dun fichier en lecture
-- Actions diverses sur le fichier
Close(F);
-- Fermeture du fichier
exception
when Name_Error => Put_Line("Erreur de nom de fichier");
-- Traitement spcifique de lexception Name_Error
when others => Put_Line("Erreur sur le fichier");
-- Traitement pour toute exception
end;
Remarquons le traitement derreurs spar du code, et la lisibilit amliore.
Cependant, notons quil est parfois difcile de savoir quest-ce qui est lorigine de
lexception. Il est possible de gnrer soi-mme une exception. Notons quune des
limitations du langage est quune exception ne peut pas transporter de valeur, ce qui
est assez dommage.
M Langage LabVIEW
La gure 6.21 prsente un exemple de gestion derreur en langage LabVIEW.
Un vi pouvant lever une erreur possde une sortie de type cluster derreur (gure 6.22)
gnralement nomme error out. La plupart des vi susceptibles de lever des erreurs
possdent une entre et une sortie derreur. En cas derreur dans un vi, sa sortie
Descripteur de fichier
Cluster derreur
Figure 6.21 Gestion des erreurs en langage LabVIEW.
278
6.1 Programmation
C, Ada et LabVIEW
6 Programmation
des systmes multitches
derreur contient les informations derreur. Un vi ayant une erreur sur son entre
derreur ne fait rien, et se contente de relayer lerreur sur sa propre sortie derreur.
Ainsi, si une chane de traitement voit se lever une erreur, les vi sexcutent sans
rien faire, si ce nest relayer lerreur au reste de la chane. Gnralement, on traite
donc lerreur a posteriori, en vriant ltat de la dernire sortie derreur dune chane
de traitement.
Sur la gure 6.21, le traitement derreur consiste afcher une bote de dialogue
dcrivant celle-ci. Notons que depuis la version 7 de LabVIEW, une erreur non traite
entrane lafchage dune bote de dialogue de description de lerreur (ce mode de
fonctionnement peut tre inhib an de garantir une compatibilit ascendante au
niveau des versions). Ce type de traitement se rapproche alors de lexception.
m Programmation bas niveau
M Introduction
Sur les microcontrleurs et parfois sur les microprocesseurs, il est ncessaire de
programmer au niveau des registres en particulier, cause de labsence de pilotes de
priphrique pour certains systmes dexploitation ou excutifs. La programmation
bas niveau est gnralement effectue en langage C, bien quAda le permette ( 6.1.2,
p. 282). LabVIEW, quant lui, ne propose que trs peu doutils de trs bas niveau,
mais il possde un grand nombre de pilotes de priphriques. Si un priphrique
nest pas support par LabVIEW, un pilote peut tre crit en langage C et facile-
ment interfac avec LabVIEW.
Dans cette section, nous considrons lexemple suivant : la carte National Instruments
PCI-DIO-24/PnP est une carte dacquisition trs simple au format PCI, avec 3 ports
de 8 entres/sorties numriques, capable de dclencher des interruptions. Supposons
quil nexiste pas de pilote de priphrique pour lexcutif utilis avec cette carte. Il
est alors ncessaire de programmer directement la carte au niveau registres.
Les registres permettant lunit centrale de communiquer avec un priphrique
dentres/sorties sont gnralement lis une adresse, dite dentre/sortie, en mmoire.
Figure 6.22 Reprsentation dune erreur en langage LabVIEW.
6.1 Programmation
C, Ada et LabVIEW
279


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
Lire ou modier une adresse dentre/sortie correspond lire ou modier un registre
du dispositif dentres/sorties correspondant.
Si lon ne se sert pas de la possibilit de gnration dinterruptions matrielles, la carte
PCI-DIO-24/PnP est caractrise par 4 registres dun octet. Le 4
e
octet est le registre
de conguration de la carte (gure 6.23). An de simplier sa programmation, nous
nous limitons au mode simple pour les trois ports : toutes les lignes vont dans le
mme sens sur le port A, il en est de mme pour le port B, alors que le port C est
coup en deux parties (de 4 bits) pouvant chacunes tre congures dans un sens.
Il est gnralement possible de congurer ladresse de base lie aux registres dun
dispositif dentres/sorties : ainsi, par exemple, en fonction de la conguration mat-
rielle, les adresses des registres de la carte pourront se trouver en 0x210-0x213.
Dans ce cas, le premier registre, dont les 8 bits correspondent au port A de la carte,
se trouve en 0x210, le registre correspondant au port B en 0x211, le registre corres-
pondant au port C en 0x212 et le registre de conguration en 0x213.
M Langage C
La conguration de la carte peut se faire de deux faons : soit en utilisant directement
un octet cr pour correspondre la conguration dsire, soit en dnissant une
fonction de conguration, rutilisable pour cette carte dacquisition.
Dans le premier cas, si les ports doivent tre congurs de sorte ce que le port A
et les lignes 0 3 du port C soient en sortie, et le reste en entre, on peut crer
loctet de conguration : en binaire b00001010, soit en hexadcimal 0x0A. Linitia-
lisation de la carte consisterait donc crire 0x0A ladresse 0x213 (par exemple
en excutant une instruction dcriture une adresse dentre/sortie comme
OutByte(0x213,0x0A)). Cette solution est simple mais il est ncessaire de relire
plusieurs pages de documentation pour chaque changement de conguration.
La seconde solution, plus lgante, consiste crer un pilote de priphrique (driver)
simpli. Pour cela, C permet de dnir assez nement un type facilitant les op-
rations bit bit sur le registre de conguration :
0 1 2 3
Flag : mode de programmation du registre
(0 : configuration du mode, 1 : configuration bits)
Mode
A
: slection du mode du port A et des lignes 4 7 du port C
(00 : mode simple, 01 : mode synchronis, 10 et 11 : mode bidirectionnel)
DirA : direction des 8 lignes du port A (0 : sortie, 1 : entre)
DirCH : direction des lignes 4 7 du port C (0 : sortie, 1 : entre)
Mode
B
: slection du mode du port B et des lignes 0 3 du port C
(0 : mode simple, 1 : mode synchronis)
DirB : direction des 8 lignes du port B (0 : sortie, 1 : entre)
DirCL : direction des lignes 0 3 du port C (0 : sortie, 1 : entre)
4 7 5 6
Mode
A
DirCL DirB Mode
B
DirCH DirA Flag
Figure 6.23 Registre de configuration dune carte dacquisition.
280
6.1 Programmation
C, Ada et LabVIEW
6 Programmation
des systmes multitches
#ifndef BYTE
#define BYTE unsigned char /* Octet non sign */
#endif
typedef union { /* Correspond au registre de configuration : on peut y
accder indiffremment par octet (champ config) ou par bits */
BYTE config; /* Octet complet */
struct { /* Dfinit chaque champ (sur 1 ou 2 bits en fonction du
champ) */
BYTE DirCL:1;
BYTE DirB: 1;
BYTE ModeB:1;
BYTE DirCH:1;
BYTE DirA:1;
BYTE ModeA:2;
BYTE Flag:1;
} ;
} t_DIO24_config;
Noter la faon de donner dans un type enregistrement (struct) la taille en bits de
chaque champ. Grce lutilisation dune union, on peut accder de deux faons
loctet : directement en tant quoctet, ou bien champ par champ. Ainsi, par exemple,
le champ DirB correspond au deuxime bit (en partant du bit de poids faible) de
loctet.
Si lon souhaite crer un pilote de priphrique mme de grer plusieurs cartes de
ce type, chacune une adresse de base, on peut crer une fonction dinitialisation
comme celle qui suit (remarquer lutilisation de lunion dnissant laccs au registre
de contrle) :
/* Dcalage des registres par rapport ladresse de base */
typedef enum {PORTA=0, PORTB=1, PORTC=2, CONFIG=3} Port_DIO24;
/* Dfinition dun type reprsentant la carte DIO24 en mode simple */
typedef struct {
int base; /* Adresse de base de la carte */
BYTE valeurs[3]; /* Mmorise les dernires valeurs crites sur les
ports, sert fournir des oprations dcriture avec masque binaire */
t_DIO24_config config;
} t_DIO24; /* Reprsente ltat dune carte DIO24 */
void ConfigDIO24(int adresse_base, char DirectionA, char DirectionB,
char DirectionCH, char DirectionCL, t_DIO24* DIO24) {
/* Entres: adresse_base est ladresse de base de la carte. La
direction des ports est 1 pour sortie, 0 pour entre
Sorties: DIO24 est une structure renseigne dans cette fonction,
est utilise dans les fonctions dentres/sorties sur la carte*/
(*DIO24).base=adresse_base;
(*DIO24).config.config=0; /* loctet passe 0, donc tous les
champs valent 0 dans lunion reprsentant le registre de configuration
*/
(*DIO24).config.DirA= !DirectionA; /* Si Direction vaut 0
(entre), le bit correspondant doit tre mis 1 */
(*DIO24).config.DirB= !DirectionB;
(*DIO24).config.DirCH= !DirectionCH;
(*DIO24).config.DirCL= !DirectionCL;
/* Par dfaut, les ports initialiss en sortie sont mis 0 */
memset((*DIO24).valeurs,0,3); /* Mise 0 du tableau des dernires
valeurs crites */
6.1 Programmation
C, Ada et LabVIEW
281


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
outByte(adresse_base+CONFIG,(*DIO24).config.config); /* Ecriture
de la configuration ladresse du port de contrle */
}
Sur un microprocesseur, lorsquon crit une adresse dentre/sortie, il est gnra-
lement ncessaire dutiliser une fonction spcique, comme outByte dans lexemple.
Sur un microcontrleur, linstruction outByte(adresse,valeur) serait gnrale-
ment remplace directement par (*adresse)=valeur.
An de donner un exemple de manipulation binaire sur un cas concret (voir 4.1.3,
p. 123), tudions la manire de programmer lcriture sur un port de la carte (soit
dun octet avec masque, soit dune seule ligne), ainsi que la lecture.
void EcrirePort(t_DIO24 *DIO24,Port_DIO24 port,BYTE valeur,BYTE
masque) {
/* Modifie un port configur en sortie : utilise la technique du
masque binaire comme vu sur la figure 4.10
Ncessite: DIO24 pralablement configur par ConfigDIO24 */

(*DIO24).valeurs[port]=(valeur&masque)|(~masque&(*DIO24).valeurs[port
]); /* Calcul de la nouvelle valeur en fonction de lancienne et du
masque */
outByte((*DIO24).base+port,(*DIO24).valeurs[port]); /* Ecriture
ladresse dentre/sortie correspondant au port */
}
void EcrireLigne(t_DIO24 *DIO24, Port_DIO24 port, BYTE ligne, BYTE
valeur) {
/* Modifie une ligne dun port configur en sortie
Ncessite: DIO24 pralablement configur par ConfigDIO24 */
if (valeur) /* Mise 1 */
(*DIO24).valeurs[port]|=(1<<ligne);
else /* Mise 0*/
(*DIO24).valeurs[port]&= ~(1<<ligne);
outByte((*DIO24).base+port,(*DIO24).valeurs[port]); /* Ecriture
ladresse dentre/sortie correspondant au port */
}
BYTE LirePort(t_DIO24 *DIO24,Port_DIO24 port) {
/* Lit ltat dun port configur en entre
Ncessite: DIO24 pralablement configur par ConfigDIO24 */
return inByte((*DIO24).base+port);/* Lecture de ladresse
dentre/sortie correspondant au port */
}
BYTE LireLigne(t_DIO24 *DIO24,Port_DIO24 port, BYTE ligne) {
/* Lit ltat dune ligne dun port configur en entre
Ncessite: DIO24 pralablement configur par ConfigDIO24 */
return (inByte((*DIO24).base+port)>>ligne)&1; /* Lecture du port,
dcalage de bit pour obtenir la valeur de la ligne sur le bit de poids
faible, suppression des autres 1 ventuels de la valeur renvoye */
}
Remarquons la faon dont le masque binaire est gr pour lcriture dun octet
(gures 4.9 et 4.10). Une erreur classique est dutiliser le non logique (point
dexclamation) la place du complment binaire (tilde). Notons aussi que pour
simplier, les erreurs (tentative dcriture sur un port congur en lecture, etc.) ne
sont pas gres.
282
6.1 Programmation
C, Ada et LabVIEW
6 Programmation
des systmes multitches
Voici un exemple dutilisation de ce pilote de priphrique :
t_DIO24 DIO; /* Structure reprsentant une carte configure */
ConfigDIO24(0x210, 1, 0, 0, 1, &DIO); /* Configuration : adresse
0x210, A et CL en criture, B et CH en lecture */
EcrireLigne(&DIO,PORTA,0,1); /* Mise 1 de la ligne 0 du port A */
EcrirePort(&DIO,PORTA,0x8F,0xF0); /* Mise 1 de la ligne 7, et 0
des lignes 6, 5, 4 du port A */
M Langage Ada
Comme C, Ada permet de grer trs nement les reprsentations binaires associes
un type. Par exemple, la dnition dun type octet peut seffectuer de la faon
suivante :
type Octet is mod 256; -- Intervalle de reprsentation du type
-- correspondant un octet
for OctetSize use 8; -- Taille en bits utilise pour la reprsentation
Ada permet de matriser la taille associe un type, et son intervalle de reprsenta-
tion. Ainsi, le type suivant pourrait permettre daccder champ par champ loctet
de contrle de la carte dacquisition PCI-DIO-24/PNP (gure 6.23).
type Bit is range 0..1; -- Domaine de valeur de 1 bit
type Bitx2 is range 0..3; -- Domaine de valeur de 2 bits
type Direction_Port is (sortie,entree); -- Type enumr utilis pour
-- dfinir la direction dun port
type T_Control_Dio24 is record -- Dfinition dun enregistrement
-- correspondant au registre de contrle
Dir_CL : Direction_Port;
Dir_B : Direction_Port;
Mode_B : Bit;
Dir_Ch : Direction_Port;
Dir_A : Direction_Port;
Mode_A : Bitx2;
Mode : Bit;
end record;
for T_Control_Dio24 use record -- Clause de reprsentation: le type
-- se plaque sur loctet de contrle
Dir_CL at 0 range 0..0;
Dir_B at 0 range 1..1;
Mode_B at 0 range 2..2;
Dir_Ch at 0 range 3..3;
Dir_A at 0 range 4..4;
Mode_A at 0 range 5..6;
Mode at 0 range 7..7;
end record;
La syntaxe utilise pour les clauses de reprsentation, bien que plus exible que celle
du langage C, nen demeure pas moins plus lourde.
An de reprsenter un port congur comme cela est effectu en langage C dans la
section prcdente, le type enregistrement suivant peut tre dni :
type T_Port_DIO24 is (A, B, C); -- Valeurs des ports, noter que la
-- position de A vaut 0, celle de B 1
-- et celle de C 2
type T_Valeurs_De_Port is array(A..C) of Octet;
type T_Dio_24 is record -- Type utilis pour reprsenter la carte
-- DIO24 (en mode simple)
6.1 Programmation
C, Ada et LabVIEW
283


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
Base: System.Address; -- Adresse de base
Valeurs: T_Valeurs_De_Port; -- Dernire valeur crite sur chaque
-- port
Config: T_Control_DIO24; -- Octet de configuration
end record;
La procedure de conguration de la carte donne ci-aprs montre comment associer
une adresse mmoire une variable. Noter quil est ncessaire dutiliser le paquetage
System.
procedure Config_Dio24(Base: System.Address; Dir_A,
Dir_B,Dir_CH,Dir_CL: Direction_Port;Dio24: out T_Dio_24) is
-- Entres: base est ladresse de base de la carte. Les paramtres
-- Dir_x donnent la direction des ports
-- Sorties: DIO24 est cr: il est utilis dans les fonctions
-- dentres/sorties sur la carte
Control_Reg: T_Control_DIO24; -- Correspond au registre de contrle
-- (sur 1 octet)
for Control_RegAddress use Base+3; -- Adresse du registre de
-- contrle=Base+3
begin
Dio24.Base:=Base;
for Port in T_Port_Dio24range loop
Dio24.Valeurs(Port):=0;
end loop;
Dio24.Config.Mode:=0; -- Tous les champs de mode valent 0
Dio24.Config.Mode_A:=0;
Dio24.Config.Mode_B:=0;
Dio24.Config.Dir_A:=Dir_A; -- Les champs de direction correspondent
-- 0 pour sortie, 1 pour entre
Dio24.Config.Dir_B:=Dir_B;
Dio24.Config.Dir_CH:=Dir_CH;
Dio24.Config.Dir_Cl:=Dir_Cl;
Control_Reg:=Dio24.Config; -- Mise jour effective du registre de
-- contrle
end;
La lecture et lcriture des ports utilisent le mme principe. Noter que ce sont les
mmes oprateurs que pour les boolens qui oprent en mode binaire lorsque les
types manipuls sont de type mod comme le type octet.
procedure Ecrire_Port(Dio24: in out T_Dio_24; Port: T_Port_Dio24;
Valeur, Masque: Octet) is
-- Modifie un port configur en sortie : utilise la technique du
masque binaire comme vu sur la figure 4.10
-- Ncessite: DIO24 pralablement configur par Config_DIO24
Port_Reg: Octet; -- Correspond ladresse dentre/sortie du
-- registre li au port modifier
for Port_RegAddress use Dio24.Base+(T_Port_Dio24Pos(Port));
-- Par construction, la position du port dans le type numr est le
-- dcalage par rapport ladresse base
begin
Dio24.Valeurs(Port):=(Valeur and Masque) or ((not Masque) and
Dio24.Valeurs(Port)); -- Calcul de la nouvelle valeur en fonction de
-- lancienne et du masque
Port_Reg:=Dio24.Valeurs(Port); -- Mise jour effective du registre
-- du port
end;
procedure Ecrire_Ligne(Dio24: in out T_Dio_24; Port: T_Port_Dio24;
Ligne: Integer; Valeur: Boolean) is
284
6.1 Programmation
C, Ada et LabVIEW
6 Programmation
des systmes multitches
-- Modifie une ligne dun port configur en sortie
-- Ncessite: DIO24 pralablement configur par Config_DIO24
Port_Reg: Octet;
for Port_RegAddress use Dio24.Base+(T_Port_Dio24Pos(Port));
begin
if Valeur then
Dio24.Valeurs(Port):=Dio24.Valeurs(Port) or 2**Ligne;
-- Mise 1 du bit ligne, 2**i correspond en binaire un nombre
-- compos dun 1 sur le bit i
else
Dio24.Valeurs(Port):=Dio24.Valeurs(Port) and not (2**Ligne);
-- Mise 0 du bit ligne
end if;
Port_Reg:=Dio24.Valeurs(Port);
end;
function Lire_Port(Dio24: T_Dio_24; Port: T_Port_Dio24) return Octet
is
-- Lit ltat dun port configur en entre
-- Ncessite: DIO24 pralablement configur par Config_DIO24
Port_Reg: Octet;
for Port_RegAddress use Dio24.Base+(T_Port_Dio24Pos(Port));
begin
return Port_Reg;
end;
function Lire_Ligne(Dio24: T_Dio_24; Port: T_Port_Dio24; Ligne:
Integer) return Boolean is
-- Lit ltat dune ligne dun port configur en entre
-- Ncessite: DIO24 pralablement configur par Config_DIO24
Port_Reg: Octet;
for Port_RegAddress use Dio24.Base+(T_Port_Dio24Pos(Port));
begin
if (Port_Reg and 2**Ligne)/=0 then
return True;
else
return False;
end if;
end;
tant donn quAda est fortement typ, lutilisation du pilote de priphrique ainsi
programm ncessite lemploi de la fonction de conversion dentier en adresse, situe
dans le paquetage System.Storage_Elements.
Dio24 : T_Dio_24;
begin
Config_Dio24(To_Address(16#210#),Sortie, Entree, Sortie,
Entree,Dio24);
Ecrire_Ligne(Dio24,A,0,True);
Ecrire_Port(Dio24,A,16#8F#, 16#F0#);
end;
Cet exemple montre quAda permet la programmation bas niveau. Il faut cependant
jongler avec les types et les conversions, tout en ayant conscience de la reprsentation
binaire de ce que lon manipule.
Dans les faits, la programmation bas niveau est souvent effectue en langage C.
Il est donc trs frquent quun pilote de priphrique soit disponible en langage C,
mais pas en langage Ada. Dans ce cas, plutt que de rcrire totalement le pilote,
un binding (interface entre deux langages) Ada est cr.
6.2 Programmation multitche
en langage C
285


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
6.2 Programmation multitche en langage C
Comme cela a t noti prcdemment, le langage C noffre pas de support natif
pour le multitche. Il existe donc diffrentes normes (POSIX, OSEK/VDX, etc.)
ou bibliothques propritaires (VxWorks

, RTEMS, etc.) permettant une program-


mation multitche.
Ce sous-chapitre montre donc comment on peut implmenter une conception
DARTS dans une norme (POSIX) et une bibliothque propritaire (VxWorks

).
6.2.1 Implmentation en tches POSIX
m Interface POSIX 1003.1c et 1003.1j
Linterface multitche (pthread) dnie par la norme POSIX se trouve dans les
amendements 1003.1c (intgre dans 1003.1 depuis 2001) et 1003.1j. Lapport
principal de lamendement 1003.1j est lajout de la possibilit de spcier lutilisa-
tion de diffrentes horloges (notamment CLOCK_MONOTONIC).
m Implmentation des lments DARTS
M Tches
Une tche (pthread) est reprsente par une fonction pouvant possder au plus un
paramtre de type void *. Ce paramtre peut tre utilis pour passer une donne
de la taille dun pointeur (gnralement, on peut y passer un entier, ou bien nimporte
quel pointeur).
Chaque tche se lance dynamiquement grce la fonction pthread_create. La
signature de cette fonction est :
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine)(void*), void *arg);
Le paramtre thread est un paramtre de sortie, qui contiendra lidenticateur de
la tche nouvellement cre. Cette valeur pourra tre utilise dans dautres fonctions
de manipulation de tche.
Le paramtre start_routine est un pointeur vers la fonction implmentant la
tche. Le dernier paramtre, arg, est le paramtre ventuel pass cette fonction.
Le paramtre le plus complexe est attr : en effet, ce paramtre sert de fourre-tout .
On y trouve des paramtres de conguration dune tche comme :
le fait quelle soit dtache ou pouvant tre attache (par dfaut). Dans le cas o
une tche est dtache, il nest pas possible dattendre directement sa terminaison.
Si une tche est attache une autre, ou bien au programme principal, alors il
est possible dattendre sa terminaison ;
la taille et ladresse de sa pile ;
son type dordonnancement (la faon dont on ordonnance les tches lles de la
tche cre, ce qui importe peu dans le cas o toutes les tches sont au mme
niveau hirarchique), sa priorit, et le fait quelle soit ordonnance localement
( lintrieur du processus pre) ou de faon globale.
286
6.2 Programmation multitche
en langage C
6 Programmation
des systmes multitches
Enn, la valeur de retour est 0 si la tche a bien t cre, un code derreur sinon.
Il est possible de crer une hirarchie de tches, mais dans la mthode DARTS, que
nous implmentons, toute tche est lle directe du programme principal. Par cons-
quent, au lancement de la tche, son masque de signaux est le mme que celui du
programme principal. Il pourra ensuite tre modi.
Un exemple trs simple de programme multitche POSIX est donn ci-aprs :
#include <pthread.h> /* Librairie POSIX threads */
#include <stdio.h> /* Entres/Sorties (printf) */
void f(int no) { /* Fonction implmentant une tche */
int i;
for (i=0;i<10;i++) {
printf("Tache %d : iteration %d\n",no,i);
usleep(1000000); /* Attente dau moins une seconde */
}
}
void main() {
pthread_t tache1, tache2;/* identificateurs de tches */
pthread_create(&tache1, 0,f, (void *)1);
/* Cration et lancement dune instance de la tche f. Observer
lutilisation du paramtre pour passer un entier. Noter quen passant
la valeur nulle au paramtre dattribut, les attributs par dfaut sont
choisis, et notamment, la tche peut tre attache */
usleep(2000000); /* Attente dau moins 2 secondes */
pthread_create(&tache2, 0,f, (void *)2); /*Cration de la seconde
tche, implmente par la mme fonction*/
pthread_join(tache1,NULL); /* Le programme principal sattache
la tche 1. Il ne se terminera que lorsque cette tche se terminera */
}
Cet exemple montre le lancement de deux tches implmentes par la mme fonc-
tion. Il illustre le fonctionnement en mode attach/dtach de la faon suivante :
seule la tche 1 est attache au programme principal. Ds quelle se termine, et que
le programme principal a la main, celui-ci arrive sur la dernire instruction et se
termine avant que la tche 2, cre au moins deux secondes aprs la tche 1, nait
le temps de se terminer. Le rsultat de cette excution peut tre :
Tache 1 : iteration 0
Tache 1 : iteration 1
Tache 2 : iteration 0
Tache 1 : iteration 2
Tache 2 : iteration 1
Tache 1 : iteration 3
Tache 2 : iteration 2
Tache 1 : iteration 4
Tache 2 : iteration 3
Aprs la terminaison de la tche 1, la tche 2 obtient la main avant le programme
principal et a le temps deffectuer une 4
e
itration avant la terminaison du programme
principal.
Nous pouvons noter que toutes les fonctions manipulant les tches commencent par
pthread_.
6.2 Programmation multitche
en langage C
287


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
Si lon souhaite quune tche fonctionne de faon spcique, il faut lui donner des
attributs spciques. Ainsi, dans le code ci-aprs, la tche 1 se voit ordonnance
(si le systme le supporte) de faon globale, alors que la tche 2 lest de faon locale.
On obtient donc un ordonnancement mixte.
pthread_attr_t attributs;
/* Attribut utilis lors de la cration des tches */

pthread_attr_init(&attributs);
/*Initialisation des attributs aux valeurs par dfaut*/
pthread_attr_setscope(&attributs, PTHREAD_SCOPE_SYSTEM);
/* Lordonnancement des tches cres avec cet attribut seffectue
au niveau global */
pthread_create(&tache1, &attributs,f, (void *)1);
/* La tche 1 est ordonnance au niveau global */
usleep(2000000);
pthread_attr_setscope(&attributs, PTHREAD_SCOPE_PROCESS);
/* Lordonnancement des tches cres avec cet attribut seffectue
au niveau local */
pthread_create(&tache2, &attributs,f, (void *)2);
/*Cration de la seconde tche, ordonnance localement*/
pthread_attr_destroy(&attributs);
pthread_join(tache1,NULL);
/* Le programme principal sattache la tche 1. Il ne poursuivra
son excution jusqu sa terminaison que lorsque cette tche se
terminera */
Nous pouvons noter que toutes les fonctions manipulant les attributs de tches
commencent par pthread_attr suivi du nom de lattribut modier. Il est possi-
ble de modier (respectivement interroger) la plupart des attributs dune tche
pendant son excution avec des fonctions dont le prxe est pthread_set_ (respecti-
vement pthread_get_).
Il faut souligner que plusieurs compilateurs prsents sur des systmes dexploitation
gnralistes proposent une interface POSIX 1003.1c, mais que celle-ci est malheureu-
sement souvent incomplte (impossibilit dattacher une tche, gestion des priorits
et de lordonnancement absents). Par consquent, il convient de tester les valeurs
de retour des fonctions POSIX an dy dceler des erreurs (notamment fonction-
nalit non implmente ).
M Ordonnancement et priorits
Les attributs de tches permettent de leur affecter une priorit ds leur lancement.
Il est aussi possible de modier la priorit dune tche au cours de son excution
grce la fonction pthread_set_schedparam.
#include <pthread.h>
void f(int no) {
int i;
for (i=0;i<5;i++) {
printf("Tache %d : iteration %d\n",no,i);
usleep(1000000);
}
}
void main() {
288
6.2 Programmation multitche
en langage C
6 Programmation
des systmes multitches
pthread_t taches[5]; /* Tableau didentificateurs de tches */
struct sched_param schedparam; /* Paramtre servant affecter une
priorit aux tches */
pthread_attr_t attributs; /* Attributs utiliss lors de la
cration des tches */
int i;
schedparam.sched_priority = 30;
pthread_setschedparam(pthread_self(),SCHED_RR,&schedparam); /*
Modifie lordonnancement du programme principal, et passe sa priorit
30 */
pthread_attr_init(&attributs); /*Initialisation des attributs aux
valeurs par dfaut*/
pthread_attr_setinheritsched(&attributs, PTHREAD_EXPLICIT_SCHED);
/* Force la prise en compte des paramtres dordonnancement de
lattribut: sans cela, ils seraient hrits du programme principal */
pthread_attr_setschedpolicy(&attributs, SCHED_RR); /*
Ordonnancement tourniquets par niveaux de priorits */
for (i=0;i<5;i++) {
schedparam.sched_priority = 2+i; /* Priorit de la prochaine
tche crer */
pthread_attr_setschedparam(&attributs, &schedparam); /* La
priorit est place dans les attributs */
pthread_create(&(taches[i]), &attributs,f, (void *)i);
}
pthread_attr_destroy(&attributs);
for (i=0;i<5;i++) {
pthread_join(taches[i],NULL); /* Attente de terminaison des
tches */
}
}
M Modules de donnes
Les modules de donnes DARTS peuvent tre implments laide dun smaphore
dexclusion mutuelle (mutex). Ainsi, une partie du code correspondant la gure 6.24
est donne ci-aprs.
#include <pthread.h>
/* Type utilis pour le module de donnes */
typedef struct {
float Temperature;
float Pression;
} t_Temperature_Pression;
T1
T2
LIRE
CRIRE
MDD1
Figure 6.24 Module de donnes DARTS.
6.2 Programmation multitche
en langage C
289


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
t_Temperature_Pression MDD1; /*Dclaration du module de donnes MDD1*/
pthread_mutex_t s_MDD1; /* Mutex protgeant MDD1 */
void T1() {
/* Tche 1 lisant le module de donnes */
t_Temperature_Pression TP;
while (1) { /* Faire toujours */
/* Exclusion mutuelle sur le module de donnes */
pthread_mutex_lock(&s_MDD1);
/* Lecture du MDD */
TP=MDD1;
pthread_mutex_unlock(&s_MDD1);
/* etc. */
}
}
void T2() {
/* Tche 2 modifiant le module de donnes */
float T,P;
while (1) { /* Faire toujours */
/* Lecture des capteurs en dehors de la section critique */
P=Lire_Capteur_Pression();
T=Lire_Capteur_Temperature();
/* Exclusion mutuelle sur le module de donnes */
pthread_mutex_lock(&s_MDD1);
/* Modification du MDD */
MDD1.Temperature=T;
MDD1.Pression=P;
pthread_mutex_unlock(&s_MDD1);
/* etc. */
}
}
void main() {
pthread_t t1,t2; /* Identificateurs de tches */
pthread_mutex_init(&s_MDD1,NULL); /*Initialisation du mutex de MDD1
*/
/* Initialisation de MDD1 */
MDD1.Temperature=Lire_Capteur_Temperature();
MDD1.Pression=Lire_Capteur_Pression();
/* Lancement des tches */
pthread_create(&t1, NULL,T1,NULL);
pthread_create(&t2, NULL,T2,NULL);
/* Attente de terminaison */
pthread_join(t1,NULL);
pthread_join(t2,NULL);
}
On peut remarquer que le smaphore est dclar de faon globale, ce qui le rend
visible aux deux tches concernes. Notons quil est cr et initialis avant le lance-
ment des tches, par exemple dans le programme principal.
Il est ncessaire de rduire la dure des sections critiques, par consquent, sur cet
exemple, laccs au matriel via les fonctions de lecture de capteurs, trs longues, doit
seffectuer lextrieur de la section critique daccs au module de donnes.
Si lon souhaite soccuper des priorits, an de pouvoir effectuer une tude dordon-
nanabilit, il convient de dnir des priorits pour les tches, de dnir une prio-
290
6.2 Programmation multitche
en langage C
6 Programmation
des systmes multitches
rit plafond pour le smaphore (la plus forte des priorits des tches lutilisant), et
de lui affecter le protocole priorit plafond.
Ainsi, le programme principal devient :
void main() {
pthread_t t1,t2; /* Identificateurs de tches */
pthread_attr_t task_attr; /* Attributs de tches */
pthread_mutexattr_t mutex_attr; /* Attributs de mutex */
struct sched_param schedparam; /* Paramtre servant affecter une
priorit aux tches */
pthread_mutexattr_init(&mutex_attr); /* Initialisation des
attributs du mutex */
pthread_mutexattr_setprioceiling(&mutex_attr,40); /* Initialisation
de la priorit plafond du mutex max_priorit(t1,t2) */
pthread_mutexattr_setprotocol(&mutex_attr,PTHREAD_PRIO_PROTECT); /*
Utilisation du protocole priorit plafond. Ce protocole est
malheureusement optionnel dans les implmentations POSIX */
pthread_mutex_init(&s_MDD1,&mutex_attr); /* Initialisation du mutex
de MDD1 */
MDD1.Temperature=Lire_Capteur_Temperature();/* Initialisation de
MDD1 */
MDD1.Pression=Lire_Capteur_Pression();
schedparam.sched_priority = 41;
pthread_setschedparam(pthread_self(),SCHED_RR,&schedparam); /*
Modifie lordonnancement du programme principal, et passe sa priorit
41 */
pthread_attr_init(&task_attr); /*Initialisation des attributs aux
valeurs par dfaut*/
pthread_attr_setinheritsched(&task_attr, PTHREAD_EXPLICIT_SCHED); /
* Force la prise en compte des paramtres dordonnancement de
lattribut: sans cela, ils seraient hrits du programme principal */
pthread_attr_setschedpolicy(&task_attr, SCHED_RR); /*
Ordonnancement tourniquets par niveaux de priorits */
schedparam.sched_priority = 30; /* Priorit de t1 */
pthread_attr_setschedparam(&task_attr, &schedparam); /* La priorit
de t1 est place dans les attributs */
pthread_create(&t1, &task_attr,T1,NULL); /* Lancement de t1 */
schedparam.sched_priority = 40; /* Priorit de t2 */
pthread_attr_setschedparam(&task_attr, &schedparam); /* La priorit
de t2 est place dans les attributs */
pthread_create(&t2, NULL,T2,NULL); /* Lancement de t1 */
/* Libration de la mmoire utilise par les attributs */
pthread_mutexattr_destroy(&mutex_attr);
pthread_attr_destroy(&task_attr);
pthread_join(t1,NULL);
pthread_join(t2,NULL);
}
Nous voyons ici lun des inconvnients de POSIX : la puissance et la souplesse de la
norme impliquent un effort de code important pour arriver une solution intgrant
toutes les contraintes dsires.
Il serait aussi possible de protger les modules de donnes grce un verrou de type
rwlock (lecteur/crivain) lorsquil y a plusieurs lecteurs. Cependant, cet outil ne
permet pas lutilisation du protocole priorit plafond.
6.2 Programmation multitche
en langage C
291


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
M Botes aux lettres
POSIX ne dnit malheureusement aucun outil de communication par message
spcique aux tches. Lamendement 1003.1b, orient processus, dnit quant lui
les botes aux lettres nommes permettant deux processus de communiquer.
tant donn leur champ dapplication, leur utilisation est lourde. De plus, cet
outil ne propose que des botes aux lettres sans crasement, ce qui nest pas sufsant
pour implmenter tous les lments de communication par message de la mthode
DARTS. Par consquent, an dimplmenter une communication par messages au
niveau tches uniquement, nous dnissons ici un module, nomm BaLs, fournissant
diffrents types de botes aux lettres utilisant les mutex et les variables conditionnelles
(voir le concept au 5.2.2, p. 189). Lutilisation de ce couple doutils permet en
effet de dnir des moniteurs, partir desquels tout outil de communication et/ou
de synchronisation peut tre cr.
Botes aux lettres de taille 1 avec crasement
Le premier type de bote aux lettres implment correspond aux botes aux lettres
de taille 1 avec crasement, que nous nommerons bal_ecr.
La spcication de ce type abstrait est :
/* Bote aux lettres avec crasement de taille 1 (i.e. rception
bloquante, envoi non bloquant) */
typedef struct s_bal_ecr {
char * buf; /* Zone dans laquelle le message est stock, mmoire
alloue DYNAMIQUEMENT par bal_ecr_init */
unsigned char vide;/* boolen permettant de savoir si la bote
est vide ou pleine */
pthread_mutex_t mutex;/* Smaphore dexclusion mutuelle
garantissant quune seule tche manipule la structure */
pthread_cond_t pas_vide;/* Variable conditionnelle utilise
pour signaler un ajout dlment susceptible de rveiller une tche en
attente */
unsigned taille_element;/* taille dun lment de bote aux
lettres */
} *bal_ecr;
bal_ecr bal_ecr_init(const unsigned taille_element);
/* Cre et initialise une bote aux lettres crasement vide
pouvant contenir un lment de taille_element octets
Ncessite: taille_element>0
Renvoie: la BaL si succs, 0 sinon */
int bal_ecr_recevoir(bal_ecr bal, char *buf);
/* Attend un message et reoit un message de la BaL b
Primitive bloquante
Ncessite: b initialise par bal_ecr_init
taille(buf) >= taille_element donn lors de bal_ecr_init
Entraine: buf contient le message reu
Renvoie: taille_element */
int bal_ecr_envoyer(bal_ecr bal, const char *buf);
/* Envoie un message dans la BaL b en crasant si besoin le message
prsent
Primitive non bloquante
Ncessite: b initialise par bal_ecr_init
taille(buf) >= taille_element donn lors de bal_ecr_init
Entraine: la bote aux lettres contient le message buf
292
6.2 Programmation multitche
en langage C
6 Programmation
des systmes multitches
Renvoie: taille_element */
void bal_ecr_delete(bal_ecr bal);
/* Supprime la BaL b
Ncessite: b initialise par bal_ecr_init
Entraine: b est supprime */
Limplmentation des primitives manipulant les botes aux lettres crasement est
donne ci-aprs :
bal_ecr bal_ecr_init(const unsigned taille_element) {
bal_ecr bal;
if (!(bal=(bal_ecr)malloc(sizeof(struct s_bal_ecr)))) return
0;/* Allocation de la structure */
if (!((*bal).buf=(char *)malloc(taille_element))) return 0;/*
Allocation du buffer contenant un message */
(*bal).vide=1;/* Initialement la bal est vide */
pthread_mutex_init(&((*bal).mutex),0);/* Cration du smaphore
garantissant lexclusion mutuelle des accs la structure */
(*bal).taille_element=taille_element;
pthread_cond_init(&((*bal).pas_vide), 0);/* Variable conditionnelle
qui sera dclenche lorsquun message est ajout */
return bal;
}
int bal_ecr_recevoir(bal_ecr bal, char *buf) {
pthread_mutex_lock (&(*bal).mutex);
/* Exclusion mutuelle */
while ((*bal).vide) {
/* Tant que la bote aux lettres est vide */
pthread_cond_wait (&(*bal).pas_vide, &(*bal).mutex);/* On
attend que la bal contienne un message */
}
memcpy(buf,(*bal).buf,(*bal).taille_element);/* Copie du
message dans buf */
(*bal).vide=1;/* La bote est maintenant vide */
pthread_mutex_unlock (&(*bal).mutex);/* Fin de lexclusion
mutuelle */
return (*bal).taille_element;
}
int bal_ecr_envoyer(bal_ecr bal, const char *buf) {
pthread_mutex_lock (&(*bal).mutex);
/* Exclusion mutuelle */
memcpy((*bal).buf,buf,(*bal).taille_element);/* Le message
crase un ventuel message prsent dans la bal */
(*bal).vide=0;/* La bote contient un message */
pthread_mutex_unlock (&(*bal).mutex);/* Fin de lexclusion
mutuelle */
pthread_cond_signal (&(*bal).pas_vide);/* On rveille
lventuel thread en attente dun message */
return (*bal).taille_element;
}
void bal_ecr_delete(bal_ecr bal) {
pthread_cond_destroy(&(*bal).pas_vide);
pthread_mutex_lock(&(*bal).mutex);
free((*bal).buf);
pthread_mutex_unlock(&(*bal).mutex);
free(bal);
}
6.2 Programmation multitche
en langage C
293


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
Notons la faon dont on utilise la variable conditionnelle : une tche se met en attente
en appelant pthread_cond_wait(&(*bal).pas_vide, &(*bal).mutex). Cela a
pour effet de librer le mutex, et dattendre un signal sur la variable conditionnelle
&(*bal).pas_vide. La tche dposant un message signale cette variable an de
rveiller les tches en attente, qui peuvent alors vrier si un message est prsent.
Lorsquau maximum une tche est en attente, le signal de la variable seffectue avec
pthread_cond_signal, alors que lorsque plusieurs tches sont susceptibles dtre
en attente, le signal seffectue laide de la fonction pthread_cond_broadcast.
Limplmentation partielle du schma DARTS donn sur la gure 6.25 est donc :
#include <pthread.h>
/* Inclusion du module de botes aux lettres */
#include "BaLs.h"
/* Type utilis pour la bote aux lettres */
typedef struct {
float Temperature;
float Pression;
} t_Temperature_Pression;
bal_ecr B1; /* Dclaration de la bote aux lettres */
void T1() {
/* Tche envoyant des messages dans B1 */
t_Temperature_Pression TP;
while (1) { /* Faire toujours */
/* Lecture des capteurs en dehors de la section critique */
TP.Pression=Lire_Capteur_Pression();
TP.Temperature=Lire_Capteur_Temperature();
bal_ecr_envoyer(B1,(char*)&TP); /* Envoi du message */
/* Noter la perte de linformation de type lors du passage dans
la bote aux lettres */
/* etc. */
}
}
void T2() {
/* Tche en attente de messages dans B1 */
t_Temperature_Pression TP;
while (1) { /* Faire toujours */
bal_ecr_recevoir(B1,(char*)&TP); /* Attente du message */
/* Noter la coercion dans le type attendu */
/* etc. */
}
}
void main() {
B1
T1 T2
Figure 6.25 Communication par bote aux lettres de taille 1 avec crasement.
294
6.2 Programmation multitche
en langage C
6 Programmation
des systmes multitches
pthread_t t1,t2; /* Identificateurs de tches */
B1=bal_ecr_init(sizeof(t_Temperature_Pression));/* Initialisation
de B1 */
/* Lancement des tches */
pthread_create(&t1, NULL,T1,NULL);
pthread_create(&t2, NULL,T2,NULL);
/* Attente de terminaison */
pthread_join(t1,NULL);
pthread_join(t2,NULL);
}
Botes aux lettres de taille 1 sans crasement
Pour les botes aux lettres sans crasement (gure 6.26), la dmarche adopte est simi-
laire celle utilise pour les botes aux lettres avec crasement. La diffrence vient du
fait que dans ce cas, les tches mettrices peuvent tre bloques. On utilise donc deux
variables conditionnelles : lune ddie signaler larrive de message (pas_vide),
lautre ddie au signalement de suppression de message (pas_plein). Limplmen-
tation est de type producteur/consommateur.
/* Bote aux lettres de taille 1 sans crasement (i.e. envoi et
rception bloquants) */
typedef struct s_bal {
char * buf;/* Zone dans laquelle le message est stock, mmoire
alloue DYNAMIQUEMENT par bal_init */
unsigned char vide;/* boolen permettant de savoir si la bote
est vide ou pleine */
pthread_mutex_t mutex;/* Smaphore dexclusion mutuelle
garantissant quune seule tche manipule la structure */
pthread_cond_t pas_plein,pas_vide;/* Variables conditionnelles
utilises pour signaler un ajout/retrait dlment susceptible de
rveiller une tche en attente */
unsigned taille_element;/* taille dun lment de bote aux
lettres */
} *bal;
bal bal_init(const unsigned taille_element);
/* Cre et initialise une bote aux lettres vide
pouvant contenir un lment de taille_element octets
Ncessite: taille_element>0
Renvoie: la BaL si succs, 0 sinon */
int bal_recevoir(bal b, char *buf);
/* Attend un message et reoit un message de la BaL b
Primitive bloquante
Ncessite: b initialise par bal_init
taille(buf) >= taille_element donn lors de bal_init
Entraine: buf contient le message reu
Renvoie: taille_element */
int bal_envoyer(bal b, const char *buf);
B1
T1 T2
Figure 6.26 Communication par bote aux lettres de taille 1 sans crasement.
6.2 Programmation multitche
en langage C
295


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
/* Envoie un message dans la BaL b (peut attendre que la BaL soit
vide)
Primitive bloquante
Ncessite: b initialise par bal_init
taille(buf) >= taille_element donn lors de bal_init
Entraine: la bote aux lettres contient le message buf
Renvoie: taille_element */
void bal_delete(bal b);
/* Supprime la BaL b
Ncessite: b initialise par bal_init
Entraine: b est supprime */
Le corps de ce module est donn ci-aprs :
bal bal_init(const unsigned taille_element) {
bal b;
if (!(b=(bal)malloc(sizeof(struct s_bal)))) return 0; /*
Allocation de la structure */
if (!((*b).buf=(char *)malloc(taille_element))) return 0; /*
Allocation du buffer contenant un message */
(*b).vide=1; /* Initialement la bal est vide */
pthread_mutex_init(&((*b).mutex),0); /* Cration du smaphore
garantissant lexclusion mutuelle des accs la structure */
(*b).taille_element=taille_element;
pthread_cond_init (&((*b).pas_vide), 0); /* Variable
conditionnelle qui sera dclenche lorsquun message est ajout */
pthread_cond_init (&((*b).pas_plein), 0); /* Variable
conditionnelle qui sera dclenche lorsque la bal est vide */
return b;
}
int bal_recevoir(bal b, char *buf) {
pthread_mutex_lock (&(*b).mutex);
/* Exclusion mutuelle */
while ((*b).vide) {
pthread_cond_wait (&(*b).pas_vide, &(*b).mutex);
/* On attend que la bal contienne un message */
}
memcpy(buf,(*b).buf,(*b).taille_element); /* Copie du message
dans buf */
(*b).vide=1; /* La bote est maintenant vide */
pthread_mutex_unlock (&(*b).mutex); /* Fin de lexclusion
mutuelle */
pthread_cond_broadcast (&(*b).pas_plein); /* On rveille
dventuelles tches en attente sur la bote pleine */
return (*b).taille_element;
}
int bal_envoyer(bal b, const char *buf) {
pthread_mutex_lock (&(*b).mutex);
/* Exclusion mutuelle */
while (!(*b).vide) {
pthread_cond_wait (&(*b).pas_plein, &(*b).mutex);
/* On attend que la bal soit vide */
}
memcpy((*b).buf,buf,(*b).taille_element); /* On copie le
message dans la bal */
(*b).vide=0; /* La bote contient un message */
pthread_mutex_unlock (&(*b).mutex); /* Fin de lexclusion
mutuelle */
pthread_cond_signal (&(*b).pas_vide); /* On rveille
lventuelle tche en attente dun message */
296
6.2 Programmation multitche
en langage C
6 Programmation
des systmes multitches
return (*b).taille_element;
}
void bal_delete(bal b) {
pthread_cond_destroy(&(*b).pas_vide);
pthread_cond_destroy(&(*b).pas_plein);
pthread_mutex_lock(&(*b).mutex);
free((*b).buf);
pthread_mutex_unlock(&(*b).mutex);
free(b);
}
Limplmentation de tches communiquant par botes aux lettres est presque iden-
tique celle prsente pour lutilisation de botes aux lettres avec crasement. La
seule diffrence rside dans les noms de fonctions utiliss. Notons quil aurait t
possible de surcharger les fonctions, cest--dire de crer des fonctions de mme
nom (bal_init, bal_envoyer, bal_recevoir et bal_delete) manipulant des
types de botes aux lettres diffrents. Il en a t dcid autrement an de faciliter la
lisibilit du code, et parce que limplmentation suit normalement la conception,
pendant laquelle le type de bote aux lettres utilis a t choisi.
Autres botes aux lettres
Le lecteur trouvera en annexe C lextension des botes aux lettres de taille 1 avec et
sans crasement au cas des botes aux lettres de taille n (gure 6.27). La le de messages
est implmente par un tableau circulaire. La prise en compte dune priorit de mes-
sages peut seffectuer de deux faons : soit le nombre de priorits est lev, dans ce
cas la gestion de la le dattente consiste en un tri par insertion des messages, ce qui
est coteux, soit il ny a que deux niveaux de priorit (normal et urgent,) et on
peut crer deux les de messages.
M Synchronisation
Gnralement, on implmente la synchronisation (gure 6.28) laide de smaphores
compte ( 5.2.2, p. 201). Cependant, nous avons vu au chapitre 6 que les amen-
dements 1003.1c et 1003.1j ne proposent pas cet outil de synchronisation. Les
smaphores compte sont dnis dans la partie 1003.1b oriente processus.
Cependant, il est possible, la cration dun smaphore compte 1003.1b, de forcer
celui-ci ne pas tre partag par plusieurs processus.
T1 T2
B1
T3 T4
B2
Figure 6.27 Communication par bote aux lettres de taille n.
6.2 Programmation multitche
en langage C
297


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
#include <pthread.h>
#include <semaphore.h>
sem_t S1; /* Smaphore de synchronisation */
void T1() {
/* Tche dclenchant une synchronisation S1 */
while (1) { /* Faire toujours */
/*etc. */
sem_post(&S1); /* Dclenchement de la synchronisation */
/* etc. */
}
}
void T2() {
/* Tche en attente sur la synchronisation S1 */
while (1) { /* Faire toujours */
sem_wait(&S1); /* Attente de synchronisation */
/* etc. */
}
}
void main() {
pthread_t t1,t2; /* Identificateurs de tches */
sem_init(&S1,0,0); /* Smaphore non partag par des processus
initialiss 0 */
/* Lancement des tches */
pthread_create(&t1, NULL,T1,NULL);
pthread_create(&t2, NULL,T2,NULL);
/* Attente de terminaison */
pthread_join(t1,NULL);
pthread_join(t2,NULL);
}
M Tches priodiques
Il nest pas trivial de rendre une tche priodique en POSIX. Certains systmes
proposent des primitives spciques non POSIX (sufxe _np au nom de la fonction)
permettant de grer la priodicit stricte des tches. Ainsi, RTLinux fournit une fonc-
tion pthread_make_periodic_np permettant de rendre une tche priodique.
Cependant, la non portabilit de cette fonction est gnante. Il existe aussi des solu-
tions lourdes, bases sur la programmation dhorloges gnrant des signaux rcuprs
par les tches priodiques. Le problme est que diffrentes implmentations partielles
de POSIX ne les supportent pas. Une autre solution, non satisfaisante, consisterait
endormir une tche pendant la dure de sa priode (fonctions nanosleep ou
usleep), mais elle expose la tche au problme de la drive des horloges ( 5.2.4).
La solution retenue ici, fonctionnant sur la plupart des implmentations POSIX,
mme partielles, consiste utiliser la fonction pthread_cond_timedwait, attente
T1 T2
S1
Figure 6.28 Synchronisation.
298
6.2 Programmation multitche
en langage C
6 Programmation
des systmes multitches
borne sur une variable conditionnelle, car cette fonction utilise une date absolue
de timeout. Lide est de crer une variable conditionnelle jamais signale dans chaque
tche priodique : lattente de la prochaine date dactivation seffectue par le biais
du timeout de pthread_cond_timedwait.
Ainsi, limplmentation des tches de la gure 6.29 est donne ci-aprs.
#include <pthread.h>
void ajouter_microsecondes(struct timespec *time, long us) {
/* Modifie la structure time afin dy ajouter us microsecondes */
(*time).tv_nsec+=(us%1000000)*1000; /* Ajout des microsecondes au
champ en nanosecondes */
(*time).tv_sec+=(us/1000000)+((*time).tv_nsec/1000000000); /*
Ajout des secondes entires au champ en secondes */
(*time).tv_nsec%=1000000000; /* Si il y avait dbordement des
nanosecondes sur les secondes, il a t ajout aux secondes dans
linstruction prcdente */
}
void Periodique(long periode_us) {
/* Tche priodique affichant sa priode chaque priode */
/* periode_us : priode en microsecondes */
struct timespec horloge; /* consitue dun champ en secondes, et
dun autre en nanosecondes */
pthread_cond_t Reveil; /* Variable conditionnelle utilise par les
tches priodiques afin de se rveiller sur timeout */
/* Cette variable nest jamais signale */
pthread_mutex_t sReveil; /* Mutex li la variable conditionnelle
*/
pthread_mutex_init(&sReveil,NULL); /* Initialisation du mutex */
pthread_cond_init(&Reveil,NULL); /* Initialisation de la variable
conditionnelle */
clock_gettime(CLOCK_REALTIME, &horloge); /* heure courante de
lhorloge au dmarrage de la tche */
while (1) {
printf("Periode %d\n",periode_us);
ajouter_microsecondes(&horloge,periode_us);/* Calcul de la
date du prochain reveil */
pthread_mutex_lock(&sReveil);
pthread_cond_timedwait(&Reveil, &sReveil, &horloge);
/* Cette variable ntant pas signale, cest au timeout que
cette instruction se termine */
}
}
HTR (2 ms)
Priodique 1
HTR (1,5ms)
Priodique 2
Figure 6.29 Deux tches priodiques.
6.2 Programmation multitche
en langage C
299


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
void main() {
pthread_t periodique1,periodique2;
pthread_create(&periodique1, NULL,Periodique, (void*)1000); /*
Lancement de la tche avec une priode d1 ms */
pthread_create(&periodique2, NULL,Periodique, (void*)1500); /*
Lancement de la tche avec une priode d1,5 ms */
pthread_join(periodique1,NULL); /* Attente de terminaison */
pthread_join(periodique2,NULL); /* Attente de terminaison */
}
Une solution proche, plus simple, consiste utiliser les smaphores de lamendement
1003.1, qui intgrent aussi une primitive dattente borne dans le temps par une
date. Limplmentation de la gure 6.29 deviendrait alors :
#include <pthread.h>
#include <semaphore.h>
void ajouter_microsecondes(struct timespec *time, long us) {
/* Modifie la structure time afin dy ajouter us microsecondes */
(*time).tv_nsec+=(us%1000000)*1000; /* Ajout des microsecondes au
champ en nanosecondes */
(*time).tv_sec+=(us/1000000)+((*time).tv_nsec/1000000000); /*
Ajout des secondes entires au champ en secondes */
(*time).tv_nsec%=1000000000; /* Si il y avait dbordement des
nanosecondes sur les secondes, il a t ajout aux secondes dans
linstruction prcdente */
}
void Periodique(long periode_us) {
/* Tche priodique affichant sa priode chaque priode */
/* periode_us : priode en microsecondes */
struct timespec horloge; /* constitue dun champ en secondes, et
dun autre en nanosecondes */
sem_t Reveil;
sem_init(&Reveil,0,0); /* Cration dun smaphore non partag
entre processus initialis 0 */
clock_gettime(CLOCK_REALTIME, &horloge); /* heure courante de
lhorloge au dmarrage de la tche */
while (1) {
printf("Periode %d\n",periode_us);
ajouter_microsecondes(&horloge,periode_us);/* Calcul de la
date du prochain rveil */
sem_timedwait(&Reveil,&horloge); /* Le smaphore tant
toujours nul, cette instruction a pour effet dendormir la tche
jusqu sa prochaine date de rveil */
}
}
void main() {
pthread_t periodique1,periodique2;
pthread_create(&periodique1, NULL,Periodique, (void*)1000); /*
Lancement de la tche avec une priode d1 ms */
pthread_create(&periodique2, NULL,Periodique, (void*)1500); /*
Lancement de la tche avec une priode d1,5 ms */
pthread_join(periodique1,NULL); /* Attente de terminaison */
pthread_join(periodique2,NULL); /* Attente de terminaison */
}
300
6.2 Programmation multitche
en langage C
6 Programmation
des systmes multitches
La seconde solution propose prsente lavantage de ncessiter moins doutils (sma-
phore contre mutex et variable conditionnelle), et sera choisie si linterface POSIX
utilise implmente la primitive sem_timedwait.
M Tches rveilles par interruption
La gestion des interruptions tant trs lie larchitecture sous-jacente, et lexcutif
ou au systme dexploitation utilis, POSIX ne dnit pas dinterface normalise
pour la gestion des interruptions. Cela signie que la programmation dune routine
de traitement dinterruption est lie au systme sous-jacent. Si le traitement de linter-
ruption doit tre effectu par une tche, alors on utilise la technique du traitement
diffr (DSR, voir 5.2.3, p. 206) : un code trs court, appel ISR est li linter-
ruption traite. Son action consiste signaler par synchronisation ( 6.2.1, p. 324)
la tche de traitement loccurrence de linterruption.
Ainsi, le mcanisme de rveil de la tche matrielle prsente sur la gure 6.30
simplmente simplement par synchronisation sur smaphore.
#include <pthread.h>
#include <semaphore.h>
sem_t declenche_dsr; /* Smaphore de synchronisation entre lISR et la
tche de traitement */
void mon_isr(/* Paramtres spcifiques au systme */) {
/* Fonction appele sur loccurrence de linterruption traite */
/* Appels spcifiques permettant dacquiescer linterruption */
sem_post(&declenche_dsr); /* Dclenche la tche de traitement */
}
void Tache_Materielle() {
/* Tche dclenche sur interruption */
while (1) {
sem_wait(&declenche_dsr); /* Attente dinterruption */
/* Traitement dune interruption */
/* etc. */
}
}
void main() {
pthread_t tache_materielle;
sem_init(declenche_dsr,0,0); /* Initialisation du smaphore de
synchronisation ISR-]-DSR */
/* Appel dune primitive systme branchant lISR linterruption
traite */
/* Dmasquage de linterruption traite */
pthread_create(&tache_materielle, NULL,Tache_Materielle, NULL);
pthread_join(tache_materielle,NULL); /* Attente de terminaison */
}
Tche
matrielle
IT
Figure 6.30 Tche matrielle.
6.2 Programmation multitche
en langage C
301


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
m Exemple
La mise en uvre des diffrents outils prsents pour limplmentation dlments
DARTS en POSIX 1003.1 est faite sur lexemple de la gestion de la scurit dune
mine dont le diagramme DARTS est donn sur la gure 3.27. An den faciliter
la lecture, le systme de commande est prsent plat, sans utilisation de modules
spciques, autres que ceux lis la communication par bote aux lettres. Pour la
mme raison, les attributs de tches ( 6.2.1, p. 287) permettant de jouer sur
lordonnancement du systme, et les attributs de mutex ( 6.2.1, p. 288) permet-
tant lutilisation du protocole priorit plafond sont omis.
#include <pthread.h>
#include <semaphore.h>
#include "BaLs.h" /* Module de boites aux lettres */
#include "procede.h" /* Fonctions daccs aux capteurs et actionneurs
*/
/* Dfinition de constantes */
#define LLS 5.3
/* Valeur sous laquelle le niveau est considr trop bas */
#define HLS 17.8
/* Valeur au-dessus de laquelle le niveau est considr trop haut */
#define MS_L1 128
#define MS_L2 180
/* Seuils dalerte de mthane*/
/* Dfinition des outils de communication/synchronisation */
/* Module de donnes Niveau_Eau */
float Niveau_Eau; /* Module de donnes */
pthread_mutex_t sNiveau_Eau; /* Mutex du module de donnes */
bal_ecr Niveau_Methane; /* Bote aux lettres de taille 1 crasement
*/
bal_ecr Vitesse_Pompe; /* Bote aux lettres de taille 1 crasement
*/
sem_t Evt_Alarme; /* Synchronisation */
void ajouter_microsecondes(struct timespec *time, long us) {
/* Modifie la structure time afin dy ajouter us microsecondes */
(*time).tv_nsec+=(us%1000000)*1000; /* Ajout des microsecondes au
champ en nanosecondes */
(*time).tv_sec+=(us/1000000)+((*time).tv_nsec/1000000000); /*
Ajout des secondes entires au champ en secondes */
(*time).tv_nsec%=1000000000; /* Si il y avait dbordement des
nanosecondes sur les secondes, il a t ajout aux secondes dans
linstruction prcdente */
}
void Acquerir_Niveau_Methane() {
/* Tche priodique dacquisition */
struct timespec horloge; /* Date du prochain rveil */
sem_t Reveil; /* Smaphore utilis pour le rveil priodique */
float niveau_methane;
sem_init(&Reveil,0,0);
clock_gettime(CLOCK_REALTIME, &horloge); /* heure courante de
lhorloge au dmarrage de la tche */
while (1) {
302
6.2 Programmation multitche
en langage C
6 Programmation
des systmes multitches
niveau_methane=Lire_Capteur_Methane(); /* Lecture du capteur
*/
bal_ecr_envoyer(Niveau_Methane,(char*)&niveau_methane);/*
Envoi du message */

/* Priodicit */
ajouter_microsecondes(&horloge,500000);/* Calcul de la
prochaine date de rveil (priode de 500 ms) */
sem_timedwait(&Reveil,&horloge); /* Attente de la prochaine
date de rveil */
}
}
void Acquerir_Capteur_Eau() {
/* Tche priodique dacquisition */
struct timespec horloge; /* Date du prochain rveil */
sem_t Reveil; /* Smaphore utilis pour le rveil priodique */
float niveau_eau;
sem_init(&Reveil,0,0);
clock_gettime(CLOCK_REALTIME, &horloge); /* heure courante de
lhorloge au dmarrage de la tche */
while (1) {
niveau_eau=Lire_Capteur_Eau(); /* Lecture du capteur */

/* Ecriture dans le module de donnes */
pthread_mutex_lock(&sNiveau_Eau);
Niveau_Eau=niveau_eau; /* Noter que lon nappelle pas
lacquisition dans la section critique afin de minimiser la dure de
celle-ci */
pthread_mutex_unlock(&sNiveau_Eau);

/* Priodicit */
ajouter_microsecondes(&horloge,5000000);/* Calcul de la
prochaine date de rveil (priode de 5 s) */
sem_timedwait(&Reveil,&horloge); /* Attente de la prochaine
date de rveil */
}
}
void Afficher_Alarme () {
unsigned char etat_alarme=0; /* Etat courant de lalarme (0
teinte, 1 allume) */
while (1) {
sem_wait(&Evt_Alarme); /* Attente de synchronisation */
etat_alarme=1-etat_alarme;
Piloter_Alarme(etat_alarme); /* Fonction actionnant ou coupant
lalarme */
}
}
void Commander_Pompe() {
float vitesse;
while(1) {
bal_ecr_recevoir(Vitesse_Pompe,(char *)&vitesse); /* Attente
de message */
Actionner_Pompe(vitesse); /* Fonction de pilotage de la pompe
*/
}
}
6.2 Programmation multitche
en langage C
303


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
void Controler_Mine() {
float niveau_methane;
float vitesse_pompe;
float niveau_eau;
typedef enum {nominal, pompe, alerte_et_pompe, alerte}
t_etat_controle;
t_etat_controle etat=nominal;
while (1) {
bal_ecr_recevoir(Niveau_Methane,(char *)&niveau_methane); /*
Attente sur bote aux lettres */
/* Lecture du module de donnes */
pthread_mutex_lock(&sNiveau_Eau);
niveau_eau=Niveau_Eau;
pthread_mutex_unlock(&sNiveau_Eau);
/* Implmentation du diagramme Etats/Transitions donn sur la
figure 2.33 */
switch (etat) {
case nominal:
if (niveau_methane >= MS_L1) {
/* Seuil dalerte */
sem_post(&Evt_Alarme); /* Alarme */
etat = alerte;
} else if (niveau_eau >= HLS) {
/* Allumage de la pompe, pour simplifier, nous supposons
que nous la pilotons de faon proportionnelle */
vitesse_pompe = niveau_eau-LLS;
bal_ecr_envoyer(Vitesse_Pompe,(char*)&vitesse_pompe);
etat = pompe;
}
break;
case pompe:
if (niveau_methane >= MS_L1) {
/* Seuil dalerte */
sem_post(&Evt_Alarme); /* Alarme */
etat = alerte_et_pompe;
} else if (niveau_eau <= LLS) {
vitesse_pompe = 0;
bal_ecr_envoyer(Vitesse_Pompe,(char*)&vitesse_pompe);
etat = nominal;
} else {
/* Pilotage proportionnel */
vitesse_pompe = niveau_eau-LLS;
bal_ecr_envoyer(Vitesse_Pompe,(char*)&vitesse_pompe);
}
break;
case alerte:
if (niveau_methane < MS_L1) {
/* Seuil dalerte */
sem_post(&Evt_Alarme); /* Extinction de lalarme */
etat = nominal;
} else if (niveau_methane < MS_L2 && niveau_eau > HLS) {
/* Allumage de la pompe, pour simplifier, nous supposons
que nous la pilotons de faon proportionnelle */
vitesse_pompe = niveau_eau-LLS;
bal_ecr_envoyer(Vitesse_Pompe,(char*)&vitesse_pompe);
etat = alerte_et_pompe;
}
break;
case alerte_et_pompe:
304
6.2 Programmation multitche
en langage C
6 Programmation
des systmes multitches
if (niveau_methane >= MS_L2 || niveau_eau <= LLS) {
/* Alerte MS_L2 ou niveau bas => extinction de la pompe */
vitesse_pompe = 0;
bal_ecr_envoyer(Vitesse_Pompe,(char*)&vitesse_pompe);
etat = alerte;
} else if (niveau_methane < MS_L1) {
/* Niveau de mthane sous le seuil dalerte */
sem_post(&Evt_Alarme); /* Extinction de lalarme */
etat = pompe;
} else {
/* Pilotage proportionnel */
vitesse_pompe = niveau_eau-LLS;
bal_ecr_envoyer(Vitesse_Pompe,(char*)&vitesse_pompe);
}
break;
};
}
}
void main() {
pthread_t acquerir_niveau_methane, afficher_alarme,
acquerir_capteur_eau, commander_pompe, controler_mine;
/* Initialisation du matriel (capteurs, actionneurs) */
/* etc. */
/* Initialisation du module de donnes */
Niveau_Eau=(HLS-LLS)/2+LLS; /* La valeur initiale est choisie de
sorte ne pas lancer de commande : on suppose ici que le niveau est
au milieu de HLS et LLS */
/* On pourrait aussi choisir de lire une premire fois le
capteur : Niveau_Eau = Lire_Capteur_Eau() ; */
pthread_mutex_init(&sNiveau_Eau,NULL);
/* Initialisation des outils de communication et synchronisation
*/
Niveau_Methane=bal_ecr_init(sizeof(float));
Vitesse_Pompe=bal_ecr_init(sizeof(float));
sem_init(&Evt_Alarme,0,0); /* Smaphore de synchronisation */

pthread_create(&acquerir_niveau_methane,NULL,Acquerir_Niveau_Methane,
NULL);

pthread_create(&acquerir_capteur_eau,NULL,Acquerir_Capteur_Eau,NULL);
pthread_create(&afficher_alarme,NULL,Afficher_Alarme,NULL);
pthread_create(&commander_pompe,NULL,Commander_Pompe,NULL);
pthread_create(&controler_mine,NULL,Controler_Mine,NULL);
pthread_join(acquerir_niveau_methane,NULL);
pthread_join(acquerir_capteur_eau,NULL);
pthread_join(afficher_alarme,NULL);
pthread_join(commander_pompe,NULL);
pthread_join(controler_mine,NULL);
}
Remarquons limplmentation du diagramme tats/transitions dni pour le contrle
de la mine.
6.2 Programmation multitche
en langage C
305


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
6.2.2 Implmentation sur excutif VxWorks
m Interface de programmation
VxWorks

est lexcutif temps rel le plus rpandu sur le march. Dans ses versions
5.x, il implmente une grande partie des interfaces POSIX 1003.1b et 1003.1c. Il
est donc possible de programmer un systme VxWorks

comme un systme POSIX.


Cependant, an de donner un autre exemple de programmation dapplications de
contrle-commande en langage C, nous prsentons ici la programmation base
sur linterface propritaire de VxWorks

.
m Implmentation des lments DARTS
M Tches
Une tche (task) est reprsente par une fonction pouvant possder au plus dix
paramtres de type int. Un paramtre peut tre utilis pour passer une donne de
la taille dun entier, on peut donc y passer typiquement un entier, ou un pointeur.
Chaque tche se lance dynamiquement grce la fonction taskSpawn ou bien la
combinaison des deux fonctions taskInit et taskResume. La signature de cette
fonction est :
int taskSpawn(char *nom, int priority, int options, int
stackSize,FUNCPTR entryPoint,int arg1,,int arg10);
La valeur de retour de cette fonction est lidenticateur de la tche cre, nom est le
nom alphanumrique de la tche, priority est sa priorit (attention, par rapport
POSIX, lordre est invers, et 0 est la priorit la plus forte), stackSize est la taille
de sa pile, entryPoint est la fonction implmentant la tche, et les paramtres arg1
arg10 sont les paramtres passs cette fonction.
Enn, le paramtre options permet de spcier diffrentes particularits au sys-
tme, comme lutilisation ou non des calculs virgule ottante an de dterminer
quels registres doivent tre sauvegards lors dun changement de contexte.
Les tches sexcutent en mode dtach ( 5.4.1, p. 235). Notons quil ny a pas de
hirarchie de tches.
Un exemple trs simple de programme multitche VxWorks

est donn ci-aprs :


#include <taskLib.h> /* Librairie tches */
#include <stdio.h> /* Entres/Sorties (printf) */
void f(int no) {
/* Fonction implmentant une tche */
int i;
for (i=0;i<10;i++) {
printf("Tache %d : iteration %d\n",no,i);
taskDelay(1); /* Attente dau moins un tick */
}
}
void LancerTaches() {
taskSpawn("tache1",90,0,20000,f,1,0,0,0,0,0,0,0,0,0); /* Lancement de
la tche 1, de priorit 90, avec 20000 octets de pile, implmente par
la fonction f, avec le 1er paramtre valant 1 */
306
6.2 Programmation multitche
en langage C
6 Programmation
des systmes multitches
taskSpawn("tache2",80,0,10000,f,2,0,0,0,0,0,0,0,0,0); /* Lancement de
la tche 2, de priorit 80, avec 10000 octets de pile, implmente par
la fonction f, avec le 1er paramtre valant 1 */
}
Nous pouvons noter que le systme se base sur les ticks pour spcier le temps.
Dautre part, lune des particularits des excutifs embarqus est que le programmeur
ne dnit pas de programme principal : lorsque le code est compil et charg sur la
cible, la fonction LancerTaches peut tre lance laide dun shell.
M Modules de donnes
Les modules de donnes DARTS peuvent tre implments laide dun smaphore
dexclusion mutuelle. Ainsi, une partie du code correspondant la gure 6.24 est
donne ci-aprs.
#include <taskLib.h>
#include <semLib.h> /* Module dfinissant les smaphores dexclusion
mutuelle */
/* Type utilis pour le module de donnes */
typedef struct {
float Temperature;
float Pression;
} t_Temperature_Pression;
t_Temperature_Pression MDD1; /*Dclaration du module de donnes MDD1*/
SEM_ID s_MDD1; /* Mutex protgeant MDD1 */
void T1() {
/* Tche 1 lisant le module de donnes */
t_Temperature_Pression TP;
while (1) { /* Faire toujours */
/* Exclusion mutuelle sur le module de donnes */
semTake(s_MDD1,WAIT_FOREVER);
/* Lecture du MDD */
TP=MDD1;
semGive(s_MDD1);
/* etc. */
}
}
void T2() {
/* Tche 2 modifiant le module de donnes */
float T,P;
while (1) { /* Faire toujours */
/* Lecture des capteurs en dehors de la section critique */
P=Lire_Capteur_Pression();
T=Lire_Capteur_Temperature();
/* Exclusion mutuelle sur le module de donnes */
semTake(s_MDD1,WAIT_FOREVER);
/* Modification du MDD */
MDD1.Temperature=T;
MDD1.Pression=P;
semGive(s_MDD1);
/* etc. */
}
}
6.2 Programmation multitche
en langage C
307


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
void LancerTaches() {
s_MDD1=semMCreate(SEM_Q_PRIORITY|SEM_INVERSION_SAFE); /
*Initialisation du mutex de MDD1 : La file dattente des tches est
gre par niveaux de priorit, et le protocole priorit hrite est
utilis */
/* Initialisation de MDD1 */
MDD1.Temperature=Lire_Capteur_Temperature();
MDD1.Pression=Lire_Capteur_Pression();
/* Lancement des tches */
taskSpawn("T1",90,0,20000,T1,0,0,0,0,0,0,0,0,0,0);
taskSpawn("T2",100,0,20000,T2,0,0,0,0,0,0,0,0,0,0);
}
On peut remarquer que le smaphore est dclar de faon globale, ce qui le rend
visible aux deux tches concernes. Notons quil est cr et initialis avant le lance-
ment des tches, par exemple dans le programme de lancement des tches.
Il est ncessaire de rduire la dure des sections critiques, par consquent, sur cet
exemple, laccs au matriel via les fonctions de lecture de capteurs, trs longues,
doit seffectuer lextrieur de la section critique daccs au module de donnes.
Rappelons que VxWorks

ne propose pas le protocole priorit plafond.


M Botes aux lettres
VxWorks

dnit des botes aux lettres bornes sans crasement, avec une gestion
des priorits de message deux niveaux (normal, urgent). Ainsi, limplmentation
du schma DARTS donn sur la gure 6.24 est donne ci-aprs.
#include <taskLib.h>
#include <msgQLib.h> /* Module dfinissant les botes aux lettres */
/* Type utilis pour le module de donnes */
typedef struct {
float Temperature;
float Pression;
} t_Temperature_Pression;
MSG_Q_ID B1; /*Dclaration de la bote aux lettres*/
void T1() {
/* Tche 1 en attente de messages sur la bote aux lettres */
t_Temperature_Pression TP;
while (1) { /* Faire toujours */
msgQReceive(B1,(char*)&TP,sizeof(TP),WAIT_FOREVER);
/* etc. */
}
}
void T2() {
/* Tche 2 envoyant des messages */
t_Temperature_Pression TP;
while (1) { /* Faire toujours */
/* Lecture des capteurs en dehors de la section critique*/
TP.Pression=Lire_Capteur_Pression();TP.Temperatu
re=Lire_Capteur_Temperature();
msgQSend(B1, (char*)&TP, sizeof(TP), WAIT_FOREVER,
MSG_PRI_NORMAL); /* Envoi du message en priorit normale, si la bote
est pleine, cette instruction est bloquante */
308
6.2 Programmation multitche
en langage C
6 Programmation
des systmes multitches
/* etc. */
}
}
void LancerTaches() {
B1=msgQCreate(1,sizeof(t_Temperature_Pression),MSG_Q_PRIORITY);
/*Initialisation de la bote aux lettres B1 : tampon de 1 message. Les
tches en attente sont gres par niveau priorit */
/* Lancement des tches */
taskSpawn("T1",90,0,20000,T1,0,0,0,0,0,0,0,0,0,0);
taskSpawn("T2",100,0,20000,T2,0,0,0,0,0,0,0,0,0,0);
}
M Synchronisation
Comme en POSIX, la synchronisation peut tre implmente laide dun smaphore
compte. Ainsi, limplmentation du diagramme DARTS donn sur la gure 6.28
est donne ci-aprs.
#include <taskLib.h>
#include <semLib.h> /* Module dfinissant les smaphores compte */
SEM_ID S1; /*Dclaration du smaphore de synchronisation */
void T1() {
/* Tche dclenchant la synchronisation */
while (1) { /* Faire toujours */
/* etc. */
semGive(S1); /* Dclenchement de la synchronisation */
/* etc. */
}
}
void T2() {
/* Tche en attente de synchronisation */
while (1) { /* Faire toujours */
semTake(S1,WAIT_FOREVER); /* Attente de synchronisation
*/
/* etc. */
}
}
void LancerTaches() {
S1=semCCreate(SEM_Q_FIFO,0); /*Initialisation du smaphore de
synchronisation 0, la file dattente des tches est FIFO pure (il
nest pas ncessaire de grer les priorits puisquil ne doit y avoir
quune tche en attente de cette synchronisation) */
/* Lancement des tches */
taskSpawn("T1",90,0,20000,T1,0,0,0,0,0,0,0,0,0,0);
taskSpawn("T2",100,0,20000,T2,0,0,0,0,0,0,0,0,0,0);
}
Remarquons que les smaphores compte ne se diffrencient, au niveau du pro-
gramme, des smaphores dexclusion mutuelle qu la cration (utilisation de semC-
Create pour les premiers, et de semMCreate pour les seconds).
6.2 Programmation multitche
en langage C
309


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
M Tches priodiques
Comme nous lavons vu prcdemment, la base de temps de VxWorks est le tick.
Le nombre de ticks par seconde est donn par la fonction sysClkRateGet, et peut
tre modi laide de sysClkRateSet. Un intervalle de temps est donc forcment
multiple de 1/sysClkRateGet(). On pourrait donc tre tent daugmenter la fr-
quence des ticks an dobtenir une meilleure granularit temporelle. Cependant,
tant donn que VxWorks

est un excutif dirig par le temps, le systme prend la


main chaque tick. Par consquent, augmenter la frquence des ticks augmente
loverhead (surcot dutilisation processeur due lexcutif ). Il est donc conseill de
ne pas descendre lintervalle entre deux ticks en dessous dune milliseconde, bien quil
soit possible de diminuer cet intervalle aux alentours de quelques dizaines de micro-
secondes (ce qui entrane naturellement un overhead important).
Linconvnient majeur de linterface de programmation native de VxWorks

est quil
nexiste aucune primitive permettant dattendre jusqu une certaine date (en ticks).
Par consquent, le seul moyen purement logiciel de dclencher priodiquement une
tche consiste attendre un certain nombre de ticks, ce qui entrane une drive des
horloges ( 5.3.1, p. 216). Ainsi, limplmentation des tches de la gure 6.29 est
donne ci-aprs.
#include <taskLib.h>
void Periodique(int periode_ticks) {
/* Tche priodique (avec drive des horloges) */
/* periode_ticks est sa priode dsire en ticks */
while (1) { /* Faire toujours */
/* etc. */
taskDelay(periode_ticks); /* Attente dau moins
periode_ticks ticks */
}
}
void LancerTaches() {
/* Lancement des tches */
taskSpawn("Periodique1",90,0,20000,Periodique,sysClkRateGet()/
10,0,0,0,0,0,0,0,0,0); /* Periode de 100 ms */
taskSpawn("Periodique2",100,0,20000,Periodique1,sysClkRateGet()/
18,0,0,0,0,0,0,0,0,0); /* Periode de 55.555 ms */
}
Notons que la priode est arrondie au tick infrieur, ainsi par exemple, si la frquence
des ticks est de 300 ticks par seconde (un tick dure 3,33 millisecondes), la priode
de la tche Periodique1 est de 10 ticks, soit 33,33 millisecondes, et celle de
Periodique2 est de 18 ticks, soit 60 millisecondes.
M Tches rveilles par interruption
La gestion des interruptions est trs simple et se base comme POSIX sur le concept
dISR (fonction appele lors de linterruption) sexcutant dans un contexte spci-
que aux interruptions et ntant pas autorise appeler des primitives bloquantes
ou suspensives, et de DSR, tche classique de traitement, dclenche par synchro-
nisation par lISR ( 5.2.3, p. 206). Ainsi, le mcanisme de rveil de la tche mat-
310
6.2 Programmation multitche
en langage C
6 Programmation
des systmes multitches
rielle prsente sur la gure 6.30 simplmente simplement par synchronisation sur
smaphore.
#include <semLib.h>
#include <taskLib.h>
SEM_ID declencheT1; /* Smaphore de synchronisation */
void traiteIntr(int dummy) {
/* ISR dclenchant la tche de traitement par synchronisation */
semGive(declencheT1);
}
void TacheMaterielle () {
/* Tche de traitement de linterruption */
while (1) {
semTake(declencheT1,WAIT_FOREVER); /* Attente de
synchronisation */

}
}
void LancerTaches() {
declencheT1 = semCCreate(SEM_Q_FIFO,0); /* Initialisation du
smaphore de synchronisation */
intConnect(INUM_TO_IVEC(7),traiteIntr,0); /* La fonction
traiteIntr est appele sur linterruption IRQ7 */
taskSpawn("TacheMaterielle",90,0,20000,TacheMaterielle,0,0,0,0,
0,0,0,0,0,0);
}
m Exemple
La mise en uvre des diffrents outils prsents pour limplmentation dlments
DARTS sur VxWorks

avec la librairie native est faite sur lexemple de la gestion


de la scurit dune mine dont le diagramme DARTS est donn sur la gure 3.27.
An den faciliter la lecture, le systme de commande est prsent plat, sans uti-
lisation de modules spciques.
#include <taskLib.h>
#include <msgQLib.h>
#include <semLib.h>
#include "procede.h" /* Fonctions daccs aux capteurs et actionneurs
*/
/* Dfinition de constantes */
#define LLS 5.3
/* Valeur sous laquelle le niveau est considr trop bas */
#define HLS 17.8
/* Valeur au-dessus de laquelle le niveau est considr trop haut */
#define MS_L1 128
#define MS_L2 180
/* Seuils dalerte de mthane*/
/* Dfinition des outils de communication/synchronisation */
/* Module de donnes Niveau_Eau */
float Niveau_Eau; /* Module de donnes */
SEM_ID sNiveau_Eau; /* Mutex du module de donnes */
6.2 Programmation multitche
en langage C
311


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
MSG_Q_ID Niveau_Methane; /* Bote aux lettres de taille 1 crasement
*/
MSG_Q_ID Vitesse_Pompe; /* Bote aux lettres de taille 1 crasement
*/
SEM_ID Evt_Alarme; /* Synchronisation */
void Acquerir_Niveau_Methane() {
/* Tche priodique dacquisition */
float niveau_methane;
while (1) {
niveau_methane=Lire_Capteur_Methane(); /* Lecture du capteur
*/
msgQSend(Niveau_Methane, (char*)&niveau_methane,
sizeof(niveau_methane), WAIT_FOREVER, MSG_PRI_NORMAL);/* Envoi du
message */
taskDelay(sysClkRateGet()/2); /* Periode de 500 ms avec
drive des horloges */
}
}
void Acquerir_Capteur_Eau() {
/* Tche priodique dacquisition */
float niveau_eau;
while (1) {
niveau_eau=Lire_Capteur_Eau(); /* Lecture du capteur */

/* Ecriture dans le module de donnes */
semTake(sNiveau_Eau);
Niveau_Eau=niveau_eau; /* Noter que lon nappelle pas
lacquisition dans la section critique afin de minimiser la dure de
celle-ci */
semGive(sNiveau_Eau);
taskDelay(sysClkRateGet()*5); /* Periode de 5 s */
}
}
void Afficher_Alarme () {
unsigned char etat_alarme=0; /* Etat courant de lalarme (0
teinte, 1 allume) */
while (1) {
semTake(Evt_Alarme); /* Attente de synchronisation */
etat_alarme=1-etat_alarme;
Piloter_Alarme(etat_alarme); /* Fonction actionnant ou coupant
lalarme */
}
}
void Commander_Pompe() {
float vitesse;
while(1) {

msgQReceive(Vitesse_Pompe,(char*)&vitesse,sizeof(vitesse),WAIT_FOREVER
); /* Attente de message */
Actionner_Pompe(vitesse); /* Fonction de pilotage de la pompe */
}
}
void Controler_Mine() {
float niveau_methane;
float vitesse_pompe;
312
6.2 Programmation multitche
en langage C
6 Programmation
des systmes multitches
float niveau_eau;
typedef enum {nominal, pompe, alerte_et_pompe, alerte}
t_etat_controle;
t_etat_controle etat=nominal;
while (1) {
msgQReceive(Niveau_Methane,(char
*)&niveau_methane,sizeof(niveau_methane),WAIT_FOREVER); /* Attente
sur bote aux lettres */
/* Lecture du module de donnes */
semTake(sNiveau_Eau);
niveau_eau=Niveau_Eau;
semGive(sNiveau_Eau);
/* Implmentation du diagramme Etats/Transitions donn sur la
figure 2.33 */
switch (etat) {
case nominal:
if (niveau_methane >= MS_L1) {
/* Seuil dalerte */
semGive(Evt_Alarme); /* Alarme */
etat = alerte;
} else if (niveau_eau >= HLS) {
/* Allumage de la pompe, pour simplifier, nous supposons
que nous la pilotons de faon proportionnelle */
vitesse_pompe = niveau_eau-LLS;

msgQSend(Vitesse_Pompe,(char*)&vitesse_pompe,sizeof(vitesse_pompe),WA
IT_FOREVER, MSG_PRI_NORMAL);
etat = pompe;
}
break;
case pompe:
if (niveau_methane >= MS_L1) {
/* Seuil dalerte */
semGive(Evt_Alarme); /* Alarme */
etat = alerte_et_pompe;
} else if (niveau_eau <= LLS) {
vitesse_pompe = 0;
msgQSend(Vitesse_Pompe,(char*)&vitesse_pompe,
sizeof(vitesse_pompe), WAIT_FOREVER, MSG_PRI_NORMAL);
etat = nominal;
} else {
/* Pilotage proportionnel de la pompe */
vitesse_pompe = niveau_eau-LLS;
msgQSend(Vitesse_Pompe,(char*)&vitesse_pompe,
sizeof(vitesse_pompe), WAIT_FOREVER, MSG_PRI_NORMAL);
}
break;
case alerte:
if (niveau_methane < MS_L1) {
/* Seuil dalerte */
semGive(Evt_Alarme); /* Extinction de lalarme */
etat = nominal;
} else if (niveau_methane < MS_L2 && niveau_eau > HLS) {
/* Allumage de la pompe, pour simplifier, nous supposons
que nous la pilotons de faon proportionnelle */
vitesse_pompe = niveau_eau-LLS;
msgQSend(Vitesse_Pompe,(char*)&vitesse_pompe,
sizeof(vitesse_pompe),WAIT_FOREVER, MSG_PRI_NORMAL);
etat = alerte_et_pompe;
6.2 Programmation multitche
en langage C
313


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
}
break;
case alerte_et_pompe:
if (niveau_methane >= MS_L2 || niveau_eau <= LLS) {
/* Alerte MS_L2 ou niveau bas => extinction de la pompe */
vitesse_pompe = 0;
msgQSend(Vitesse_Pompe,(char*)&vitesse_pompe,
sizeof(vitesse_pompe),WAIT_FOREVER, MSG_PRI_NORMAL);
etat = alerte;
} else if (niveau_methane < MS_L1) {
/* Niveau de mthane sous le seuil dalerte */
semGive(Evt_Alarme); /* Extinction de lalarme */
etat = pompe;
} else {
/* Pilotage proportionnel */
vitesse_pompe = niveau_eau-LLS;
msgQSend(Vitesse_Pompe,(char*)&vitesse_pompe,
sizeof(vitesse_pompe),WAIT_FOREVER, MSG_PRI_NORMAL);
}
break;
};
}
}
TASK_ID acquerir_niveau_methane, afficher_alarme,
acquerir_capteur_eau, commander_pompe, controler_mine;
/* Afin de conserver la valeur des identificateurs de tches, ceux-ci
sont dclars de faon globale */
void LancerTaches() {
/* Initialisation matrielle du systme (capteurs, actionneurs) */
/* etc. */
/* Initialisation du module de donnes */
Niveau_Eau=(HLS-LLS)/2+LLS; /* La valeur initiale est choisie de
sorte ne pas lancer de commande : on suppose ici que le niveau est
au milieu de HLS et LLS */
/* On pourrait aussi choisir de lire une premire fois le
capteur : Niveau_Eau = Lire_Capteur_Eau() ; */
sNiveau_Eau=semMCreate(SEM_Q_PRIORITY|SEM_INVERSION_SAFE|SEM_DELETE_S
AFE); /* Constater lajout de SEM_DELETE_SAFE */
/* Initialisation des outils de communication et synchronisation
*/
Niveau_Methane=msgQCreate(1,sizeof(float),MSG_Q_FIFO); /* Noter
que la gestion des files dattente denvoie et de rception est FIFO,
car une seule tche met, une seule tche lit */
Vitesse_Pompe=msgQCreate(1,sizeof(float), MSG_Q_FIFO);
Evt_Alarme=semCCreate(SEM_Q_FIFO,0); /* Smaphore de
synchronisation */
acquerir_niveau_methane=taskSpawn("AcqMethane",70,0,20000,
Acquerir_Niveau_Methane,0,0,0,0,0,0,0,0,0,0);
acquerir_capteur_eau=taskSpawn("AcqEau",71,0,20000,
Acquerir_Capteur_Eau,0,0,0,0,0,0,0,0,0,0);
afficher_alarme=taskSpawn("Alarme",40,0,20000,
Afficher_Alarme,0,0,0,0,0,0,0,0,0,0);
commander_pompe=taskSpawn("CmdPompe",45,0,20000,
Commander_Pompe,0,0,0,0,0,0,0,0,0,0);
314
6.3 Programmation multitche
en langage Ada
6 Programmation
des systmes multitches
controler_mine=taskSpawn("CtrlMine",48,0,20000,
Controler_Mine,0,0,0,0,0,0,0,0,0,0);
}
void StopperTaches() {
/* Stoppe toutes les tches et dtruit les outils de communication/
synchronisation, ce qui permet pendant la phase de mise au point, sans
redmarrer la cible, de stopper les tches, modifier leur code source,
le recharger sur la cible, et de lancer nouveau les tches.
Lventualit dun arrt des tches explique le fait que les
smaphores dexclusion mutuelle soient crs avec loption
SEM_DELETE_SAFE */
taskDelete(acquerir_niveau_methane);
taskDelete(acquerir_capteur_eau);
taskDelete(afficher_alarme);
taskDelete(commander_pompe);
taskDelete(controler_mine);
semDelete(sNiveau_Eau);
semDelete(Evt_Alarme);
msgQDelete(Niveau_Methane);
msgQDelete(Vitesse_Pompe);
}
Lun des avantages de VxWorks

est que lenvironnement de dveloppement li


(Tornado

) permet le chargement et le remplacement de modules sans redmarrer


le systme cible. Il en rsulte que pour faciliter la mise au point, on intgre gnrale-
ment une fonction de destruction des tches et des lments de communication et de
synchronisation. Par consquent, an dviter quune tche ne soit dtruite lorsquelle
possde un smaphore dexclusion mutuelle, on peut tre amen utiliser loption
SEM_DELETE_SAFE lors de la cration des smaphores dexclusion mutuelle. Cette
option a pour effet de protger une tche de la suppression tant quelle dtient un
smaphore dexclusion mutuelle.
Ce code exemple, une fois compil et charg sur la cible, permet, partir du shell de
lancer directement les fonctions C. Ainsi, aprs chargement, on excute au niveau du
shell la fonction LancerTaches. Et pour arrter le systme, on excutera toujours
au niveau du shell la fonction StopperTaches.
6.3 Programmation multitche en langage Ada
6.3.1 Les tches Ada
La possibilit de crer des tches en langage Ada est native. Il existe un constructeur
de type tche ( linstar des array, record, etc.) nomm task type. Ainsi, on peut
dnir des types de tches, et les instancier pour crer des tches.
m La cration des tches Ada
Lorsquune tche est instancie de faon globale (variable de paquetage), comme
cest souvent le cas lors dune implmentation DARTS, cette tche est lance auto-
matiquement au dmarrage du programme principal. Lorsquune tche est instancie
dynamiquement (tche dclare dans un bloc, ou alloue dynamiquement par new),
elle est lance au moment de linstanciation.
6.3 Programmation multitche
en langage Ada
315


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
Les tches sont toujours attaches automatiquement au programme principal : tant
quil existe une tche en fonctionnement, le programme principal ne se termine
pas, et reste bloqu juste avant son end nal.
La dclaration dun type tche seffectue en deux parties : une spcication de type
(task type), et un corps de type (task body). Ainsi, le code suivant dnit un type
de tche et linstancie deux fois.
with Ada.Text_Io; use Ada.Text_Io;
procedure Deux_Taches is
-- Cre un type tche et linstancie deux fois
task type T_Matache; -- Spcification du type tche
task body T_Matache is
-- Corps de la tche excut lorsquelle est instancie
begin
for I in 1..10 loop
Put_Line("Iteration "&IntegerImage(I)); -- Affichage du
numro ditration
end loop;
end; -- Fin de la tche
T1, T2 : T_Matache; -- Deux instanciations, T1 et T2 sont deux
tches
begin -- Dmarrage du programme principal, T1 et T2 sont
automatiquement lances
null; -- Le programme principal ne fait rien
end; -- La fin nest atteinte qu la terminaison des tches lances
Le type T_Matache tant justement un type, il est possible de construire dautres
types, comme des tableaux de tches de ce type, des types enregistrement, etc. Un
type de tche est un type limit , cest--dire que toute affectation ou comparaison
de deux lments est impossible.
Souvent les tches ne sont destines tre instancies quune seule fois dans le pro-
gramme. Une facilit dcriture consiste alors instancier des tches de type anonyme,
ce qui consiste dnir un type sans le nommer pour linstancier. Ainsi, le code ci-
aprs dnit un type de tche et linstancie : noter la prsence du mot cl type
dans la spcication.
with Ada.Text_Io;use Ada.Text_Io;
with System;use System;
procedure une_tache_typee is
task type T_Matache is
-- Noter la prsence du mot cl "type" dans la dclaration
pragma Priority(Default_Priority);
end T_Matache;
task body T_Matache is
begin
for I in 1..10 loop
Put_Line("Iteration de tache");
end loop;
end;
Matache : T_Matache; -- Instanciation
begin -- La tche instancie est lance
null;
end; -- ne se termine que lorsque la tche est termine
316
6.3 Programmation multitche
en langage Ada
6 Programmation
des systmes multitches
Le code ci-aprs est quivalent, et dnit une tche de type anonyme : noter labsence
du mot cl type dans la spcication.
with Ada.Text_Io;use Ada.Text_Io;
with System;use System;
procedure une_tache_anonyme is
task Matache is
-- Noter labsence du mot cl "type" dans la dclaration
pragma Priority(Default_Priority);
end Matache;
task body Matache is
begin
for I in 1..10 loop
Put_Line("Iteration de tache");
end loop;
end;
-- La tche Matache a t instancie en mme temps quelle a t
dclare
begin -- La tche instancie est lance
null;
end; -- ne se termine que lorsque la tche est termine
m Priorits des tches
Les attributs dun type tche, comme sa priorit par exemple, sont placs dans la
spcication du type. On peut passer des paramtres une tche lors de son instan-
ciation par la technique des discriminants. Le type dun discriminant est forcment
un type discret (entier, caractre, type numr, etc.) ou un pointeur. Ainsi, le code
ci-aprs cre un type de tche ayant un numro et une priorit passs en paramtre.
Notons quil est possible de changer la priorit dune tche au cours de son excution
grce la fonction Set_Priority.
with Ada.Text_Io; use Ada.Text_Io;
with System;use System; -- Pour lutilisation du type Priority
procedure Deux_Taches_Discriminant is
task type T_Matache(Priorite: Integer;Numero:Integer) is
-- Le discriminant permet de passer des paramtres scalaires
lors de linstanciation
pragma Priority(Priorite); -- Dfinit la priorit de la tche
end T_Matache;
task body T_Matache is
begin
for I in 1..10 loop
Put_Line("Iteration "&IntegerImage(I)&" de la tache
"&IntegerImage(Numero));
-- Affichage du numro ditration et du numro de la tche
-- Noter quil provient du discriminant
end loop;
end; -- Fin de la tche
T1 : T_Matache(PriorityFirst+10,1);
-- T1 a une priorit 10 niveaux au-dessus du niveau minimal, et a
le numro 1
T2 : T_Matache(PriorityLast-10,2);
-- T1 a une priorit 10 niveaux au-dessous du niveau maximal, et a
le numro 2
begin -- Dmarrage du programme principal, T1 et T2 sont
automatiquement lances
6.3 Programmation multitche
en langage Ada
317


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
null; -- Le programme principal ne fait rien
end; -- La fin nest atteinte qu la terminaison des tches lances
Le paquetage system dnit un type Any_Priority comme un intervalle dau
moins 31 valeurs. Ce type est ensuite dcompos en deux sous-types :
les priorits normales (type priority) dnies comme un intervalle dAny_Prio-
rity, ce qui permet au passage lutilisation des attributs (comme par exemple
priorityfirst qui donne la valeur minimale de priorit) comme sur tout
type discret. La norme Ada impose au moins 30 niveaux dans ce type. La prio-
rit par dfaut dune tche est celle du niveau qui la cr. La priorit par dfaut
du programme principal est Default_Priority, se trouvant au milieu de linter-
valle de priorits ((prioritylast-priorityfirst)/2+priorityfirst) ;
les priorits dinterruption (Interrupt_Priority), strictement suprieures aux
priorits normales, correspondent aux plus hauts niveaux de priorit du systme.
Typiquement, elles ne sont utilises que pour les routines de traitement dinter-
ruption ( 6.3.2, p. 326). La norme impose au moins un niveau de priorit
dinterruption. La priorit Interrupt_PriorityLast est donc la plus grande
priorit que lon puisse trouver sur le systme.
m Communication et synchronisation
Dans sa premire version, en 1983, Ada nintgrait que le rendez-vous ( 5.2.2,
p. 198). Divers inconvnients apparaissaient lutilisation, comme lobligation de
crer des tches pour implmenter des moniteurs (qui sont des objets passifs),
limpossibilit de communiquer de faon asynchrone, et la difcult dtudier le
comportement temporel de ces outils de communications. Par consquent, cet
outil nest pas utilis par la suite.
Depuis Ada95, un deuxime outil a t introduit : le moniteur de haut niveau (objet
protg). De par sa nature, le moniteur Ada permet dimplmenter tout type de syn-
chronisation et de communication, synchrone et asynchrone, comme cela est montr
par la suite.
Comme pour les tches, il existe un constructeur de types dobjet protg (pro-
tected type) et il est possible de dnir des objets protgs anonymes (protec-
ted).
La spcication dun objet protg contient une partie prive, correspondant aux
variables internes au moniteur, et un ensemble de primitives. Il y a trois types de
primitives :
les procdures (procedure) sont des primitives non rentrantes par rapport aux
autres primitives de lobjet protg (i.e. une procdure ne peut pas avoir lieu
tant quune autre primitive de lobjet protg est excute). Cependant, elles sont
non bloquantes, cest--dire quelles nintgrent pas la possibilit dattendre un
vnement du moniteur (de faire lquivalent dune instruction wait sur le
moniteur, voir 5.2.2, p. 186). Les procdures peuvent avoir des paramtres en
entre ou en sortie ;
les procdures gardes (entry) sont des procdures dont laccs est conditionn
(gard), cest--dire que tout se passe comme si un code tant que la garde nest
pas vraie faire wait se trouvait au dbut de la primitive ;
318
6.3 Programmation multitche
en langage Ada
6 Programmation
des systmes multitches
les fonctions (function) sont des primitives en lecture seule sur lobjet protg :
elles ne peuvent pas modier les variables internes de lobjet. En revanche, les
fonctions sont rentrantes les unes par rapport aux autres (une fonction peut
sexcuter mme si une fonction du mme objet protg est en cours dexcution).
Ces primitives permettent dafner les accs aux objets protgs en leur donnant
des primitives de type lecteur/crivain.
Par exemple, le code ci-aprs dnit un smaphore laide dun objet protg.
protected type Semaphore(Valeur_Initiale: Positive:=1) is
-- Utilisation dun discriminant donnant la valeur initiale
-- Noter lemploi du mot cl "type" permettant de dfinir un type
-- dobjet protg
entry Prendre; -- Procdure garde (il nest possible de prendre
-- le smaphore que lorsque sa valeur est > 0)
procedure Vendre;
function Valeur return Natural; -- Renvoie la valeur courante du
compte du smaphore
private -- Variables internes
Valeur: Natural:=Valeur_Initiale; -- Compte du smaphore
end Semaphore;
protected body Semaphore is
entry Prendre when Valeur > 0 is
-- Tant que le smaphore est <=0, les tches appelant cette
-- entre sont bloques et mises en attente dans la file
-- dattente de lentre
begin
Valeur:=Valeur-1;
end Prendre;
procedure Vendre is
begin
Valeur:=Valeur+1;
end Vendre;
function Valeur return Natural is
begin
return Valeur;
end;
end Semaphore;
La norme Ada propose le protocole priorit plafond immdiat pour viter linversion
de priorit lors daccs concurrents un objet protg. Par consquent, un objet pro-
tg peut tre muni dune priorit : sa priorit plafond, cest--dire la priorit maxi-
male des tches susceptibles de lutiliser. Ada tant un langage sr, une exception est
leve lorsquune tche essaie daccder un objet protg ayant une priorit plafond
infrieure sa priorit. Par consquent, par dfaut, la priorit plafond dun objet
protg est prioritylast avec tout ce que cela implique (si lon ne donne pas
soi-mme une priorit plafond un objet protg, et que lon utilise le protocole
priorit plafond immdiat, toute tche accdant un objet protg se voit munie de
la priorit maximale, hors priorit dinterruption).
m Ordonnancement des tches
Lordonnancement de tches est par dfaut dni par limplmentation. Cependant,
la norme Ada prvoit la possibilit de le modier. Le type dordonnancement choisi
pour une application est le mme pour toute lapplication. La faon de grer les les
6.3 Programmation multitche
en langage Ada
319


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
dattentes au niveau des objets protgs est elle aussi congurable. Typiquement, une
application est congure de sorte que :
les tches sont ordonnances en FIFO suivant leur priorit (ce qui correspond
lalgorithme POSIX SCHED_FIFO), cest--dire quil y a une le dattente
gre en FIFO pour chaque niveau de priorit, ceci est fait en insrant dans le
programme la directive pragma Task_Dispatching_Policy(FIFO_Within_Prio-
rities) ;
le protocole priorit plafond immdiat est utilis pour viter les inversions de
priorit lors de lutilisation dobjets protgs, ceci ncessite lajout de la directive
pragma Locking_Policy(Ceiling_Locking) ;
les les de tches en attente daccs un objet protg sont gres dans des les
FIFO par niveaux de priorits grce la directive pragma Queuing_Policy
(Priority_Queuing).
Par consquent, toute application multitche Ada devrait utiliser ces trois pragmas.
m Le profil Ravenscar
tant donnes les limitations des modles utiliss pour la validation temporelle de
systmes, un concepteur doit, de prfrence suivre diffrentes rgles sil souhaite pou-
voir valider temporellement son application.
Pour le langage Ada, une norme de dveloppement a t propose, sous le nom de
prol Ravenscar, normalis par lISO en 1999. La norme prconise les principes
suivants :
pas de dclaration de tches dynamiques : tout est dclar au dbut de lappli-
cation ;
les tches ne se terminent pas ou toutes ensemble ;
toutes les tches sont au mme niveau (pas de hirarchie mre/lle entre les tches) ;
tous les outils de communication et de synchronisation sont dclars initialement,
et pas de faon dynamique ;
utilisation de dates et pas de dures pour les rveils de tches priodiques, an
dviter une drive des horloges (voir 2.4) ;
utilisation dun protocole de gestion de ressources priorit plafond ;
pas dutilisation du rendez-vous mais uniquement des objets protgs, avec une
seule primitive de type entry par objet protg, les autres pouvant tre des pro-
cdures ou bien des fonctions ;
un et un seul mcanisme de dclenchement pour une tche (attente de synchro-
nisation, de message ou dinterruption, ou bien attente priodique).
6.3.2 Implmentation des lments DARTS
Notons quan den amliorer la lisibilit, les exemples dimplmentation dlments
DARTS sont donns sous la forme dun seul programme principal dclarant tous
les lments. Il est vident que pour les implmentations concrtes, les tches et
objets protgs seront dclars dans des paquetages : gnralement, les spcications
320
6.3 Programmation multitche
en langage Ada
6 Programmation
des systmes multitches
des tches et objets protgs sont places dans les spcications des paquetages,
alors que leurs corps sont placs dans les corps des paquetages.
m Modules de donnes
Les modules de donnes DARTS peuvent tre implments laide de lencapsula-
tion du module de donnes dans un objet protg. Lexclusion mutuelle est alors
garantie par la non rentrance des primitives daccs un objet protg. Ainsi, une
premire implmentation de la gure 6.24 est donne ci-aprs.
with Procede; use Procede;
-- Module contenant des fonctions daccs aux capteurs/actionneurs
procedure Test_Mdd is
-- Procdure montrant un exemple de module de donnes
type T_Temperature_Pression is record
-- Type de donnes contenu dans le module de donnes
Pression:Float;
Temperature: Float;
end record;

protected Temperature_Pression is
-- Module de donnes
procedure Ecrire(Tp: T_Temperature_Pression);
-- Modifie la valeur contenue
function Lire return T_Temperature_Pression;
-- Renvoie la valeur contenue
private
-- Variables internes
Valeur: T_Temperature_Pression := (Lire_Capteur_Temperature,
Lire_Capteur_Pression);
-- Initialisation de la temprature et de la pression
end;
protected body Temperature_Pression is
-- Implmentation du module de donnes
procedure Ecrire(Tp: T_Temperature_Pression) is
begin
Valeur:=Tp;
end;

function Lire return T_Temperature_Pression is
begin
return Valeur;
end;
end;
task Acquisition; -- Spcification de tche
task body Acquisition is
-- Corps de tche
TP: T_Temperature_Pression;
begin
-- Code dinitialisation des capteurs
-- etc.
loop
-- Lecture des capteurs
Tp.Temperature:=Lire_Capteur_Temperature;
Tp.Pression:=Lire_Capteur_Pression;
Temperature_Pression.Ecrire(Tp); -- Ecriture dans le module
-- de donnes
delay(0.5); --Attendre au moins 500 ms
6.3 Programmation multitche
en langage Ada
321


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
end loop;
end;
task Traitement; -- Spcification de tche
task body Traitement is
-- Corps de tche
TP: T_Temperature_Pression;
begin
loop
Tp:=Temperature_Pression.Lire; -- Lecture dans le module de
-- donnes
-- etc.
end loop;
end;
begin -- Les tches sont lances
null; -- Le programme principal ne fait rien
end; -- Attente de la terminaison des tches
Cet exemple est correct dun point de vue respect de lexclusion mutuelle, cependant,
il ne peut pas fonctionner dans la ralit ; la cause rside dans linitialisation du module
de donnes. Dans la ralit, il est ncessaire dinitialiser le matriel (alimentation,
tat interne, etc.) avant de pouvoir lutiliser. Dans cette implmentation, linitiali-
sation du module de donnes par lecture des capteurs tant faite en mme temps
que le dmarrage du programme principal, il nest pas possible deffectuer une ini-
tialisation des capteurs avant de les lire. Il est donc ncessaire de permettre linitia-
lisation du module aprs initialisation des capteurs, et donc dempcher toute lecture
avant la premire criture dans le module. Par consquent, le code gnralement
utilis pour implmenter un module de donnes est potentiellement bloquant en
lecture : la lecture est une procdure garde (entry) possible uniquement aprs
une premire criture.
Le code est donc modi comme ci-aprs (noter le changement de la primitive
Lire en procdure garde) :
with Procede; use Procede;
-- Module contenant des fonctions daccs aux capteurs/actionneurs
procedure Test_Mdd is
-- Procdure montrant un exemple de module de donnes
type T_Temperature_Pression is record
-- Type de donnes contenu dans le module de donnes
Pression:Float;
Temperature: Float;
end record;

protected Temperature_Pression is
-- Module de donnes
procedure Ecrire(Tp: T_Temperature_Pression);
-- Modifie la valeur contenue
entry Lire(Tp: out T_Temperature_Pression);
-- TP : paramtre de sortie renvoyant la valeur contenue
-- Possible seulement aprs une premire criture
private
-- Variables internes
Valeur: T_Temperature_Pression;
-- Linitialisation est inutile, puisque la lecture ne peut
avoir lieu quaprs une premire criture
Initialise : Boolean := False;
end;
322
6.3 Programmation multitche
en langage Ada
6 Programmation
des systmes multitches
protected body Temperature_Pression is
-- Implmentation du module de donnes
procedure Ecrire(Tp: T_Temperature_Pression) is
begin
Valeur:=Tp;
Initialise := True; -- Ouverture de la garde de la lecture
end;

entry Lire (Tp: out T_Temperature_Pression) when Initialise is
-- La garde est ouverte seulement aprs une premire criture
begin
TP:=Valeur;
end;
end;
task Acquisition;
task body Acquisition is
-- etc. identique au code prcdent
end;
task Traitement;
task body Traitement is
-- Corps de tche
TP: T_Temperature_Pression;
begin
loop
Temperature_Pression.Lire(TP); -- Lecture dans le module de
-- donnes
-- etc.
end loop;
end;
begin -- Les tches sont lances
null; -- Le programme principal ne fait rien
end; -- Attente de la terminaison des tches
An de faciliter la rutilisation de code, il peut tre intressant dutiliser la gnricit
prsente dans le langage Ada. Ainsi, on pourrait crer un paquetage gnrique de
module de donnes, cependant, cela nest pas conforme la norme Ravenscar ( 6.3.1,
p. 319).
m Botes aux lettres
Limplmentation des botes aux lettres par objet protg est assez similaire limpl-
mentation propose pour POSIX.
M Botes aux lettres de taille 1 avec crasement
Une bote aux lettres de taille 1 avec crasement est simple implmenter partir
dun objet protg. Il suft de constater que lenvoi de message est non bloquant
(emploi dune procdure) et que lattente de message est bloquante (emploi dune
procdure garde). Ainsi, limplmentation de la gure 6.25 est donne ci-aprs.
procedure Test_Bal_1_Ecr is
protected type T_Bal_1_Ecr is
-- Bote aux lettres dentiers de taille 1 avec crasement
procedure Envoyer(V: Integer); -- Envoi dun message dans la
-- bote aux lettres
entry Recevoir(V: out Integer); -- Attente dun message en
-- provenance de la bote aux
-- lettres
6.3 Programmation multitche
en langage Ada
323


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
private
Vide : Boolean := True; -- Etat de la bote, Faux si il y a
-- un message non lu
Contenu: Integer; -- Message contenu dans la bote si
-- Vide=False
end;
protected body T_Bal_1_Ecr is
procedure Envoyer(V: Integer) is
begin
Contenu:=V;
-- Le contenu reoit V, mme si la bote tait non vide (dans
-- ce cas, il y a crasement du message prcdent par V)
Vide:=False; -- Il y a un message non lu
end;

entry Recevoir(V: out Integer) when not Vide is
-- Il nest possible de recevoir un message que sil existe
-- un message non lu
begin
-- Lorsque lon arrive l, cest quil y a un message non lu
-- (garde vraie)
V:=Contenu;
Vide:=True; -- La bote est maintenant vide
end;
end;
B1:T_Bal_1_Ecr; -- Instanciation dune bote aux lettres
task T1; -- Tche envoyant un message
task body T1 is
msg: Integer;
begin
loop
-- Calculs divers permettant de donner une valeur msg
B1.Envoyer(Msg); -- Envoi dans la bote aux lettres
-- etc.
end loop;
end;
task T2; -- Tche attendant un message
task body T2 is
Msg_Recu: Integer;
begin
loop
B1.Recevoir(Msg_Recu); -- Attente dun message,la tche est
-- bloque jusqu ce quil y ait un message
-- Ici, Msg_Recu contient le message reu
-- etc.
end loop;
end;
begin -- Lancement des tches
null; -- le programme principal ne fait rien
end;
M Bote aux lettres de taille 1 sans crasement
Une bote aux lettres de taille 1 sans crasement diffre dune bote aux lettres avec
crasement dans le fait que lenvoi de message dans la bote aux lettres est potentiel-
lement bloquant. La diffrence au niveau implmentation rside uniquement dans
le fait que lenvoi est une procdure garde (entry). Ainsi, par rapport limpl-
324
6.3 Programmation multitche
en langage Ada
6 Programmation
des systmes multitches
mentation de la bote aux lettres crasement, seule limplmentation de la primitive
recevoir change. Le code modi de lobjet protg est donn ci-aprs.
protected type T_Bal_1 is
-- Bote aux lettres dentiers de taille 1 avec crasement
entry Envoyer(V: Integer); -- Envoi dun message dans la bote aux
-- lettres
entry Recevoir(V: out Integer); -- Attente dun message en
-- provenance de la bote aux
-- lettres
private
Vide : Boolean := True; -- Etat de la bote, Faux si il y a un
-- message non lu
Contenu: Integer; -- Message contenu dans la bote si Vide=False
end;
protected body T_Bal_1 is
entry Envoyer(V: Integer) when Vide is
-- Il nest possible denvoyer un message que si la bote est
-- vide
begin
-- Lorsque lon arrive l, cest que la bote est vide, il ny a
-- donc pas crasement
Contenu:=V; -- Le contenu reoit V
Vide:=False; -- Il y a un message non lu
end;

entry Recevoir(V: out Integer) when not Vide is
-- Il nest possible de recevoir un message que sil existe un
-- message non lu
begin
-- Lorsque lon arrive l, cest quil y a un message non lu
-- (garde vraie)
V:=Contenu;
Vide:=True; -- La bote est maintenant vide
end;
end;
M Autres botes aux lettres
Le lecteur trouvera en annexe D lextension des botes aux lettres de taille 1 avec et
sans crasement au cas des botes aux lettres de taille n (gure 6.27). La le de messages
est implmente par un tableau circulaire. La prise en compte dune priorit de
messages peut seffectuer de deux faons : soit le nombre de priorits est lev, dans
ce cas la gestion de la le dattente consiste en un tri par insertion des messages, ce
qui est coteux, soit il ny a que deux niveaux de priorit (normal et urgent) et on
peut crer deux les de messages.
m Synchronisation
Limplmentation de la synchronisation est identique limplmentation du sma-
phore compte prsente au paragraphe 6.3.1, p. 317. Le code, plac dans un
paquetage, est donn ci-aprs.
package Synchronisation is
protected type T_Synchronisation is
-- Implmentation dune synchronisation compte
entry Wait; -- Attente de synchronisation
6.3 Programmation multitche
en langage Ada
325


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
procedure Signal; -- Dclenchement de synchronisation
private
Valeur: Natural:=0; -- Nombre de synchronisation non prises en
-- compte
end T_Synchronisation;
end Synchronisation;
package body Synchronisation is
protected body T_Synchronisation is
entry Wait when Valeur > 0 is
-- Tant quil ny a pas de dclenchement non pris en compte,
-- les tches appelant cette entre sont bloques et mises en
-- attente dans la file dattente de lentre
begin
Valeur:=Valeur-1;
end Wait;
procedure Signal is
begin
Valeur:=Valeur+1;
end Signal;
end T_Synchronisation;
end Synchronisation;
Lutilisation dune synchronisation sur limplmentation de la gure 6.28 est de la
forme suivante :
with Synchronisation; use Synchronisation;
procedure Test_Synchronisation is
S1: T_Synchronisation; -- Instanciation dune synchronisation
task T1;
task body T1 is
-- Tche dclenchant T2 par synchronisation
begin
-- etc.
loop
-- etc.
S1.Signal;
-- etc.
end loop;
end;
task T2;
task body T2 is
-- Tche en attente de synchronisation
begin
-- etc.
loop
S1.Wait;
-- etc.
end loop;
end;
begin -- Toutes les tches sont lances
null; -- Le programme principal ne fait rien
end; -- Attente de la terminaison des tches
m Tches priodiques
Ada propose deux primitives dattente : une attente relative (delay) prsente ds
Ada 83, et une attente de date (delay until) prsente depuis Ada 95. An dviter
326
6.3 Programmation multitche
en langage Ada
6 Programmation
des systmes multitches
une drive des horloges ( 5.3.1, p. 216), il convient dutiliser lattente de date.
Ainsi, limplmentation des tches de la gure 6.29 est :
with Ada.Real_Time;use Ada.Real_Time;
with Ada.Text_IO;use Ada.Text_IO;
procedure Test_Periodique is
task type T_Periodique(Numero: Integer; Periode_Ms: Integer);
-- Type de tche priodique affichant son numro chaque itration
-- Numro : numro de la tche
-- Periode_Ms: Priode en millisecondes
task body T_Periodique is
Periode : constant Time_Span := Milliseconds(Periode_Ms);
-- Le type Time_Span, dfini dans Ada.Real_Time, permet de
-- reprsenter une dure
Prochaine_Activation: Time := Clock+Periode;
-- Le type Time, dfini dans Ada.Real_Time, reprsente une date
-- Date de prochaine activation, initialise lheure courante
-- (retour de la fonction clock) + la priode
begin
loop
Put_Line(integerimage(Numero)); -- Affichage du numro
delay until Prochaine_Activation; -- Attente de la prochaine
-- date dactivation
Prochaine_Activation:=Prochaine_Activation+Periode; -- Calcul
-- de la prochaine date de rveil
end loop;
end;
Periode1 : T_Periodique(1, 100); -- Instanciation dune tche de
-- priode 100 ms
Periode2 : T_Periodique(2, 150); -- Instanciation dune tche de
-- priode 150 ms
begin -- lancement de toutes les tches
null; -- le programme principal ne fait rien
end; -- Attente de terminaison des tches
m Tches rveilles par interruption
Ada prvoit directement une gestion dinterruption de type ISR dclenchant une DSR
( 5.2.3, p. 206). Une ISR doit forcment se trouver dans un objet protg situ
dans un paquetage. Le protocole priorit plafond immdiat doit tre utilis, et la
priorit plafond de lobjet protg contenant lISR doit tre une priorit dinterrup-
tion.
Ainsi, la tche matrielle prsente sur la gure 6.30 simplmente comme suit.
Linterruption dclenche par la combinaison de touches Contrle-C, nomme
SIGINT daprs une terminologie Unix/POSIX est traite.
-- Fichier Isr.ads
with System; use System;
package Isr is
protected Isr2 is
-- Objet protg grant linterruption 2 (SIGINT)
entry Wait; -- Procdure garde sur laquelle la tche de
-- traitement (DSR) se met en attente de
-- linterruption
procedure Signal; -- Procdure effectivement appele lors de
-- linterruption traite
private
6.3 Programmation multitche
en langage Ada
327


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
pragma Interrupt_Priority(Interrupt_PriorityLast); -- Doit
sexcuter avec la priorit maximale
pragma Attach_Handler(Signal,2); -- Ce pragma fait que la
-- procdure Signal est appele sur linterruption SIGINT
Pending: Natural:=0; -- Nombre dinterruptions non traites
end;
end Isr;
-- Fichier Isr.adb
package body Isr is
protected body Isr2 is
entry Wait when Pending>0 is -- La DSR se bloque ici tant quil
-- ny a pas dinterruption traiter
begin
Pending:=Pending - 1; -- Une interruption est traite
end;
procedure Signal is
begin
Pending := Pending + 1; -- Une interruption supplmentaire est
-- traiter
end;
end;
end Isr;
-- Fichier Test_Interruption.adb (programme principal)
-- pragmas ncessaires ds lors que lordonnancement a une importance
pragma Task_Dispatching_Policy(Fifo_Within_Priorities);
-- Ordonnancement FIFO par niveaux de priorit
pragma Locking_Policy(Ceiling_Locking); -- Protocole priorit
-- plafond immdiat
pragma Queuing_Policy(Priority_Queuing); -- Gestion des attentes
-- dobjet protg par priorit des tches
with Text_Io;use Text_Io;
with Isr;use Isr;
procedure Test_Interruption is
task Dsr is
-- Tche de traitement de linterruption
pragma Priority(25);
-- Tche de priorit 25
end;
task body Dsr is
-- Tche de traitement de linterruption
begin
put_line("Appuyer sur Ctrl-C");
loop
Isr2.Wait; -- Attente dune interruption
-- etc.
Put_Line("Ctrl-C");
end loop;
end;
begin -- lancement de la tche
null; -- ne fait rien
end; -- Attente de terminaison
6.3.3 Exemple
Lexemple de la gestion de la scurit dune mine dont le diagramme DARTS
est donn sur la gure 3.27 est trait en langage Ada.
328
6.3 Programmation multitche
en langage Ada
6 Programmation
des systmes multitches
Commenons par le plus simple, savoir le programme principal, qui est de la forme :
-- pragmas ncessaires ds lors que lordonnancement a une importance
pragma Task_Dispatching_Policy(Fifo_Within_Priorities);
-- Ordonnancement FIFO par niveaux de priorit
pragma Locking_Policy(Ceiling_Locking); -- Protocole priorit
-- plafond immdiat
pragma Queuing_Policy(Priority_Queuing); -- Gestion des attentes
-- dobjet protg par priorit des tches
with Controle; -- Paquetage o les tches sont dclares
procedure Controle_Mine is
begin -- lancement des tches (dclares dans le paquetage Controle)
null; -- ne fait rien
end; -- Attente de terminaison
Ce programme principal vide est assez caractristique des programmes multitches
en langage Ada.
Nous supposons quil existe un paquetage gnrique Communication donn en
annexe D. Ce paquetage gnrique doit tre instanci sur les types de donnes mani-
pules. Il est donc instanci sur les nombres ottants, sous la forme dun paquetage
nomm com_float :
with Communications; -- Paquetage gnrique de communication
package Com_Float is new Communications(Element=>Float);
Le paquetage contenant les tches et les instanciations des lments de communi-
cation et de synchronisation est donn ci-aprs.
-- Fichier Controle.ads
with Com_Float; -- Dfinit les outils de communication
-- Noter labsence de la clause use, obligeant prfixer
-- lutilisation des lments de ce paquetage par le nom du paquetage
-- Cette criture lve toute ambigut lorsque plusieurs types du mme
-- nom sont dfinis dans des paquetages diffrents
package Controle is
-- Spcifie et instancie les tches du contrle de mine
-- Instancie les botes aux lettres, synchronisations et modules de
donnes ncessaires

-- Dclaration et instanciation des tches
task Acquerir_Niveau_Methane is
pragma Priority(12);
end;
task Acquerir_Capteur_Eau is
pragma Priority(11);
end;
task Afficher_Alarme is
pragma Priority(28);
end;
task Commander_Pompe is
pragma Priority(29);
end;
task Controler_Mine is
pragma Priority(30);
end;

MDD_Niveau_Eau : Com_Float.MDD; -- Instanciation dun module de
donnes contenant un float
6.3 Programmation multitche
en langage Ada
329


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
Bal_Niveau_Methane : Com_Float.Bal_1_Ecrasement; -- Instanciation
-- dune bote aux lettres de float
Bal_Vitesse : Com_Float.Bal_1_Ecrasement; -- Instanciation dune
-- bote aux lettres de float
Sync_Alarme : Com_Float.Synchro_C;
end;
Le corps du paquetage, contenant limplmentation des tches, est fourni ci-aprs.
-- Fichier Controle.adb
with Procede; use Procede; -- Dfinit les fonctions daccs aux
-- capteurs/actionneurs
with Ada.Real_Time;use Ada.Real_Time;
package body Controle is
-- Dfinitions des constantes
LLS : constant float:= 5.3; -- Valeur sous laquelle le niveau est
-- considr trop bas
HLS : constant float := 17.8; -- Valeur au-dessus de laquelle le
-- niveau est considr trop haut
-- Seuils DAlerte De Mthane
MS_L1 : constant float:= 128.0;
MS_L2 : constant float:=180.0;
task body Acquerir_Capteur_Eau is
--Tche priodique dacquisition
Periode: constant Time_Span:=Milliseconds(5000); -- Priode de 5s
Prochaine: Time:=Clock+Periode; -- Prochaine date de rveil
begin
loop
MDD_Niveau_Eau.Ecrire(Lire_Capteur_Eau); -- Ecrit la valeur
-- du capteur dans le MDD
delay until Prochaine; -- Attend la prochaine date de rveil
Prochaine:=Prochaine+Periode; -- Calcul de la prochaine date
-- de rveil
end loop;
end Acquerir_Capteur_Eau;
task body Acquerir_Niveau_Methane is
--Tche priodique dacquisition
Periode: constant Time_Span:=Milliseconds(500); -- Priode
-- de 500 ms
Prochaine: Time:=Clock+Periode; -- Prochaine date de rveil
begin
loop
Bal_Niveau_Methane.Envoyer(Lire_Capteur_Methane); -- Envoi
-- de la valeur du capteur
delay until Prochaine; -- Attend la prochaine date de rveil
Prochaine:=Prochaine+Periode; -- Calcul de la prochaine date
-- de rveil
end loop;
end Acquerir_Niveau_Methane;
task body Afficher_Alarme is
-- Tche en attente de synchronisation
Etat_Alarme: Boolean := False; -- Etat courant de lalarme (vrai
-- ssi allume)
begin
loop
Sync_Alarme.Wait; -- Attente de synchronisation
330
6.3 Programmation multitche
en langage Ada
6 Programmation
des systmes multitches
Etat_Alarme:= not Etat_Alarme;
Piloter_Alarme(Etat_Alarme); -- Actionne ou coupe lalarme
end loop;
end Afficher_Alarme;
task body Commander_Pompe is
-- Tche en attente de message
Vitesse : float;
begin
loop
Bal_Vitesse.Recevoir(Vitesse);
Piloter_Pompe(Vitesse); --Pilotage effectif de la pompe
end loop;
end Commander_Pompe;
task body Controler_Mine is
Niveau_Methane, Niveau_Eau: Float;
type T_Etat is (Nominal, Pompe, Alerte_Et_Pompe, Alerte);
-- Etats possibles du diagramme Etats/Transitions
Etat: T_Etat:=Nominal; -- Etat courant dans le diagramme tats/
-- transitions
begin
loop
Bal_Niveau_Methane.Recevoir(Niveau_Methane); -- Attente sur
-- bote aux lettres
MDD_Niveau_Eau.Lire(Niveau_Eau);
-- Implmentation du diagramme Etats/Transitions donn sur la
-- figure 2.33
case Etat is
when Nominal =>
if Niveau_Methane >= MS_L1 then
-- Seuil dalerte
Sync_Alarme.Signal; -- Alarme
Etat := Alerte;
elsif Niveau_Eau >= HLS then
-- Allumage de la pompe, pour simplifier, nous supposons
-- que nous la pilotons de faon proportionnelle
Bal_Vitesse.Envoyer(Niveau_Eau-LLS);
Etat := Pompe;
end if;
when Pompe =>
if Niveau_Methane >= MS_L1 then
-- Seuil dalerte
Sync_Alarme.Signal; -- Alarme
Etat := Alerte_Et_Pompe;
elsif Niveau_Eau <= LLS then
Bal_Vitesse.Envoyer(0.0);
Etat := Nominal;
else Bal_Vitesse.Envoyer(Niveau_Eau-LLS) ; -- Pilotage proportionnel
-- de la pompe
end if;
when Alerte =>
if Niveau_Methane < MS_L1 then
-- Seuil dalerte
Sync_Alarme.Signal; -- Extinction de lalarme
Etat := Nominal;
elsif Niveau_Methane < MS_L2 and Niveau_Eau > HLS then
-- Allumage de la pompe, pour simplifier, nous supposons
-- que nous la pilotons de faon proportionnelle
6.4 Programmation multitche
en langage LabVIEW
331


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
Bal_Vitesse.Envoyer(Niveau_Eau-LLS);
Etat := Alerte_Et_Pompe;
end if;
when Alerte_Et_Pompe =>
if Niveau_Methane >= MS_L2 or niveau_eau <= LLS then
-- Alerte MS_L2 ou niveau bas => extinction de la pompe
Bal_Vitesse.Envoyer(0.0);
Etat := Alerte;
elsif Niveau_Methane < MS_L1 then
-- Niveau de mthane sous le seuil dalerte
Sync_Alarme.Signal; -- Extinction de lalarme
Etat := Pompe;
else Bal_Vitesse.Envoyer(Niveau_Eau-LLS); -- pilotage proportionnel
end if;
end case;
end loop;
end Controler_Mine;
end Controle;
6.4 Programmation multitche en langage LabVIEW
6.4.1 Implmentation multitche LabVIEW
La nature ots de donnes du langage LabVIEW induit naturellement du parall-
lisme, ainsi, deux boucles non relies par un l de donnes peuvent tre excutes
paralllement. Le paralllisme est donc totalement naturel et transparent pour le
programmeur.
En LabVIEW, une tche peut donc tre implmente simplement laide dune
boucle, et le fait de placer plusieurs tches en parallle implique naturellement une
excution parallle. Ainsi, la gure 6.31 montre deux boucles sans n LabVIEW
sexcutant en parallle.
La difcult vient du fait que si lon dsire faire communiquer les tches, on ne peut
pas utiliser de ot de donnes (gure 6.32), sinon, une boucle dpend de lautre, et
ne pourra commencer son excution que lorsque la boucle prcdente sera termine :
la tche 2 nest jamais excute, car elle doit attendre la terminaison de la tche 1.
Figure 6.31 Deux tches sans fin en langage LabVIEW.
332
6.4 Programmation multitche
en langage LabVIEW
6 Programmation
des systmes multitches
An de rgler ce type de problme, LabVIEW propose diffrents outils de commu-
nication et synchronisation (botes aux lettres, smaphore, non rentrance des vi,
rendez-vous sans donnes, vnements) qui peuvent tre utiliss pour implmenter
les diagrammes DARTS.
Par exemple, la gure 6.33 montre comment on peut utiliser une bote aux lettres
pour raliser le passage dun entier entre deux tches :
An daugmenter la lisibilit du programme, et de proter du support multitche
du systme dexploitation sous-jacent ( 6.4.2), on prfrera encapsuler chaque tche
dans un sous-vi (gure 6.34). Chaque vi contenant une tche peut tre congur
an de modier sa priorit (il existe 5 niveaux de priorit) et son systme dexcution.
Un 6
e
niveau de priorit appel sous-programme rend un vi de cette priorit
non premptible dans son thread ( 6.4.2). Par consquent, les oprations bloquantes
ou suspensives sont interdites dans les vi de priorit sous-programme , de plus,
il ne peut appeler que des sous-vi de la mme priorit que lui.
Le flot ne sort qu la terminaison de la tche 1, cest--dire jamais
Figure 6.32 Programmation incorrecte de la communication entre tches en langage LabVIEW.
Figure 6.33 Passage de donnes entre deux tches en langage LabVIEW.
6.4 Programmation multitche
en langage LabVIEW
333


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
6.4.2 Gestion interne du multitche par LabVIEW
Nous allons dcrire la faon dont LabVIEW gre le multitche de faon interne.
LabVIEW sappuie si possible sur le systme dexploitation sous-jacent pour grer les
tches : si celui-ci est multitche (cest le cas de la plupart des systmes dexploitation
modernes), alors LabVIEW excute le contenu des vi en les intgrant un certain
nombre de tches du systme (nommes threads dans la suite de ce paragraphe).
Si le systme dexploitation sous-jacent nest pas multitche, ou bien multitche
coopratif (les tches ne sont pas premptes mais rendent elles-mmes la main
au systme), alors LabVIEW soccupe dexcuter paralllement les vi en multitche
coopratif (cas de Windows 3.1, MacOS avant Mac OS X, etc.).
An dexpliquer la faon dont LabVIEW gre le multitche, il nous faut dcomposer
les tches en deux niveaux : les tches du systme dexploitation ou threads, et les
tches internes. Sur un systme dexploitation premptif, les threads sont excuts de
faon premptive (leur ordonnancement est effectu par le systme dexploitation
lui-mme), et grent une le dattente de tches internes, gres de faon cooprative
par le moteur dexcution LabVIEW. Lorsquune tche interne fait appel du code
externe (librairie dynamique partage, code dynamique charg CIN, etc.), elle devient
non premptible par une tche interne du mme thread jusqu la n de lappel.
Les threads sont regroups en systmes dexcution. Il en existe 6, nomms interface
utilisateur, standard, E/S dinstruments, acquisition de donnes, autre 1 et autre 2.
Le premier systme dexcution possde au moins un thread qui est ddi la gestion
de linterface graphique (afchage, positionnement/dimensionnement de fentre,
gestion des vnements utilisateur, etc.).
Les 5 autres systmes dexcutions contiennent de 0 40 threads chacun. En effet,
chaque systme dexcution peut tre congur (avec le vi threadcong.vi pouvant
se trouver dans la bibliothque sysinfo.llb) pour utiliser de 0 8 threads par niveau de
priorit (il y a 5 niveaux de priorit). Par dfaut, LabVIEW 7, sur le systme dexploi-
tation MS Windows XP

utilise 4 threads par niveau de priorit (sauf pour le niveau


le plus bas) pour chaque systme dexcution, soit en tout 16 par systme dexcu-
tion, ce qui donne par dfaut un total de 81 threads (en incluant le thread dinterface
graphique), pouvant tre port 201.
Les threads sont ordonnancs par le systme dexploitation en fonction de leur niveau
de priorit. lintrieur dun thread, les tches internes (qui correspondent au surplus
Les tches sont encapsules
Figure 6.34 Encapsulation de tches en langage LabVIEW.
334
6.4 Programmation multitche
en langage LabVIEW
6 Programmation
des systmes multitches
de paralllisme du diagramme nayant pas pu tre mis seul dans un thread) sont
ordonnances en tourniquets classs par priorit. Notons que le thread en charge de
linterface graphique gre les interfaces graphiques des vi en fonction de leur niveau
de priorit.
tant donn que la priorit est dnie au niveau de chaque vi (par dfaut, cest la
priorit du vi appelant), lorsquun vi trs prioritaire appelle un sous-vi moins priori-
taire, celui-ci hrite de la priorit de lappelant.
Notons que le nom donn aux systmes dexcution autres que celui de linterface
graphique est purement indicatif. Par dfaut, un vi sexcute dans le systme dex-
cution standard. Ceci peut tre congur diffremment pour chaque vi (menu Fichier,
Proprits du vi, excution).
Le nombre de threads contenus dans le seul systme dexcution standard exempte
gnralement les programmeurs dutiliser des systmes dexcution autres que stan-
dard.
6.4.3 Implmentation des lments DARTS
m Tches priodiques
LabVIEW possde deux vi dattente de la granularit dune milliseconde : une attente
relative (attendre) et une attente de multiple dhorloge (attendre un multiple de).
An dviter une drive des horloges ( 5.2.4), cest le second type dattente qui est
utilis pour assurer la priodicit des rveils dune tche : ce vi attend que lhorloge
soit un multiple de son paramtre. Ainsi, sur la gure 6.35, soit t
1
la date laquelle la
premire itration de la boucle a lieu. Le vi attendre un multiple de 50 ms attend
que la valeur dhorloge ait atteint un multiple de 50 ms. La seconde itration, ne
pouvant commencer que lorsque litration prcdente est termine, doit attendre
la n de tous les vi et donc la n de attendre un multiple de, et donc le prochain
multiple de 50 ms (notons que la seconde itration peut donc commencer moins
de 50 ms aprs la premire en fonction de la valeur de lhorloge lors de la premire
itration). Soit 50xn ms cette date. Alors la troisime itration ne peut avoir lieu
qu partir de la date 50(n + 1), la i
me
itration ne peut pas dbuter avant la date
50(n + i 1), etc. Notons que si une itration dborde de sa priode, litration
Figure 6.35 Tche priodique en langage LabVIEW.
6.4 Programmation multitche
en langage LabVIEW
335


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
suivant est repousse : si litration i se termine aprs la date 50(n + i ), alors
litration i + 1 ne peut commencer qu la date 50(n + i 1) au lieu de 50(n + i ).
m Modules de donnes
Les modules de donnes DARTS peuvent tre implments en se basant sur la non
rentrance des vi : par dfaut, un vi est non rentrant. An dillustrer plus aisment
son fonctionnement, un parallle est fait entre vi non rentrant et moniteur (par
exemple objet protg Ada).
Lorsque deux tches tentent daccder simultanment une primitive dun mme
moniteur, deux accs simultans au mme vi non rentrant ne peuvent pas avoir lieu.
Dans un moniteur, il y a des variables internes (partie private en langage Ada)
reprsentant ltat du moniteur. En LabVIEW, le registre dcalage (gure 6.11)
sert conserver des donnes dune itration de boucle pour la suivante. Lorsque la
boucle se termine, les dernires donnes inscrites restent mmorises dans le registre
dcalage. Par consquent, lors de la prochaine lecture du registre (lors dune ex-
cution suivante de la boucle), si le registre dcalage nest pas initialis, il contient
les donnes inscrites dans le registre dcalage. Lide consiste donc crer une boucle
nayant quune seule itration an de la munir dun registre dcalage qui mmorise
les donnes inscrites dune excution sur lautre. Cette mthode permet de conserver
de faon rmanente des donnes dans un vi.
Ainsi, la gure 6.36 montre un module de donnes contenant un enregistrement
(cluster) pouvant tre lu et modi par des tches concurrentes tout en respectant
lexclusion mutuelle. Gnralement, trois primitives de base sont dnies : initialiser,
lire et crire. La primitive est choisie laide dun type numr pass en paramtre
au vi. La gure 6.37 montre lutilisation de ce module de donnes pour la lecture
par un vi priodique.
Notons quil est assez courant de diversier les primitives : ainsi, si par exemple on
souhaite pouvoir modier uniquement la temprature ou uniquement la pression,
il suft dajouter les primitives permettant de le faire.
Malheureusement, la comparaison entre moniteur Ada et vi non rentrant sarrte l :
il ny a aucun moyen simple dimplmenter une procdure garde (entry Ada)
avec cette technique.
m Botes aux lettres
Depuis la version 5, LabVIEW propose des botes aux lettres sans crasement bornes
ou non ; dans ce cas, le nombre de messages est limit par la mmoire, permettant
une lecture bloquante, ou bien non bloquante (en utilisant un timeout nul ou born
en temps). Depuis la version 7, les botes aux lettres sont polymorphes, cest--dire
que le type des messages est donn la cration, alors quauparavant, les messages
taient de type chane de caractre (ce qui correspond au fonctionnement des botes
aux lettres en langage C, obligeant effectuer des coercions vers char * pour lenvoi
et depuis char * pour la rception de messages).
336
6.4 Programmation multitche
en langage LabVIEW
6 Programmation
des systmes multitches
Figure 6.36 Module de donnes en langage LabVIEW.
Figure 6.37 Utilisation dun module de donnes en langage LabVIEW.
6.4 Programmation multitche
en langage LabVIEW
337


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
M Botes aux lettres sans crasement
Un exemple de bote aux lettres non borne sans crasement a t prsent sur les
gures 6.32 et 6.33. La gure 6.38 montre un exemple de bote aux lettres de taille 1
sans crasement. Par rapport la gure 6.34, sur laquelle la bote tait non borne,
seul un paramtre change la cration de la bote aux lettres.
M Botes aux lettres crasement
Si cela est ncessaire, il est possible de crer des botes aux lettres crasement en
utilisant les smaphores et une variable globale en utilisant un algorithme de type
producteur crasement/consommateur. Cependant, limplmentation de ce type
de bote aux lettres reste laborieuse en langage LabVIEW.
m Synchronisation
LabVIEW propose loutil smaphore compte, ce qui devrait rendre triviale limpl-
mentation des synchronisations. Ctait le cas avant la version 7 de LabVIEW Ainsi,
la gure 6.39 propose un exemple de synchronisation fonctionnant sur LabVIEW
Figure 6.38 Bote aux lettres de taille 1 sans crasement en langage LabVIEW.
Figure 6.39 Synchronisation en langage LabVIEW en version 5 et 6.
338
6.4 Programmation multitche
en langage LabVIEW
6 Programmation
des systmes multitches
5 et 6. An de simplier sa prsentation, les tches ne sont pas encapsules dans des
sous-vis.
Malheureusement, LabVIEW 7 a lgrement modi la smantique des smaphores
pour nen faire que des smaphores dexclusion mutuelle. Par consquent, la synchro-
nisation pourra tre implmente en LabVIEW 7 par des botes aux lettres non
bornes avec des messages dun octet (par exemple boolens) nayant de signication
que par leur prsence, et non par leur valeur.
6.4.4 Exemple
La mise en uvre des diffrents outils prsents pour limplmentation dlments
DARTS en langage LabVIEW est faite sur lexemple de la gestion de la scurit
dune mine dont le diagramme DARTS est donn sur la gure 3.27. Dans cette
implmentation, la synchronisation entre la tche de contrle et la tche dalarme
est remplace par une communication par bote aux lettres.
Nous pouvons constater que LabVIEW dispose dune moindre puissance dexpres-
sion que POSIX ou Ada en terme de synchronisation et de communication, mais,
en contrepartie, que limplmentation dune conception DARTS est extrmement
simple raliser. Le module de donnes Niveau Eau est implment comme le
module de donnes de la gure 6.36, except quil contient une donne interne de
type ottant.
Figure 6.40 Implmentation de la tche Acqurir Capteur Eau
en langage LabVIEW.
6.4 Programmation multitche
en langage LabVIEW
339


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
6 Programmation
des systmes multitches
Figure 6.41 Implmentation de la tche Acqurir Niveau Mthane
en langage LabVIEW.
Figure 6.42 Implmentation de la tche Commander Alarme
en langage LabVIEW.
Figure 6.43 Implmentation de la tche Commander Pompe
en langage LabVIEW.
340
6.4 Programmation multitche
en langage LabVIEW
6 Programmation
des systmes multitches
Figure 6.44 Vue partielle de limplmentation de la tche Contrler Mine
en langage LabVIEW.
Figure 6.45 Implmentation du contrle dune mine
en langage LabVIEW.
341


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

7 TRAITEMENT COMPLET
DUNE APPLICATION INDUSTRIELLE

Ce chapitre illustre par un exemple de taille raliste la mthodologie prsente dans
cet ouvrage.
Un changeur de chaleur, procd encombrant, pourra tre contrl partir dun
micro-ordinateur standard ou dun PC industriel. Les contraintes de temps tant
relativement molles, on peut utiliser un systme dexploitation gnraliste (Linux,
MS Windows


) ou bien un systme dexploitation temps rel dencombrement
mmoire important, qui pourra tre conforme au type 54 de la norme (par exemple
RTLinux et la famille des systmes temps rel bass sur Linux), ou encore un sys-
tme temps rel propritaire comme VxWorks


. Pour illustrer tout cela, les langages
cibles abords lors de cet exemple sont LabVIEW pour une implmentation sur
systme dexploitation gnraliste, et C (POSIX) et Ada pour une implmentation
sur systme dexploitation gnraliste ou bien temps rel.

7.1 Cahier des charges

Un changeur de chaleur (gure 7.1), est un dispositif trs utilis dans le domaine
agroalimentaire. Lune de ses utilisations consiste refroidir un procd vacuant
de lnergie sous forme de chaleur. Lchangeur peut tre constitu de deux circuits
de ux indpendants (dans le sens o il ny a pas dchange liquide) mais spars
par une paroi mtallique favorisant les transferts thermiques.
Une pompe entrane un ux continu deau distille lintrieur dun circuit ferm.
Le procd refroidir (qui, lui, nest pas pilot par le systme concevoir) est immerg
dans une cuve irrigue par leau distille. Leau distille est elle-mme refroidie par
change thermique avec un ux deau industrielle en circuit ouvert. Ainsi, de leau
frache (aux alentours de 15 21 C en fonction de la saison) permet de refroidir
leau distille, qui elle-mme maintient le procd autour dune temprature de
consigne.
Le but du systme de contrle est de rguler le dbit deau industrielle en fonction
des tempratures mesures, tout en assurant la scurit du systme.
Une console oprateur sert afcher les relevs des tempratures (entre et sortie
deau distille, entre et sortie deau froide) et des dbits, et une alarme est dclenche
si la temprature releve en sortie de cuve est hors domaine (la temprature rfrence

Ted2

en sortie de cuve doit se situer dans une fourchette donne). De mme, si
342

7.2 Spcification

7 Traitement complet
dune application industrielle

lon saperoit de la prsence dune fuite dans lun des circuits, ou de loccurrence
dune coupure deau industrielle, ou encore dune panne de pompe, alors lalarme
doit tre dclenche. Dans ce cas, un oprateur humain doit stopper le procd
refroidi, puis avertir le systme de cet arrt en appuyant sur le bouton oprateur .
Entre le dclenchement de lalarme et lappui sur le bouton, le systme doit ouvrir
leau froide au maximum an, si possible, de prserver lintgrit du procd refroidi.
Notons quil nest pas possible de distinguer si larrt du ux deau industrielle est
d une coupure deau ou une fuite, et quil est impossible de distinguer si larrt
du ux deau distille est d une panne de la pompe ou une fuite.

7.2 Spcification

Nous avons prsent dans le chapitre 1 le cycle en W du dveloppement dun sys-
tme de contrle-commande. La premire phase consiste donc spcier, concevoir
et implmenter un systme pilotant un simulateur purement logiciel. En effet,
typiquement, lchangeur est pilot manuellement dans une entreprise, et un arrt de
ses fonctionnalits pendant les phases de test du systme de contrle serait pnalisant.
De plus, des commandes errones pourraient mettre en pril son intgrit. Enn,
il arrive frquemment que le matriel de commande et les dispositifs lectroniques
ncessaires son interfaage avec le systme de contrle soient en dveloppement
paralllement au dveloppement du systme de contrle.
Procd
refroidir
lectrovanne
rglable
deau froide EVef
Eau froide
industrielle
vacuation
eau froide
Thermocouple
Tef1
Thermocouple
Ted2
Thermocouple
Ted1
Thermocouple
Tef2
Pompe
Dbimtre
Dbt_ed
Dbitmtre
Dbt_ef
Bouton oprateur
Courbes
dbits et
tem
pratures
Flux deau
chauffe par le procd Flux deau froide
industrielle
Zone dchange thermique
Alarme
Console oprateur
Figure 7.1 changeur de chaleur.
7.2 Spcification

343


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

7 Traitement complet
dune application industrielle

Dans le second V, lors de la spcication adapte, nous verrons quil est ncessaire
de prendre en compte les spcicits matrielles (relais lectriques, ncessit dali-
menter un dbitmtre avant de lutiliser).
Dans la spcication, nous considrons quil est possible de lire directement les
dbits en litre/heure, quil est possible de piloter directement une lectrovanne, etc.
La gure 7.2 reprsente le diagramme de contexte obtenu.
Nous pouvons alors driver le diagramme prliminaire (gure 7.3). Notons que les
alarmes ne sont pas dissocies (

Acqurir T

,

Rguler ef

, et

Vrier dbit ed

envoient le
mme vnement

Alarme

en cas dincohrence avre). Notons que les processus
1, 2 et 3 sont des processus dacquisition. Lvnement

Trigger

dclenchant le pro-
cessus 5 a une smantique particulire : en effet,

Lire Bouton

, lorsquil est dclench,
doit scruter ltat du bouton jusqu ce quil soit en ltat appuy, dans ce cas, il
renvoie un vnement

ACK

(pour

acknowledge

). Ce type dutilisation du

Trigger

ressemble un appel de sous-programme : il est dclench, et lorsquil se termine,
envoie un vnement de retour.
La smantique de lvnement

E/D

envoy sur le processus 4 est une smantique de
type activation dun processus fonctionnel synchronis par ot de donnes : partir
de lvnement

Enable

, le processus traite chaque donne

Commande dbit

reue.
Le processus 8 est un processus cyclique dafchage. Le rle d

Afcher alarme

est de
modier ltat de lalarme, qui ne sera alors teinte qu la terminaison du systme.
Enn, lvnement

E/D

commandant le processus

Commander Pompe

a une sman-
tique de type

Allumer/teindre

.
Le rle du processus de contrle est donn sous la forme dun diagramme tat/
transition sur la gure 7.4. Initialement les processus dacquisition (1, 2, 3) sont
dclenchs, le processus 4 se tient prt traiter les donnes, le processus 8 est lanc
an dafcher les courbes de tempratures et dbits, et la pompe est mise en route
par le processus 6.
Tempratures
Dbit ef
Dbit ed
Mise
en route
Affichage
Cmd pompe
Cmd vanne
Thermocouples
Dbt_ef
Bouton poussoir
Dbt_ed
Pompe
Sirne
EVef
Bouton Alarme
Rguler
changeur
0
Console
Figure 7.2 Diagramme de contexte
du systme de contrle de lchangeur de chaleur.
344

7.2 Spcification

7 Traitement complet
dune application industrielle
E/D
A
l
a
r
m
e
Dbit ef
E/D
Dbit ed
E/D
Alarme
Alarme
Tempratures
Consigne T
Commande dbit
Cmd vanne
T
ACK
Bouton
E/D
E/D
T
E/D
Cmd
pompe
Affichage
Dbits lus*
Alarme
Dbit ed lu
Dbit
ed lu Dbit
ef lu
Tlues*
Tlues*
Dbits lus*
Afficher
8
9
Afficher
alarme
7
Commander
vanne
4
Rguler
ef
1 Lire
bouton
5
Vrifier
dbit ed
3
Acqurir
T
2
Commander
pompe
6
Contrler
changeur
Figure 7.3 Diagramme prliminaire
du systme de contrle de lchangeur de chaleur.
Mise en route
<E> 1,2,3,4,6,8
Alarme
<D> 1,2,3,8
<T> 5,7
ACK
<D> 4,6
Nominal
Arrt
Attente
oprateur
Figure 7.4 Diagramme tat/transition du processus de contrle.
7.2 Spcification

345


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

7 Traitement complet
dune application industrielle

En cas dalarme, les processus dacquisition et dafchage sont arrts, lalarme est
dclenche, et on attend la prise en compte de lalarme par loprateur (dclen-
chement du processus 5, dont la commande ouvrir la vanne deau industrielle en
grand va supplanter les commandes envoyes habituellement par le processus 1).
Lorsque loprateur a valid lalarme (appui sur le bouton), le systme sarrte en
coupant llectrovanne et la pompe.
Avant daller plus en profondeur (dcomposition des processus fonctionnels com-
plexes en DFD), nous pouvons tudier le dictionnaire de donnes du systme et la
spcication textuelle des processus fonctionnels simples, qui deviendront de fait
primitifs (tableau 7.1).

Tableau 7.1

Dictionnaire de donnes
associ aux diagrammes de contexte et prliminaire.

Donnes et vnements externes

Tempratures Tef

1

+ Tef

2

+ Ted

1

+ Ted

2

Tef

1

Signal en entre
Rle : Temprature dentre de leau industrielle en C
Type : Flottant sur 32 bits
Domaine : ]0..40 C]
Tef

2

Signal en entre
Rle : Temprature de sortie deau industrielle en C
Type : Flottant sur 32 bits
Domaine : ]0..60 C]
Ted

1

Signal en entre
Rle : Temprature dentre de cuve en C
Type : Flottant sur 32 bits
Domaine : ]0..70 C]
Ted

2

Signal en entre
Rle : Temprature de sortie de cuve en C
Type : Flottant sur 32 bits
Domaine : ]0..85 C]
Dbits lus Dbit ef + Dbit ed
Dbit ef Signal en entre
Rle : Dbit deau industriel relev en entre en litre/heure (l/h)
Type : Flottant sur 32 bits
Domaine : [0..200 l/h]
Dbit ed Signal en entre
Rle : Dbit deau distille pris en entre de cuve en l/h
Type : Flottant sur 32 bits
Domaine : [0..320 l/h]
346

7.2 Spcification

7 Traitement complet
dune application industrielle

Le tableau 7.2 donne la spcication des processus primitifs de la gure 7.3.
Nous pouvons remarquer que, mis part le processus

Rguler ef

quil est ncessaire
de rellement arrter (il existe une action

<D>Rguler ef

dans le diagramme tat/
transition du processus de contrle), les processus dclenchs par

E/D

sont des
processus de type faire toujours (un vnement

Disable

ne leur est envoy qu
la terminaison du programme).
Les processus fonctionnels 2, 3, 4, 5, 6, 7 et 8 sont sufsamment simples pour tre
primitifs. Le diagramme de dcomposition du processus

Rguler ef

est donn sur la
gure 7.5. Le processus de contrle 1.1 nest quun relais du processus de contrle 9.

Tableau 7.1 (suite)

Dictionnaire de donnes
associ aux diagrammes de contexte et prliminaire.

Donnes et vnements externes

Bouton Signal en entre
Rle : tat du bouton poussoir
Type : boolen (vrai : appuy et faux : relch)
Mise en route vnement en entre
Rle : Reprsente la mise sous tension du systme de contrle
Affichage Tempratures + Dbits
Dbits Dbit ef + Dbit ed
Cmd pompe Signal en sortie
Rle : Commande dalimentation de la pompe deau distille
Type : boolen (vrai : allume et faux : teinte)
Cmd vanne Signal en sortie
Rle : Commande de llectrovanne dentre deau industrielle
Type : flottant sur 32 bits
Domaine : [0..200 l/h]
Alarme Signal en sortie
Rle : Commande du systme dalarme
Type : boolen (vrai : allume et faux : teinte)

Zones de stockage du diagramme prliminaire

Dbit ed lu Dbit ed
T lues Tempratures

Flots de donnes du diagramme prliminaire

Commande dbit Dbit ed
7.2 Spcification

347


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

7 Traitement complet
dune application industrielle

Tableau 7.2

Processus primitifs du diagramme prliminaire.
Acqurir T

E/ donnes

: Tempratures

E/ vnements

: E/D

S/ donnes

: Tlues

S/ vnements

: Alarme

Entrane

:

Faire toujours

Acqurir Tempratures
Placer Tempratures dans Tlues

Si

lune des Tempratures est hors domaine

Alors

mettre Alarme vers Processus de contrle 9

Finsi
Fin faire

Vrifier
dbit ed

E/ donnes

: Dbit ed

E/ vnements

: E/D

S/ donnes

: Dbit ed lu

S/ vnements

: Alarme

Entrane

:

Faire toujours

Acqurir Dbit ed
Placer Dbit ed dans Dbit ed lu

Si

Dbit ed est hors domaine

Alors

mettre Alarme vers Processus de contrle 9

Finsi
Fin faire

Rguler ef

E/ donnes

: Consigne T

E/ donnes

: Dbit ed lu

E/ donnes

: Tlues

E/ donnes

: Dbit ef

E/ vnements

: E/D

S/ donnes

: Commande dbit

S/ vnements

: Alarme

Entrane

:

Tant que

non(Disable)

faire

Ce processus doit sarrter en pratique sur lvnement Disable afin dviter
un conflit sur le flot Commande dbit
Acqurir Dbit ef

Si

Dbit ef hors domaine ou incohrent avec la commande

Alors

mettre Alarme vers Processus de contrle 9

Finsi

Placer Dbit ef dans Dbits lus
laborer Commande dbit=f(Tlues, Dbit ed lu, Dbit ef, Consigne T)
mettre Commande dbit vers Processus 4

Fin faire
Si

Disable

Alors

mettre Commande dbit au maximum

Finsi
348

7.2 Spcification

7 Traitement complet
dune application industrielle

Tableau 7.2

(suite) Processus primitifs du diagramme prliminaire.
Lire bouton

E/ donnes

: Bouton

E/ vnements

: T

S/ vnements

: ACK

Entrane

:
Faire
Acqurir Bouton
Jusqu Bouton = vrai
mettre ACK vers Processus de contrle 9
Afficher
alarme
E/ vnements : T
S/ donnes : Alarme
Entrane :
Dclencher lalarme
Commander
pompe
E/ vnements : E/D
S/ donnes : Cmd pompe
Entrane :
Faire toujours
Attendre E/D
Si E
Alors Allumer pompe
Sinon teindre pompe
Finsi
Fin faire
Commander
vanne
E/ donnes : Commande dbit
E/ vnements : E/D
S/ donnes : Cmd vanne
Ncessite : Commande dbit dans son domaine
Entrane :
Faire toujours
Attendre Commande dbit
Appliquer Commande dbit Cmd vanne
Fin faire
Afficher E/ donnes : Tlues
E/ donnes : Dbits lus
E/ vnements : E/D
S/ donnes : Affichage
Entrane :
Faire toujours
Afficher Tlues et Dbits lus
Fin faire
7.2 Spcification
349


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
Le tableau 7.3 reprsente la spcication des nouveaux processus crs (la spci-
cation du processus 1 Rguler ef peut alors tre retire de la spcication des pro-
cessus primitifs). Notons que la prise en compte de lvnement Disable nest place
que dans le processus fonctionnel Calculer consigne, ceci an dviter un conit
dmission de commande de dbit vers Commander vanne.
Tableau 7.3 Spcification des processus primitifs du DFD de Rguler ef .
Calculer
consigne
E/ donnes : Consigne T
E/ donnes : Dbits lus
E/ donnes : Tlues
E/ vnements : E/D
S/ donnes : Commande dbit
S/ vnements : Alarme
Entrane :
Tant que non(Disable) faire
Ce processus doit sarrter en pratique sur lvnement Disable afin dviter
un conflit sur le flot Commande dbit
Si Dbits lus incohrents avec dernire Commande dbit
Alors mettre Alarme
Finsi
laborer Commande dbit = f(Tlues, Dbit ed lu, Dbit ef, Consigne T)
mettre Commande dbit vers Processus 4
Fin faire
Si Disable
Alors mettre Commande dbit au maximum
Finsi
E/D
Commande dbit
Dbit ef lu
Alarme
E/D
E/D
D
<D>1.2, 1.3
Alarme
Alarme
E
<E>1.2,1.3
Alarme
Alarme
Calculer
consigne
1.3
Nominal
Panne
Contrler
rgulation
1.1
Acqurir
ef
1.2
Dbits lus
Dbit ef
Consigne T Tlues*
Figure 7.5 DFD de Rguler ef et diagramme tat/transition du contrle.
350
7.3 Conception 7 Traitement complet
dune application industrielle
7.3 Conception
Il est maintenant possible de passer la conception DARTS du systme. Il est tou-
jours intressant de regrouper les processus fonctionnels en un minimum de tches :
la validation temporelle du systme est simplie, la cohrence fonctionnelle est plus
simple obtenir (dans le cas tudi, il faut sassurer que Lire Bouton envoie bien une
donne Commander vanne aprs que Calculer consigne se soit arrt). De plus,
avec moins de tches, le fonctionnement est plus efcace (diminution du nombre de
premptions, des communications, de la taille de la le des processus ordonnancer,
etc.).
Initialement, chaque processus est vu comme une tche, les ots de donnes et dv-
nements sont implments par une bote aux lettres, une synchronisation, ou rien
(cas de lvnement E/D lorsque seul lvnement E est envoy initialement par
exemple), enn, les zones de stockage partages par plusieurs processus sont gn-
ralement implmentes par des modules de donnes. La gure 7.5 reprsente un
diagramme DARTS pour le systme de contrle de lchangeur.
Notons que seuls les vnements rellement utiliss par le processus de contrle sont
reports dans la conception. Ainsi, par exemple, lvnement E/D envoy sur le pro-
cessus fonctionnel Commander_Vanne ne sera pas implment : la tche Commander_
Vanne, implmentant les fonctionnalits du processus fonctionnel du mme nom,
est prte au lancement du systme, et ne sera arrte qu lextinction du systme.
La tche Rguler dbit intgre les processus fonctionnels 1, 3, 5, 9 : les processus 1
et 3 ont une cohrence fonctionnelle forte, de plus, la rgulation est dautant plus
ne quelle se base sur des valeurs de dbit juste acquises (le dbit peut en effet varier
relativement vite, contrairement aux tempratures). Le fonctionnement du pro-
cessus 5 correspond un appel de sous-programme par le processus 9 : ils sont donc
regroups en une tche. Cependant, tant donn que la tche obtenue serait assez
simple, et fonctionnerait au plus la mme vitesse que la rgulation de dbit, les
4 processus fonctionnels sont nalement intgrs dans une mme tche.
Tableau 7.3 (suite) Spcification des processus primitifs du DFD de Rguler ef .
Acqurir ef E/ donnes : Dbit ef
E/ vnements : E/D
S/ donnes : Dbit ef lu
S/ vnements : Alarme
Entrane :
Faire toujours
Acqurir Dbit ef
Si Dbit ef hors domaine ou incohrent avec la commande
Alors mettre Alarme vers Processus de contrle 9
Finsi
Placer Dbit ef dans Dbits lus
Fait
7.3 Conception
351


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
Il est intressant disoler les tches de commande des tches de dcision : en effet,
il est frquent que la dure ncessaire une entre/sortie sur une carte dacquisition
soit trs grande compare la dure dun calcul, mme complexe. Par consquent,
dans la mesure du possible, il est bon dviter de surcharger une tche de calcul et/ou
de dcision en lui faisant effectuer des entres/sorties (sauf si celles-ci sont de toute
faon ncessaires llaboration dun calcul, comme cest le cas ici pour les dbits).
Notons cependant que nous sommes face un systme trs particulier : lalarme nest
dclenche, et la pompe teinte, quen cas de panne, ce qui est exceptionnel. Dans
ce cas prcis, tant donn que cela prcde larrt du systme, il serait plus intressant
de regrouper les tches Alarme et Commander pompe avec Rguler dbit. Par cons-
quent, nous donnons un schma DARTS simpli sur la gure 7.7.
Notons quil est possible de passer dune communication synchrone (ot de donnes
ou vnement) SA-RT une communication asynchrone DARTS, ceci an de
garantir pour chaque tche DARTS un seul vnement dclencheur (conformit
au prol Ravenscar). Ainsi, lvnement Alarme envoy par Acqurir tempratures au
processus de contrle implment par Rguler dbit se retrouve implment par le
module de donnes Panne (communication asynchrone). Cela permet de conserver
un seul mode dactivation pour rguler dbit, ce qui est obligatoire dans le cas o
une validation temporelle serait ncessaire.
An de pouvoir tester le systme sans mettre en pril le procd, et de tester sa rac-
tion face aux pannes, il convient de crer un simulateur du procd, conformment
au premier V du cycle de dveloppement en W. Celui-ci est intgr au diagramme
de la gure 7.8.
Dbits
Tempratures Panne
HTR (500 ms)
Dbit ef
Bouton
HTR (1 000 ms)
Tempratures
Affichage
Alarme
Cmd pompe
Cmd vanne
Dbit ed
Lire Lire
HTR (1 000 ms)
Afficher
Commande pompe
Commande vanne
Alarmer
crire
Lire
crire
crire
Activer
alarme
Commander
pompe
Commander
vanne
Rguler
dbit
Acqurir
tempratures
Figure 7.6 Diagramme DARTS de lchangeur.
352
7.3 Conception 7 Traitement complet
dune application industrielle
Il reste alors identier les lments DARTS aux lments dj dnis dans SA-RT
et dnir les nouveaux lments. An de ne pas noyer les informations impor-
tantes, les lments DARTS portant le mme nom que les lments SA-RT corres-
pondants ne sont pas rednis dans le tableau 7.4.
Tempratures
Dbits
HTR (500 ms)
Dbit ef
Bouton
HTR (1 000 ms)
HTR (1 000 ms)
Tempratures
Affichage
Alarme
Cmd vanne
Cmd pompe
crire
Lire
Dbit ed
Lire
crire
Lire
crire
Afficher
Commande vanne
Rguler
dbit
Acqurir
tempratures
Commander
Vanne
Panne
Figure 7.7 Diagramme DARTS simplifi de lchangeur.
353
7.3 Conception 7 Traitement complet
dune application industrielle


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
H
T
R

(
5
0
0

m
s
)


D

b
i
t

e
f
B
o
u
t
o
n
H
T
R

(
1

0
0
0

m
s
)
H
T
R

(
1

0
0
0

m
s
)
H
T
R

(
5
0
0

m
s
)
T
e
m
p

r
a
t
u
r
e
s
A
l
a
r
m
e
C
m
d

p
o
m
p
e
D

b
i
t

e
d
S
i
m
u
l
a
t
e
u
r
C
o
m
m
a
n
d
e

v
a
n
n
e
A
f
f
i
c
h
a
g
e
P
a
n
n
e
L
i
r
e

c
r
i
r
e
D

b
i
t
s

c
r
i
r
e
L
i
r
e
T
e
m
p

r
a
t
u
r
e
s
L
i
r
e

c
r
i
r
e
o
u
t

c
r
i
r
e
L
i
r
e
l
n

c
r
i
r
e
L
i
r
e
C
o
m
m
a
n
d
e
r
v
a
n
n
e
R

g
u
l
e
r
d

b
i
t
A
c
q
u

r
i
r
t
e
m
p

r
a
t
u
r
e
s
A
f
f
i
c
h
e
r
A
f
f
i
c
h
a
g
e
s
i
m
u
l
a
t
e
u
r
S
i
m
u
l
a
t
e
u
r
d
e

p
a
n
n
e
s
F
i
g
u
r
e

7
.
8


D
i
a
g
r
a
m
m
e

D
A
R
T
S

d
e

l

c
h
a
n
g
e
u
r

i
n
t

g
r
a
n
t

u
n

s
i
m
u
l
a
t
e
u
r
.
354
7.4 Implmentation sur simulateur 7 Traitement complet
dune application industrielle
7.4 Implmentation sur simulateur
La premire implmentation dun systme de contrle-commande se base gnra-
lement sur un simulateur logiciel du procd.
7.4.1 Le simulateur
Le simulateur peut sexcuter en tant que tche parmi les autres tches du systme,
ou bien tout simplement dans un autre processus, crit dans un langage de program-
mation facilitant la simulation (LabVIEW, Matlab/Simulink, etc.). Lune des tech-
niques les plus simples permettant de faire communiquer deux processus diffrents
pouvant sexcuter sur des ordinateurs diffrents consiste utiliser le protocole TCP/IP.
Cela reste vrai lorsque les processus sexcutent sur un mme ordinateur : le protocole
TCP/IP est alors utilis en boucle locale. Le simulateur utilis dans ce chapitre sera
donc un programme lanant un serveur TCP, et excutant en parallle un modle
numrique (plus ou moins raliste) du procd.
Le protocole applicatif dni entre le client (le systme de contrle) et le serveur
(le simulateur) est en gnral relativement simple : aprs ltablissement dune
Tableau 7.4 Correspondance entre lments DARTS et SA-RT.
Panne Module de donne
Rle : tat de panne du systme
Type : boolen (vrai : panne et faux : nominal)
Commande Vanne Bote aux lettres (si possible avec crasement)
Rle : tat dsir de la pompe deau industrielle
Type : boolen (vrai : ouverte et faux : ferme)
Afficher Tche
Correspond : Processus fonctionnel 8
Acqurir tempratures Tche
Correspond : Processus fonctionnel 2
Rguler dbits Tche
Correspond : Processus fonctionnels 1, 3, 5 et processus de contrle 9
Simulateur Tche de simulation du procd
In Module de donnes
Rle : simule les capteurs
Type : enregistrement (Dbit ef, Dbit ed, Tempratures)
Out Module de donnes
Rle : simule les actionneurs
Type : enregistrement (Cmd vanne, Cmd pompe)
7.4 Implmentation sur simulateur
355


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
connexion, le simulateur est en attente de commandes, envoyes par le systme de
contrle sous forme de texte. En effet, lorsquun protocole de communication peut
impliquer des systmes dexploitation/langages de programmation htrognes, il est
conseill dutiliser un protocole purement textuel an de ne pas avoir de problmes
lis la reprsentation binaire des donnes (ordre des octets big-endian ou little-
endian, taille des reprsentations). Ainsi, pour le cas tudi, les commandes possibles
sont :
pompe 1 : le simulateur met la pompe en marche ;
pompe 0 : le simulateur teint la pompe ;
alarme 1 : le simulateur allume lalarme ;
alarme 0 : le simulateur teint lalarme ;
vanne val : val est un ottant donn sous forme de chane de caractres. Le simu-
lateur ouvre la vanne au niveau de val ;
ef : le simulateur renvoie la valeur de dbit deau industrielle ;
ed : le simulateur renvoie la valeur de dbit deau distille ;
bouton : le simulateur renvoie 1 si le bouton est appuy, 0 sinon ;
temp : le simulateur renvoie les quatre tempratures dans lordre Ted1, Ted2,
Tef1, Tef2.
7.4.2 Implmentation en Ada du systme sur simulateur
La gure 7.9 montre une architecture logicielle typique pour la partie multitche
dun programme de contrle-commande en Ada, facilitant le passage du simulateur
la commande relle. Le paquetage gnrique Communications (fourni en entier
en annexe D) regroupe diffrents lments DARTS trs utiliss (voir 6.3). Ceux-ci
sont instancis par le paquetage Contrle regroupant les tches dnies la concep-
tion. Ce qui est intressant est que deux paquetages ont une spcication commune :
en effet, Simulateur et Procd partagent les mmes signatures de primitives, qui sont
des primitives daccs de haut niveau au matriel (dans le cas prsent, Lire_Temp-
ratures en C, Commander_Vanne en litres/heure, etc.). Ainsi, le passage de la simu-
lation au contrle rel sera simpli, puisque seules les clauses with et use devront
changer et passer du simulateur au procd rel.
m Le module de communication
Commenons par observer le paquetage Communications. Celui-ci regroupe diff-
rents lments de communication.
-- Paquetage Communications
-- Dfinit des outils gnriques de communication DARTS
-- Modules de donnes, synchronisations, botes aux lettres
-- avec ou sans crasement, de taille unitaire ou borne
with System; use System;
with File_Bornee;
generic
type element is private;
package Communications is
356
7.4 Implmentation sur simulateur 7 Traitement complet
dune application industrielle
w
i
t
h
C
o
m
m
u
n
i
c
a
t
i
o
n
;
p
a
c
k
a
g
e
C
o
m
m
B
o
o
l
i
s

n
e
w

w
i
t
h
C
o
m
m
u
n
i
c
a
t
i
o
n
;
p
a
c
k
a
g
e
C
o
m
m
B
o
o
l
i
s

n
e
w

I
n
s
t
a
n
c
i
a
t
i
o
n

d
e
s

m
e
n
t
s

d
e

c
o
m
m
u
n
i
c
a
t
i
o
n

g

r
i
q
u
e
s
O
U
O
U
g
e
n
e
r
i
c
t
y
p
e

e
l
e
m
e
n
t

i
s

p
r
i
v
a
t
e
;



p
a
c
k
a
g
e

C
o
m
m
u
n
i
c
a
t
i
o
n
s

i
s



-
-

d

f
i
n
i
t
i
o
n

d
e

d
i
f
f

r
e
n
t
s

t
y
p
e
s



-
-

d
e

B
a
L
s
,

M
D
D
,

s
y
n
c
h
r
o
s



e
n
d
;



p
a
c
k
a
g
e

b
o
d
y

C
o
m
m
u
n
i
c
a
t
i
o
n
s

i
s



-
-

i
m
p
l

m
e
n
t
a
t
i
o
n

d
e

d
i
f
f

r
e
n
t
s

t
y
p
e
s



-
-

d
e

B
a
L
s
,

M
D
D
,

s
y
n
c
h
r
o
s



e
n
d
;



w
i
t
h

t
y
p
e
s
_
C
o
m
m
u
n
s
;



p
a
c
k
a
g
e

S
i
m
u
l
a
t
e
u
r

i
s








p
r
o
c
e
d
u
r
e

I
n
i
t
i
a
l
i
s
e
r
;



-
-

i
n
i
t
i
a
l
i
s
e

l
e

s
i
m
u
l
a
t
e
u
r



-
-

m

m
e
s

t
y
p
e
s

e
t

p
r
i
m
i
t
i
v
e
s



-
-

q
u
e

d
a
n
s

p
r
o
c




w
i
t
h

T
y
p
e
s
_
C
o
m
m
u
n
s
;



p
a
c
k
a
g
e

P
r
o
c


i
s










p
r
o
c
e
d
u
r
e

I
n
i
t
i
a
l
i
s
e
r
;



-
-

i
n
i
t
i
a
l
i
s
e

l
e

s
i
m
u
l
a
t
e
u
r



-
-

p
r
i
m
i
t
i
v
e
s

d

a
c
c

s

a
u

p
r
o
c




-
-

e
t

t
y
p
e
s

a
s
s
o
c
i

s



-
-

(
a
b
s
t
r
a
c
t
i
o
n

d
e

l

u
t
i
l
i
s
a
t
i
o
n

d
e
s

E
/
S
)



e
n
d
;



p
a
c
k
a
g
e

b
o
d
y

C
o
n
t
r
o
l
e

i
s



-
-

c
o
r
p
s

d
e
s

t

c
h
e
s



e
n
d
;



p
a
c
k
a
g
e

b
o
d
y

S
i
m
u
l
a
t
e
u
r

i
s
-
-

t
y
p
e
s

e
t

c
o
n
s
t
a
n
t
e
s

s
p

c
i
f
i
q
u
e
s
-
-

a
u

s
i
m
u
l
a
t
e
u
r



-
-

o
b
j
e
t

p
r
o
t

r
a
n
t

l

a
c
c

s

a
u
-
-

s
i
m
u
l
a
t
e
u
r



-
-

i
m
p
l

m
e
n
t
a
t
i
o
n

d
e
s

p
r
i
m
i
t
i
v
e
s
-
-

d

a
c
c

s

a
u

s
i
m
u
l
a
t
e
u
r



e
n
d
;



p
a
c
k
a
g
e

b
o
d
y

P
r
o
c


i
s



-
-

i
m
p
l

m
e
n
t
a
t
i
o
n



e
n
d
;



w
i
t
h

C
o
m
m
u
n
i
c
a
t
i
o
n
;
p
a
c
k
a
g
e

C
o
m
m
B
o
o
l

i
s

n
e
w

C
o
m
m
u
n
i
c
a
t
i
o
n
s
(
e
l
e
m
e
n
t
=
>
b
o
o
l
e
a
n
)
;



p
a
c
k
a
g
e

T
y
p
e
s
_
C
o
m
m
u
n
s

i
s



-
-

t
y
p
e
s

e
t

c
o
n
s
t
a
n
t
e
s

u
t
i
l
i
s

s

p
a
r

l
e
s

t

c
h
e
s



e
n
d
;
p
a
c
k
a
g
e

C
o
n
t
r
o
l
e

i
s
-
-

i
n
s
t
a
n
c
i
a
t
i
o
n

d
e
s

m
e
n
t
s

d
e



-
-

c
o
m
m
u
n
i
c
a
t
i
o
n



-
-

d

c
l
a
r
a
t
i
o
n

d
e
s

t

c
h
e
s



e
n
d
;



w
i
t
h

C
o
n
t
r

l
e
;



w
i
t
h

S
i
m
u
l
a
t
e
u
r
;
u
s
e

S
i
m
u
l
a
t
e
u
r
;



O
U



w
i
t
h

P
r
o
c
e
d
e
;
u
s
e

P
r
o
c
e
d
e
;



p
r
o
c
e
d
u
r
e

M
a
i
n

i
s



b
e
g
i
n













I
n
i
t
i
a
l
i
s
e
r
;



e
n
d
;



F
i
g
u
r
e

7
.
9


A
r
c
h
i
t
e
c
t
u
r
e

l
o
g
i
c
i
e
l
l
e

t
y
p
i
q
u
e

d

u
n

p
r
o
g
r
a
m
m
e

d
e

c
o
n
t
r

l
e
-
c
o
m
m
a
n
d
e

s
i
m
p
l
e

e
n

A
d
a
.
7.4 Implmentation sur simulateur
357


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
package File_Bornee_N_Elements is new
File_Bornee(element=>element);
use File_Bornee_N_Elements;
type Pt_Element is access all element;
------------------------
-- Modules de donnes
------------------------
protected type MDDi(initial: pt_element := null; priorit:
natural := prioritylast) is
-- module de donnes avec valeur initiale
-- le passage par pointeur est d au fait quun discriminant
-- doit tre de tye discret ou pointeur
pragma Priority(priorit);
procedure Ecrire(e: element);
-- modifie le contenu
function Lire return element;
-- retourne le contenu
private
val: element := initial.all;
end;
protected type MDD(priorit: natural := prioritylast) is
-- module de donnes sans valeur initiale
pragma Priority(priorit);
procedure Ecrire(e: element);
-- modifie le contenu
function Lire return element;
-- retourne le contenu
private
val: element;
end;
Les modules de donnes (MDD) sont avec ou sans valeur initiale. Notons quun
discriminant ne peut tre quune valeur de type discret ou bien un pointeur. Un
inconvnient visible ici est le fait dtre oblig de passer par pointeur une valeur
initiale au module de donne de type MDDi.
------------------------
-- Synchronisation
------------------------
protected type Synchro_C(priorit: natural := prioritylast) is
-- Synchronisation compte (les dclenchements successifs
-- non pris en compte sont accumuls)
pragma Priority(priorit);
procedure Signal;
entry Wait;
private
Nombre_Signals: natural := 0;
end;
protected type Synchro_B(priorit: natural := prioritylast) is
-- Synchronisation binaire (les dclenchements successifs
-- non pris en compte ne sont pas accumuls)
pragma Priority(priorit);
procedure Signal;
entry Wait;
private
Signal: boolean := false;
end;
358
7.4 Implmentation sur simulateur 7 Traitement complet
dune application industrielle
Les synchronisations peuvent tre de type binaire ou compte.
------------------------
-- Botes aux lettres
------------------------
protected type BaL_1_Ecrasement(priorit: natural := prioritylast)
is
-- Bote aux lettres de taille 1 avec crasement
pragma Priority(priorit);
procedure Envoyer(e: element);
entry Recevoir(e: out element);
private
Pleine: boolean := false;
val: element;
end;
protected type BaL_1(priorit: natural := prioritylast) is
-- Bote aux lettres de taille 1 sans crasement
pragma Priority(priorit);
entry Envoyer(e: element);
-- lenvoi peut tre bloquant
entry Recevoir(e: out element);
private
Pleine: boolean := false;
val: element;
end;

protected type BaL_n_Ecrasement(n:positive:=1; priorit: natural :=
prioritylast) is
-- Bote aux lettres de taille n avec crasement
pragma Priority(priorit);
procedure Envoyer(e: element);
entry Recevoir(e: out element);
private
F: File_Bornee_N_Elements.File_Bornee(n);
end;
protected type BaL_n(n:positive:=1; priorit: natural :=
prioritylast) is
-- Bote aux lettres de taille n sans crasement
pragma Priority(priorit);
entry Envoyer(e: element);
-- lenvoi peut tre bloquant
entry Recevoir(e: out element);
private
F: File_Bornee_N_Elements.File_Bornee(n);
end;
end; -- Fin de la spcification de paquetage
Les botes aux lettres peuvent tre de taille 1 ou n, et tre crasement ou sans cra-
sement. Les botes aux lettres de taille n avec crasement sont assez proche de ce qui
est quali de RT FIFO (le temps rel) permettant une communication entre tche
mettrice contraintes de temps et tche rceptrice sans contrainte de temps :
la tche contraintes de temps ne se bloque pas si la le est pleine, mais dans ce cas
le plus ancien message est cras. Le paquetage gnrique de gestion de liste circu-
laire est donn en annexe D : il sagit tout simplement dun tableau, dans lequel
un lment enl crase le plus ancien lment si la le est pleine.
7.4 Implmentation sur simulateur
359


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
Rappelons enn que la priorit associe un objet protg est la priorit plafond
de celui-ci, et quune tche hrite de la priorit plafond dun objet (protocole
priorit plafond immdiat, pragma Locking_Policy(Ceiling_Locking)) pendant son
utilisation de celui-ci. La priorit plafond dun objet protg doit donc tre la prio-
rit maximale dune tche pouvant accder cet objet. Dans le cas o une tche de
priorit suprieure lobjet protg y accderait, lexception Program_Error serait
leve.
Le corps de ce paquetage est donn en annexe D.
m Le module de contrle
Le paquetage Types_Communs est trs court, puisque seuls deux types spciques
sont dnis pour le systme :
-- Paquetage Types_Communs
package Types_Communs is
type Temperatures is record
Ted1, Ted2, Tef1, Tef2 : float;
end record;
type Debits is record
ed, ef: float;
end record;
end;
Le paquetage Contrle qui sappelle dans le cas prsent Contrler_Echangeur
dcoule directement du diagramme DARTS :
-- Paquetage Controler_Echangeur
with Communications;
with System; use System;
with Types_Communs; use Types_Communs;
package Controler_Echangeur is
------------------------------
-- Elements de communication
------------------------------
package Com_Tempratures is new
Communications(Element=>Temperatures);
-- Instanciation du paquetage gnrique de communication sur le
-- type Temperatures
use Com_Tempratures;
Mdd_Temperatures: Com_Tempratures.MDD;
-- Instanciation du MDD Temperatures
package Com_Debits is new Communications(Element=>Debits);
-- Instanciation du paquetage gnrique de communication sur le
-- type Debits
use Com_Debits;
Mdd_Debits: Com_Debits.MDD;
-- Instanciation du MDD Debits
package Com_Boolean is new Communications(Element=>Boolean);
-- Instanciation du paquetage gnrique de communication sur le
-- type boolen
use Com_Boolean;
Faux: aliased Boolean:=False;
-- Remarquer la technique employe pour passer un paramtre par
-- adresse
360
7.4 Implmentation sur simulateur 7 Traitement complet
dune application industrielle
Mdd_Panne: Com_Boolean.Mddi(Fauxaccess, PriorityLast);
-- Instanciation du MDD Panne

package Com_Float is new Communications(Element => Float);
-- Instanciation du paquetage gnrique de communication sur le
-- type flottant
use Com_Float;
Bal_Commande_Vanne: Com_Float.Bal_1_Ecrasement;
-- Instanciation de la BaL Commande Vanne, de taille 1 crasement
-- (seule la dernire consigne est prise en compte)

--------------------------------
-- Taches
--------------------------------
-- Dans la partie simulation, le choix des priorits est
-- gnralement arbitraire
-- puisquon emploie frquemment une station de dveloppement
-- tournant sous un
-- systme dexploitation non temps rel (=>indterminisme
-- temporel)
task Reguler_Debit is
pragma Priority(Default_Priority);
end;
task Commander_Pompe is
pragma Priority(Default_Priority+1);
end;
task Acquerir_Temperatures is
pragma Priority(Default_Priority-1);
end;
task Afficher is
pragma Priority(Default_Priority-2);
end;
end;
Limplmentation suit le schma dni dans le chapitre 6. Trois tches sont prio-
diques, la quatrime est dclenche par bote aux lettres.
with Ada.Real_Time; use Ada.Real_Time;
with Affichage;use Affichage;
with Simulateur; use Simulateur;
package body Controler_Echangeur is
T0: constant Time := Clock;
-- Base des temps
function Elaborer_Consigne(D: Debits ; T: Temperatures) return
float is
csg: float;
begin
if (T.Ted2<=45.0) then
if D.Ef-1.0>=0.0 then
return D.Ef-1.0;
else
return D.Ef;
end if;
end if;
Csg:=(T.Ted2-45.0)*3.0;
if Csg>Max_Ouverture_Vanne then
return Max_Ouverture_Vanne;
else
7.4 Implmentation sur simulateur
361


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
return Csg;
end if;
end;

function Verification(T: Temperatures) return Boolean is
-- Renvoie: vrai ssi les tempratures sont dans leur domaine
begin
if T.Tef1<0.0 or T.Tef1>40.0 then return false;
elsif T.Tef2<0.0 or T.Tef2>60.0 then return false;
elsif T.Ted1<0.0 or T.Ted1>70.0 then return false;
elsif T.Ted2<0.0 or T.Ted2>85.0 then return false;
end if;
return true;
end;

task body Acquerir_Temperatures is
Periode: constant Time_Span:= To_Time_Span(1.0);
-- Tche priodique de priode 1 seconde
Prochaine: Time := T0+Periode;
-- Prochaine date dactivation
T: Temperatures;
begin
loop
T:=Lire_Temperatures;
-- Acquisition des tempratures
if not(Verification(T)) then
Mdd_Panne.Ecrire(True);
end if;
Mdd_Temperatures.Ecrire(T);
delay until Prochaine;
Prochaine := Prochaine + Periode;
end loop;
end Acquerir_Temperatures;
task body Afficher is
Periode: constant Time_Span:= To_Time_Span(1.0);
-- Tche priodique de priode 1 seconde
Prochaine: Time := T0+Periode;
-- Prochaine date dactivation
T: Temperatures;
D: Debits;
begin
loop
T:=Mdd_Temperatures.Lire;
D:=Mdd_Debits.Lire;
-- Lecture des tempratures et dbits
Afficher_Courbes(T,D);
-- Affichage
delay until Prochaine;
Prochaine := Prochaine + Periode;
end loop;
end Afficher;
task body Piloter_Vanne is
Cmd:Float;
begin
loop
BaL_Commande_Vanne.Recevoir(Cmd);
-- Tche dclenche chaque message
362
7.4 Implmentation sur simulateur 7 Traitement complet
dune application industrielle
Commander_Vanne(Cmd);
end loop;
end Piloter_Vanne;
task body Reguler_Debit is
Periode: constant Time_Span:= To_Time_Span(0.5);
-- Tche priodique de priode 500 millisecondes
Prochaine: Time := T0+Periode;
-- Prochaine date dactivation
D: Debits;
Consigne_Ed: Float;
type T_Etat is (Normal, Alarme);
Etat: T_Etat:=Normal;
begin
Commander_Pompe(True);
-- Allumage de la pompe deau distille
loop
case Etat is
when Normal=>
if Mdd_Panne.Lire then
Etat:=Alarme;
Commander_Alarme(True);
--Mise en route de lalarme
Bal_Commande_Vanne.Envoyer(Max_Ouverture_Vanne);
--Ouverture de la vanne deau industrielle au maximum
else
D.Ed:=Lire_Debit_Ed;
D.Ef:=Lire_Debit_Ef;
-- Acquisition des dbits
Mdd_Debits.Ecrire(D);
-- Stockage dans le MDD

Consigne_Ed:=Elaborer_Consigne(D,Mdd_Temperatures.Lire);
-- Elaboration de la consigne
Bal_Commande_Vanne.Envoyer(Consigne_Ed);
-- Envoie la tche de commande
end if;
when Alarme =>
if Lire_Bouton then
Commander_Alarme(False);
--Extinction de lalarme
Bal_Commande_Vanne.Envoyer(0.0);
--Fermeture de la vanne deau industrielle
Commander_Pompe(False);
-- Extinction de la pompe deau distille
exit; --Terminaison de la tche
end if;
end case;
delay until Prochaine;
Prochaine := Prochaine + Periode;
end loop;
end Reguler_Debit;
end Controler_Echangeur;
7.4 Implmentation sur simulateur
363


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
m Le module de communication avec le simulateur
Voyons maintenant comment le programme Ada communique par TCP avec le
simulateur. Pour cet exemple, le paquetage Gnat.Sockets est utilis : cest un paquetage
spcique fourni avec le compilateur gratuit GNAT. Il implmente les communi-
cations TCP/IP et UDP/IP et est dune utilisation trs simple. Cependant, il souffre
dun petit inconvnient dont il faut tre averti lorsque lon doit permettre une com-
munication entre deux programmes crits dans un langage diffrent : Gnat.Sockets
utilise un protocole spcique, ainsi, lors de lenvoi dune chane de caractre (pro-
cdure StringOutput(s)), la chane de caractres s est transmise sous la forme : un
entier valant 1 donn sur 4 octets au format binaire, suivi dun entier sur 4 octets au
format binaire valant la longueur de la chane, et enn les caractres de s. La fonc-
tion StringInput attend le mme format. Ainsi, la bibliothque Ada.Sockets ajoute
une ne couche protocolaire au-dessus de la pile TCP dont il faut tenir compte dans
le simulateur.
Il est important de constater que diffrentes tches peuvent en parallle tenter dacc-
der au simulateur. Il est donc ncessaire de protger les accs au simulateur an de
garantir leur exclusion mutuelle. Cest le rle de lobjet protg Simulateur, qui est le
seul accder rellement au simulateur. Cependant, an de permettre au paquetage
Simulateur doffrir les mmes signatures de primitives que le paquetage Procd, les
appels lobjet protg sont encapsuls dans des fonctions et procdures classiques
(ayant la mme signature que celles qui seront dans le paquetage Procd). Enn, il
faut noter que grce lutilisation de lobjet protg Simulateur, nous garantissons
que la connexion TCP est initialise avant tout autre accs : la variable Initialis du
simulateur, mise vrai lors de linitialisation de celui-ci, conditionne laccs toute
autre primitive du simulateur.
with Types_Communs;use Types_Communs;
with Gnat.Sockets;use Gnat.Sockets;
package Simulateur is
-- Un simulateur est dfini par un serveur TCP coutant un port
-- (par dfaut 34532).
-- Au dbut de lapplication, une connexion TCP est ouverte avec le
-- simulateur
-- Le protocole employ est de type commande du systme/rponse du
-- procd
-- Par exemple, pour lire le dbit ef, la fonction Lire envoie "ef",
-- le simulateur
-- rpond alors en envoyant un flottant sous forme de chane de
-- caractres
-- Pour commander la pompe, le simulateur envoie "pompe 0" ou "pompe
-- 1"
-- en fonction de la valeur de la commande
-- !!! ATTENTION !!! Le format de communication TCP de Gnat.Sockets
-- est trs spcifique :
-- Lors de lenvoi dune chane de caractres, celle-ci est prcde
-- de 8 octets correspondant
-- chacun un entier en format binaire : le premier vaut 1, le second
-- vaut la longueur de la chane
-- Les chanes de caractres lues doivent tre au mme format
Erreur_Procede : exception;
-- Exception leve en cas derreur de connexion avec le simulateur
364
7.4 Implmentation sur simulateur 7 Traitement complet
dune application industrielle
Max_Ouverture_Vanne: constant Float:=200.0;
-- Consigne maximale en litre/heure de louverture de vanne
procedure Initialiser;
-- Connexion au simulateur
-- Exception: erreur de connexion => Erreur_Procede
function Lire_Debit_Ef return Float;
-- Renvoie le dbit deau industrielle en l/h
-- Exception: erreur de connexion => Erreur_Procede
function Lire_Debit_Ed return Float;
-- Renvoie le dbit deau distille en l/h
-- Exception: erreur de connexion => Erreur_Procede
function Lire_Temperatures return Temperatures;
-- Renvoie les tempratures en C
-- Exception: erreur de connexion => Erreur_Procede
function Lire_Bouton return Boolean;
-- Renvoie ltat du bouton poussoir
-- Retourne: vrai si appuy, faux sinon
-- Exception: erreur de connexion => Erreur_Procede
procedure Commander_Pompe (Com : Boolean );
-- Entraine: Com = vrai => allume la pompe
-- Com = faux => teint la pompe
-- Exception: erreur de connexion => Erreur_Procede
procedure Commander_Vanne (Com : Float );
-- Commande llectrovanne en l/h
-- Exception: erreur de connexion => Erreur_Procede
procedure Commander_Alarme(On: Boolean);
-- Allume ou teint lalarme
-- Exception: erreur de connexion => Erreur_Procede
private
protected Simulateur is
-- Objet protg garantissant lexclusion mutuelle des accs au
-- simulateur
procedure Initialiser;
-- Connexion au simulateur
entry Lire_Debit_Ef (Val : out Float );
-- Interroge le simulateur sur la valeur de Debit Ef
-- Ne peut avoir lieu quaprs initialisation
entry Lire_Debit_Ed (Val : out Float );
-- Interroge le simulateur sur la valeur de Debit Ed
-- Ne peut avoir lieu quaprs initialisation
entry Lire_Temperatures (T : out Temperatures );
-- Interroge le simulateur sur la valeur des tempratures
-- Ne peut avoir lieu quaprs initialisation
entry Lire_Bouton(On: out Boolean);
-- Interroge le simulateur sur ltat du bouton
-- Entraine: On=vrai si le bouton est appuy, faux sinon
-- Ne peut avoir lieu quaprs initialisation
entry Commander_Pompe (Val : Boolean );
-- Allume ou teint la pompe
-- Ne peut avoir lieu quaprs initialisation
entry Commander_Vanne (Val : Float );
-- Commande la vanne
-- Ne peut avoir lieu quaprs initialisation
entry Commander_Alarme (Val : Boolean );
-- Allume ou teint lalarme
-- Ne peut avoir lieu quaprs initialisation
private
Initialis: Boolean:=False;
-- Mis vrai par linitialisation
7.4 Implmentation sur simulateur
365


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
Socket: Socket_Type;
-- Identifiant de connexion au simulateur
Channel: Stream_Access;
-- Flux de caractres changs sur la connexion
end;
end;
Le corps de ce paquetage est donn ci-aprs :
with Gnat.Sockets;use Gnat.Sockets;
with Types_Communs;use Types_Communs;
package body Simulateur is
Adresse_Simulateur : constant String := "localhost";
-- Adresse IP du simulateur
Port_Simulateur : constant Integer := 34532;
-- Port sur lequel le simulateur lance un serveur TCP
-- Toutes les primitives appeles par les tches se contentent
-- dappeler les primitives de lobjet protg simulateur.
-- Le but est de permettre aux tches du systme dappeler les mmes
-- primitives que pour un contrle rel sur le procd.
procedure Initialiser is
begin
Simulateur.Initialiser;
exception when Socket_Error => raise Erreur_Procede;
end Initialiser;
procedure Commander_Pompe (Com : Boolean ) is
begin
Simulateur.Commander_Pompe(Com);
exception when Socket_Error => raise Erreur_Procede;
end Commander_Pompe;
procedure Commander_Vanne (Com : Float ) is
begin
Simulateur.Commander_Vanne(Com);
exception when Socket_Error => raise Erreur_Procede;
end Commander_Vanne;
procedure Commander_Alarme (On: Boolean) is
begin
Simulateur.Commander_Alarme(On);
exception when Socket_Error => raise Erreur_Procede;
end Commander_Alarme;
function Lire_Debit_Ed return Float is
Val : Float;
begin
Simulateur.Lire_Debit_Ed(Val);
return Val;
exception when Socket_Error => raise Erreur_Procede;
end Lire_Debit_Ed;
function Lire_Bouton return Boolean is
Val : Boolean;
begin
Simulateur.Lire_Bouton(Val);
return Val;
exception when Socket_Error => raise Erreur_Procede;
end Lire_Bouton;
366
7.4 Implmentation sur simulateur 7 Traitement complet
dune application industrielle
function Lire_Debit_Ef return Float is
Val : Float;
begin
Simulateur.Lire_Debit_Ed(Val);
return Val;
exception when Socket_Error => raise Erreur_Procede;
end Lire_Debit_Ef;
function Lire_Temperatures return Temperatures is
T : Temperatures;
begin
Simulateur.Lire_Temperatures(T);
return T;
exception when Socket_Error => raise Erreur_Procede;
end Lire_Temperatures ;
protected body Simulateur is
-- Objet protg garantissant lexclusion mutuelle des accs au
-- simulateur
procedure Initialiser is
-- Connexion au simulateur
Address : Sock_Addr_Type;
-- Reprsentation dune adresse Gnat.Sockets
begin
Initialis:=True;
-- Les autres entres sur lobjet protg sont dornavant
-- possibles
Initialize;
-- Initialise Gnat.Sockets

Address.Addr:=Addresses(Get_Host_By_Name(Adresse_Simulateur),1);
Address.Port:=Port_Type(Port_Simulateur);
-- Cration de ladresse dans le format ncessaire
-- Gnat.Sockets
Create_Socket(Socket);
Set_Socket_Option(Socket,Socket_Level,(Reuse_Address,True));
-- Initialisation du Socket
Connect_Socket(Socket,Address);
-- Connexion au simulateur
Channel:=Stream(Socket);
-- Elaboration dun flux de caractres (permettant des
-- lectures et critures -- comme dans un fichier ou
-- lcran)
end;
entry Lire_Debit_Ef (Val : out Float ) when Initialis is
-- Interroge le simulateur sur la valeur de Debit Ef
-- Ne peut avoir lieu quaprs initialisation
begin
StringOutput(Channel,"ef");
Val:=FloatValue(StringInput(Channel));
end;
entry Lire_Debit_Ed (Val : out Float ) when Initialis is
-- Interroge le simulateur sur la valeur de Debit Ed
-- Ne peut avoir lieu quaprs initialisation
begin
StringOutput(Channel,"ed");
Val:=FloatValue(StringInput(Channel));
end;
7.4 Implmentation sur simulateur
367


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
entry Lire_Bouton (On: out Boolean) when Initialis is
-- Interroge le simulateur sur ltat du bouton
-- Ne peut avoir lieu quaprs initialisation
V: integer;
begin
StringOutput(Channel,"bouton");
V:=IntegerValue(StringInput(Channel));
if V=0 then On:=False;
else On:=True;
end if;
end;
entry Lire_Temperatures (T : out Temperatures ) when
Initialis is
-- Interroge le simulateur sur la valeur des tempratures
-- Ne peut avoir lieu quaprs initialisation
begin
StringOutput(Channel,"temp");
T.Ted1:=FloatValue(StringInput(Channel));
T.Ted2:=FloatValue(StringInput(Channel));
T.Tef1:=FloatValue(StringInput(Channel));
T.Tef2:=FloatValue(StringInput(Channel));
end;
entry Commander_Alarme (Val : Boolean ) when Initialis is
-- Allume ou teint lalarme
-- Ne peut avoir lieu quaprs initialisation
begin
if Val then
StringOutput(Channel,"alarme 1");
else
StringOutput(Channel,"alarme 0");
end if;
end;
entry Commander_Pompe (Val : Boolean ) when Initialis is
-- Allume ou teint la pompe
-- Ne peut avoir lieu quaprs initialisation
begin
if Val then
StringOutput(Channel,"pompe 1");
else
StringOutput(Channel,"pompe 0");
end if;
end;
entry Commander_Vanne (Val : Float ) when Initialis is
-- Commande la vanne
-- Ne peut avoir lieu quaprs initialisation
begin
StringOutput(Channel,"vanne "&FloatImage(Val));
end;
end;
end Simulateur;
368
7.4 Implmentation sur simulateur 7 Traitement complet
dune application industrielle
m Le programme principal
Il ne reste plus alors qu crire le programme principal : celui-ci dnit les trois
pragmas usuels permettant de dnir un ordonnancement priorits xes grant
les accs aux objets protgs avec le protocole priorit plafond (limine linversion
de priorit). Rappelons quau moment du lancement du programme principal,
toutes les tches dnies sont lances en parallle. Le programme principal ne se
termine que lorsque toutes les tches sont termines (dans le cas prsent : jamais).
pragma Queuing_Policy(Priority_Queuing);
-- Laccs aux objets protgs est gr par niveau de priorit
pragma Locking_Policy(Ceiling_Locking );
-- Utilisation du protocole priorit plafond
pragma Task_Dispatching_Policy(Fifo_Within_Priorities);
-- Ordonnancement des tches priorits
with Controler_Echangeur;
procedure Echangeur is
begin
Initialiser;
end;
7.4.3 Implmentation en C du systme sur simulateur
Ce paragraphe prsente limplmentation en C obtenue partir du diagramme
DARTS. Comme nous lavons vu prcdemment, le langage C nest pas nativement
multitche. tant donn que lapplication permet lutilisation dun PC industriel,
nous prendrons comme extension temps rel la norme POSIX type 54 (voir 5.3.1).
La gure 7.10 montre une architecture logicielle typique pour la partie multitche
dun programme de contrle-commande en C, facilitant le passage du simulateur
la commande relle. Ainsi, le passage de la simulation au contrle rel sera simpli
puisque seules quelques directives #include devront tre modies.
m Le module de communication
Le module BaLs est lquivalent en langage C du paquetage Ada Communications.
Il nest pas gnrique, puisque tout lment chang entre deux tches passe par le
type chane de caractres (il subit une coercion en char * ) : toute notion de type
est perdue, et le programmeur doit sassurer lui-mme que les donnes envoyes sont
du mme type que les donnes reues. Ce fonctionnement est assez typique du
langage C.
Les modules procede et simulateur ont la mme interface, ce qui permet, comme pour
le cas trait en Ada, de ne changer que la directive #include prsente dans contrle.c
an de passer de la simulation la commande relle.
Commenons par observer le module BaLs. Les botes aux lettres peuvent tre de
taille 1 ou n, et tre crasement ou sans crasement. Comme nous lavons vu dans
le paragraphe 6.1, les lments de communications sappliquant aux tches (pthread)
proposent des smaphores et de variables conditionnelles permettant de programmer
un moniteur de Hoare. Les moniteurs permettent de programmer simplement des
lments de communication de type botes aux lettres : un buffer est allou initia-
lement, son rle est de stocker le ou les messages sous forme de chane de caractres
(tableau doctets). On peut ensuite synchroniser les envois/rceptions suivant le
369
7.4 Implmentation sur simulateur 7 Traitement complet
dune application industrielle


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
O
U
/
*

B
a
L
s
.
h

*
/
#
i
f
n
d
e
f

_
B
A
L
S
_
H
_



#
d
e
f
i
n
e

_
B
A
L
S
_
H
_


/
*

d

f
i
n
i
t
i
o
n

d
e

d
i
f
f

r
e
n
t
s

t
y
p
e
s
d
e

B
a
L
s

*
/
#
e
n
d
i
f



/
*

B
a
L
s
.
c

*
/



/
*

i
m
p
l

m
e
n
t
a
t
i
o
n

d
e

d
i
f
f

r
e
n
t
s

t
y
p
e
s



d
e

B
a
L
s

*
/



/
*

c
o
n
t
r
o
l
e
.
h

*
/



#
i
f
n
d
e
f

_
C
O
N
T
R
O
L
E
_
H
_



#
d
e
f
i
n
e

_
C
O
N
T
R
O
L
E
_
H
_



v
o
i
d

L
a
n
c
e
r

(
)
;



/
*

f
o
n
c
t
i
o
n

d

i
n
s
t
a
n
c
i
a
t
i
o
n

d
e
s

m
e
n
t
s

d
e



c
o
m
m
u
n
i
c
a
t
i
o
n
,

c
r

a
t
i
o
n

d
e
s

t

c
h
e
s

*
/



#
e
n
d
i
f



/
*

c
o
n
t
r
o
l
e
.
c

*
/



/
*

d

c
l
a
r
a
t
i
o
n

d
e
s

f
o
n
c
t
i
o
n
s

t

c
h
e
s



d

c
l
a
r
a
t
i
o
n

d
e
s

m
e
n
t
s

d
e

c
o
m
m
u
n
i
c
a
t
i
o
n

*
/



/
*

p
r
o
g
r
a
m
m
e

p
r
i
n
c
i
p
a
l

*
/



v
o
i
d

m
a
i
n
(
)

{














I
n
i
t
i
a
l
i
s
e
r
(

)
;














L
a
n
c
e
r
(

)
;



}



/
*

s
i
m
u
l
a
t
e
u
r
.
c

*
/



/
*

t
y
p
e
s

e
t

c
o
n
s
t
a
n
t
e
s

s
p

c
i
f
i
q
u
e
s
a
u

s
i
m
u
l
a
t
e
u
r
,

s

m
a
p
h
o
r
e



p
r
o
t

g
e
a
n
t

l
e

s
i
m
u
l
a
t
e
u
r
,



i
m
p
l

m
e
n
t
a
t
i
o
n

d
e
s

p
r
i
m
i
t
i
v
e
s


d

a
c
c

s

a
u

s
i
m
u
l
a
t
e
u
r

*
/



/
*

p
r
o
c
e
d
e
.
c

*
/



/
*

I
m
p
l

m
e
n
t
a
t
i
o
n

d
e
s

p
r
i
m
i
t
i
v
e
s
d

a
c
c

s

a
u

p
r
o
c


*
/



/
*

p
r
o
c
e
d
e
.
h

*
/



#
i
f
n
d
e
f

_
P
R
O
C
E
D
E
_
H
_
#
d
e
f
i
n
e

_
P
R
O
C
E
D
E
_
H
_
v
o
i
d

I
n
i
t
i
a
l
i
s
e
r
(

)
;



/
*

p
r
i
m
i
t
i
v
e
s

d

a
c
c

s

a
u

p
r
o
c

e
t

t
y
p
e
s

a
s
s
o
c
i

s
(
a
b
s
t
r
a
c
t
i
o
n

d
e

l

u
t
i
l
i
s
a
t
i
o
n

d
e
s

E
/
S
)

*
/
#
e
n
d
i
f
/
*

s
i
m
u
l
a
t
e
u
r
.
h

*
/



#
i
f
n
d
e
f

_
S
I
M
U
L
A
T
E
U
R
_
H
_



#
d
e
f
i
n
e

_
S
I
M
U
L
A
T
E
U
R
_
H
_



v
o
i
d

I
n
i
t
i
a
l
i
s
e
r
(

)
;



/
*

m

m
e
s

t
y
p
e
s

e
t

p
r
i
m
i
t
i
v
e
s



q
u
e

d
a
n
s

p
r
o
c


*
/



#
e
n
d
i
f



#
i
f
n
d
e
f

_
T
Y
P
E
S
_
C
O
M
M
U
N
S
_



#
d
e
f
i
n
e

_
T
Y
P
E
S
_
C
O
M
M
U
N
S
_



/
*

t
y
p
e
s

e
t

c
o
n
s
t
a
n
t
e
s

u
t
i
l
i
s

s

p
a
r

l
e
s

t

c
h
e
s

*
/



#
e
n
d
i
f



F
i
g
u
r
e

7
.
1
0


A
r
c
h
i
t
e
c
t
u
r
e

l
o
g
i
c
i
e
l
l
e

t
y
p
i
q
u
e

d

u
n
e

a
p
p
l
i
c
a
t
i
o
n

d
e

c
o
n
t
r

l
e
-
c
o
m
m
a
n
d
e

s
i
m
p
l
e

e
n

C
.
370
7.4 Implmentation sur simulateur 7 Traitement complet
dune application industrielle
schma choisi. Cela revient un problme de type producteur/consommateur lors-
que les botes aux lettres sont sans crasement, et un problme de type consomma-
teur dans le cas o les botes aux lettres sont avec crasement.
Nous avons prsent au paragraphe 6.2 les diffrentes implmentations de botes
aux lettres. Le code source du module est donn en annexe C.
m Le module de contrle
Poursuivons en prsentant le module types_communs, contenant les dnitions de
type temprature et dbit.
#ifndef _TYPES_COMMUNS_H_
#define _TYPES_COMMUNS_H_
typedef struct {
float Ted1, Ted2, Tef1, Tef2;
} Temperatures_t;
typedef struct {
float ef, ed;
} Debits_t;
#ifndef BYTE
#define BYTE unsigned char
#endif
#endif
Linterface du module de contrle est telle quelle est dcrite sur la gure 7.10 :
/* controle.h */
#ifndef _CONTROLER_ECHANGEUR_H_
#define _CONTROLER_ECHANGEUR_H_
void Lancer ();
/* Initialise les lments de communication et
lance le systme de tches */
#endif
Et son implmentation suit les rgles dcrites au paragraphe 6.2.
#include <pthread.h>
#include "BaLs.h"
#include "simulateur.h"
#include "controler_echangeur.h"
#include "types_communs.h"
void ajouter_microsecondes(struct timespec *time, long us) {
/* Modifie la structure time afin dy ajouter us microsecondes */
(*time).tv_nsec+=(us%1000000)*1000; /* Ajout des microsecondes au
champ en nanosecondes */
(*time).tv_sec+=(us/1000000)+((*time).tv_nsec/1000000000); /*
Ajout des secondes entires au champ en secondes */
(*time).tv_nsec%=1000000000; /* Si il y avait dbordement des
nanosecondes sur les secondes, il a t ajout aux secondes dans
linstruction prcdente */
}
#define Max_Ouverture_Vanne 200.0
/* Valeur douverture maximale de la vanne en l/h */
/* Module de donnes Tempratures */
pthread_mutex_t s_Temperatures;
7.4 Implmentation sur simulateur
371


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
Temperatures_t MDD_Temperatures={0.0,0.0,0.0,0.0};
/* Module de donnes Dbits */
pthread_mutex_t s_Debits;
Debits_t MDD_Debits={0.0,0.0};
/* Module de donnes Panne */
pthread_mutex_t s_Panne;
BYTE MDD_Panne=0;
/* Bote aux lettres Commande Vanne de taille 1 bloquante crasement
*/
bal_ecr Commande_Vanne;
void Acquerir_Temperatures() {
/* Acquiert priodiquement la temprature et la stocke dans le MDD
MDD_Temperatures */
Temperatures_t T;
struct timespec horloge ;
pthread_cond_t Reveil; /* Variable conditionnelle utilise par la
tche afin de se rveiller priodiquement */
/* Cette variable nest jamais signale */
pthread_mutex_t sReveil; /* Mutex li la variable conditionnelle
*/
pthread_mutex_init(&sReveil,NULL); /* Initialisation du mutex */
pthread_cond_init(&Reveil,NULL); /* Initialisation de la variable
conditionnelle */
clock_gettime(CLOCK_REALTIME, &horloge); /* heure courante de
lhorloge au dmarrage de la tche */
while (1) {
T=Lire_Temperatures();
if (!Verifier_Temperatures(T)) {
/* Une temprature est hors domaine */
pthread_mutex_lock(&s_Panne);
/* On prvient quil y a panne */
MDD_Panne=1;
pthread_mutex_unlock(&s_Panne);
}
pthread_mutex_lock(&s_Temperatures);
/* On stocke la temprature dans le MDD */
MDD_Temperatures=T;
pthread_mutex_unlock(&s_Temperatures);
ajouter_microsecondes(&horloge,1000000);/* Calcul de la date
du prochain reveil=date du dernier rveil+1 seconde */
pthread_mutex_lock(&sReveil);
pthread_cond_timedwait(&Reveil, &sReveil, &horloge);
/* Cette variable ntant pas signale, cest au timeout que
cette instruction se termine */
}
}
void Afficher() {
/* Affiche priodiquement le dbit et la temprature dans un graphe */
Temperatures_t T;
Debits_t D;
/* Gestion de la priodicit */
struct timespec horloge ;
pthread_cond_t Reveil;
372
7.4 Implmentation sur simulateur 7 Traitement complet
dune application industrielle
pthread_mutex_t sReveil;
pthread_mutex_init(&sReveil,NULL);
pthread_cond_init(&Reveil,NULL);
clock_gettime(CLOCK_REALTIME, &horloge);
while (1) {
pthread_mutex_lock(&s_Temperatures);
/* Lecture des tempratures */
T=MDD_Temperatures;
pthread_mutex_unlock(&s_Temperatures);
pthread_mutex_lock(&s_Debits);
/* Lecture des dbits */
D=MDD_Debits;
pthread_mutex_unlock(&s_Debits);
/* Affichage */
afficher_courbes(T,D);
/* Attente de la prochaine priode */
ajouter_microsecondes(&horloge,1000000);
pthread_mutex_lock(&sReveil);
pthread_cond_timedwait(&Reveil, &sReveil, &horloge);
}
}
void Piloter_Vanne() {
/* Applique une commande arrivant dans la BaL Commande_Vanne sur la
vanne */
float com;
while (1) {
/* Attente dun message */
bal_ecr_recevoir(Commande_Vanne,(char*)&com);
/* Commande de la vanne */
Commander_Vanne(com);
}
}
void Reguler_Debit () {
/* Acquiert priodiquement et vrifie les dbits, labore une consigne
de commande de vanne,
quelle envoie dans la BaL Commande_Vanne, gre les pannes */
Debits_t D;
Temperatures_t T;
float Consigne_Ed;
BYTE panne;
/* Modes de fonctionnement */
#define MODE_NORMAL 0
#define MODE_ALARME 1
/* Mode courant de fonctionnement */
BYTE Etat=MODE_NORMAL;
/* Gestion de la priodicit */
struct timespec horloge ;
pthread_cond_t Reveil;
pthread_mutex_t sReveil;
pthread_mutex_init(&sReveil,NULL);
pthread_cond_init(&Reveil,NULL);
clock_gettime(CLOCK_REALTIME, &horloge);
while (1) {
switch (Etat) {
case MODE_NORMAL:
pthread_mutex_lock(&s_Panne);
7.4 Implmentation sur simulateur
373


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
/* Lecture de ltat de panne */
panne=MDD_Panne;
pthread_mutex_unlock(&s_Panne);
if (panne) {
/* Le systme est en panne */
Etat=MODE_ALARME;
/* Mise en route de lalarme */
Commander_Alarme(1);
/*Ouverture de la vanne deau industrielle au maximum*/
Consigne_Ed=Max_Ouverture_Vanne;
/* Envoie la tche de commande */
bal_ecr_envoyer(Commande_Vanne,(char *)&Consigne_Ed);
} else {
/* Acquisition des dbits */
D.ed=Lire_Debit_Ed();
D.ef=Lire_Debit_Ef();
pthread_mutex_lock(&s_Debits);
/* Stockage dans le MDD */
MDD_Debits=D;
pthread_mutex_unlock(&s_Debits);
pthread_mutex_lock(&s_Temperatures);
/* Lecture des tempratures */
T=MDD_Temperatures;
pthread_mutex_unlock(&s_Temperatures);
/* Elaboration de la consigne */
Consigne_Ed=Elaborer_Consigne(D,T);
/* Envoie la tche de commande */
bal_ecr_envoyer(Commande_Vanne,(char*)&Consigne_Ed);
}
break;
case MODE_ALARME :
/* Lalarme est dclenche, on attend que loprateur la valide
*/
if (Lire_Bouton()) {
/* Loprateur a valid lalarme */
/* Extinction de lalarme */
Commander_Alarme(0);
/* Fermeture de la vanne deau industrielle */
Consigne_Ed=0.0;
bal_ecr_envoyer(Commande_Vanne,(char*)&Consigne_Ed);
/* Extinction de la pompe deau distille */
Commander_Pompe(0);
return; /* Terminaison de la tche */
}
break;
default: ;
}
/* Attente de la prochaine priode */
ajouter_microsecondes(&horloge,1000000);
pthread_mutex_lock(&sReveil);
pthread_cond_timedwait(&Reveil, &sReveil, &horloge);
}
}
void Lancer () {
int i ;
pthread_t taches[4]; /* Tableau stockant les identificateurs de
tches */
374
7.4 Implmentation sur simulateur 7 Traitement complet
dune application industrielle
pthread_attr_t attributes; /* Attributs utiliss lors de la
cration des tches */
/* Cration des smaphores dexclusion mutuelle */
pthread_mutex_init(&s_Temperatures,0);
pthread_mutex_init(&s_Debits,0);
pthread_mutex_init(&s_Panne,0);
/* Cration de la bote aux lettres */
Commande_Vanne=bal_ecr_init(sizeof(float));
Commander_Pompe(1); /* Allumage de la pompe deau distille */
/* Lancement des tches */
pthread_attr_init(&attributes);
/* Remarque: plusieurs systmes POSIX non temps rel ne permettent
pas la manipulation dattributs */
pthread_create(&taches[0], &attributes,(void *)
Acquerir_Temperatures, (void *)0);
pthread_create(&taches[1], &attributes,(void *) Afficher, (void
*)0);
pthread_create(&taches[2], &attributes,(void *) Piloter_Vanne,
(void *)0);
pthread_create(&taches[3], &attributes,(void *) Reguler_Debit,
(void *)0);
/* Afin dviter que le programme principal ne se termine juste
aprs le lancement des tches, toutes les tches sont attaches */
for (i=0 ;i<4 ;i++) {
pthread_join(taches[i],NULL); /* Attente de terminaison */
}
}
m Le module de communication avec le simulateur
Voyons maintenant comment le programme C communique par TCP avec le simu-
lateur. Nous utiliserons pour cela le mme protocole que celui utilis en Ada : une
chane de caractres est toujours prcde de deux entiers au format binaire : le pre-
mier vaut 1, le second vaut la taille en octets de la chane transmise.
Il est important de constater que diffrentes tches peuvent en parallle tenter dacc-
der au simulateur. Il est donc ncessaire de protger les accs au simulateur an de
garantir leur exclusion mutuelle. Cest le rle du mutex s_Simulateur, utilis par
chaque sous-programme accdant au simulateur. Il est primordial dinitialiser le
simulateur avant tout autre accs celui-ci (cest--dire avant la cration des tches).
Voici len-tte du module :
/*
simulateur.h
Un simulateur est dfini par un serveur TCP coutant un port
(par dfaut 34532). Au dbut de lapplication, une connexion TCP est
ouverte avec le simulateur. Le protocole employ est de type commande
du systme/rponse du procd. Par exemple, pour lire le dbit ef, la
fonction Lire envoie "ef", le simulateur rpond alors en envoyant un
flottant sous forme de chane de caractres. Pour commander la pompe,
le simulateur envoie "pompe 0" ou "pompe 1" en fonction de la valeur
de la commande
*/
#ifndef _SIMULATEUR_H_
#define _SIMULATEUR_H_
#include "types_communs.h"
extern const float Max_Ouverture_Vanne;
7.4 Implmentation sur simulateur
375


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
/* Consigne maximale en litre/heure de louverture de vanne */
int Initialiser();
/* Initialisation du simulateur
Retour: 0 si connexion, 1 si erreur
*/
float Lire_Debit_Ef();
/* Renvoie le dbit deau industrielle en l/h
Ncessite: simulateur initialis pralablement*/
float Lire_Debit_Ed();
/* Renvoie le dbit deau distille en l/h
Ncessite: simulateur initialis pralablement */
Temperatures_t Lire_Temperatures();
/* Renvoie les tempratures en C
Ncessite: simulateur initialis pralablement */
BYTE Lire_Bouton();
/* Renvoie ltat du bouton poussoir
Retourne: vrai si appuy, faux sinon
Ncessite: simulateur initialis pralablement */
void Commander_Pompe (BYTE Com );
/* Allume ou teint la pompe
Entraine: Com = 1 => allume la pompe
Com = 0 => teint la pompe
Ncessite: simulateur initialis pralablement */
void Commander_Vanne (float Com );
/* Commande llectrovanne en l/h
Ncessite: simulateur initialis pralablement */
void Commander_Alarme(BYTE On);
/* Allume ou teint lalarme
Entraine: On = 1 => allume lalarme
On = 0 => teint lalarme
Ncessite: simulateur initialis pralablement */
#endif
Une partie du corps du module est donne ci-aprs :
#include <pthread.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include "simulateur.h"
static const char * Adresse_Simulateur = "127.0.0.1";
/* Adresse IP du simulateur */
static unsigned short Port_Simulateur=34532;
/* Port sur lequel le simulateur lance un serveur TCP */
static int sock_sim;
/* Socket utilis */
#define TAILLE_BUFFER 256
/* Taille du buffer de rception des messages */
const float Max_Ouverture_Vanne=200.0; /* l/h */
static pthread_mutex_t s_Simulateur;
/* Assure lexclusion mutuelle des accs au simulateur */
int Initialiser() {
struct sockaddr_in addr_sim;
/* Adresse du simulateur */
376
7.4 Implmentation sur simulateur 7 Traitement complet
dune application industrielle
pthread_mutex_init(&s_Simulateur,0);
/* Initialisation du smaphore */
if ((sock_sim = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
return 1;
/* Initialisation de la connexion TCP */
memset(&addr_sim, 0, sizeof(addr_sim));
addr_sim.sin_family = AF_INET;
addr_sim.sin_addr.s_addr = inet_addr(Adresse_Simulateur);
addr_sim.sin_port = htons(Port_Simulateur);
if (connect(sock_sim, (struct sockaddr *) &addr_sim,
sizeof(addr_sim)) < 0)
return 1;
/* Connexion TCP */
}
static int Simu_Read(char *buf) {
/* Lit une chane de caractres provenant du simulateur
Ncessite: buf a au moins la taille de TAILLE_BUFFER
Entraine: buf contient la chane lue (au plus TAILLE_BUFFER
caractres) termine par \0
Retourne: taille de la chane lue, ou -1 si erreur
*/
int entier1,longueur;
/* Le premier entier dune chane reue vaut toujours 1, et le
second vaut la longueur en octet de la chane */
int nb_octets;
if ((nb_octets = recv(sock_sim, &entier1, 4, 0)) <= 0) return -1;
if ((nb_octets = recv(sock_sim, &longueur, 4, 0)) <= 0) return -1;
if (longueur<0||longueur>TAILLE_BUFFER-1) return -1;
if ((nb_octets = recv(sock_sim, buf, longueur, 0)) != longueur)
return -1;
buf[longueur]=0;
return longueur;
}
static int Simu_Read_Float(float *f) {
static char buf[TAILLE_BUFFER];
int result=Simu_Read(buf);
sscanf(buf,"%f",f);
return result;
}
static int Simu_Write(const char *buf) {
/* Envoie une chane de caractres au simulateur
Ncessite: buf est une chane termine par \0, de taille maximale
TAILLE_BUFFER
Entraine: buf est envoy vers le simulateur
Retourne: taille de la chane envoye, ou -1 si erreur
*/
static char tampon[TAILLE_BUFFER+8];
/* Taille maximale de la chane + 2 entiers */
int un=1;
int longueur=strlen(buf);
int nb_octets;
memcpy(tampon,(char *)&un,4);
memcpy(&tampon[4],(char *)&longueur,4);
memcpy(&tampon[8],buf,longueur);
/* Le premier entier dune chane envoye vaut toujours 1, et le
second vaut la longueur en octet de la chane */
7.4 Implmentation sur simulateur
377


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
if ((nb_octets = send(sock_sim, tampon, longueur+8, 0)) !=
longueur+8) return -1;
return longueur;
}
float Lire_Debit_Ef() {
float lu;
pthread_mutex_lock(&s_Simulateur);
Simu_Write("ef");
Simu_Read_Float(&lu);
pthread_mutex_unlock(&s_Simulateur);
return lu;
}
m Le programme principal
Le programme principal a pour rle dinitialiser le simulateur et dappeler la fonction
de lancement des tches. Noter que contrairement Ada, le programme principal
se termine immdiatement (ici, une attente articielle de caractre a t ajoute
an dempcher la fonction main de se terminer, et ainsi darrter le systme). Il est
possible, lorsque les attributs de tches sont implments, de donner le mme com-
portement la fonction main quau programme principal Ada.
#include "controler_echangeur.h"
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char c;
Initialiser();/* Initialisation du procd ou simulateur */
Lancer();/* Lancement des tches et attente de terminaison */
return 0;
}
7.4.4 Implmentation en LabVIEW du systme sur simulateur
Limplmentation LabVIEW obtenue partir dun diagramme DARTS peut tre
visuellement trs proche de la conception. En effet, grce lencapsulation, il est
possible de crer des tches ayant un aspect graphique voquant les lments DARTS.
La gure 7.11 montre la hirarchie de vi utilise pour implmenter le systme. Nous
avons choisi dutiliser la mme technique de simulation (communication TCP/IP
avec un processus de simulation) que dans les langages Ada et C, mais nous aurions
pu trs simplement implmenter le simulateur par une tche LabVIEW, et le faire
communiquer avec les tches du systme via des modules de donnes.
Il est noter que tout type utilis, en dehors de types de base, est dclar en tant que
Type Strict ; ainsi, dans le cas prsent, ce sont les clusters utiliss pour les Tempra-
tures et les Dbits, ainsi que les types numrs pouvant tre utiliss par plusieurs vi
(actions possibles sur un module de donnes, actions possibles sur le simulateur).
Ainsi, la gure 7.12 prsente la dnition du type Tempratures.
378
7.4 Implmentation sur simulateur 7 Traitement complet
dune application industrielle
Acqurir
temprature
Programme principal
Afficher
Commander
Vanne
Rguler
dbits
laborer
consigne vanne
Vrifier
dbits
Vrifier
tempratures
MDD
Tempratures
MDD
Panne
MDD
Dbits
Communication
avec simulateur
Lecture dune chane
provenant du simulateur
Adapter une chane au protocole
Lecture des tempratures
provenant du simulateur
Figure 7.11 Hirarchie des vi du systme de contrle de lchangeur en LabVIEW.
Figure 7.12 Lutilisation de types stricts est fortement conseille :
exemple du type Tempratures.
7.4 Implmentation sur simulateur
379


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
m Outils de communication
La bote aux lettres peut tre simplement implmente par un lment message queue
LabVIEW : cette bote est cre au plus haut niveau, dans le programme principal,
et son identiant est pass comme paramtre aux deux tches lutilisant. Lors de la
cration dune bote aux lettres, partir de la version 7 de LabVIEW, le type dl-
ments transports par la bote aux lettres est donn la cration. Ainsi, sur la
gure 7.13, la cration de la bote BaL Commande Vanne se voit fournir une cons-
tante relle (double prcision). Lidentiant de bote aux lettres cre est alors pass
aux tches Rguler Dbit et Commander Vanne qui pourront ainsi communiquer
laide de cette bote aux lettres.
Les modules de donnes sont implments laide de vi non rentrants, comme
expliqu dans le paragraphe 6.4.3, p. 335. Gnralement, on donne la possibilit
dinitialiser, lire et modier un module de donnes. Remarquons sur la gure 7.13
la faon dont on initialise les modules de donnes avant de lancer les tches grce
lutilisation dune structure squence. En guise dexemple de module de don-
nes, la gure 7.14 montre le diagramme de MDD Dbits. Noter lutilisation dun
type strict pour les dbits.
Les communications avec le simulateur sont elles aussi accessibles travers un vi
non rentrant, ce qui garantit lexclusion mutuelle des accs celui-ci.
380
7.4 Implmentation sur simulateur 7 Traitement complet
dune application industrielle
F
i
g
u
r
e

7
.
1
3


P
r
o
g
r
a
m
m
e

p
r
i
n
c
i
p
a
l

L
a
b
V
I
E
W

d
u

c
o
n
t
r

l
e

d
e

l

c
h
a
n
g
e
u
r
.
381
7.4 Implmentation sur simulateur 7 Traitement complet
dune application industrielle


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
F
i
g
u
r
e

7
.
1
4


M
o
d
u
l
e

d
e

d
o
n
n

e
s

D

b
i
t
s

i
m
p
l

m
e
n
t


p
a
r

v
i

n
o
n

r

e
n
t
r
a
n
t
.
382
7.4 Implmentation sur simulateur 7 Traitement complet
dune application industrielle
m Implmentation des tches
Dans le cas prsent, il y a deux types de tches : des tches priodiques, et une
tche dclenche par bote aux lettres.
Chaque tche est implmente par une boucle sans n. Dans le cas priodique, on
utilise le vi Attendre le prochain multiple de (voir 6.4.3, p. 334) qui permet
dassurer un rgime priodique sans drive des horloges (activation chaque fois
que lhorloge atteint un multiple de x millisecondes). La gure 7.15 prsente la
tche Acqurir Tempratures. Noter quil est conseill, pour faciliter la lecture du
programme, de choisir des icnes exprimant la fonctionnalit des vi. Ainsi, celui
de la tche ressemble une tche DARTS priodique. Noter aussi que le param-
tre Priode, pass par le programme principal, est un paramtre que nous avons
rendu obligatoire. Enn, comme tout vi qui doit tre correctement document, il
convient pour les tches de mettre en vidence dans leur documentation quels l-
ments de communication et lments matriels sont utiliss.
Figure 7.15 Diagramme de la tche Acqurir Dbits.
7.4 Implmentation sur simulateur
383


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
La tche Afcher est elle aussi trs simple, et est prsente sur la gure 7.16. On
peut remarquer la facilit avec laquelle LabVIEW permet de raliser des afchages
(voir la face avant dAfcher sur la gure 7.17).
La tche la plus complexe est Rguler Dbits (gure 7.18). Elle intgre le diagramme
tats-transitions du processus de contrle dni en SA-RT. Cet automate est impl-
ment en LabVIEW grce une structure de choix, dont la condition est un type
numr dont les valeurs possibles sont les tats de lautomate. Dans le cas prsent,
les 3 tats du processus de contrle ont t implments par 2 tats (Normal et Attente
bouton), le 3
e
tat, Panne, correspond larrt de la tche et nest donc pas repr-
sent dans le type numr. Lidenticateur de bote aux lettres donn en paramtre
(par le programme principal) permet denvoyer des consignes vers la tche de com-
mande.
Enn, la tche Commande Vanne est une tche dclenche par bote aux lettres. Elle
prend donc en entre un identicateur de bote aux lettres, se contente dattendre
un message et dappliquer la commande sur le procd ou le simulateur (gure 7.19).
Figure 7.16 Diagramme de la tche Afficher.
Figure 7.17 Face avant du vi Afficher.
384
7.4 Implmentation sur simulateur 7 Traitement complet
dune application industrielle
F
i
g
u
r
e

7
.
1
8


D
i
a
g
r
a
m
m
e

d
e

l
a

t

c
h
e

R

g
u
l
e
r

D

b
i
t
.
7.4 Implmentation sur simulateur
385


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
Le choix effectu dans cet exemple est dutiliser lappel au simulateur dans chaque
tche communiquant avec le procd. Cest exactement comme si en Ada (voir
7.4.2), nous avions directement utilis lobjet protg Simulateur dans les tches.
Nous aurions pu ici aussi dnir des fonctions daccs lmentaires au procd,
de faon ne pas appeler le simulateur directement dans les tches.
m Le vi de communication avec le simulateur
Rappelons quen LabVIEW, il aurait t tout aussi simple, voire mme prfrable,
dimplmenter le simulateur directement dans une tche LabVIEW. Cependant,
dans un souci dhomognit avec ce qui a t fait en C et Ada, nous avons choisi
dutiliser un simulateur sous forme de processus externe, avec lequel nous commu-
niquons via TCP/IP (voir 7.4.1).
Le vi de communication avec le simulateur doit garantir lexclusion mutuelle des
communications avec le simulateur : cela est fait naturellement par le comportement
non rentrant du vi. Ce vi peut tre vu comme un module de donne de haut niveau.
Notons cependant que contrairement au moniteur, laspect non rentrant des vi
ne permet pas de reprsenter une primitive garde (de type entry Ada). Par cons-
quent, on ne peut pas imposer simplement tout appel au vi dtre prcd par un
appel dinitialisation (comparativement, observer comment on garantit en Ada
quinitialiser est appel avant tout autre accs).
La gure 7.20 montre linitialisation du vi de communication avec le simulateur :
il sagit simplement dune connexion TCP avec un serveur.
Nous voyons sur la gure 7.20 linconvnient dutiliser une telle structure pour grer
les accs au simulateur : de nombreuses entres et sorties du vi ne servent que dans
certains cas dAction. Il aurait aussi t possible de dnir une fonction par action
(acquisition ou commande) et de les protger par smaphore.
An dillustrer le fonctionnement des envois et rceptions TCP, la gure 7.21 pr-
sente le cas correspondant la lecture du dbit deau industrielle : la chane de carac-
tre ef est mise, en respectant le protocole utilis en C et en Ada. Le rle du vi
chane en chane protocole est, tant donne une chane en entre, de la faire prcder
de deux fois quatre octets : un entier valant 1, lautre valant la longueur de la chane
Figure 7.19 Diagramme de la tche Commander Vanne.
386
7.4 Implmentation sur simulateur 7 Traitement complet
dune application industrielle
F
i
g
u
r
e

7
.
2
0


I
n
i
t
i
a
l
i
s
a
t
i
o
n

d
u

v
i

d
e

c
o
m
m
u
n
i
c
a
t
i
o
n

a
v
e
c

l
e

s
i
m
u
l
a
t
e
u
r
.
7.4 Implmentation sur simulateur
387


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
Figure 7.21 Communication avec le simulateur : cas de la lecture de dbit.
Figure 7.22 Mise en forme dune chane envoyer suivant le protocole du simulateur.
388
7.5 Spcification et conception adaptes 7 Traitement complet
dune application industrielle
(gure 7.22). De faon duale, la lecture dune chane en provenance du simulateur,
effectue dans le vi Lire chane protocole utilise le deuxime entier reu pour con-
natre le nombre de caractres lire (gure 7.23).
Remarque
An dhomogniser les communications entre diffrentes applications LabVIEW pouvant tourner
sur diffrents systmes dexploitation, National Instruments

a fait le choix de toujours utiliser une


reprsentation de type big endian (loctet de poids fort est mis en premier lors de la srialisation
dun entier) alors que sur le systme employ, le simulateur utilise une reprsentation de type little
endian (octet de poids faible dabord). Nous avons donc d inverser les octets avant tout envoi ou
aprs toute rception an de ne dialoguer quen little endian . Cet exemple montre bien quil est
en gnral prfrable dutiliser un protocole purement textuel : typiquement, chaque commande
pourrait tre termine par les deux caractres Carriage Return/Line Feed (CR/LF), qui serviraient
alors de marqueurs de n de commande ou de rponse. Une lecture de donnes en provenance du
rseau seffectuerait donc jusquau CR/LF, et il ne serait pas ncessaire de prxer chaque envoi par
sa longueur.
7.5 Spcification et conception adaptes
Quel que soit le langage choisi, aprs une phase de test sur le simulateur, le concepteur
peut passer la commande relle. Avant cela, il convient de revenir sur la spcica-
tion, et de prciser certains lments inhrents au matriel choisi. En effet, il est
probable que dans le premier V du dveloppement en W du systme, le matriel ne
soit pas connu, ou connu partiellement, ou bien en cours de dveloppement, etc.
Le tableau 7.5 montre que le systme nagit nalement pas directement sur les l-
ments mais par le biais dune carte dacquisition, dun port srie, et de diffrents relais
lectriques ainsi que dune centrale dacquisition de thermocouples.
En effet, les tensions (Tempratures) dlivres par les thermocouples sont trop faibles
pour tre lues par une carte dacquisition standard. Contrairement une carte
dacquisition de haute prcision, une carte dentres/sorties standard peut lire des
tensions analogiques avec une sensibilit denviron 2,5 mV (pour un thermocouple
de type K, une diffrence de 2,5 mV peut correspondre un cart de 60 C). Une
centrale de conditionnement sera donc utilise. Cette centrale, connecte un port
srie (RS-232), est une centrale supportant un protocole propritaire de type texte,
Figure 7.23 Lecture dune chane en provenance du simulateur.
7.5 Spcification et conception adaptes
389


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
Tableau 7.5 Description des lments matriels choisis.
lments matriels
Console PC industriel.
Carte
dacquisition
Carte dacquisition standard 8 entres/2 sorties analogiques (0-10 V), 24 E/S
numriques (0-5 V).
Tef
1
Thermocouple de type K situ 30 cm de larrive deau industrielle.
Tef
2
Thermocouple de type K situ la sortie de lchangeur.
Ted
1
Thermocouple de type K situ lentre de la cuve.
Ted
2
Thermocouple de type K situ la sortie de la cuve.
Thermocouple
de type K
Domaine de valeur : 270-1 372 C.
Signal fourni : 6,458 mV-54,819 mV.
Centrale
dacquisition
Centrale relie aux thermocouples accessible par connexion srie.
Programmable, fonctionne 1 Hz (1 acquisition par seconde).
Relie au port srie COM1 et aux 4 thermocouples.
Bouton poussoir Bouton (avec antirebond). Aliment en 5 V cc, dlivre 5 V si appuy, 0 V sinon.
Reli la ligne 0 du port numrique 0 de la carte dacquisition.
Dbt_ef Dbitmtre de type vortex situ la sortie de lchangeur.
Alimentation : 24 V cc relie (via relais lectrique 0-5 V cc 0-24 V cc)
la ligne 1 du port numrique 0 de la carte dacquisition.
Signal fourni : [0-10 V] reli lentre analogique 0 de la carte dacquisition.
Dbt_ed Dbitmtre de type vortex situ lentre de la cuve.
Alimentation : 24 V cc relie (via relais lectrique 0-5 V cc 0-24 V cc)
la ligne 2 du port numrique 0 de la carte dacquisition.
Signal fourni : [0-10 V] reli lentre analogique 1 de la carte dacquisition.
Dbitmtre
de type vortex
Domaine de valeur : [0,01-400 l/h]
Marge derreur : 0,5 %
Contraintes physiques : [ 40-85 C]
Correspondance volts litres/heure donne dans des fichiers dtalonnage
en fonction de la temprature
Pompe Pompe de type tout ou rien fournissant une pression de 3 bars 25 C.
Alimentation externe : 230 V~
Relie la ligne 3 du port numrique 0 de la carte dacquisition (via un relais
lectrique 0-5 V cc 0-230 V~)
EVef lectrovanne rglable situe lentre deau industrielle.
Alimentation externe : 12 V~ relie la ligne 4 du port numrique 0 de la carte
dacquisition via un relais lectrique 0-5 V cc 0-12 V~.
Signal de commande : 0-10 V cc reli la sortie analogique 0 de la carte
dacquisition.
390
7.5 Spcification et conception adaptes 7 Traitement complet
dune application industrielle
capable de scruter une temprature par seconde (pour les procds thermiques,
lvolution de temprature est gnralement lente) et de la fournir sur le port srie
sous forme dune chane de caractres.
Le diagramme de contexte de la spcication adapte est donn sur la gure 7.24.
Le diagramme prliminaire correspondant est donn sur la gure 7.25. Typiquement,
les modications portent sur la ncessit dinitialiser-congurer-alimenter-program-
mer certains lments matriels. Gnralement, des identicateurs dlment con-
gur (port numrique, port srie, etc.) doivent ensuite tre utiliss. Dans la spci-
cation, ces lments sont regroups dans un unique module de donnes nomm
Infos E/S. Nous pouvons noter que le processus fonctionnel ajout Init E/S est de
type sous-programme, de mme que Lire bouton.
Enn, par rapport la spcication donne sur la gure 7.3, et ce an dviter de
trop charger le diagramme prliminaire, le processus Vrier dbit ed a t insr dans
le processus Grer Dbits, dont le diagramme ots de donnes est donn sur la
Tableau 7.5 (suite) Description des lments matriels choisis.
lments matriels
Correspondance litres/heure - volts donne dans des fichiers dtalonnage
en fonction de la temprature
Alarme Dispositif dalarme sonore et lumineuse
Alimentation externe : 24 V cc (teint 0 V) relie la ligne 5 du port
numrique 0 de la carte dacquisition via un relais lectrique 0-5 V cc
0-24 V cc.
T
e
m
p

r
a
t
u
r
e
s
S
ig
n
a
l e
f
S
i
g
n
a
l

e
d
Acknowledge
Mise
en route
Affichage
Cmd pompe
Cmd vanne
Alarme
Alim_Dbt_ed
Alim_Dbt_ef
Config
centrale
Alim vanne
Dbt_ef
Pompe
EVef
Console
Centrale
Bouton poussoir
Dbt_ed
Sirne
Rguler
changeur
0
Figure 7.24 Diagramme de contexte de la spcification adapte.
7.5 Spcification et conception adaptes
391


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
gure 7.26. Sur ce diagramme, nous pouvons noter lapparition de deux nouveaux
processus, chargs deffectuer une conversion volts litres/heure en fonction des
tables dtalonnage.
Observons maintenant le processus 4 : en pratique, il est impossible (sauf si la vanne
intgre un dbitmtre et quelle est capable de sajuster de faon autonome), dobtenir
partir dune commande seule un dbit dsir. Il est ncessaire de mettre en place un
algorithme dasservissement, qui, tant donn un dbit, modie la consigne douver-
ture de llectrovanne, la cible tant la consigne en litre/heures. Cest pour cette raison
que le diagramme prliminaire donn sur la gure 7.25 doit tre lgrement modi,
an que Commander Vanne puisse asservir la vanne. De plus, lors dun asservissement,
des anomalies de fonctionnement peuvent tre dtectes (incohrence entre la com-
mande et le dbit lu, divergence). Il en rsulte que Commander Vanne peut tre
mme de dclencher lalarme. Enn, il est fort possible que lors de linitialisation du
matriel, une erreur survienne, et ncessite larrt du systme. Le diagramme prli-
minaire nalement obtenu est donn sur la gure 7.27.
Le diagramme tat/transition du processus de contrle Contrler Echangeur montre
bien que lutilisation du processus fonctionnel Init E/S est un appel de type sous-
programme (gure 7.28).
Le dictionnaire de donnes, non report ici, contient quelques modications triviales
par rapport celui de la spcication du systme sur simulateur. Notons cependant
E/D
Alarme
Signal ef
Signal ed
E/D
Alarme
Tempratures
Consigne T
Commande dbit
Cmd vanne
T
ACK
Bouton
E/D
E/D
T
E/D
Cmd
pompe
Affichage
Alarme
Alim
Dbit ef
Alim
Dbit ed
Infos E/S*
T
E/S OK
Infos E/S*
Infos E/S*
Config centrale
Alim
vanne
Infos E/S*
Dbits lus*
Dbits lus*
Contrler
changeur
9
Grer
dbits
1
Lire
bouton
5
Afficher
8
Acqurir
T
2
Commander
vanne
4
Tlues*
Tlues*
Init
E/S
3
Afficher
alarme
7
Commander
pompe
6
Figure 7.25 Diagramme prliminaire de la spcification adapte.
392
7.5 Spcification et conception adaptes 7 Traitement complet
dune application industrielle
que les units de mesure utilises entre les processus fonctionnels du systme sont des
litres/heure pour les dbits, et des degrs Celsius pour les tempratures : les conver-
sions en volts sont ralises lors de lacquisition et de la commande.
Lors du passage la conception, il existe deux possibilits en ce qui concerne le nou-
veau processus fonctionnel Init E/S :
le processus est dcoup, chaque partie dinitialisation tant alors place dans la
tche qui utilise le matriel initialiser ;
le processus est implment dans le programme principal, avant le lancement des
tches.
Il faut tenir compte dune contrainte technique lie lutilisation dun port num-
rique : plusieurs tches utilisent une ligne du mme port, mais le port ne doit tre
initialis quune seule fois avant tout autre accs. Pour le port numrique, seule la
seconde solution peut tre implmente sans introduire dlments supplmentaires
de synchronisation entre les tches. En ce qui concerne le port srie et les entres
ou sorties analogiques, nimporte laquelle des deux solutions peut tre envisage.
An de conserver une cohrence de linitialisation, nous choisirons la seconde solution,
qui prsente lavantage supplmentaire de demander peu ou pas de modication
lintrieur des tches par rapport la programmation sur simulateur.
Signal ef
Consigne T Tlues
E/D
Alarme
Commande
dbit
Signal ed
talonnage
Dbitmtres*
Signal ed
lu
Infos E/S
Signal ef
lu
Dbits lus*
Dbit ed lu
Dbit
ef lu
talonnage
Dbitmtres*
Dbits lus*
Dbis
vrifis
E/D
E/D
E/D
E/D
E/D
Alarme
E/D
Contrler
dbits
1.1
Acqurir
signal ef
1.3
Acqurir
signal ed
1.2
Convertir
ed
1.5
Convertir
ef
1.4
Vrifier
dbits
1.6
laborer
consigne
1.6
Figure 7.26 DFD du processus Grer Dbits.
7.5 Spcification et conception adaptes
393


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
Afficher
8
E/D
Alarme
Signal ef
Signal ed
E/D
Alarme
Tempratures
Tlues*
Consigne T
Commande dbit
Cmd vanne
T
ACK
Bouton
E/D
E/D
T
E/D
Cmd
pompe
Affichage
Tlues*
Alarme
Alim
Dbit ef
Alim
Dbit ed
Infos E/S*
T
E/S OK
Infos E/S*
Infos E/S*
Config
centrale
Alim vanne
Infos E/S*
Dbits lus*
Dbits lus*
Dbit ed
Alarme
Erreur E/S
Commander
pompe
6
Contrler
changeur
9
Afficher
alarme
7
Grer
dbits
1
Commander
vanne
4
Acqurir
T
2
Lire
bouton
5
Init
E/S
3
Figure 7.27 Prise en compte de lasservissement de llectrovanne
dans le diagramme prliminaire.
E/S OK
<E> 1,2,4,6,8
Alarme
<D> 1,2,8
<T> 5,7
OK
<D> 4,6
Attente
oprateur
Arrt
Nominal Nominal
Mise en route
<T> 3
Erreur E/S
Figure 7.28 Diagramme tat/transition du processus de contrle Contrler Echangeur.
394
7.6 Implmentation de la commande relle 7 Traitement complet
dune application industrielle
Le diagramme DARTS nest donc presque pas modi par rapport au diagramme
DARTS prsent sur la gure 7.7. Lunique point est lajout dune lecture du module
de donnes Dbits par la tche Commander Vanne, qui pourrait sappeler Asservir
Vanne.
7.6 Implmentation de la commande relle
Limplmentation va donc ncessiter limplantation dun algorithme dasservissement
dans la tche Commander Vanne. Celui-ci pourra tre par exemple un algorithme
de type PID (Proportionnelle, Intgrale, Drive).
La prise en compte des alimentations ncessaires certains capteurs et actionneurs,
ainsi que la programmation de la centrale dacquisition de tempratures, auront
lieu avant le lancement des tches.
7.6.1 Accs au matriel en C
La centrale dacquisition de tempratures utilise un port srie avec un protocole de
type rseau de terrain MODBUS, et fournit une bibliothque binaire sous la forme
dune libraire partage MS Windows

(extension .dll) accompagne dun chier


den-tte des fonctions permettant de communiquer avec la centrale. Une documen-
tation dcrit le protocole de communication employ (conguration, lecture, etc.)
pour communiquer avec la centrale. Voici un rsum comment du chier den-
tte fourni :
Dbits
Tempratures Panne
HTR (500 ms)
Dbit ef
Bouton
HTR (1 000 ms)
HTR (1 000 ms)
Tempratures
Affichage
Alarme
Cmd vanne
Cmd pompe
crire
Lire
Dbit ed
Lire
crire
Lire
crire
Commande vanne
Acqurir
tempratures
Afficher
Commander
Vanne
Rguler
dbit
Figure 7.29 Diagramme DARTS du contrle de lchangeur.
7.6 Implmentation de la commande relle
395


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
/*
ComCentrale.h
Fichier den-tte de libraire de communication avec la centrale
*/
/* Diffrentes constantes de dbit du port srie */
#define BAUDS_600 0
#define BAUDS_1200 1
#define BAUDS_2400 2
#define BAUDS_4800 3
#define BAUDS_9600 4
#define BAUDS_19200 5
/* Diffrentes constantes de noms de port srie */
#define COM1 0
#define COM2 1
#define COM3 2
#define COM4 3
int OpenModbusComm(const int port, const unsigned char bauds_rate);
/* Ouvre la communication MODBUS, appeler avant toute autre fonction
ENTREES:
port: nom du port srie utilis (voir constantes de port srie)
bauds_rate: dbit du port srie (voir constantes de dbit)
Renvoie: 0 si pas derreur, code derreur diffrent de 0 sinon */
int CloseModbusComm(const int port);
/* Met fin la communication MODBUS
ENTREES:
port: nom du port srie utilis (voir constantes de port srie)
Renvoie: 0 si pas derreur, code derreur diffrent de 0 sinon */
int Run(const int port, const unsigned char address);
/* Lance lacquisition sur la centrale
Ncessite: MODBUS ouvert sur le port
ENTREES:
port: nom du port srie utilis (voir constantes de port srie)
address: adresse MODBUS de la centrale entre 1 et 127
Renvoie: 0 si pas derreur, code derreur diffrent de 0 sinon */
int Stop(const int port, const unsigned char address);
/* Arrte la centrale
Ncessite: MODBUS ouvert sur le port
ENTREES:
port: nom du port srie utilis (voir constantes de port srie)
address: adresse MODBUS de la centrale entre 1 et 127
Renvoie: 0 si pas derreur, code derreur diffrent de 0 sinon */
int CommandKeyword(const int port, const unsigned char address, const
char * request, char *answer);
/* Envoie un mot de configuration la centrale (voir protocole)
Ncessite: MODBUS ouvert sur le port
Centrale non lance
ENTREES:
port: nom du port srie utilis (voir constantes de port srie)
address: adresse MODBUS de la centrale entre 1 et 127
request: chane de caractre de configuration (voir protocole)
SORTIES:
answer: rponse reue
Renvoie: 0 si pas derreur, code derreur diffrent de 0 sinon */
int ReadChannels(const int port, const unsigned char address, const
unsigned char firstChannel,
396
7.6 Implmentation de la commande relle 7 Traitement complet
dune application industrielle
const unsigned char numberOfChannels, float *channelsValues);
/* Effectue une lecture sur des voies (chaque voie est relie un
thermocouple)
ENTREES:
Ncessite: MODBUS ouvert sur le port
Centrale lance
la taille de channelsValues est >= numberOfChannels
port: nom du port srie utilis (voir constantes de port srie)
address: adresse MODBUS de la centrale entre 1 et 127
firstChannel: numro de la premire voie lire
numberOfChannels: nombre de voies lire partir de la premire
SORTIES:
channelsValues: tableau contenant les tempratures lues dans lordre
des voies
Renvoie: 0 si pas derreur, code derreur diffrent de 0 sinon */
Si le systme dexploitation utilis est de type MS Windows

, lutilisation des
fonctionnalits de la centrale est immdiate. Si ce nest pas le cas, il reste chercher
un portage de cette libraire sur le systme utilis, et, si cela nexiste pas, lcrire soi-
mme. Ce processus est gnralement trs long et laborieux.
Aprs tude du protocole de communication de la centrale, nous pouvons tablir
une abstraction de la libraire fournie en trois fonctions :
Initialiser_Centrale, qui ouvre une communication MODBUS (fonction Open-
ModbusCom), congure la centrale en lui envoyant des informations sur les voies
acqurir (appels CommandKeywords), puis lance lacquisition (appel Run) ;
Lire_Centrale, qui utilise ReadChannels, lecture bloquante sur le port srie, et
renvoie le tableau de nombres ottants reus ;
Fermer_Centrale, qui arrte la centrale (Stop) et ferme la communication ModBus
(CloseModbuscom).
La spcication de ces fonctions est :
/* MaComCentrale.h
Abstraction des accs la centrale dacquisition de tempratures
*/
#ifndef _MACOMCENTRALE_H_
#define _MACOMCENTRALE_H_
#include "ComCentrale.h"
#include "types_communs.h"
/* Constantes utilises pour communiquer avec la centrale */
#define PORT_CENTRALE COM1
#define ADRESSE_CENTRALE 1
#define BAUDS_CENTRALE BAUDS_9600
int Initialiser_Centrale();
/* Initialise la centrale
Renvoie: 0 si tout sest bien pass, code derreur sinon */
int Lire_Centrale(Temperatures_t *T);
/* Lit les tempratures (lecture bloquante sur port srie)
Ncessite: centrale initialise
Entraine: T contient les tempratures lues
Renvoie: 0 si tout sest bien pass, code derreur sinon */
int Fermer_Centrale();
/* Termine la connexion avec la centrale
Ncessite: centrale initialise
Entraine: la centrale nest plus initialise
7.6 Implmentation de la commande relle
397


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
Renvoie: 0 si tout sest bien pass, code derreur sinon */
#endif
La carte dacquisition, de marque National Instruments

pour le cas tudi, est fournie


avec deux pilotes de priphrique unis pour toute carte fournie par ce construc-
teur. Ces drivers, existant sur plusieurs plates-formes, fournissent bien entendu des
librairies binaires, associes des chiers en-tte (.h) de spcication des fonctions
implmentes dans les librairies. La dmarche est identique celle utilise pour la
centrale. Pour plus de simplicit, nous choisirons la librairie traditionnelle, bien que
la nouvelle librairie mx offre des performances bien meilleures.
Voici la spcication du module dabstraction orient procd de la carte dacqui-
sition. On peut remarquer la prsence de nombreuses constantes qui permettront,
le cas chant, de modier certains paramtres matriels :
/* mondaq.h
Abstraction des accs la carte dacquisition pour lchangeur */
#ifndef _MONDAQ_H_
#define _MONDAQ_H_
#define CARTE_DAQ_ID 1 /* Numro de priphrique associ la
carte */
#define PORT_CARTE_DAQ 0 /* Port dE/S li aux diffrents lments
numriques */
#define LIGNE_BOUTON 0 /*Ligne lie au bouton */
#define LIGNE_ALIM_DBT_EF 1 /*Ligne lie lalimentation de Dbt_ef*/
#define LIGNE_ALIM_DBT_ED 2 /*Ligne lie lalimentation de Dbt_ed*/
#define LIGNE_POMPE 3 /*Ligne lie la pompe */
#define LIGNE_ALIM_EV_EF 4 /*Ligne lie lalimentation de
llectrovanne */
#define LIGNE_ALARME 5 /*Ligne lie lalarme */
#define PORT_DBT_EF 0 /*Port dentre analogique reli Dbt_ef
*/
#define PORT_DBT_ED 1 /*Port dentre analogique reli Dbt_ed
*/
#define PORT_EV_EF 0 /*Port de sortie analogique reli EV_ef
*/
int Initialiser_DAQ();
/* Initialise les E/S numriques sur la carte
Renvoie: 0 si tout sest bien pass, code derreur sinon */
float Lire_Debit_Ef_DAQ();
/* Renvoie le dbit deau industrielle en l/h
Ncessite: procd initialis pralablement*/
float Lire_Debit_Ed_DAQ();
/* Renvoie le dbit deau distille en l/h
Ncessite: procd initialis pralablement */
BYTE Lire_Bouton_DAQ();
/* Renvoie ltat du bouton poussoir
Retourne: vrai si appuy, faux sinon
Ncessite: procd initialis pralablement */
void Commander_Pompe_DAQ (BYTE Com );
/* Allume ou teint la pompe
Entraine: Com = 1 => allume la pompe
Com = 0 => teint la pompe
Ncessite: procd initialis pralablement */
void Commander_Vanne_DAQ (float Com );
398
7.6 Implmentation de la commande relle 7 Traitement complet
dune application industrielle
/* Commande llectrovanne en l/h
Ncessite: procd initialis pralablement */
void Commander_Alarme_DAQ(BYTE On);
/* Allume ou teint lalarme
Entraine: On = 1 => allume lalarme
On = 0 => teint lalarme
Ncessite: procd initialis pralablement */
#endif
Limplmentation de ce module se ralise trs simplement laide de la libraire
fournie (voir ci-aprs). Notons que nous ne dtaillons pas les fonctions de conversion
dunits (volts litres/heure) qui se basent sur des tableaux de points et se contentent
de faire des interpolations.
/* mondaq.c */
#include <nidaq.h> /* Librairie NI-DAQ */
#include "mondaq.h"
int Initialiser_DAQ() {
int status;
/* Initialisation du port numrique en criture */
if ((status=DIG_Prt_Config(CARTE_DAQ_ID, PORT_CARTE_DAQ,0,1))!=0)
return status;
/* La ligne correspondant au bouton est mise en lecture */
if ((status=DIG_Line_Config(CARTE_DAQ_ID,
PORT_CARTE_DAQ,LIGNE_BOUTON,0))!=0) return status;
/* Les dbitmtres et llectrovanne sont aliments */
if ((status=DIG_Out_Line(CARTE_DAQ_ID, PORT_CARTE_DAQ,
LIGNE_ALIM_DBT_EF,1))!=0) return status;
if ((status=DIG_Out_Line(CARTE_DAQ_ID, PORT_CARTE_DAQ,
LIGNE_ALIM_DBT_ED,1))!=0) return status;
if ((status=DIG_Out_Line(CARTE_DAQ_ID, PORT_CARTE_DAQ,
LIGNE_ALIM_EV_EF,1))!=0) return status;
return 0;
}
BYTE Lire_Bouton_DAQ() {
i16 etat;
DIG_In_Line(CARTE_DAQ_ID, PORT_CARTE_DAQ, LIGNE_BOUTON,&etat);
return etat;
}
void Commander_Pompe_DAQ (BYTE Com ) {
DIG_Out_Line(CARTE_DAQ_ID, PORT_CARTE_DAQ, LIGNE_POMPE, Com);
}
void Commander_Alarme_DAQ(BYTE On) {
DIG_Out_Line(CARTE_DAQ_ID, PORT_CARTE_DAQ, LIGNE_ALARME, On);
}
float Lire_Debit_Ef_DAQ() {
f64 val;
AI_VRead(CARTE_DAQ_ID, PORT_DBT_EF, 1, &val);
return Conversion_volt_l_h(val);
}
float Lire_Debit_Ed_DAQ() {
f64 val;
AI_VRead(CARTE_DAQ_ID, PORT_DBT_ED, 1, &val);
return Conversion_volt_l_h(val);
}
void Commander_Vanne_DAQ (float Com ) {
AO_VWrite(CARTE_DAQ_ID, PORT_EV_EF, Conversion_l_h_volt(Com));
}
7.6 Implmentation de la commande relle
399


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
Il ne reste plus alors qu implmenter le corps du module procede, ce qui est trivial
tant donn que tous les accs au matriel sont faits de faon haut niveau.
7.6.2 Accs au matriel en Ada
Le langage Ada a des qualits indniables, notamment pour la programmation temps
rel, mais il ne permet pas simplement dexcuter du code avant le lancement des
tches du systme si celles-ci sont dclares dans un paquetage. Il existe bien videm-
ment diffrents moyens dy remdier :
Le paquetage Controler_Echangeur, contenant les diffrents lments de commu-
nication et les tches peut ne dnir que les types des tches, leur instanciation
tant faite dynamiquement dans un bloc declare du programme principal.
Cependant, cette technique nest pas conforme au prol Ravenscar.
Un objet protg est utilis an de synchroniser le dpart des tches, qui naura
alors lieu quaprs linitialisation du systme. Cest la solution que nous suivrons.
Limplmentation est alors modie comme suit : un objet protg Starter est cr
dans le paquetage Controler_Echangeur, cest lui qui servira de dclencheur aux tches :
Sa spcication est :
protected Starter is
procedure Go;
-- Dbloque toutes les tches bloques sur Attendre_Dpart
entry Attendre_Dpart;
-- Entre bloquante jusqu un appel de Go
private
Demarre: Boolean := False;
end;
Et son corps est le suivant:
protected body Starter is
procedure Go is
begin
Demarre:=True;
end;
entry Attendre_Dpart when Demarre is
begin
null;
end;
end;
Chaque tche ntant pas en attente sur une synchronisation ou bien une bote aux
lettres (comme Commander_Vanne) se voit ajouter au dbut de son code un appel
Starter.Attendre_Dpart. Ainsi, toutes les tches se retrouvent en attente jusqu
un appel Starter.Go. Le programme principal devient donc :
pragma Queuing_Policy(Priority_Queuing);
-- Laccs aux objets protgs est gr par niveau de priorit
pragma Locking_Policy(Ceiling_Locking );
-- Utilisation du protocole priorit plafond
pragma Task_Dispatching_Policy(Fifo_Within_Priorities);
-- Ordonnancement des tches priorits
with Controler_Echangeur;
with Procede;use Procede;
procedure Echangeur is
begin
400
7.6 Implmentation de la commande relle 7 Traitement complet
dune application industrielle
Initialiser;
Starter.Go
end;
Nous pouvons constater que les clauses dutilisation du simulateur ont t remplaces
par les clauses dutilisation du procd. Il ny a plus alors qu implmenter les
accs au matriel dans le corps du paquetage Procd.
La plupart des drivers de matriel (dans notre cas, par exemple, le driver de la carte
dacquisition et le driver de la centrale dacquisition de temprature) sont fournis
en C, sous forme par exemple dune librairie au format binaire, accompagne dun
ou plusieurs chiers den-tte C (chiers dextension .h).
Il en rsulte lobligation, soit de trouver un binding (interfaage entre Ada et une
bibliothque C) existant, comme on en trouve beaucoup sur internet, soit dcrire
soi-mme ce binding. Dans le cas prsent, nous navons trouv aucun binding pour
Ada. Le plus simple est alors dadopter la mme dmarche que dans le paragraphe
prcdent, cest--dire dcrire en C des modules daccs de haut niveau la centrale,
et la carte dacquisition. partir de l, il reste interfacer un paquetage Ada avec
les fonctions C dnies dans mondaq.h et MaComCentrale.h (voir section prcdente).
Ainsi, par exemple, la fonction C Lire_Debit_Ef_DAQ serait interface de la faon
suivante :
function Lire_Debit_Ef_Daq return Float;
pragma Import(C,Lire_Debit_Ef_Daq);
Le mme principe appliqu toutes les fonctions daccs au procd montre que,
mme si lon a choisi le langage Ada, dans la plupart des cas, laccs au matriel
ncessite une partie de programmation en C, moins que lon ait le courage dimpl-
menter un driver spcique en Ada.
7.6.3 Accs au matriel en LabVIEW
Quel que soit le matriel utilis, il y a trois possibilits :
le constructeur fournit une bibliothque dexploitation LabVIEW, dans ce cas,
labstraction de la bibliothque est triviale ;
le constructeur fournit une librairie binaire, ou une libraire partage (.so sous
Linux, .dll sous MS Windows

) ou bien des sources dans un langage, typique-


ment C. Dans ce cas, on pourra utiliser les Codes Interface Nodes, ou bien lappel
direct de fonctions de librairie partage.
Dans le cas prsent, le constructeur de la centrale dacquisition fournit une biblio-
thque dexploitation LabVIEW. Ainsi, linitialisation de la centrale est donne sur
la gure 7.30. Noter lutilisation dune variable globale stockant les paramtres
(identicateur) de la centrale, qui seront utiliss ultrieurement pour la lecture de
tempratures (gure 7.31). Lutilisation de variables globales la place dun vi non
rentrant de type module de donnes nest conseiller pour sa simplicit que lorsque
la variable nest modie quau dbut du programme, et utilise en lecture unique-
ment dans la suite.
Le langage LabVIEW fournit une bibliothque unie daccs aux cartes dacqui-
sition, base sur deux drivers de carte NI-DAQ. Notons que ces drivers, NI-DAQ
7.6 Implmentation de la commande relle
401


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
Figure 7.30 Initialisation de la centrale en LabVIEW.
Figure 7.31 Lecture des tempratures sur la centrale.
402
7.6 Implmentation de la commande relle 7 Traitement complet
dune application industrielle
traditionnal et NI-DAQ mx (pour multithread) sont fondamentalement diffrents
dans leur philosophie, et que la version mx offre des amliorations sensibles au niveau
du temps daccs aux priphriques, cependant, certaines cartes pour bus ISA, juges
obsoltes, ne sont pas supportes par ce driver.
La philosophie employe pour les ports numriques est de congurer une fois un port
(notamment en congurant la direction des lignes), ce qui fournit un identicateur
de port congur, puis de lire ou crire sur ce port autant que ncessaire. Les ports
analogiques, quant eux, ne se congurent pas dans un sens ou dans lautre (voir
4.1.4), et ne ncessitent pas de conguration pralable. La gure 7.32 montre
linitialisation du port numrique (voir laffectation des lignes tableau 7.5). Nous
utilisons un vi non rentrant, ce qui garantit lexclusion mutuelle de toutes les actions
ayant lieu sur le port numrique. La gure 7.33 donne les cas des 3 autres actions
possibles sur le port numrique.
Les ports analogiques sont encore plus simples commander ou lire, de plus, la mise
lchelle est simplie grce lutilitaire Measurement and Automation eXplorer
(gure 7.34). Ce logiciel permet de crer trs simplement un vi de lecture en litre/
heure, comme le montre la gure 7.35 sur lexemple de la lecture de dbit deau
distille.
Aprs limplmentation, gnralement relativement simple, des vi daccs au matriel,
il ne reste plus alors qu remplacer les appels au simulateur contenus dans les tches
et le programme principal (gure 7.36) par des appels aux vis nouvellement crs.
Figure 7.32 Initialisation du port numrique
et alimentation des dbitmtres et lectrovannes.
7.6 Implmentation de la commande relle
403


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
Figure 7.33 Actions possibles sur le port numrique.
404
7.6 Implmentation de la commande relle 7 Traitement complet
dune application industrielle
Figure 7.34 Cration dune chelle lie un talonnage.
Figure 7.35 Utilisation dune voie virtuelle utilisant une chelle personnalise.
7.7 Conclusion
405


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
7 Traitement complet
dune application industrielle
7.7 Conclusion
travers cet exemple, nous pouvons constater que chaque langage a des avantages
et des faiblesses spciques.
Le langage C prsente lavantage dtre le langage de base dans lequel on peut trouver
tout driver. Cependant, son inconvnient majeur est son typage faible (cest souvent
au programmeur que revient leffort de vrier la cohrence des types), et sa relative
difcult de programmation, ainsi que la multitude dimplmentations partielles
des normes POSIX.
Le langage Ada prsente llgance inhrente au multitche natif, et lavantage du
typage fort (le dverminage du programme crit en C a pris aux auteurs environ
10 fois plus de temps que celui du programme crit en Ada). Il prsente cependant
linconvnient de ne disposer daucun driver, et il choit souvent au programmeur
davoir crire un binding entre un driver fourni en langage C et Ada, le tout nces-
sitant une partie de programmation en C.
Le langage LabVIEW prsente lavantage doffrir un multitche implicite et naturel.
Les drivers dlments matriels se trouvent relativement facilement (et mme en leur
absence, il est trs simple deffectuer un binding laide dune libraire partage).
Son inconvnient est que, pour le moment, un seul systme dexploitation temps rel,
aux fonctionnalits relativement restreintes compares un excutif temps rel pour
C ou Ada, est disponible. Cela rend le langage particulirement bien adapt aux
programmes de contrle de procd sans contraintes de temps strictes (comme cest
le cas sur lexemple de lchangeur).
Figure 7.36 Le programme principal du contrle de lchangeur en LabVIEW.
407


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

8 TUDE AVANCE
DES SYSTMES TEMPS REL

8.1 Introduction

8.1.1 Prsentation gnrale de lordonnancement

Les mthodes dordonnancement, qui ont t dcrites dans le chapitre 4, sont ind-
pendantes des caractristiques temporelles intrinsques des tches. En effet, laffec-
tation des priorits un ensemble de tches se fait de faon non formelle.
Les algorithmes bass sur les priorits peuvent tre priorits xes ou variables.
Dans le cas o les priorits sont variables, lordonnanceur met jour les priorits
chaque rveil des tches ou aux instants des appels de primitives, ou chaque top
dhorloge. Il sappuie ensuite sur le rpartiteur (

dispatcher

) qui choisit la tche prte
la plus prioritaire et lui octroie le processeur. On peut noter qu ce jour, tous les
excutifs du commerce se basent sur des priorits xes. Cependant, il convient de
nuancer laspect statique des priorits par lutilisation de protocoles de gestion de
ressources : dans ce cas, la priorit des tches, bien que xe au dbut, peut voluer
au cours de la vie de lapplication.
Les algorithmes priorits sont appels algorithmes d

ordonnancement en ligne

car ils se basent sur ltat instantan du systme pour prendre une dcision. Les algo-
rithmes prsents dans le chapitre 4 appartiennent cette catgorie. Les ordonnan-
cements bass sur des squences prtablies sappellent des

algorithmes hors-ligne

.
Dans ce cas, la squence dordonnancement est construite partir dune vision
complte du systme, puis excute par un

squenceur

.
Lorsque le systme contrl impose des contraintes strictes de temps de rponse, se
traduisant sous la forme dchances temporelles respecter, les mcanismes dordon-
nancement par priorit affecte par le concepteur, ou par temps partag ne sont pas
toujours les plus intressants et les plus efcaces pour squencer lexcution des tches.
Si on possde sufsamment dinformations concernant les tches de lapplication,
il est possible dobtenir une validation pour laquelle toutes les tches sexcutent
en respectant leurs contraintes temporelles.
Le but recherch dans cette tude est de pouvoir valider une application multitche
de faon plus rigoureuse ou plus formelle que de soumettre cette application un
ensemble de tests qui ne seront jamais exhaustifs. Ce complment danalyse formelle
peut ainsi conduire diminuer fortement les tests et qualier lapplication pour
un haut niveau de sret de fonctionnement. Lintgration dans ce cadre dtude
408

8.1 Introduction

8 tude avance
des systmes temps rel

dune application multitche quelconque ncessite de prendre en compte toutes
les contraintes associes aux tches : primitives de synchronisations et de communi-
cations, relation de prcdence, partage de ressources, contraintes temporels (prio-
dicit, chance), etc. Les modles permettant la prise en compte de ces diffrents
lments sont prsents au fur et mesure de ce chapitre.
An de simplier la modlisation des tches, mais sans modier la gnralit de la
prsentation, nous allons introduire la notion de tche atomique ou normale, notion
dj aborde dans le chapitre 5 au niveau du noyau temps rel OSEK-VDX. Ainsi,
nous avons la dnition suivante :
Une

tche atomique ou normale

est une entit dexcution qui ne possde
aucun appel une primitive bloquante dans son code.
Cette dnition est prcise ultrieurement lors de la modlisation des relations de
prcdences entre les tches. Ainsi, except dans des cas explicits, chaque fois que
le mot tche est employ dans ce chapitre, il fait toujours rfrence une tche
atomique.
Lanalyse thorique de lordonnancement dans ce cadre applicatif complet (tches
dpendantes, contexte premptif, ordonnancement en ligne) est dune trs grande
complexit. Aussi lordonnnancement en ligne fait souvent appel la mise en place
dheuristiques dont les proprits sont prciser : contexte dapplicabilit, optimalit,
test dordonnanabilit associ, etc.
Les diffrents algorithmes dordonnancement ou heuristiques dordonnancement
que nous allons tudier sont bass sur les priorits. Mais, la diffrence dune affec-
tation de cette priorit des tches selon les spcications de lapplication couples
aux remarques des concepteurs, les priorits des tches vont tre affectes en fonction
des paramtres temporels des tches. Les priorits pourront mme changer au cours
de lexcution de lapplication si elles doivent suivre des caractristiques temporelles
des tches qui voluent elles-mmes en fonction de lexcution.
Aprs avoir prsent les diffrents modles des tches et avoir fait une premire ana-
lyse dune conguration de tches, nous allons tudier diverses faons de produire
une squence dexcution des tches en respectant les contraintes temporelles des
tches pour diffrentes congurations. La construction de la squence se fait en sui-
vant la rgle de choix dune tche excuter selon un algorithme dordonnancement
dni, quivalent suivre les priorits affectes aux tches.

8.1.2 Algorithmes dordonnancement

Un algorithme dordonnancement tant dni comme un algorithme capable de
donner une description (squence) du travail effectuer par le ou les processeurs, une
squence est dite

valide

si les chances des tches sont respectes.
Un algorithme est dit

able

pour une conguration de tches sil produit une
squence valide sur une dure innie quelles que soient les valeurs des premires
dates de dclenchement des diffrentes tches. Une conguration est dite

ordon-
nanable

sil existe au moins un algorithme able.
Dans un contexte de tches et dalgorithmes dordonnancement (affectation de
priorits), nous allons qualier lalgorithme dordonnancement tudi selon deux
aspects :
8.2 Modlisation des tches

409


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

8 tude avance
des systmes temps rel


optimalit

: si la conguration de tches est ordonnanable dans cette catgorie
dalgorithmes, alors elle le sera avec lalgorithme tudi ;


ordonnanabilit

: la capacit pouvoir prvoir lordonnancement de la con-
guration de tches en se basant sur des conditions ncessaires et/ou sufsantes
ou des simulations de lexcution.
Il est important de faire une remarque concernant le dernier point voqu, cest--
dire une simulation de lexcution consistant construire tout ou partie de la squence
dexcution et dafrmer lordonnanabilit de lapplication sur cette analyse. En effet,
la construction de la squence dexcution en simulant lenchanement des tches
alloues au processeur selon lalgorithme dordonnancement suppose une connais-
sance

a priori

des caractristiques temporelles des tches et du dterminisme de ces
paramtres. En particulier comme nous lanalyserons dans ce chapitre, la variation
de la dure dexcution du code de la tche, due lalgorithmique du code ou
lenvironnement dexcution, peut conduire de grandes variations dans lexcution
des tches et mme des anomalies : une diminution de la dure dexcution dune
tche peut rendre une conguration de tches non ordonnanable.

8.1.3 Temps discret

Dans la suite de ce chapitre, nous allons utiliser un temps discret, cest--dire que
le temps est considr comme une valeur entire qui volue par incrment de 1.
De mme, les paramtres des tches vont tre afchs sous forme de valeurs entires
sans unit temporelle prcise. Dans les applications industrielles, ces grandeurs sont
exprimes en fraction de milliseconde, voire en microseconde et la prcision dpend
de lhorloge du processeur. Pour faire la traduction de lapplication relle (grandeurs
relles) vers lapplication formalise (grandeurs entires), nous pouvons soit procder
un arrondi au plus proche entier, soit considrer un quantum quivalent au temps
unit de base, par exemple 25 s correspond une unit de temps dans lanalyse
formelle de lapplication. Ce temps est aussi fonction de la granularit temporelle
du noyau temps rel. De plus les temps afchs dans une application sont en gnral
considrs comme des temps relatifs au lancement de lapplication.

8.2 Modlisation des tches

Dans un systme temps rel, les

contraintes de temps

dcoulent de la dynamique
du procd contrl. Il existe diffrents types de contraintes de temps, qui seront
afns dans le chapitre portant sur lordonnancement :


contraintes de bout en bout

: le procd doit effectuer une ou des ractions
sur le procd (typiquement via des actionneurs) en un temps contraint. Typique-
ment, ces contraintes inuent sur les contraintes de tches faisant partie dune
chane, de lacquisition la commande ;


contraintes de non rentrance

: dans un systme temps rel, les tches effectuent
un traitement cyclique (

i.e.

soit priodique, soit rpt chaque vnement
attendu). Chaque itration de cette boucle sappelle une instance de tche.
Une tche ne pouvant pas tre rentrante, il faut typiquement sassurer que chaque
410

8.2 Modlisation des tches

8 tude avance
des systmes temps rel

instance dune tche puisse se terminer avant le prochain vnement dclencheur
de la tche, ou avant sa prochaine priode ;


contraintes de rgularit

(ou

gigue

) : lorsquune tche fait de lchantillonnage,
elle est priodique et doit tre la plus rgulire possible. On retrouve le mme type
de contraintes lorsque la tche doit dlivrer un signal continuellement modi.
Tous ces types de contraintes sur le systme se traduisent en termes de contraintes
temporelles individuelles sur les tches. Chaque tche est donc caractrise par des
contraintes temporelles, la difcult rside alors dans ltude du comportement
temporel du systme et du respect des contraintes dnies sur chacune des tches.
Lalgorithme dordonnancement choisi va satisfaire certaines contraintes de temps et
tre un compromis pour dautres caractristiques temporelles analyses

a posteriori

.

8.2.1 Modlisation formelle des tches indpendantes

An de pouvoir analyser de manire rigoureuse lordonnanabilit dune congu-
ration de tches, loptimalit dun algorithme dordonnancement ou la squence
dexcution dune application multitche, il est ncessaire davoir un modle math-
matique des tches. Ce modle doit permettre de prendre en compte toutes les carac-
tristiques oprationnelles et temporelles dune tche dune application quelconque.
Pour cela nous allons considrer successivement les diffrents cas :
tches priodiques ;
tches apriodiques ;
tches avec contraintes de prcdence ;
tches avec partage de ressources critiques.
La combinaison de ces diffrents modles de tches permet danalyser une application
multitche relle industrielle quelconque.
Le premier paramtre commun lensemble des modles de tches est la dure

C

i

dune tche

t

i

. La dure de la tche est directement lie au code de la tche. On
value gnralement la dure dexcution pire cas

C

max

et une dure minimale

C

min

.
Lvaluation de cette dure de la tche peut tre effectue de deux manires diff-
rentes. Soit le code est analys instruction par instruction, et lensemble des dures
de ces instructions est additionn (ensemble des dures dexcution du processeur
rfrences pour un processeur et une frquence quartz donns). Soit la dure de la
partie de code analyse est mesure directement lors de son excution par un systme
despionnage des signaux (analyseur logique, etc.). Mais, dans ces deux cas, une
valuation trs prcise de cette dure dexcution est trs difcile pour essentiellement
trois raisons :
une analyse exhaustive de tous les chemins dexcution du code est parfois impos-
sible (jeux de tests complexes, nombre de combinaisons trs lev) ;
les capacits dexcution des processeurs pour amliorer leur efcacit (mmoire
cache plusieurs niveaux, pipeline multiple, etc.) vont conduire une incertitude
sur la dure dexcution qui dpend fortement du contexte prcdent du proces-
seur ;
8.2 Modlisation des tches

411


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

8 tude avance
des systmes temps rel

loccurrence dinterruptions pendant lexcution dune tche qui oblige le pro-
cesseur une prise en compte minimale.
Pour cette tude, nous considrerons une valeur de la dure dexcution pire cas

C

i



C

max

et, pour certains cas, nous analyserons leffet de cette variabilit de la dure
dune tche sur lordonnancement dune conguration.

m

Modlisation des tches priodiques

Comme nous lavons vu dans les exemples prcdents, ces tches correspondent par
exemple des tches de scrutation de capteurs pour effectuer des mesures rgulires
de grandeurs physiques. La modlisation des tches priodiques va reposer sur trois
paramtres temporels :


r

0

: date de rveil de la tche, cest--dire la premire date laquelle la tche
demande le processeur ;


C



C

max

: dure dexcution maximale dnie avec les restrictions exposes
prcdemment ;


T

: priode dexcution, cest--dire la frquence de renouvellement de la demande
dexcution de la tche.
La date de rveil

r

k

de la

k

ime

instance ou occurrence dune tche est donc dnie
par :
(

8.1

)
An de limiter au maximum les indterminismes dexcution, nous supposons que
les tches sont non rentrantes, cest--dire que, lors dune nouvelle demande dex-
cution, la tche doit avoir termin son excution prcdente. Comme nous nous
sommes placs dans un environnement dexcution stricte, la tche doit avoir termin
son excution avant la n de sa priode dexcution ; la tche est dite

chance
sur requte

.
La gure 8.1 prsente lexcution de deux occurrences dune tche priodique
chance sur requte dans un diagramme de Gantt. Nous pouvons noter que la tche
sexcute de faon complte dans la premire occurrence, cest--dire que, lorsquelle
obtient le processeur, elle garde pendant toute sa dure dexcution

C



C

max

. En
revanche, lors de la deuxime occurrence, la tche est prempte une fois lors de son
excution et son excution seffectue alors en deux fois.
=
=
r
k
r
0
kT + =
t
r
0
r
1
r
2
T
C
max
C
max
Figure 8.1 Reprsentation de lexcution dune tche priodique
chance sur requte.
=
412

8.2 Modlisation des tches

8 tude avance
des systmes temps rel

Lchance de la tche peut tre plus courte que la n de sa priode. Dans ce cas,
il est ncessaire de dnir un nouveau paramtre qui est le

dlai critique



D

de la
tche qui correspond au dlai au bout duquel la tche doit tre termine, dlai mesur
par rapport la date de rveil de linstance considre.
La modlisation des tches priodiques strictes va donc reposer sur quatre paramtres
temporels :


r

0

: date de rveil de la tche, cest--dire la premire date laquelle la tche
demande le processeur ;


C



C

max

: dure dexcution maximale dnie avec les restrictions exposes
prcdemment ;


D

: dlai critique, cest--dire le dlai au bout duquel la tche doit tre termine
par rapport la date de rveil de linstance en cours.


T

: priode dexcution, cest--dire la frquence de renouvellement de la demande
dexcution de la tche.
Dans ce contexte, il est possible de dnir lchance

d

k

de la

k

ime

instance dune
tche par lquation suivante :
(

8.2

)
La gure 8.2 reprsente lexcution dune telle tche pour deux occurrences dans
un diagramme de Gantt. La zone dexcution de la tche se situe donc entre les dates

r

k

et

d

k

, et la zone comprise entre

d

k

et

r

k+1

ne peut pas tre utilise pour lexcu-
tion de la tche.

m

Modlisation graphique des tches priodiques

Nous allons nous intresser aux trois paramtres temporels (

C

i

,

D

i

,

T

i

) qui caract-
risent une tche

t

i

. An davoir un comportement classique en temps rel (pas de
rentrance des tches : D
i
T
i
), ceux-ci doivent imprativement respecter les condi-
tions de base suivantes :
(8.3)
Par consquent, il est possible de reprsenter graphiquement lespace dcrivant les
diffrents triplets caractrisant une tche donne. Il est ncessaire pour cela de se
=
d
k
r
k
D r
0
kT D + + = + =
t
r
0
r
1
r
2
T
C
max
C
max
D
d
0
d
1
Figure 8.2 Reprsentation de lexcution dune tche priodique
avec une chance plus petite que la priode.
0

C
i
D
i
T
i

8.2 Modlisation des tches
413


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
donner la valeur de rfrence que peut prendre la dure dexcution de la tche
C
i
C
max
. Nous obtenons un tridre ouvert limit par les trois demi-droites con-
courantes au point de coordonnes (C
max
, C
max
, C
max
) (gure 8.3).
Il est vident quune telle reprsentation tridimensionnelle nest pas dune utilisation
trs aise. Aussi il est prfrable de travailler dans les projections de ce volume sur
les diffrents plans. En particulier, nous focaliserons notre attention sur un plan D,T
(dlai critique-priode) reprsent sur la gure 8.3 et sur le plan T,C (priode-dure
dexcution) reprsent sur la gure 8.4.
Cette visualisation des paramtres temporels associs une tche est un outil dana-
lyse intressant. Comme nous le verrons dans la suite, cette approche graphique
savre particulirement utile dans le cas o le concepteur doit soit ajouter une tche
un ensemble de tches avec des paramtres dj xs, soit modier les paramtres
dune tche existante an damliorer ses caractristiques temporelles. Cette visualisa-
tion graphique propose alors au concepteur toutes les possibilits de choix des para-
mtres temporels dune tche compatibles avec lordonnanabilit de la conguration
des tches.
=
C
max
C
max
C
max
T : priode
D : Dlai critique
C : dure dexcution
Figure 8.3 Reprsentation graphique tridimensionnelle des paramtres temporels
dune tche priodique avec une chance plus petite que la priode.
414
8.2 Modlisation des tches 8 tude avance
des systmes temps rel
m Modlisation des tches apriodiques
En ce qui concerne les tches dites apriodiques, le seul paramtre connu est la dure
dexcution C de la tche. La date de rveil ou demande processeur est alatoire
car elle dpend du contexte dvolution du procd et ne peut donc pas tre connue
C
max
C
max T : priode
D : Dlai critique
Droite D = T
(tche chance sur requte)
Figure 8.4 Reprsentation graphique dans le plan D,T des paramtres temporels
dune tche priodique avec une chance plus petite que la priode.
T : priode
C : Dure dexcution
Droite D = T = C
(tche chance sur requte)
C
max
C
max
Figure 8.5 Reprsentation graphique dans le plan C,T des paramtres temporels
dune tche priodique avec une chance plus petite que la priode.
8.2 Modlisation des tches
415


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
a priori. Nous pouvons donc reprsenter son excution dans le diagramme de Gantt
de la gure 8.6. Les deux dates de rveil r et r ont t choisies alatoirement. De la
mme manire que pour les tches priodiques les tches apriodiques peuvent tre
premptes au cours de leurs excutions et donc dexcuter en plusieurs fois lors dune
instance.
Comme nous nous sommes placs dans un environnement dexcution stricte,
la tche apriodique, appele apriodique stricte ou sporadique, doit possder un
dlai critique D. Nous appelons ces tches apriodiques strictes des tches spora-
diques. Lexcution de ce type de tches sporadiques est reprsente sur la gure 8.7.
Ce dlai critique conduit des dates dchance stricte pour chaque instance dex-
cution, soit :
ou (8.4 )
An de limiter au maximum les indterminismes dexcution et de pouvoir faire
une analyse de lordonnanabilit de conguration de tches incluant des tches
apriodiques, nous supposons que les tches apriodiques strictes possdent un
dlai minimum D
min
entre deux occurrences ou instances successives ; soient r et r
deux dates de rveil successives dune tche sporadiques, nous avons alors la relation
suivante (gure 8.7) :
(8.5)
Il est impratif davoir une tche termine avant une nouvelle demande dexcution ;
cela conduit aux ingalits suivantes :
(8.6 )
t
r r
C
max
C
max
Figure 8.6 Reprsentation de lexcution dune tche apriodique.
d r D + = d r D + =
r r
min

0

C D
min

t
r r
C
max
C
max
D
d d
D

min
Figure 8.7 Reprsentation de lexcution dune tche apriodique
avec une chance stricte ou tche sporadique.
416
8.2 Modlisation des tches 8 tude avance
des systmes temps rel
8.2.2 Autres paramtres temporels des tches
Nous allons nous intresser des paramtres qui sont utiles pour caractriser une
ou plusieurs tches dans une squence dexcution. Nous distinguons les paramtres
statiques qui ne varient pas en fonction du temps davancement dans lexcution de
la tche et des paramtres dynamiques qui dpendent de linstant o ils sont calculs.
Certains de ces paramtres peuvent servir de base pour un algorithme dordonnance-
ment.
m Paramtres statiques des tches
Nous pouvons dnir deux paramtres complmentaires du temps dexcution par
rapport la priode ou lchance de la tche :
la laxit L, cest--dire le temps restant entre la n dexcution de la tche et son
chance (gure 8.8). Lors dune excution de la tche au plus tt, excution
immdiate et sans premption aprs la date de rveil, la laxit maximale L
max
reprsente tout le temps processeur restant et sexprime par :
et (8.7 )
le dlai de latence Dl, cest--dire le temps avant le dbut dexcution de la tche
(gure 8.9). Lors dune excution de la tche au plus tard, excution retarde au
maximum et sans premption, le dlai de latence maximum Dl
max
est identique
la laxit maximale et sexprime par :
et (8.8)
En complment de ces deux paramtres statiques, il est habituel de dnir les ins-
tants de dbut dexcution et de n dexcution de la k ime instance dune tche,
soit (gure 8.10) :
dbut dexcution de la k
ime
instance de la tche t
i
: s
i,k
;
n dexcution de la k
ime
instance de la tche t
i
: e
i,k
.
L D C L
max
D C =
t
r C
max
d L
max
D
t
r
d L
D
Excution au plus tt
Figure 8.8 Illustration du paramtre laxit
dans le cas gnral et dans le cas dune excution au plus tt.
Dl D C Dl
max
D C L
max
= =
8.2 Modlisation des tches
417


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
Nous pouvons remarquer que le paramtre s
i,k
correspond au dlai de latence de la
tche t
i
. tant donnes les caractristiques dexcution de la tche, nous pouvons
crire les ingalits suivantes :
, et (8.9)
La premire ingalit est une galit dans le cas dune excution au plus tt (s
i,k
r
k
),
la deuxime ingalit est une galit dans le cas dune excution au plus tard (e
i,k
d
k
)
et la troisime ingalit est une galit dans le cas dune excution sans premption
de la tche (e
i,k
-s
i,k
C).
Deux paramtres supplmentaires permettent de caractriser le comportement de
la tche lors de ses diffrentes instances dexcution et de qualier cette excution.
Nous avons ainsi :
Temps de rponse de la k
ime
instance de la tche t
i
dni par (gure 8.11) :
(8.10)
Temps de rponse maximum de la tche t
i
: TR
i
max
k
{TR
i,k
}
Temps de rponse minimum de la tche t
i
: TR
i,min
min
k
{TR
i,k
}
Temps de rponse moyen de la tche t
i
: TR
i,moy
S
k
{TR
i,k
}/(k+1)
t
r C
max
d Dl
max
D
t
r
d
Dl
D
Excution au plus tard
Figure 8.9 Illustration du paramtre dlai de latence
dans le cas gnral et dans le cas dune excution au plus tard.
t
r
k , i
d
k , i
s
k , i
D
i
e
k , i
Figure 8.10 Illustration des paramtres dbut et fin dexcution dune tche t
i
.
s
i, k
r
i, k
e
i, k
d
i, k
e
i, k
s
i, k
C
=
=
=
TR
i, k
e
i, k
r
i, k
=
=
=
=
418
8.2 Modlisation des tches 8 tude avance
des systmes temps rel
Gigue (rgularit dexcution) entre deux instances conscutives de la tche t
i
dnie par la relation :
(8.11)
Gigue maximale de la tche t
i
: G
i
max
k
{g
i,k
}
Gigue minimale de la tche t
i
: G
i,min
min
k
{g
i,k
}
Gigue moyenne de la tche t
i
: G
i,moy
S
k
{g
i,k
}/(k+1)
m Paramtres dynamiques des tches
Au cours de lexcution de linstance dune tche, certains paramtres, qui sont fonc-
tion de linstant t, peuvent tre utiles lordonnanceur. tant donne une tche
avec une dure dexcution C, nous pouvons dnir le temps dexcution restant
C(t) fonction du temps processeur dj allou la tche C
excut
au cours de cette
instance. Ainsi, nous pouvons identier les trois paramtres suivants (gure 8.12) :
le temps dexcution restant C(t) : C(t) C C
excut
le dlai critique dynamique D(t), cest--dire le temps restant avant la prochaine
chance, soit :
(8.12)
la laxit dynamique L(t), cest--dire le temps avant le dbut dexcution de la
tche, soit :
(8.13)
g
i, k
s
i, k+1
s
i, k
( ) T
i
[ ]

T
i
=
=
=
=
t
r
k , i
d
k , i
s
k , i
D
i
e
k , i
TR
k , i
Figure 8.11 Temps de rponse de la k
ime
excution dune tche t
i
.
t
r d
) t ( C
D
) t ( D
t
) t ( L C
Figure 8.12 Paramtres dynamiques de linstance dune tche en cours dexcution.
=
D t ( ) d t =
L t ( ) D t ( ) C t ( ) d t C t ( ) = =
8.2 Modlisation des tches
419


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
Il est intressant danalyser lvolution de ces paramtres dynamiques au cours de
lexcution dune tche. Considrons une tche t
i
possdant les paramtres initiaux
C
i
, D
i
et L
i
(par dnition : L
i
D
i
-C
i
). Dans lintervalle dexcution dune ins-
tance de la tche [r,d], les paramtres dynamiques D(t) et L(t) vont voluer en fonc-
tion de lallocation ou non du processeur cette tche entre les instants [t, t+1]
selon les rgles suivantes :
La tche obtient le processeur pendant lintervalle [t, t+1], nous avons :
et (8.14 )
La tche nobtient pas le processeur pendant lintervalle [t, t+1], nous avons :
et (8.15)
Nous pouvons remarquer que le dlai dynamique diminue toujours dune unit
alors que la laxit diminue uniquement si la tche ne sexcute pas. Prenons un
exemple simple o la tche possde les paramtres initiaux suivants :
, et
Nous allons analyser lvolution des deux paramtres dynamiques D(t) et L(t) en
fonction du temps lors de lexcution de la tche. La gure 8.13 reprsente lvolu-
tion de ces deux paramtres dans un plan (D,L) en considrant deux trajectoires
dexcution de la tche au cours du temps. Le point initial de fonctionnement
de la tche son rveil est (7,5). tant donn les quations 8.14 et 8.15, une che
horizontale reprsente lexcution de la tche (le processeur est allou cette tche)
et la che en diagonale note lattente de la tche. La dure de la tche tant de
2 units de temps, il suft de deux ches horizontales pour terminer lexcution
de la tche. La premire trajectoire dexcution, qui commence par une excution
=
D t 1 + ( ) D t ( ) 1 = L t 1 + ( ) L t ( ) =
D t 1 + ( ) D t ( ) 1 = L t 1 + ( ) L t ( ) 1 =
C
i
2 = D
i
7 = L
i
7 2 5 = =
Dpassement chance tche
L
D
D
i
L
i

1
2
1
excution de la tche
attente de la tche
Fin tche
Figure 8.13 Exemple de lvolution des paramtres dynamiques de linstance
dune tche en cours dexcution.
420
8.2 Modlisation des tches 8 tude avance
des systmes temps rel
de la tche au temps t [0,1], termine son excution au temps t 5. La deuxime
trajectoire dexcution intgre une excution effective au temps t [4,5] ; mais la
deuxime excution nest pas ralise avant lchance ce qui est visualis par linter-
section de la trajectoire avec laxe des abscisses.
m Remarques sur les paramtres temporels des tches
En ce qui concerne les quatre paramtres de base dune tche t
i
(r
i
, C
i
, D
i
, T
i
),
nous pouvons analyser lorigine de leur dtermination :
r
i
: Dans le cas gnral, les tches sont dpart simultan ; mais une tche peut
tre retarde au rveil de lapplication pour prendre en compte par exemple la
prcdence. Ce rveil non simultan est obtenu en insrant au dbut du code de
la tche une primitive de type DELAI .
C
i
: La dure de la tche est directement lie au code de la tche. On value
gnralement la dure dexcution pire cas C
max
et une dure minimale C
min
.
D
i
: Ce paramtre permet au concepteur de limiter le temps de rponse de la
tche. Il peut tre cod au niveau dune tche en utilisant un temporisateur type
chien de garde ou watchdog .
T
i
: Cette priodicit de la tche est xe par les besoins de la fonction : tche de
scrutation ou acquisition (polling)
Ces choix sont donc soit lis aux besoins de lapplication (dbut dexcution, prio-
dicit, dure du code) soit imposs par le concepteur (chance). Aussi, dans la repr-
sentation graphique des paramtres possibles dune tche priodique, nous avons
une limitation due ces choix. Ainsi, viennent sajouter des contraintes temporelles
exprimes dans le cahier des charges de lapplication comme par exemple :
une priode maximale T
max
(T
i
T
max
), correspondant, par exemple, la fr-
quence minimale dchantillonnage ;
une priode minimale T
min
(T
i
T
min
), correspondant par exemple une priode
inutile dacquisition (trop de donnes analyser ou redondance des donnes) ;
une chance maximale D
max
(D
i
D
max
), an dobtenir un meilleur temps de
rponse.
La gure 8.4, reprsentant une tche priodique quelconque, est modie selon ces
nouvelles contraintes.
8.2.3 Modlisation des tches dpendantes
Comme nous lavons dj vu, la dpendance des tches entre elles peut se traduire
de deux manires : une relation de prcdence au niveau de lordre dexcution de
deux ou plusieurs tches ou le partage de ressources critiques. Il est donc ncessaire
de pouvoir modliser ces deux dpendances entre tches.
m Modlisation de la prcdence entre les tches
De faon gnrale, cette prcdence entre tches est mise en uvre laide de pri-
mitives de synchronisations ou communications intgres dans le code des deux
tches. Prenons un exemple simple et considrons que deux tches t
1
et t
2
ne sont pas
=
=
=
=
8.2 Modlisation des tches
421


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
atomiques, cest--dire que ces primitives sont situes lintrieur du code de chacune
des tches (gure 8.15). La squence dexcution, prsente sur la gure 8.15, montre
lattente de lexcution de la partie t
2-1
de la tche t
2
par la partie t
1-2
de la tche
t
1
. Nous avons leffet de la synchronisation de la tche t
1
par la tche t
2
.
La premire tape raliser est la transformation des tches en tches atomiques an
davoir un modle de tches conforme notre tude. Ce travail est simple effectuer,
il consiste dcouper les tches au niveau des primitives de synchronisations (dans
notre exemple : gure 8.16) ou de communications. Ce dcoupage conduit quatre
tches qui ne comportent maintenant aucune primitive bloquante lintrieur du
code, lexception dune primitive dattente qui peut se situer au dbut du code.
Ainsi, nous pouvons donner une rgle gnrale de transformation pour obtenir
des tches sous forme atomique :
D

:

D

l
a
i

c
r
i
t
i
q
u
e

T : priode
Droite D = T
(tche chance sur requte)
T
D
max
C
max
C
max max
T
min
Zone de choix
des paramtres temporels
de la tche
Figure 8.14 Reprsentation graphique des paramtres (D,T) dune tche
caractrise par des contraintes temporelles manant du cahier des charges.

2-1

2-2

1 - 1

2 - 1
t
t

1 - 1

2 - 1

1 - 2

2 2 -
Squence dexcution
tche
1
tche
1
tche
2
tche
2
ATTENDRE_EVT(evt1) SIGNAL_EVT(evt1)
Figure 8.15 Relation de prcdence dexcution entre deux tches :
codes et squences dexcution.
422
8.2 Modlisation des tches 8 tude avance
des systmes temps rel
Attente de synchronisation ou de communication en dbut de tche.
Envoi dvnement de synchronisation ou de communication en n de tche.
Lensemble des quatre tches obtenues est rigoureusement quivalent au niveau de
lexcution lensemble prcdent des deux tches. En revanche, an de signier
clairement, les relations entre ces quatre tches, il est ncessaire dadjoindre ces tches
un graphe de relation, prsent sur la gure 8.17 pour notre exemple. Nous pouvons
noter que nous avons deux types de relations : des liens dexcution traduisant le
dcoupage effectu et le lien de prcdence donn par les primitives initiales.
Une remarque importante peut tre faite au niveau de ce dcoupage en tche atomique
et des primitives de synchronisation. En effet, aprs avoir ralis le dcoupage en
tches atomiques, les primitives de synchronisation ne sont plus utiles si lon associe
aux tches obtenues le graphe de relation. Ce graphe, dit graphe de prcdence,
traduit effectivement toutes les relations ncessaires au comportement correct de
lapplication conforme au comportement initial souhait par le concepteur. Comme
nous lanalyserons dans la suite de ce chapitre, lexistence ou non de ces primitives
d attente au dbut des codes des tches atomiques peut conduire des dysfonc-
tionnements ou anomalies de comportement.
SIGNAL_EVT(evt1)
ATTENDRE_EVT(evt1)
tche
2-2
tche
1-2
tche
2-1
tche
1-1
Figure 8.16 Dcoupage des tches en tches atomiques.

1 - 1
1

2 - 2
lien de prcdence d au dcoupage
lien de prcdence d la synchronisation

2 - 1

-1 2
Figure 8.17 Traduction de la relation de prcdence dexcution
entre deux tches par un graphe de prcdence.
8.2 Modlisation des tches
423


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
m Modlisation du partage de ressources critiques entre tches
Une tche t
i
de dure totale C
i
qui utilise une ressource critique R possde dans son
code une zone protge, appele section critique, pendant laquelle elle accde
cette ressource. Cette section critique Sc
i
est protge par des primitives permettant
de grer lexclusion mutuelle comme un smaphore. Par consquent, en termes de
temps, lexcution de cette tche peut tre dcrite par 3 valeurs (gure 8.18) :
C
i,a
: temps avant la section critique ;
C
i,b
: dure de la section critique (ressource utilise) ;
C
i,g
: temps aprs la section critique.
Ces trois valeurs doivent satisfaire lgalit suivante :
(8.16 )
Si une tche t
i
de dure totale C
i
utilise plusieurs ressources, les sections critiques
doivent tre correctement imbriques. Soit Sc
i,1
(resp. Sc
i,2
) la section critique de
la tche t
i
utilisant la ressource R
1
(resp. R
2
), nous devons avoir lune des conditions
suivantes :
ou ou (8.17 )
Considrons lexemple dune tche t
i
utilisant 3 ressources R
1
, R
2
et R
3
; sa dure
dexcution (C
i
10) peut tre dcrite par le tableau 8.1.
Tableau 8.1 Modle temporelle dune tche
partageant trois ressources critiques avec dautres tches.
Ressource Dure C
i,a
Dure C
i,b
Dure C
i,g
Dure totale C
i
R
1
1 2 7 10
R
2
4 5 1 10
R
3
5 2 3 10
C
i
C
i,
C
i,
C
i,
+ + =
C
i
C =
i,
C +
i,
C +
i,
C
, i
C
, i
C
, i
Utilisation ressource R
(section critique Sc
i
)
Figure 8.18 Reprsentation temporelle dune tche contenant une section critique.
Sc
i, 1
Sc
i, 2
Sc
i, 2
Sc
i, 1
Sc
i, 1
Sc
i, 2
=
=
424
8.2 Modlisation des tches 8 tude avance
des systmes temps rel
La gure 8.19 reprsente cette rpartition des diffrentes sections critiques Sc
i,
, Sc
i,2
et Sc
i,3
sur la dure totale C
i
de la tche. Nous pouvons vrier que ces sections criti-
ques vrient deux deux lune des trois conditions 8.17 :
et et
8.2.4 Analyse dune configuration de tches priodiques
m Charge du processeur
Pour une tche priodique donne t
i
, dnie avec les quatre paramtres de base
(r
i
, C
i
, D
i
, T
i
), nous pouvons dnir les occupations du processeur :
Le facteur dutilisation u comme le pourcentage du processeur ncessaire son
excution sur sa priode T
i
, soit :
(8.18)
Pour une tche priodique donne t
i
, qui nest pas chance sur requte, on
dnit le facteur de charge u
l,i
comme le pourcentage du processeur ncessaire
son excution sur son dlai critique D
i
:
(8.19)
Pour une conguration de n tches priodiques : T {t
1
, t
2
, , t
n
}, on dnit le
facteur dutilisation U (resp. le facteur de charge U
l
) comme la somme des facteurs
dutilisation u
i
des tches (resp. des facteurs de charge des tches u
l,i
) de la con-
guration de tche T :
(8.20)
(8.21)
Sc
i, 3
Sc
i, 2
Sc
i, 1
Sc
i, 2
= Sc
i, 1
Sc
i, 3
=
10 9 8 7 6 5 4 3 2 1
C
i
Utilisation ressource R
2
Utilisation ressources R
2
et R
3
Utilisation ressource R
1
Figure 8.19 Reprsentation temporelle dune tche contenant trois sections critiques.
u
i
C
i
T
i
=
u
i, 1
C
i
D
i
=
=
U u
i
i =1
n

C
i
T
i

i =1
n

= =
U
i
u
i, 1
i =1
n

C
i
D
i

i =1
n

= =
8.2 Modlisation des tches
425


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
Considrons lexemple dune conguration trois tches priodiques dnies par
les paramtres temporels donns dans le tableau 8.2.
Les facteurs dutilisation u
i
et les facteurs de charge u
l,i
de chacune des tches sont
calculs et prsents dans les deux dernires colonnes du tableau 8.2. Le facteur
dutilisation U et le facteur de charge U
l
de la conguration sont donc les sui-
vants :
Nous pouvons noter que les deux facteurs U et U
l
sont identiques si toutes les tches
sont chance sur requte.
De faon vidente, nous avons une condition ncessaire dordonnanabilit de la
conguration dnie partir du facteur dutilisation et du facteur de charge dune
conguration de tches priodiques sexcutant sur une plate-forme monoprocesseur.
Cette condition exprime que lutilisation du processeur ne peut pas dpasser les
100 %, soit lingalit vrier :
(8.22)
m Priode dtude
Pour une conguration de n tches priodiques T {t
1
, t
2
, , t
n
} dpart simul-
tan (i, r
i
0), la squence dexcution se retrouve rgulirement dans une situa-
tion identique au niveau des demandes processeur lorsque toutes les tches sont
nouveau en phase. Ainsi, ltude de la squence dexcution, produite par un algo-
rithme dordonnancement donn, peut se limiter un temps H appel priode
dtude ou mta-priode ou cycle majeur qui est dni par :
(8.23)
Tableau 8.2 Exemple dune configuration de trois tches priodiques.
Tche r
i
C
i
D
i
T
i
u
i
u
l,i

1
0 2 6 6 0,333 0,333

2
0 1 8 8 0,125 0,125

3
0 2 10 12 0,166 0,2
U u
i
i =1
n

C
i
T
i

i =1
n

2
6
---
1
8
---
2
12
------ + +
5
8
--- 0,625 = = = = =
U
l
u
l , i
i =1
n

C
i
D
i

i =1
n

2
6
---
1
8
---
2
10
------ + +
79
120
--------- 0,625 = = = = =
U u
i
i =1
n

C
i
D
i

i =1
n

1 = =
=
=
H PPCM T
i

i 1, n [ ]
=
426
8.2 Modlisation des tches 8 tude avance
des systmes temps rel
Considrons lexemple de la conguration trois tches priodiques dpart simul-
tan dnies par les paramtres temporels donns dans le tableau prcdent 8.2.
La priode dtude est donc :
Ainsi, la squence dexcution se rpte avec une priode H selon un motif dni
lors de la premire priode dtude (gure 8.20).
Si au moins une des tches possde une date de rveil diffrente de celles des autres
tches, alors la squence dexcution commence par une phase dite transitoire
dont la dure maximale H
transitoire
est donne par :
(8.24 )
partir dun instant situ dans lintervalle [0,H
transitoire
], la squence dexcution
va prendre une forme identique celle prcdemment tudie, cest--dire prio-
dique et de priode gale H. Ainsi, la squence dexcution comporte deux phases :
une phase transitoire de dure infrieure ou gale H
transitoire
et une phase station-
naire rpte linni de dure H (gure 8.21).
Considrons lexemple prcdent pour lequel nous avons dcal la date de rveil
de la tche t
2
de 2 (tableau 8.3). La dure maximale de la phase transitoire de la
squence dexcution est donc :
En ralit, lanalyse de la squence dexcution montre que la priodicit H 24
commence ds le dbut de la squence (gure 8.22). En revanche, la squence dex-
cution nest pas la mme que celle de la conguration avec les tches dpart simul-
H PPCM T
i

i 1, 3 [ ]
PPCM 6,8,12 24 = = =
t
H H
Squence dexcution (dure H = PPCM{T
i
})
Figure 8.20 Squence dexcution dune configuration de tches priodiques
dpart simultan.
H
transitoire
Max r
i

i 1, n [ ]
PPCM T
i

i 1, n [ ]
+ =
t
H
Squence dexcution
(H = dure PPCM{T
i
})
Phase transitoire
(dure max max{r
i
} + PPCM{r
i
})
Figure 8.21 Squence dexcution dune configuration de tches priodiques
avec au moins une tche possdant une date de rveil diffrente des autres tches.
H
transitoire
Max r
i

i 1, 3 [ ]
PPCM T
i

i 1, 3 [ ]
+ =
Max 0,2,0 24 2 24 26 = + = + =
=
8.2 Modlisation des tches
427


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
tane (tableau 8.2). Il est important de noter quil existe dautres squences dex-
cution, et que la priodicit de la squence et la dure de la phase transitoire sont
indpendantes de lalgorithme dordonnancement utilis puisquelles sont lies uni-
quement la charge processeur un instant donn.
Si beaucoup de conguration de tches dpart diffr se comporte dun point de
vue priodicit comme la mme conguration de tche mais dpart simultan,
il existe des congurations de tche prsentant des priodicits dexcution qui
commencent aprs une phase transitoire.
Prenons lexemple de la conguration de trois tches dcrite dans le tableau 8.4 qui
possde une priode dtude H 12. La dure maximale de la phase transitoire de
la squence dexcution est donc :
Tableau 8.3 Exemple dune configuration de trois tches priodiques
avec une tche dpart diffre.
Tche r
i
C
i
D
i
T
i

1
0 2 6 6

2
2 1 8 8

3
0 2 10 12
t
t
t
Tches dpart simultan
Tches dpart diffr
t
t
t
H
H

3
30 25 20 15 10 5 0
30 25 20 15 10 5 0
30 25 20 15 10 5 0
30 25 20 15 10 5 0
30 25 20 15 10 5 0
30 25 20 15 10 5 0
Figure 8.22 Comparaisons des squences dexcution dune configuration
de tches priodiques dpart simultan (tableau 8.2) et dpart diffr (tableau 8.3).
=
428
8.2 Modlisation des tches 8 tude avance
des systmes temps rel
Lanalyse de la squence dexcution de la gure 8.23 montre que la phase transitoire
se termine linstant 8, valeur comprise dans lintervalle [0,15]. Ensuite la squence
dexcution est priodique et de priode H 12.
m Temps libre processeur
Avec les notions de charges processeur et de priode dtude, nous pouvons intro-
duire une caractristique supplmentaire dune squence dexcution : le temps
libre T
libre
, ou temps creux ou temps oisif processeur. Ainsi, pour une conguration
de n tches priodiques dpart simultan : T {t
1
, t
2
, , t
n
} sexcutant sur un
systme monoprocesseur, le facteur dutilisation du processeur U tant dnie sur la
priode dtude H, il est possible dvaluer le temps non utilis ou temps libre du
processeur :
(8.25)
Tableau 8.4 Exemple dune configuration de trois tches priodiques
avec une tche dpart diffre qui prsente une phase transitoire au niveau de lexcution.
Tche r
i
C
i
D
i
T
i

1
0 1 4 4

2
1 3 6 6

3
3 1 4 4
H
transitoire
Max r
i

i 1, 3 [ ]
PPCM T
i

i 1, 3 [ ]
+ =
Max 0,1,3 12 15 = + =
=
t
t
t

3
H H
transitoire
H
30 25 20 15 10 5 0
30 25 20 15 10 5 0
30 25 20 15 10 5 0
Figure 8.23 Squence dexcution dune configuration de tches priodiques
dpart diffr (tableau 8.4) comprenant une phase transitoire.
=
T
libre
1 U

( ) H 1 C
i
T
i

i =1
n

( ,
, (
j \
PPCM T
i

i 1, n [ ]
= =
8.2 Modlisation des tches
429


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
Si nous considrons lexemple de conguration du tableau 8.2, les temps libres
processeur, visualiss sur la gure 8.24, sont :
Il est important de remarquer que, travaillant en gnral avec des algorithmes
dordonnancement au plus tt (les temps creux surviennent lorsquaucune tche nest
prte), les temps libres se situeront prfrentiellement en n de squence dexcution.
Ce rsultat peut tre tendu pour une conguration de tches dpart non simul-
tan en considrant uniquement la partie de la squence reproduite linnie (de
dure H) qui se situe aprs la phase transitoire. En effet, des temps libres processeur
peuvent se situer dans la phase transitoire de la squence dexcution correspondant
seulement au fait que les tches ne sont pas dpart simultan.
m Squence sature
Une squence est dite sature si lallocation du processeur est complte (U 1),
cest--dire que la squence ne comporte pas de degr de libert. Ainsi, pour une
conguration de n tches priodiques dpart simultan : T {t
1
, t
2
, , t
n
} sex-
cutant sur un systme monoprocesseur, cela peut sexprimer en fonction des para-
mtres temporels des tches sous la forme suivante :
(8.26 )
La gure 8.25 reprsente une squence dexcution sature pour une conguration
deux tches t
1
(r
1
, C
1
, D
1
, T
1
) et t
2
(r
2
, C
2
, D
2
, T
2
) avec r
1
< r
2
et d
1
< d
2
. Ainsi,
en fonction de la relation 8.26, nous devons vrier :
T
libre
1 0,625 ( ) 24 9 = =
t
t
t

3
t
Temps libre processeur
Pour H, T
libre
= 9
30 25 20 15 10 5 0
30 25 20 15 10 5 0
30 25 20 15 10 5 0
Figure 8.24 Squence dexcution dune configuration de tches priodiques
dpart diffr (tableau 8.4) comprenant une phase transitoire.
=
=
Max d
i

i 1, n [ ]
Min r
i

i 1, n [ ]
C
i
i =1
n

=
d
2
r
1
C
1
C
2
+ =
430
8.2 Modlisation des tches 8 tude avance
des systmes temps rel
m Notion dinstant critique
Dans la suite de ce chapitre, nous allons avoir analyser des congurations de tches
qui peuvent avoir des dparts diffrs. Nous avons vu dans les sections prcdentes
que le fait davoir un dpart diffr dau moins une tche peut avoir une incidence
sur la dure danalyse puisque cela introduit une phase transitoire dans lexcution
de lapplication. De plus les tches peuvent avoir des dates de rveil diffres par
rapport aux autres tches qui voluent lors de plusieurs lancements de lapplication.
Il serait donc intressant de dterminer lordonnanabilit de la conguration dans
la situation de pire cas en ce qui concerne le dpart des tches.
Sans raliser une dmonstration rigoureuse, il est ais de voir que la situation de pire
cas se produit lorsque toutes les tches sont dpart simultan. Ainsi, lordonnan-
abilit dune conguration peut tre vrie lorsque les tches sont toutes dpart
simultan : activation au mme instant appel instant critique (pire cas). Lexemple,
prsent sur la gure 8.26, montre les trois squences dexcution obtenues pour
une conguration de deux tches dont les paramtres sont donns dans le tableau 8.5.
La tche t
1
a une date de rveil qui prend les valeurs 4, 2 et 0. Pour ces diffrentes
valeurs de dates de rveil, nous obtenons respectivement les temps de rponse de la
deuxime tche t
2
gaux 12, 13 et 14. Ainsi, nous pouvons conclure sur cet exemple
que la situation la plus critique pour lexcution de cette conguration se situe
lorsque les deux tches sont en phase.
Ainsi, nous tudierons autant que faire se peut des congurations de tche dpart
simultan (instant critique), sachant que la mme conguration avec un ou plusieurs
dparts diffrs peut conduire une situation ordonnanable. En effet, si une con-
guration de tches est ordonnanable avec les tches dpart simultan, elle le sera
obligatoirement si une ou plusieurs tches sont dpart diffr. En revanche, si une
t
t
t
r
1
r
1
D
2
D
1
C
1
C
2
T
2
T
1
d
2

2
Squence
r
2
r
2
+ T
2
r
1
+ T
1
d
1
d
2
Figure 8.25 Exemple de squence dexcution sature
pour une configuration deux tches priodiques.
8.3 Ordonnancement
des tches indpendantes priodiques
431


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
conguration de tches nest pas ordonnanable avec les tches dpart simultan,
la mme conguration avec des tches dpart diffr peut tre ordonnanable.
8.3 Ordonnancement
des tches indpendantes priodiques
8.3.1 Algorithmes dordonnancement priorits fixes
m Algorithme dordonnancement Rate Monotonic
Dans un contexte de tches indpendantes, priodiques, chance sur requte et
dpart simultan, nous allons effectuer une affectation des priorits aux tches selon
la priode : plus la priode de la tche est petite, plus la priorit de la tche est grande.
La tche conserve cette priorit pendant toute son excution. Cette rgle daffectation
Tableau 8.5 Exemple dune configuration de deux tches priodiques
avec une tche dpart variable.
Tche r
i
C
i
D
i
T
i

1
4,2,0 1 4 4

2
0 10 14 14
t
t
t
t
t
t

1
temps de rponses = 12
temps de rponses = 13
temps de rponses = 14
Figure 8.26 Exemple de squences dexcution pour une configuration deux tches priodiques
avec trois dates de rveil diffrentes : analyse de linstant critique.
432
8.3 Ordonnancement
des tches indpendantes priodiques
8 tude avance
des systmes temps rel
des priorits est appele lalgorithme dordonnancement Rate Monotonic ou RM .
Concernant cet algorithme dordonnancement pour une conguration de n tches
ayant les paramtres (r
i
, C
i
, D
i
, T
i
) avec r
i
0 pour tout i et D
i
T
i
, nous avons
les rsultats suivants :
lalgorithme dordonnancement RM est optimal dans la classe des algorithmes
priorits xes, cest--dire que, si une conguration de tches est ordonnanable,
elle le sera en affectant les priorits selon RM ;
une condition sufsante dordonnanabilit dune conguration est obtenue
pour un facteur dutilisation U du processeur suivant lingalit suivante :
(8.27)
La gure 8.27 reprsente la variation de la valeur de cette condition sufsante en
fonction du nombre de tches. Nous pouvons faire deux remarques concernant cet
algorithme RM :
lasymptote de la courbe visualise sur la gure 8.27 montre quune congura-
tion de tches indpendantes, priodiques, chance sur requte et dpart
simultan sera ordonnanable si le facteur dutilisation du processeur ne dpasse
pas 69 % ;
la condition tant sufsante, une conguration de tches indpendantes, priodi-
ques, chance sur requte et dpart simultan, dont le facteur dutilisation du
processeur dpasse la valeur obtenue par lquation 8.27, peut tre ordonnanable
avec cette affectation de priorits selon RM.
Prenons lexemple de la conguration trois tches dcrite dans le tableau 8.6. Nous
vrions que nous sommes en prsence dune conguration de tches indpen-
dantes, priodiques, chance sur requte et dpart simultan. Les priorits ont
t affectes selon lalgorithme dordonnancement RM. Le facteur dutilisation U
de cette conguration est donn par :
= =
U C
i
T
i

i =1
n

= n 2
1
n
---
1
( ,
, (
j \

U : facteur dutilisation
n : nombre de tches
3 2 1
0,69
0,78
1
0,82
Figure 8.27 Reprsentation de la condition suffisante dordonnanabilit
dune configuration traite avec lalgorithme RM.
8.3 Ordonnancement
des tches indpendantes priodiques
433


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
Par consquent, nous pouvons en dduire que cette conguration de tches est
ordonnanable. Nous pouvons construire une partie de la squence qui aura pour
priode H :
Cette squence, reprsente sur la gure 8.28, montre en particulier les trois premp-
tions de la tche de plus faible priorit t
3
alors que la tche de plus forte priorit t
1
sexcute ds sa demande (dates de rveil).
Nous pouvons noter aussi la prsence de temps libres du processeur qui sur lensemble
de la priode dtude sont :
Tableau 8.6 Exemple dune configuration de trois tches priodiques
avec une affectation des priorits selon RM.
Tche r
i
C
i
D
i
T
i
Priorit
selon RM

1
0 20 100 100 3

2
0 40 150 150 2

3
0 100 350 350 1
U C
i
T
i

i =1
3

20
100
---------
40
150
---------
100
350
--------- + + = = 0,75 3 2
1
3
---
1
( ,
, (
j \
0,779
H PPCM T
i

i 1 3 , [ ]
PPCM 100,150,350

2100 = = =
t

1
300 200 100
300 200 100
300 200 100
300
200 100
t

2
t

3
Premption de la tche 3
t

libre
Figure 8.28 Exemple dune partie de la squence dexcution
dune configuration de trois tches traite avec lalgorithme RM.
T
libre
1 0,75238 ( ) 2100 520 = =
434
8.3 Ordonnancement
des tches indpendantes priodiques
8 tude avance
des systmes temps rel
La condition, exprime par lquation 8.27, est trs restrictive (valeur minimale de U).
Nous pouvons utiliser le thorme de la zone critique qui exprime le fait que si toutes
les tches sont dpart simultane et si elles respectent leur premire chance
alors la conguration est ordonnanable quel que soit linstant darrive des tches
dans la suite. Cette condition est ncessaire et sufsante si toutes les tches sont
dpart simultan et sufsante si les tches sont dpart diffr.
Un ensemble de n tches T {t
1
, t
2
, , t
n
} ordonnes suivant les priorits (t
1
la
tche la plus prioritaire et t
n
la tche la moins prioritaire) dnies par les param-
tres temporels (r
i
, C
i
, D
i
, T
i
) est ordonnanable si et seulement si :
(8.28)
Cette condition correspond tester intervalle de temps par intervalle de temps la
possibilit dexcuter les diffrentes tches. La valeur ,t/T
j
] correspond au nombre
de rveils de la tche t
j
dans lintervalle de temps [0,t]. Le terme C
j
,t/T
j
] repr-
sente la demande processeur de la tche t
j
dans ce mme intervalle. Le temps pro-
cesseur demand jusqu linstant t par la tche t
j
et toutes les tches t
j
de plus
forte priorit (j [0,i-1]) doit tre infrieur lchance d
i
(D
i
T
j
) de la tche t
i
,
soit :
Prenons lexemple de la conguration trois tches dcrite dans le tableau 8.7.
Nous vrions que nous sommes en prsence dune conguration de tches ind-
pendantes, priodiques, chance sur requte et dpart simultan. Les priorits
ont t affectes selon lalgorithme dordonnancement RM. Le facteur dutilisation
U de cette conguration est donn par :
La condition sufsante vue prcdemment nest pas satisfaite. Pour savoir si cette
conguration est ordonnanable, il est donc ncessaire de procder une simulation
complte sur la priode dtude (H 24) ou dutiliser la condition, dite de la zone
critique exprime par lquation 8.28. Le calcul est effectu jusquau temps D
i

chaque nouvelle activation dune tche pour les trois tches de la conguration. Ainsi,
pour la premire tche avec D
1
4, nous avons :
pour
=
i 1 i n min
0 t D
i

C
j
t
-----
j =1
i


t
T
j
------ , 1
=
C
j

j =1
i 1

t
T
j
----- C
i
+ D
i

U C
i
T
i

i=1
3

1
4
---
2
6
---
2
8
--- + + = = 0,833 3 2
1
3
---
1
( ,
, (
j \
> 0,779
=
=
C
1
t
------
t
T
1
------ t 4 =
1
4
---
4
4
---
1
4
--- = minimum 1
8.3 Ordonnancement
des tches indpendantes priodiques
435


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
Pour la deuxime tche avec D
2
6, nous avons le minimum infrieur ou gal 1 :
pour
pour
Pour la deuxime tche avec D
3
8, nous avons le minimum infrieur ou gal 1 :
pour
pour
pour
Nous pouvons donc conclure que la conguration est ordonnanable sans avoir
construire la squence, reprsente sur la gure 8.29, sur la priode dtude H 24.
Tableau 8.7 Exemple dune configuration de trois tches priodiques
avec une affectation des priorits selon RM.
Tche r
i
C
i
D
i
T
i
Priorit
selon RM

1
0 1 4 4 3

2
0 2 6 6 2

3
0 2 8 8 1
=
C
1
t
------
t
T
1
------
C
2
t
------
t
T
2
------ + t 4 =
1
4
---
4
4
---
2
4
---
4
6
--- +
3
4
--- = 1
t 6 =
1
6
---
6
4
---
2
6
---
6
6
--- +
2
3
--- = 1
=
C
1
t
------
t
T
1
------
C
2
t
------
t
T
2
------
C
3
t
------
t
T
3
------ + + t 4 =
1
4
---
4
4
---
2
4
---
4
6
---
2
4
---
4
8
--- + +
5
4
--- = 1 >
t 6 =
1
6
---
6
4
---
2
6
---
6
6
---
2
6
---
6
8
--- + + 1 = 1 =
t 8 =
1
8
---
8
4
---
2
8
---
8
6
---
2
8
---
8
8
--- + + 1 = 1 =
=
t

3
4 2 0 2 6 1 2 1 8 4
t
4 2 0 2 6 1 2 1 8 4
t
4 2 0 2 6 1 2 1 8 4

libre t
4 2 0 2 6 1 2 1 8 4
Figure 8.29 Squence dexcution dune configuration de trois tches
donne dans le tableau 8.7 et traite avec lalgorithme RM.
436
8.3 Ordonnancement
des tches indpendantes priodiques
8 tude avance
des systmes temps rel
m Algorithme dordonnancement Deadline Monotonic
Sil existe au moins une tche qui nest pas chance sur requte dans la congura-
tion des tches, alors nous allons utiliser un algorithme daffectation des priorits
bas sur les dlais critiques des tches au lieu des priodes. Cet algorithme dordon-
nancement, appel Deadline Monotonic ou DM (ou Inverse Deadline ou ID),
affecte la priorit la plus grande la tche dont le dlai critique est le plus petit.
Concernant cet algorithme dordonnancement pour une conguration de n tches
ayant les paramtres (r
i
, C
i
, D
i
, T
i
) avec r
i
0 pour tout i et au moins un dlai cri-
tique D
i
diffrent de la priode T
i
, nous avons les rsultats suivants :
lalgorithme dordonnancement DM est optimal dans la classe des algorithmes
priorits xes, cest--dire que, si une conguration de tches est ordonnanable,
elle le sera en affectant les priorits selon DM ;
une condition sufsante dordonnanabilit dune conguration est obtenue
pour un facteur de charge U
l
du processeur suivant lingalit suivante :
(8.29)
Prenons lexemple de la conguration deux tches dcrite dans le tableau 8.8.
Nous vrions que nous sommes en prsence dune conguration de tches ind-
pendantes, priodiques et dpart simultan. Les priorits ont t affectes selon
lalgorithme dordonnancement DM. Le facteur dutilisation U et le facteur de
charge U
l
de cette conguration sont donns par :
Par consquent, nous ne pouvons pas en dduire que cette conguration de tches
est ordonnanable. Nous pouvons mme remarquer que le facteur de charge est
suprieur 1, mais que le facteur dutilisation reste infrieur 1 (condition nces-
saire pour toutes congurations de tches sexcutant sur un environnement mono-
processeur). Pour vrier lordonnanabilit de cette conguration nous devons
construire la partie de la squence sur la priode dtude H 6.
Cette squence, reprsente sur la gure 8.30, montre en particulier les zones dex-
cution impossible qui se situent au-del de lchance de la tche t
2
.
=
U
l
C
i
i =1
n

D
i
= n 2
1
n
---
1
( ,
, (
j \

U C
i
T
i

i =1
2

1
2
---
1
3
--- + = = 0,833 1
U
l
C
i
i =1
2

D
i

1
2
---
1
1
--- + 1,5 = = = n 2
1
n
---
1
( ,
, (
j \
> 0,82 =
=
8.3 Ordonnancement
des tches indpendantes priodiques
437


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
m Comparaison des algorithmes dordonnancement
Rate Monotonic et tourniquet
Nous avons vu dans le chapitre 4 un ordonnancement classique de type tourniquet
ou Round Robin. Les systmes dordonnancement priorit utilisent pour grer des
tches dans une mme le de priorit un ordonnancement de type tourniquet ,
comme ce qui est nonc dans la norme POSIX (chapitre 5). Dans le cadre de notre
tude o la priorit est affecte en fonction des paramtres temporels de la tche,
il est intressant de comparer lordonnancement tourniquet et lordonnancement
priorit xe de type RM et leur couplage.
Sans approfondir une approche thorique, tudions deux exemples et comparons les
ordonnancements dans les deux cas. Il est important de noter que lordonnancement
tourniquet est trs dpendant des deux paramtres : gestion de la le dattente
et quantum daffectation processeur. La le dattente sera gre selon une le de type
FIFO. De plus nous supposons dans nos exemples que le quantum est x par le
pas de temps discret dexcution des tches 1 . Remarquons aussi que, dans le cas
de lordonnancement tourniquet , la notion de priode dtude nest plus consi-
drer tant donn la gestion de la le dattente asynchrone des priodes des tches.
Prenons lexemple de la conguration deux tches dcrite dans le tableau 8.9. Nous
vrions que nous sommes en prsence dune conguration de tches indpen-
dantes, priodiques, chance sur requte et dpart simultan. Les priorits ont
t affectes selon lalgorithme dordonnancement RM et le facteur dutilisation est
U 0,94. La le dattente du tourniquet est ordonne au dpart avec la tche t
1
en premier et la tche t
2
en second. Dans ces conditions, le trac de la squence
Tableau 8.8 Exemple dune configuration de deux tches priodiques
avec une affectation des priorits selon DM.
Tche r
i
C
i
D
i
T
i
Priorit
selon DM

1
0 1 2 2 1

2
0 1 1 3 2
t

1
6 3

2
t
6 3
Figure 8.30 Squence dexcution dune configuration de deux tches
donne dans le tableau 8.8 et traite avec lalgorithme DM.
=
438
8.3 Ordonnancement
des tches indpendantes priodiques
8 tude avance
des systmes temps rel
dexcution montre que la squence dexcution, base sur lordonnancement RM,
ne permet pas de respecter les chances (tche t
2
choue).
De cet exemple, nous pouvons conclure que lalgorithme bas sur le tourniquet per-
met dordonnancer plus de congurations que lalgorithme RM. Mais, considrons
lexemple de la conguration trois tches dcrite dans le tableau 8.10. Nous vri-
ons que nous sommes en prsence dune conguration de tches indpendantes,
priodiques, chance sur requte et dpart simultan. Les priorits ont t affectes
selon lalgorithme dordonnancement RM avec une libert de choix pour les tches
t
2
et t
3
. Le facteur dutilisation est U 0,88. La le dattente du tourniquet est
compose au dpart des tches t
1
en premier, ensuite t
2
et enn t
3
en dernier. Dans
ces conditions, le trac de la squence dexcution montre que la squence dex-
cution, base sur lordonnancement tourniquet , ne permet pas de respecter
les chances (tche t
1
choue).
Tableau 8.9 Exemple dune configuration de deux tches priodiques
avec une affectation des priorits selon RM :
comparaison des ordonnancements tourniquet et RM.
Tche r
i
C
i
D
i
T
i
Priorit
selon RM

1
0 3 6 6 2

2
0 4 9 9 1
t

1
5 1 5

2
t
0 1
5 1 5 0 1
Squence dexcution RR
Squence dexcution RM
Dpassement dcheance
t

1
5 1 5

2
t
0 1
5 1 5 0 1
Figure 8.31 Squence dexcution dune configuration de deux tches donne
dans le tableau 8.9 et traite avec les deux algorithmes RM et tourniquet .
=
8.3 Ordonnancement
des tches indpendantes priodiques
439


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
partir de ce deuxime exemple, nous pouvons donc conclure que lalgorithme RM
permet dordonnancer plus de congurations que lalgorithme bas sur le tourniquet.
En ralit de nombreuses applications peuvent tre ordonnances la fois par lalgo-
rithme RM et lalgorithme tourniquet .
Dans le cadre dune utilisation couple des deux algorithmes dordonnancement,
tous les rsultats, obtenus dans le cas de lalgorithme RM (conditions dordonnana-
bilit, priode dtude), peuvent sappliquer lorsque les tches ont une priorit
affecte selon RM et pour une mme priorit (mme priode : cas des tches t
2
et t
3
de la conguration du tableau 8.10) un ordonnancement tourniquet.
Tableau 8.10 Exemple dune configuration de trois tches priodiques
avec une affectation des priorits selon RM :
comparaison des ordonnancements tourniquet et RM.
Tche r
i
C
i
D
i
T
i
Priorit
selon RM

1
0 2 3 3 3

2
0 1 9 9 2

3
0 1 9 9 1
t

1
5

2
t
10
5 10
5 10
5 10
5 10
5 10
t
3
t

2
t
t

3
Dpassement d chance
Squence d'excution RM
Squence d'excution RR
Figure 8.32 Squence dexcution dune configuration de deux tches donne
dans le tableau 8.10 et traite avec les deux algorithmes RM et tourniquet .
440
8.3 Ordonnancement
des tches indpendantes priodiques
8 tude avance
des systmes temps rel
8.3.2 Algorithmes dordonnancement priorits variables
Nous avons jusqu prsent considr que la priorit affecte une tche restait cons-
tante pendant toute la dure de lapplication. Nous allons nous intresser une
autre catgorie dalgorithme dordonnancement pour laquelle la priorit des tches
varie au cours de lexcution dune tche. Cette priorit est fonction dune caract-
ristique temporelle dynamique de la tche.
m Algorithme dordonnancement Earliest Deadline First
Dans le cas de lalgorithme Earliest Deadline First ou EDF, la priorit des tches
est variable au cours de leur excution et fonction de la prochaine chance. Pour
une instance k dune tche t
i
, la priorit est lie la prochaine chance d
i,k
de
cette tche. un instant t, la priorit peut tre calcule partir du dlai critique
dynamique D
i
(t) qui sexprime sous la forme :
Nous pouvons faire les deux remarques suivantes :
la priorit est variable, elle change au cours de lexcution ;
la priorit augmente si le dlai critique dynamique de la tche diminue.
Considrons lexemple de la conguration trois tches dcrite dans le tableau 8.11.
Nous vrions que nous sommes en prsence dune conguration de tches ind-
pendantes, priodiques, chance sur requte et dpart simultan. Les priorits
initiales ont t affectes en fonction du dlai critique qui correspond la premire
chance. Le facteur dutilisation de la conguration est U 0,983 et la priode
dtude est H 60. Par consquent le temps libre est de 1. Cette conguration nest
pas ordonnanable par lalgorithme priorit xe RM comme le montre le dia-
gramme de Gantt de la gure 8.33. Par consquent, tant donn la proprit dopti-
malit de lalgorithme RM, cette conguration nest ordonnanable par aucun algo-
rithme priorit xe. En revanche, la gure 8.34 prsente la squence dexcution
de cette conguration sur une partie de la priode dtude. Lvolution du dlai
critique dynamique, qui conditionne la priorit des tches, est note sur chaque
squence.
Comme pour les algorithmes priorit xe, nous disposons dune condition dordon-
nanabilit pour lalgorithme EDF. Pour une conguration de tches indpendantes,
priodiques, chance sur requte et dpart simultan, la condition ncessaire
et sufsante dordonnanabilit est exprime par :
(8.30)
Lexpression 8.30 montre la puissance dordonnanabilit de lalgorithme EDF puis-
que le processeur peut tre utilis 100 % et la conguration valide formellement.
Lalgorithme EDF est optimal dans la catgorie des algorithmes priorit variable.
D
i
t ( ) d
i, k
t r
i, k
D
i
t + = =
=
=
U C
i
T
i

i =1
n

1 =
8.3 Ordonnancement
des tches indpendantes priodiques
441


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel

Pour tester lordonnanabilit dune conguration de tches dont au moins une nest
pas chance sur requte, il est possible dutiliser une analyse base sur loccupation
du processeur. Pour lalgorithme EDF, cette condition ncessaire et sufsante dordon-
nanabilit est la suivante : Pour une longueur de squence H correspondant la
plus petite squence dexcution totalement occupe, dite priode dactivit (U 1),
nous devons avoir la relation suivante :
Tableau 8.11 Exemple dune configuration de trois tches priodiques
pour ltude de lordonnancement EDF.
Tche r
i
C
i
D
i
T
i
Priorit
selon D
i

1
0 1 3 3 3

2
0 1 4 4 2

3
0 2 5 5 1
t

3
8 4
t
8 4
t
8 4
chance dpasse
Figure 8.33 Squence dexcution dune configuration de trois tches
donne dans le tableau 8.11 et traite avec lalgorithme RM : non ordonnanable.
4 3 4 4 2 3 4 2 3 4 3 4 3 4
D
1
) t (
t

3
4 2 0 2 6 1 2 1 8 4
t
4 2 0 2 6 1 2 1 8 4
t
4 2 0 2 6 1 2 1 8 4
D
2
) t (
D
3
5 2 3 4 5 2 3 4 5 2 3 4 5 2 3 4 5 ) t ( 2 3 4
3 3 3 3 3 3 3 2 3 3
Figure 8.34 Squence dexcution dune configuration de trois tches
donne dans le tableau 8.11 et traite avec lalgorithme EDF : ordonnanable.
=
442
8.3 Ordonnancement
des tches indpendantes priodiques
8 tude avance
des systmes temps rel
(8.31)
Il est trs important de noter quune conguration de tches dont certaines ne
sont pas chance sur requte peut ne pas tre ordonnanable par EDF mme si
le facteur dutilisation du processeur est infrieur 1.
Considrons lexemple de la conguration trois tches dcrite dans le tableau 8.12.
Nous vrions que nous sommes en prsence dune conguration de tches ind-
pendantes, priodiques et dpart simultan. Les priorits initiales ont t affectes
en fonction du dlai critique qui correspond la premire chance. Le facteur
dutilisation de la conguration est U 1 et la priode dtude est H 12. En
revanche, le facteur de charge est de U
l
1,233. La gure 8.35 montre que la con-
guration nest pas ordonnanable par EDF.
Il est aise de sattendre ce que la squence choue puisque le facteur dutilisation
de la conguration tait 100 % et le dernier temps horloge de la squence tait
inutilisable (hors chances). De mme ce rsultat de non ordonnanabilit
pouvait tre prouv partir de lquation 8.30 qui scrit dans ce cas sous la forme :
pour ,
Tableau 8.12 Exemple dune configuration de trois tches priodiques
pour ltude de lordonnancement EDF avec des tches qui ne sont pas chance sur requte.
Tche r
i
C
i
D
i
T
i
Priorit
selon D
i

1
0 1 2 3 3

2
0 1 3 4 2

3
0 2 5 6 1
h H h
h D
i

T
j
---------------- 1 +
( ,
j \
i =1
n

C
i
,
= =
=
t
1

3
2 1 0 1 8 6 4 2
t
2 1 0 1 8 6 4 2
t
2 1 0 1 8 6 4 2
chance dpasse
Figure 8.35 Squence dexcution dune configuration de trois tches
donne dans le tableau 8.12 et traite avec lalgorithme EDF : non ordonnanable.
h 11 =
11 2 ( ) 3 1 + [ ] 1 11 3 ( ) 4 1 + [ ] 2 11 5 ( ) 6 1 + [ ] 1 + + 12 =
8.3 Ordonnancement
des tches indpendantes priodiques
443


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
m Algorithme dordonnancement Minimum Laxity
Dans le cas de lalgorithme Minimum Laxity ou ML (ou Least Laxity LL),
la priorit des tches est variable au cours de leurs excutions et fonction de la laxit
dynamique. Pour une instance k dune tche t
i
, la priorit est lie la laxit dyna-
mique L
i,k
(t) de cette tche. un instant t, la priorit peut tre calcule partir de :
(8.32)
Il est important de noter que les deux expressions 8.32 donnent le mme rsultat
au niveau de lordonnancement. Cet algorithme ML a les mmes caractristiques
que lordonnancement EFD : optimalit et ordonnanabilit.
Pour illustrer cet algorithme ML et le comparer lensemble des algorithmes que
nous avons vu, tudions un exemple de conguration trois tches dcrite dans le
tableau 8.13. Nous vrions que nous sommes en prsence dune conguration de
tches indpendantes, priodiques et dpart simultan. Le facteur dutilisation de
la conguration est U 0,93 et la priode dtude est H 12. Les priorits initiales
ont t reportes dans le tableau 8.14. Dans le cas des algorithmes priorits
variables (EDF et ML), les priorits sont des priorits initiales dtermines selon le
dlai critique et la laxit.
tant donn que les tches ne sont pas chance sur requte, il est inutile dutiliser
lalgorithme RM ; il est ici tudi titre dexemple. La gure 8.36 montre les quatre
squences dexcution obtenues avec les quatre algorithmes. La conguration nest
pas ordonnanable avec les algorithmes priorit xe RM et DM. En revanche, les
squences traces avec EDF et ML sont valides.
Tableau 8.13 Exemple dune configuration de trois tches priodiques indpendantes.
Tche r
i
C
i
D
i
T
i

1
0 1 3 3

2
0 1 4 4

3
0 2 3 6
Tableau 8.14 Affectation des priorits selon les algorithmes RM, DM, EDF et ML.
Tche RM DM EDF ML

1
3 3 3 2

2
2 1 1 1

3
1 2 2 3
L
i
t ( ) d
i, k
C
i
t ( ) t r
i, k
D
i
C
i
t ( ) t + = =
ou L
i
t ( ) d
i, k
C
i
t r
i, k
D
i
C
i
t + = =
= =
444
8.3 Ordonnancement
des tches indpendantes priodiques
8 tude avance
des systmes temps rel
Si la capacit dordonnanabilit des deux algorithmes priorit variable EDF et ML
est identique, les squences obtenues dans les deux cas peuvent tre trs diffrentes et
en particulier en ce qui concerne les changements de contexte. Ainsi, lalgorithme
ML gnre de faon intempestive des changements de contexte inutiles en augmen-
tant ainsi le temps systme. Prenons lexemple de deux tches priodiques, indpen-
dantes, chance sur requte et dpart simultan (tableau 8.15).
Tableau 8.15 Exemple dune configuration de deux tches priodiques indpendantes.
Tche r
i
C
i
D
i
T
i

1
0 5 10 10

2
0 4 9 9
t
t
t
t
chance non respect pour
2
chance non respect pour
3
Squence ML
Squence ED
Squence RM
Squence DM
Figure 8.36 Squence dexcution dune configuration de trois tches
donne dans le tableau 8.12 et traite avec les quatre algorithmes RM, DM, EDF et ML.
t
1

2
4 2 0 2 6 1 2 1 8 4
t
4 2 0 2 6 1 2 1 8 4
ED
ML
t
1

2
4 2 0 2 6 1 2 1 8 4
t
4 2 0 2 6 1 2 1 8 4
L
i
1 2 2 3 3 4 4 5 ) t (
L
i
1 2 2 3 3 4 4 5 5 ) t (
Figure 8.37 Comparaison des squences dexcution dune configuration de deux tches
donne dans le tableau 8.15 et traite avec les deux algorithmes EDF et ML.
8.3 Ordonnancement
des tches indpendantes priodiques
445


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
Le facteur dutilisation de la conguration est U 0,94 et la priode dtude est
H 90. Cette conguration est ordonnanable par les deux algorithmes, mais les
deux squences produites sont trs diffrentes. En effet, comme nous pouvons le voir
sur la gure 8.37, la squence obtenue par lalgorithme ML contient plus de 5 fois
plus de changements de contexte que celle construite avec lalgorithme EDF.
Cet inconvnient de lalgorithme ML conduit prfrer lalgorithme EDF en envi-
ronnement monoprocesseur. En revanche, dans un environnement multiprocesseur,
nous tudierons lefcacit de lalgorithme ML.
m Analyse graphique de lordonnanabilit dune configuration de tches indpendantes
Dans la reprsentation graphique des paramtres possibles dune tche priodique
prsente sur la gure 8.4 et la limitation due aux contraintes temporelles, exprimes
dans le cahier des charges de lapplication, illustre sur la gure 8.14, nous pouvons
ajouter le fait que la tche sexcute dans un environnement multitche et donc
restreindre encore la zone graphique des paramtres autoriss pour une tche dans
une conguration ordonnanable. Cette reprsentation graphique dune tche prio-
dique offre alors un domaine de choix plus limit pour le concepteur (gure 8.38).
Il est important de noter que T
U
correspond la valeur minimale de la priode T
calcule selon la condition ncessaire U 1.
Prenons lexemple de trois tches priodiques, indpendantes et dpart simultan
(tableau 8.16). Pour les deux paramtres de la tche t
3
la valeur maximale, le fac-
teur dutilisation de la conguration est U 0,75. En, considrant la condition
ncessaire du facteur dutilisation du processeur 100 %, la priode minimale de
la tche t
3
est T
u
6. Lalgorithme dordonnancement utilis est DM. Dans cette
conguration, le concepteur peut choisir parmi les 11 points possibles au niveau des
deux paramtres D et T de la tche t
3
.
Tableau 8.16 Exemple dune configuration de trois tches priodiques indpendantes,
la troisime tche ayant des paramtres prciser.
Tche r
i
C
i
D
i
T
i

1
0 2 12 12

2
0 2 4 8

3
0 3 7 9
=
=
=
=
=
446
8.3 Ordonnancement
des tches indpendantes priodiques
8 tude avance
des systmes temps rel
C
max
C
max
T
min
T
max
D
max
T
U
D

:

D

l
a
i

c
r
i
t
i
q
u
e
Droite D = T
(tche chance sur requte)
T : priode
Zone de choix
des paramtres temporels
correspondant la spcification
Zone de choix
des paramtres temporels
correspondant la modlisation
Zone de choix
des paramtres temporels
correspondant lordonnanabilit
Figure 8.38 Reprsentation graphique du choix des paramtres
conditionne par lordonnanabilit de la configuration.
C
i,0
D
T
T
max
T
u
9 8 7 6 4 3 5
D
max
= 7
C
i
,0 = 3
8
9
4
5
6
Figure 8.39 Reprsentation graphique dune tche priodique avec la zone de
choix possible des paramtres de la tche t
3
en conservant lordonnanabilit
de la configuration dcrite dans le tableau 8.16.
8.4 Ordonnancement
des tches indpendantes apriodiques
447


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
8.4 Ordonnancement
des tches indpendantes apriodiques
Lordonnancement des tches apriodiques est trait dans le cas des tches priodiques
contraintes strictes et des tches apriodiques contraintes relatives ou contraintes
strictes (tches sporadiques). Nous supposons que lordonnancement des tches
priodiques se fait suivant les algorithmes RM, DM ou EDF. Pour rpondre la
demande dvnements dclenchant des tches apriodiques, nous pouvons consi-
drer trois mthodes :
Traitement en arrire plan : les tches apriodiques sont traites pendant les
temps doisivet du processeur.
Traitement par utilisation dun serveur priodique des tches apriodiques
en environnement priorit xe pour les tches priodiques (RM) : en plus de
toutes les tches priodiques, on insre une tche, appele serveur, qui est destine
traiter les tches apriodiques et qui possde diffrentes caractristiques selon
le modle du serveur :
serveur scrutation,
serveur ajournable,
serveur change de priorit,
serveur sporadique,
serveur vol de temps creux,
serveur change de priorit tendu.
Traitement par utilisation dun serveur priodique des tches apriodiques
en environnement priorit variable pour les tches priodiques (EDF) : en
plus de toutes les tches priodiques, on insre une tche, appele serveur, qui est
destine traiter les tches apriodiques et qui possde diffrentes caractristiques :
serveur dynamique change de priorit,
serveur dynamique sporadique,
serveur largeur de bande maximale,
serveur Earliest Deadline Last (EDL),
serveur change de priorit amlior.
Lobjet de cet ouvrage nest pas de faire une description exhaustive de lensemble de
ces techniques de prise en compte des tches apriodiques, mais de donner les prin-
cipes gnraux de ces diffrents traitements en choisissant dans chacune des cat-
gories les plus reprsentatifs.
8.4.1 Traitement en arrire plan des tches apriodiques contraintes relatives
Les tches priodiques tant ordonnances par un algorithme priorit xe comme
RM ou DM (ou ventuellement priorit variable comme EDF), les tches aprio-
diques sont traites pendant les temps doisivet du processeur, mthode appele
aussi vol de temps creux . Lordonnanabilit de la conguration nest nullement
remise en cause puisque les tches apriodiques sont stockes dans une le dattente
gre en FIFO ou par priorit et traite dans le temps libre processeur (gure 8.40).
448
8.4 Ordonnancement
des tches indpendantes apriodiques
8 tude avance
des systmes temps rel
Cette mthode ne permet pas de traiter les tches apriodiques strictes car le temps
de rponse de ces tches traites en arrire plan nest pas born. Aussi, cette mthode
fonctionne correctement si le processeur a un taux de charge pas trop lev.
Prenons lexemple de deux tches priodiques, indpendantes, chance sur requte
et dpart simultan (tableau 8.17). Le facteur dutilisation de la conguration est
U 0,75, valeur infrieure la condition dordonnanabilit pour lalgorithme
dordonnancement RM (quation 8.27). Nous allons tudier le traitement de trois
tches apriodiques contraintes relatives dont les paramtres r
i
et C
i
sont donns
dans le tableau 8.17. Lexcution de ces tches seffectue dans les temps libres lais-
ss par les deux autres tches comme le montre la gure 8.41.
Nous obtenons des temps de rponse qui sont fonction de la charge processeur due
aux tches priodiques, des dates darrive des tches apriodiques et des dures des
traitements de ces tches apriodiques.
En connaissant la charge du systme par les tches priodiques, il est possible dvaluer
le temps de rponse dune tche apriodique en supposant connues sa date darrive
et sa dure dexcution. Ainsi, par dnition les r
i
des tches apriodiques ntant pas
connus, il est ncessaire de faire cette valuation pour toute la squence dexcution
Tableau 8.17 Exemple dune configuration de deux tches priodiques indpendantes
ordonnancer avec larrive de trois tches apriodiques contraintes relatives.
Tche r
i
C
i
D
i
T
i

1
0 1 4 4

2
0 2 6 6

3
0 1

4
4 4

5
13 1
File dattente de priorit faible
File dattente de priorit leve
tches priodiques
tches apriodiques
Processus
RM
FIFO ou priorit
Figure 8.40 Ordonnancement des tches priodiques et apriodiques
dans un traitement en arrire plan.
=
8.4 Ordonnancement
des tches indpendantes apriodiques
449


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
de la conguration (priode dtude H). Nous pouvons donc conclure que cette
mthode de prise en compte des tches apriodiques ne peut concerner que les tches
contraintes non strictes, cest--dire acceptant un temps de rponse non born.
8.4.2 Traitement par serveur priodique des tches apriodiques
en environnement priorit fixe
An de pouvoir limiter le temps de rponse associ aux requtes apriodiques, une
tche priodique spcique, appel serveur, va tre ddie aux traitements de ces
requtes apriodiques. Ce serveur ou ces serveurs sajoutent la conguration de base
des tches priodiques ; il est vident que cet ajout ne doit pas remettre en cause
lordonnanabilit de la conguration qui est suppose en absence de tches apriodi-
ques. Ainsi, ces serveurs traitent les tches apriodiques au moment o ils possdent le
processeur. Nous allons considrer quune tche apriodique t
ap,i
contrainte stricte
est caractrise par les trois paramtres suivants :
C
i
: dure dexcution maximale ;
D
i
: dlai critique, cest--dire le dlai au bout duquel la tche doit tre termine
par rapport la date de rveil ;

min
: distance minimum entre deux occurrences successives de la requte aprio-
dique.
Un ou plusieurs serveurs priodiques scrutation sont affects une ou plusieurs
requtes apriodiques. La dnition des paramtres temporels de ces serveurs dpend
dune part des besoins de lapplication et dautre part des caractristiques du serveur
en termes de paramtres temporels et mode dexcution (priorit, conservation de
sa capacit de traitement).
t

2
4 2 0 2 6 1 2 1 8 4
t
4 2 0 2 6 1 2 1 8 4
t
4 2 0 2 6 1 2 1 8 4

e r b i l
t
4 2 0 2 6 1 2 1 8 4
t
4 2 0 2 6 1 2 1 8 4
R T
3
6 =
R T
4
9 1 =
R T
5
1 1 =

3

4

5
Arrive

apriodique
Traitement

apriodique
Figure 8.41 Exemple dordonnancement des tches priodiques et apriodiques
dans un traitement en arrire plan pour la configuration donne dans le tableau 8.17.
450
8.4 Ordonnancement
des tches indpendantes apriodiques
8 tude avance
des systmes temps rel
m Serveur scrutation
Le premier type de serveur le plus simple est le serveur scrutation. Ce serveur
scrutation est une tche priodique t
s
possdant les paramtres temporels classiques
(r
s
, C
s
, D
s
, T
s
). Ce serveur traite les tches apriodiques quil trouve en attente lors
de son activation ; sil ny a pas de tches en attente, le serveur se suspend et attend
la prochaine priode dactivation. Le point crucial est donc de dterminer les para-
mtres du serveur par rapport aux paramtres temporels de la requte apriodique
stricte servir.
Nous allons nous placer dans le cas o un serveur est affect une requte aprio-
dique stricte donne ; par consquent il est naturel de xer la dure dexcution du
serveur gale la dure de la tche apriodique C
s
C
ap
. Dans le cas o nous avons
requte apriodique stricte, caractrise par une chance D
ap
et une distance mini-
mum entre deux occurrences successives de
min
, les caractristiques du serveur
(D
s
,T
s
) peuvent tre labores dans le cas le plus dfavorable o lactivation du ser-
veur a t demande mais annule car lvnement ntait pas prsent linstant de
lactivation et loccurrence effective de lvnement se produit immdiatement aprs
avec un dcalage trs faible t e (gure 8.42). Dans ce cas extrme pour satisfaire
les contraintes temporelles attaches cette requte, nous devons rsoudre linqua-
tion suivante :
(8.33)
Si nous considrons le serveur comme une tche priodique chance sur
requte (D
s
T
s
), nous avons la relation simplie de lquation 8.33 :
(8.34 )
Il est important de noter que cette dnition des paramtres temporels du serveur
scrutation permet de borner le temps de rponse du service de la tche apriodique
quel que soit sa date doccurrence dans la squence dexcution. Le temps de rponse
est donc gal :
ou (8.35)
Dans ce cadre la dnition des paramtres du serveur en fonction des paramtres
de tche apriodique stricte est donne dans le tableau 8.18. De la mme faon que
pour les tches priodiques (gure 8.38), nous pouvons reprsenter graphiquement
le domaine des valeurs possibles pour ce serveur en fonction des paramtres de la
tche apriodique (gure 8.43). Dans cette reprsentation, il est possible de lire
directement sur le graphique le temps de rponse maximum du serveur.
Prenons lexemple de deux tches priodiques, indpendantes et dpart simultan
(tableau 8.19). En considrant une troisime tche t
s
, serveur scrutation, avec la
valeur maximale de sa priode gale 12, le facteur dutilisation de la conguration
est U 0,7. Avec un facteur dutilisation du processeur 100%, la priode mini-
male de la tche t
s
est T 6. Nous allons tester les deux algorithmes dordonnan-
cement DM et EDF sur cette conguration compose de deux tches priodiques et
=
=
T
s
D
s
D
ap

min
+
=
T
s

D
ap
2
--------
TR
ap
T
s
D
s
+ D
ap
TR
ap
2T
s
D
ap

=
=
8.4 Ordonnancement
des tches indpendantes apriodiques
451


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
Tableau 8.18 Schma dadaptation dun serveur scrutation
pour rpondre une requte apriodique.
Tche
apriodique
Serveur
scrutation
r
i
? 0
C
i
C
ap
C
s
=C
ap
D
i
D
ap
D
s
T
i
(D
min
) T
s
+ D
s
D
ap
D
ap

n i m
t
Serveur
priodique
Requte
apriodique
D
s
t
e
T
s
D
s
Figure 8.42 Analyse temporelle de ladaptation dun serveur scrutation
pour rpondre une requte apriodique.
T
s
T
U
D
s
Zone de choix
des paramtres temporels
correspondant lordonnanabilit
Droite D = T
(tche chance sur requte) Droite D = T =
min
(temps de rponse le plus grand)
Droite D = T = TR
(temps de rponse gal TR)

min

min
-C
max
C
max
C
max
T
min
T
max
D
max
Zone de choix
des paramtres temporels
correspondant la modlisation
Zone de choix
des paramtres temporels
correspondant la spcification
Figure 8.43 Reprsentation graphique du choix des paramtres
pour un serveur scrutation correspondant une requte apriodique.
452
8.4 Ordonnancement
des tches indpendantes apriodiques
8 tude avance
des systmes temps rel
Tableau 8.19 Exemple dune configuration de trois tches priodiques indpendantes,
la troisime tche, serveur scrutation de tches apriodiques, ayant des paramtres prciser.
Tche r
i
C
i
D
i
T
i

1
0 2 8 10

2
0 2 8 8

3
0 3 12
T
max
-C
i,0
T
U
C
i,0
7
3
4
5
6
9 8 7 6 5 12 11 10
D
T
Figure 8.44 Reprsentation graphique du choix des paramtres pour un serveur scrutation
correspondant une requte apriodique stricte : configuration ordonnance avec les priorits
affectes selon lalgorithme DM.
7
3
4
5
6
9 8 7 6 5 12 11 10
C
i,0
T
max
-C
i,0
T
U
T
D
Figure 8.45 Reprsentation graphique du choix des paramtres pour un serveur scrutation
correspondant une requte apriodique : configuration ordonnance par lalgorithme EDF.
8.4 Ordonnancement
des tches indpendantes apriodiques
453


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
dun serveur priodique. Les rsultats au niveau des deux paramtres D et T de la
tche t
s
, prsents respectivement sur les gures 8.44 et 8.45, montrent que le
concepteur peut choisir parmi 20 points possibles pour lordonnancement DM et
23 points pour lordonnancement EDF.
De mme que dans le cas des tches priodiques gres selon lalgorithme Rate
Monotonic, il est possible davoir une autre condition sufsante dordonnanabilit.
Soit un ensemble de n tches priodiques T {
1
,
2
,
3
, ,
i
, ,
n
} dnies par
les paramtres temporels (r
i
, C
i
, D
i
, T
i
) et un ensemble de p serveurs priodiques
{
s1
,
s2
,
s3
, ,
si
, ,
sn
} dnies par les paramtres temporels (r
si
, C
si
, D
si
, T
si
),
la conguration est ordonnanable si :
(8.36 )
Considrons lexemple de deux tches priodiques, indpendantes, chance sur
requte et dpart simultan (tableau 8.20). Une troisime tche priodique est
ajoute la conguration pour traiter les arrives de tches apriodiques. La capacit
de traitement des requtes apriodiques de ce serveur est : une dure dexcution
de 1 (C
s
1) et un temps de rponse maximum de 10 (2T
s
). Le facteur dutilisation
de la conguration complte est U 1, valeur suprieure la condition dordon-
nanabilit pour lalgorithme dordonnancement RM (quation 8.27). La priode
dtude tant H 20, il suft de tester lordonnanabilit de la conguration sur
cette dure. Il est ais de vrier que la conguration de ces trois tches priodiques
est ordonnanable avec lalgorithme RM.
tant donn que la troisime tche est un serveur scrutation de tches apriodiques,
celle-ci ne sexcute pas chaque rveil si aucune requte de traitement apriodique
nest arrive. La gure 8.46 reprsente la squence dexcution avec larrive de deux
requtes apriodiques strictes t
ap,1
(dure C
ap,1
1) et t
ap,2
(dure C
ap,2
2) aux
instants respectifs r
1
5 et r
2
12. La premire tche apriodique stricte a une
Tableau 8.20 Exemple dune configuration de trois tches priodiques indpendantes,
la troisime tche, serveur scrutation de tches apriodiques.
Tche r
i
C
i
D
i
T
i

1
0 4 10 10

2
0 8 20 20

s
0 1 5 5

ap,1
5 1 10

ap,2
12 2 15
U
total
U U
s
+ C
i
T
i

i =1
n

C
ap, j
j =1
p

T
ap, j
n p + ( ) 2
1
n p + ( )
----------------
1
( ,
, (
j \
+ = =
=
=
=
= =
= =
454
8.4 Ordonnancement
des tches indpendantes apriodiques
8 tude avance
des systmes temps rel
chance de 10 par rapport son rveil, ce qui explique les paramtres du serveur
(2T
s
10 D
ap,1
). La deuxime tche apriodique stricte a une chance de 15
tant donn que son temps dexcution est le double de celui du serveur ; il sera
ncessaire davoir deux excutions du serveur pour traiter compltement cette requte
(2T
s
+T
s
15 D
ap,2
).
Le temps de rponse du traitement de ces deux requtes apriodiques strictes, respec-
tivement 1 et 9, montre que les bornes maximales sont respectes. En revanche,
dans le cas de la deuxime tche apriodique stricte, le rveil inutile du serveur au
temps 10, puis larrive de cette requte apriodique stricte au temps 12 conduit
allonger le temps de rponse.
m Serveur ajournable
Par rapport la mthode prcdente, la mthode du serveur ajournable autorise le
serveur conserver sa capacit de traitement pendant toute la priode, cest--dire
quune tche apriodique peut arriver pendant cette dure et tre servie. En dbut de
priode, la charge du serveur est remise dans son tat initial quelle que soit la capacit
utilise. En donnant gnralement une priorit forte au serveur (tche de priode
faible), cela permet de rduire le temps de rponse moyen. Ainsi, lexemple de la
gure 8.47 montre le principe du serveur ajournable (volution de sa capacit de
traitement en fonction du temps) et son application sur larrive de requte aprio-
dique stricte. Pour un serveur de caractristiques temporelles (0, C
s
2, D
s
4,
T
s
4), seule la dernire tche apriodique nest pas traite immdiatement. Par rap-
port au serveur scrutation, le temps de rponse la requte apriodique est rduit
son minimum puisque le serveur peut prendre en compte cette tche apriodique
tout instant de lexcution. La seule condition requise est que la capacit du serveur
soit en adquation avec la dure dexcution de la tche apriodique.
Considrons lexemple de deux tches priodiques, indpendantes, chance sur
requte et dpart simultan (tableau 8.21). Une troisime tche priodique est
=
=
t
t
t
t
t

2
0 2 5

s
5 1 0 1
0 2 5 5 1 0 1
0 2 5 5 1 0 1
0 2 5 5 1 0 1
0 2 5 5 1 0 1
R T
s
9 =
R T
s
1 =
Arrive

apriodique
Traitement

apriodique
Figure 8.46 Exemple de lexcution de la configuration de tches
donne dans le tableau 8.20 : ordonnancement avec lalgorithme RM.
= =
=
8.4 Ordonnancement
des tches indpendantes apriodiques
455


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
ajoute la conguration pour traiter les arrives de tches apriodiques strictes.
La capacit de traitement des requtes apriodiques strictes de ce serveur ajournable
est : une dure dexcution de 2 (C
s
2). Le facteur dutilisation de la conguration
complte est U 0,87, valeur suprieure la condition dordonnanabilit pour
lalgorithme dordonnancement RM (quation 8.27). La priode dtude tant
H 168, il est ncessaire de tester lordonnanabilit de la conguration sur cette
dure. Il est ais de vrier que la conguration de ces trois tches priodiques est
ordonnanable avec lalgorithme RM. La gure 8.48 prsente une partie seulement
de cette squence dexcution selon un ordonnancement RM. Dans ce test dordon-
nanabilit, il est important de remarquer que le serveur sexcute chaque rveil
et ds linstant de son rveil tant donn sa priorit suprieure aux deux autres tches.
Pour analyser la rponse de ce serveur ajournable des requtes apriodiques strictes,
nous considrons trois demandes dexcution de tches apriodiques strictes dnies
par : t
ap,1
(r
ap,1
1, C
ap,1
2), t
ap,2
(r
ap,2
12, C
ap,2
2) et t
ap,3
(r
ap,3
18,
C
ap,3
1). La gure 8.49 montre lacceptation immdiate de ces requtes aprio-
diques strictes par le serveur ajournable avec un temps de rponse minimum gal
aux dures de traitements des tches apriodiques strictes. Le serveur sexcute donc
des instants non prvisibles de sa priode.
En consquence, le serveur ayant une priorit forte et conservant sa capacit dexcu-
tion au cours de sa priode, il y a contradiction avec lalgorithme dordonnancement :
une tche de priorit forte activable doit sexcuter . Ce problme peut conduire
des dpassements dchance. Ainsi, considrons trois requtes dexcution de
Tableau 8.21 Exemple dune configuration de trois tches priodiques indpendantes,
la troisime tche, serveur ajournable de tches apriodiques.
Tche r
i
C
i
D
i
T
i

1
0 2 7 7

2
0 8 8 8

S
0 2 6 6
t
2
1
0 2 5 5 1 0 1
t
t
0 2 5 5 1 0 1
0 2 5 5 1 0 1
Capacit
s

Arrive

apriodique
Traitement

apriodique
Figure 8.47 Reprsentation du principe de fonctionnement du serveur ajournable
avec la visualisation de sa capacit de traitement.
=
=
=
= = = = =
=
456
8.4 Ordonnancement
des tches indpendantes apriodiques
8 tude avance
des systmes temps rel
tches apriodiques strictes dnies par : t
ap,1
(r
ap,1
1, C
ap,1
2), t
ap,2
(r
ap,2
7,
C
ap,2
2) et t
ap,3
(r
ap,3
12, C
ap,3
2). La gure 8.50 montre lacceptation imm-
diate de ces requtes apriodiques par le serveur ajournable. Cette acceptation
nimporte quel instant de la squence dexcution conduit la tche priodique t
2

dpasser son chance.
De mme que dans le cas des tches priodiques gres selon lalgorithme Rate
Monotonic, il est possible davoir une autre condition sufsante dordonnanabi-
lit dans le cas de lalgorithme RM associ au serveur ajournable. Soit un ensemble de
n tches priodiques {t
1
, t
2
, t
3
, , t
i
, , t
n
} dnies par les paramtres temporels
(r
i
, C
i
, D
i
, T
i
) et un serveur priodique t
s
dnie par les paramtres temporels
(r
s
, C
s
, D
s
, T
s
) avec U
s
C
s
/T
s
, la conguration est ordonnanable si :
avec (8.37)
t
t
t
t

2
20 5 5 1 0 1
20 5 5 1 0 1

s
20 5 5 1 0 1

libre
20 5 5 1 0 1
Figure 8.48 Exemple de lexcution de la configuration de tches
donne dans le tableau 8.21 : ordonnancement avec lalgorithme RM.
t
t
t
t
t
t
0 2 5 5 1 0 1
0 2 5 5 1 0 1
0 2 5 5 1 0 1
0 2 5 5 1 0 1
0 2 5 5 1 0 1
0 2 5 5 1 0 1

2
1

libre

2
Capacit
s
Arrive

apriodique
Traitement

apriodique
Figure 8.49 Exemple de lexcution valide de la configuration de tches
donne dans le tableau 8.21 avec larrive de trois requtes apriodiques strictes strictes.
= = =
= = =
=
U C
i
T
i

i =1
n


U
s
2 +
2U
s
1 +
------------------ ln = U
s
C
s
T
s
----- =
8.4 Ordonnancement
des tches indpendantes apriodiques
457


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
Donc le facteur de charge total est donn par :
avec (8.38)
m Serveur sporadique
Pour amliorer les performances du serveur prcdent, serveur ajournable, il faut
diminuer cette possibilit totale conserver la capacit pendant toute la priode,
ce problme pouvant conduire des dpassements dchance pour les tches prio-
diques. Deux mthodes peuvent tre utilises pour cela :
Le serveur change de priorit : le serveur ne conserve pas sa forte priorit pen-
dant toute sa squence. Mais si aucune requte apriodique ne survient, il prend
la priorit de la dernire tche en excution. Cette diminution de priorit conduit
prserver lexcution de tches priodiques moins prioritaires initialement.
Le serveur sporadique : la mthode est base sur le fait que sa capacit ne se
recharge qu linstant de sa consommation augment de sa priode.
Ainsi, lexemple de la gure 8.51 montre le principe du serveur sporadique (volution
de sa capacit de traitement en fonction du temps) et son application sur larrive
de requte apriodique stricte. Pour un serveur de caractristiques temporelles (0,
C
s
2, D
s
4, T
s
4), seules les deux dernires tches apriodiques strictes nont
pas t traites immdiatement, rsultat meilleur que le serveur scrutation, mais
moins bon que le serveur ajournable.
Comparons le fonctionnement de ce serveur sporadique avec le serveur ajournable
pour le mme exemple dcrit dans le tableau 8.21 et la gure 8.50 intgrant trois
requtes dexcution de tches apriodiques strictes dnies par : t
ap,1
(r
ap,1
1,
C
ap,1
2), t
ap,2
(r
ap,2
7, C
ap,2
2) et t
ap,3
(r
ap,3
12, C
ap,3
2). La squence
dexcution, prsente sur la gure 8.52, est valide en comparaison de celle obtenue
U
total
U U
s
+ C
i
T
i

i =1
n

U
s
2 +
2U
s
1 +
------------------ ln + = U
s
C
s
T
s
----- =
t
5
t
t
5 1 0 1
0 2 5 5 1 0 1
0 2 5 5 1 0 1
0 2 5 5 1 0 1
t
0 2 5 5 1 0 1
t
t
Capacit
s

2
1

libre

2
Depassement dchance
Arrive

apriodique
Traitement

apriodique
Figure 8.50 Exemple de lexcution non valide de la configuration de tches
donne dans le tableau 8.21 avec larrive de trois requtes apriodiques strictes.
= = =
=
= = = = =
458
8.4 Ordonnancement
des tches indpendantes apriodiques
8 tude avance
des systmes temps rel
avec le serveur ajournable. Cette ordonnanabilit est obtenue grce au dcalage
du serveur et conduit donc un temps de rponse augment de la troisime tche
apriodique stricte.
Il est possible davoir une autre condition sufsante dordonnanabilit dans le cas de
lalgorithme RM associ au serveur ajournable. Soit un ensemble de n tches prio-
diques {
1
,
2
,
3
, ,
i
, ,
n
} dnies par les paramtres temporels (r
i
, C
i
, D
i
, T
i
)
et un serveur priodique
s
dnie par les paramtres temporels (r
s
, C
s
, D
s
, T
s
) avec
U
s
C
s
/T
s
, la conguration est ordonnanable si :
avec (8.39)
0 2 5 5 1 0 1
t
t
t
0 2 5 5 1 0 1
0 2 5 5 1 0 1
1 +
1 +
1 +
1 +
1 +
1 +
Capacit
s

2
1
Arrive

apriodique
Traitement

apriodique
Figure 8.51 Reprsentation du principe de fonctionnement du serveur sporadique
avec la visualisation de sa capacit de traitement.
t
t
t
t
t
t
0 2 5 5 1 0 1
0 2 5 5 1 0 1
0 2 5 5 1 0 1
0 2 5 5 1 0 1
0 2 5 5 1 0 1
0 2 5 5 1 0 1
Capacit
s

2
1

libre

2
Dlai du serveur
Arrive

apriodique
Traitement

apriodique
Figure 8.52 Exemple de lexcution valide de la configuration de tches
donne dans le tableau 8.21 avec larrive de trois requtes apriodiques strictes.
=
U C
i
T
i

i =1
n


2
U
s
1 +
--------------- ln = U
s
C
s
T
s
----- =
8.4 Ordonnancement
des tches indpendantes apriodiques
459


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
Donc, le facteur de charge total est donn par :
avec (8.40)
Il est intressant de comparer cette limite du serveur sporadique (quation 8.38) et
du serveur ajournable (quation 8.40). La gure 8.53 montre que la courbe associe
au serveur ajournable passe en dessous de la limite de lalgorithme RM, alors que
la courbe associe au serveur sporadique reste au-dessus de cette limite.
En conclusion, dans le contexte dalgorithme priorit xe (RM ou DM), le serveur
sporadique permet de rpondre aux requtes apriodiques et de traiter la tche
apriodique associe avec un temps de rponse minimum en conservant lordon-
nanabilit de la conguration initiale, serveur inclus.
8.4.3 Traitement par serveur priodique des tches apriodiques
en environnement priorit variable
m Serveur sporadique dynamique
Dans un contexte dordonnancement bas sur une priorit variable (EDF), la
mthode du serveur sporadique peut-tre reprise. Contrairement au fonctionne-
ment du serveur sporadique avec des priorits xes, le contexte dattribution dyna-
mique des priorits conduit affecter au serveur une priorit variable fonction de
la date future de rapprovisionnement de sa capacit. Ce fonctionnement est illus-
tr sur la gure 8.54. Pour un serveur de caractristiques temporelles (0, C
s
2,
D
s
4, T
s
4), nous pouvons remarquer que son chance se place toujours un
dlai temporel de 4 ( T
s
) units de temps par rapport la consommation de la
capacit du serveur par une tche apriodique stricte.
Considrons lexemple de deux tches priodiques, indpendantes, chance sur
requte et dpart simultan (tableau 8.22). Une troisime tche priodique est
U
total
U U
s
+ C
i
T
i

i =1
n

2
U
s
1 +
--------------- ln + = U
s
C
s
T
s
----- =
U
s
2 , 0 1 8 , 0 6 , 0 4 , 0
U
l a t o t
U + U =
s
6 , 0
7 , 0
8 , 0
9 , 0
1
6 8 1 , 0
Limite RM +
serveur sporadique
Limite RM
Limite RM +
serveur ajournable
Figure 8.53 Exemple de lexcution valide de la configuration de tches
donne dans le tableau 8.21 avec larrive de trois requtes apriodiques strictes.
=
= =
=
460
8.4 Ordonnancement
des tches indpendantes apriodiques
8 tude avance
des systmes temps rel
ajoute la conguration pour traiter les arrives de tches apriodiques strictes.
La capacit de traitement des requtes apriodiques de ce serveur est une dure
dexcution de 3 (C
s
3). Le facteur dutilisation de la conguration complte est
U 1, gale la valeur de la condition dordonnanabilit pour lalgorithme
dordonnancement EDF (quation 8.30). La conguration est donc ordonnanable
avec lalgorithme EDF. Nous ajoutons cette conguration des tches apriodiques
dont les caractristiques sont rfrences dans le tableau 8.22.
Tableau 8.22 Exemple dune configuration de trois tches priodiques indpendantes, la
troisime tche, serveur sporadique dynamique de tches apriodiques. Les arrives des requtes
et les dures des tches apriodiques sont notes.
Tche r
i
C
i
D
i
T
i

1
0 2 8 8

2
0 3 12 12

s
0 3 6 6

ap,1
3 2

ap,2
6 1

ap,3
9 1

ap,4
14 2

ap,5
16 1
0 2 5 5 1 0 1
t
0 2 5 5 1 0 1
0 2 5 5 1 0 1
1 +
chance du serveur priorit
t
t
Capacit
s
2
1
Arrive

apriodique
Traitement

apriodique
Figure 8.54 Reprsentation du principe de fonctionnement du serveur sporadique
dynamique avec la visualisation de sa capacit de traitement.
=
=
8.4 Ordonnancement
des tches indpendantes apriodiques
461


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
La squence obtenue avec le traitement par le serveur de type sporadique dynami-
que est donne sur la gure 8.55. Lacceptation des tches apriodiques est imm-
diate et les temps de rponse sont gaux aux dures dexcution. Le fonctionnement
du serveur sporadique dynamique, bas sur une recharge de capacit avec un
dcalage correspondant la priode, comme pour le serveur sporadique, conduit
une squence valide.
m Utilisation de lalgorithme Earliest Deadline Last (EDL)
Lordonnancement, bas sur une priorit variable Earliest Deadline First (EDF),
est ralis au plus tt (si une tche est activable, elle est excute). De fait, les temps
creux processeur se retrouvent en n de squence dexcution. Si nous voulons uti-
liser ces temps creux pour excuter les requtes apriodiques, il serait souhaitable
de les placer au moment de la demande, cest--dire linstant de la requte. Ainsi,
la mthode du traitement par EDL consiste excuter une squence selon EDF ;
puis, lorsque survient une requte apriodique, on lexcute dans les temps creux
disponibles de la squence cre par Earliest Deadline Last (EDL). Cette caractris-
tique est visualise sur la gure 8.56 o une mme conguration de deux tches,
t
1
(0,1,3,3) et t
2
(0,2,5,5), est ordonnance par EDF et EDL.
Pour tudier ce moyen de traitement des requtes apriodiques, considrons une
conguration deux tches, t
1
(0,3,6,6) et t
2
(0,2,8,8). Cette conguration de
facteur dutilisation U 0,75 et de priode dtude H 24 est ordonnance avec
les algorithmes EDF et EDL partir du temps t 8 (gure 8.57). Cela dmontre
bien quil est alors possible dinsrer des temps libres au milieu de la squence.
Ces temps libres au nombre de 6 peuvent tre utiliss pour rpondre des requtes
apriodiques. Un exemple est donn pour une tche apriodique dnie par
t
ap
(r
ap,3
8, C
ap,3
4). Jusqu cette demande apriodique, la squence est celle
obtenue avec lalgorithme EDF. Ensuite le maximum de temps libres est mis en place
et la squence reprend avec lalgorithme EDL.
t
0 2 5
t
Capacit
s
t
5 1 0 1
0 2 5 5 1 0 1
0 2 5
10 5 1
0 2 5 5 1 0 1
0 2 5 5 1 0 1
t
t
d=9
d=9
d=12
d=12
d=15 d=20
d=20
d=15
0
2 2 = d
3
2
1

2
Arrive

apriodique
Traitement

apriodique
Figure 8.55 Exemple de lexcution valide de la configuration de tches
donne dans le tableau 8.21 avec larrive de trois requtes apriodiques strictes.
= =
=
= =
462
8.4 Ordonnancement
des tches indpendantes apriodiques
8 tude avance
des systmes temps rel
8.4.4 Conclusion sur le traitement des tches apriodiques
Nous avons vu les principales mthodes pour rpondre aux requtes apriodiques.
Lefcacit en termes de temps de rponse ces tches apriodiques et la complexit
du traitement associ la mthode conduisent faire un compromis. Une compa-
raison entre les diffrentes mthodes est montre sur la gure 8.58. Cette compa-
raison est ralise sur les bases de quatre critres :
performance base sur le temps de rponse moyen obtenu ;
complexit du calcul lie la prise de dcision au niveau de lordonnanceur ;
besoin mmoire conditionn par une anticipation de la squence dordonnan-
cement ;
complexit de limplmentation relative la mise en uvre de cette mthode.

1 t
5 1 0 1 5

2

2 t
5 1 0 1 5
t
5 1 0 1 5
t
5 1 0 1 5
t
5 1 0 1 5
t
5 1 0 1 5
Effet
miroir

1
EDF EDL

libre

libre
Figure 8.56 Exemple de lexcution valide dune mme configuration de deux tches
avec les algorithmes EDF et EDL.
t

1
et
2

1
et
2

1
et
2
0 2 5 5 1 0 1

e r b i l
0 2 5 5 1 0 1
t
t Arrive

apriodique
0 2 5 5 1 0 1
t
0 2 5 5 1 0 1
t
0 2 5 5 1 0 1
t
0 2 5 5 1 0 1

e r b i l
0 2 5 5 1 0 1
t
EDF

e r b i l
EDL
(aprs t=8)
E
x

c
u
t
i
o
n
r

e
l
l
e
Figure 8.57 Exemple de lexcution dune configuration de deux tches avec la prise en
compte dune tche apriodique en utilisant lassociation des algorithmes EDF et EDL.
8.5 Ordonnancement
des tches priodiques dpendantes
463


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
Dans le cas des environnements priorit xe (cas industriel classique), le serveur
sporadique semble tre un bon compromis au niveau de ces paramtres.
8.5 Ordonnancement
des tches priodiques dpendantes
8.5.1 Ordonnancement des tches avec contraintes de prcdence
m Dfinition gnrale de la prcdence
Des tches peuvent tre lies par des contraintes de prcdence lorsquelles ont des
relations de synchronisation (smaphores, vnements) ou de communication
(botes aux lettres). On appelle une contrainte de prcdence entre la tche
i
et la
tche
j
le cas o
i
prcde
j
si
j
doit attendre la n dexcution de
i
pour com-
mencer sa propre excution (gure 8.59). Nous supposons dans cette section que
les tches ont une forme atomique telle que nous lavons dcrite dans la section 8.2.3,
cest--dire : attente de synchronisation ou de communication en dbut de tche
et envoi dun vnement de synchronisation ou de communication en n de tche.
Lexpression des contraintes de prcdence (ordre partiel sur lensemble des tches)
peut se faire par exemple sous la forme dun graphe comme celui de la gure 8.60.
Ainsi, les six tches de la conguration (
1
,
2
,
3
,
4
,
5
,
6
) sont lies par des relations
de prcdences dcrites par deux graphes.
Nous pouvons remarquer que nous avons jusqu prsent not seulement les pr-
cdences dites simples. Pour tre complet, il est ncessaire de distinguer les deux cas
de prcdence :
Contraintes de prcdence simple : une contrainte de prcdence entre la
tche t
i
et la tche t
j
ou t
i
prcde t
j
si t
j
doit attendre la n dexcution de t
i
pour commencer sa propre excution. Dans ce cas, nous faisons lhypothse
suivante :
P
r
i
o
r
i
t

v
a
r
i
a
b
l
e
P
r
i
o
r
i
t

f
i
x
e
Traitement en arrire plan
Serveur scrutation
Serveur ajournable
Serveur sporadique
Serveur sporadique dynamique
Serveur EDL
excellent moyen mauvais
Technique de traitement Performance
Complexit
calcul
Complexit
implmentation
Performance
Figure 8.58 Comparaison entre les mthodes de prise en compte dune tche apriodique.
464
8.5 Ordonnancement
des tches priodiques dpendantes
8 tude avance
des systmes temps rel
Deux tches priodiques lies par une contrainte de prcdence simple
sont de mme priode.
Contraintes de prcdence gnralise : le nombre des excutions de deux tches
lies par une telle relation nest pas ncessairement le mme. Cest le cas lorsque
t
i
peut sexcuter n fois avant lexcution de t
j
, ou lorsque t
i
sexcute une seule
fois avant n excutions de la tche t
j
(gure 8.61).
Des exemples de ces deux cas de prcdence gnralise sont prsents sur la
gure 8.62. Pour le premier exemple, la tche Mesure de temprature doit sex-
cuter quatre fois avant lexcution de la tche qui calcule une moyenne sur quatre
points mesurs. Pour le second cas, la tche Mesure de la pression P sexcute
la mme cadence que la tche Calcul de la fonction P/T ; par contre la tche
Mesure de temprature T na pas besoin de sexcuter aussi rapidement tant
donn la variation lente de ce paramtre physique.
Pour pouvoir utiliser les algorithmes dordonnancement prcdemment tudis, il
est ncessaire dobtenir une conguration de tches indpendantes. Par consquent,
les caractristiques des tches avec contraintes de prcdence sont transformes
an de prendre en compte implicitement cette relation entre les tches.
t
t

j
Figure 8.59 Visualisation de la contrainte de prcdence entre deux tches.

1

2

3

5

4

6
Figure 8.60 Graphe de reprsentation des contraintes de prcdence entre les tches.
t
i
t
j
Figure 8.61 Visualisation de la contrainte de prcdence gnralise entre deux tches.
8.5 Ordonnancement
des tches priodiques dpendantes
465


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
Ce problme de prcdence doit tre abord selon deux points de vue : excution
et validation :
Dans le cadre dun ordonnancement premptif bas sur la priorit, quelle est la
modication des paramtres de tches qui permettra une excution dans le respect
des chances ?
Est-il possible de valider a priori lordonnanabilit dune conguration de tches
dpendantes ?
Une rponse la premire question est donne par : si t
i
t
j
, la transformation
des paramtres doit respecter les rgles de prcdence suivantes :
la date de rveil de la deuxime tche doit tre plus grande ou gale la date de
rveil de la premire tche : r
j
r
i
;
dans le respect de la politique dordonnancement choisie, la priorit de la pre-
mire tche doit tre plus grande que la priorit de la deuxime tche : Prio
i
>
Prio
j
.
m Anomalie de comportement en prsence de relations de prcdence
et de primitives de synchronisation
Pour mettre en exergue la difcult de prise en compte correcte des contraintes de
prcdence, considrons lexemple de trois tches dont les paramtres sont donns
dans le tableau 8.23. De plus deux de ces tches intgrent des primitives de synchro-
nisation : la tche t
1
commence par une attente dun vnement et la tche t
3
nit
par lenvoi de ce mme vnement. cette structure de tches visualise sur la
gure 8.63, sajoute une relation de prcdence entre les deux tches t
1
et t
3
repr-
sente par un graphe de prcdence (gure 8.63).
Dans une premire tape, nous allons respecter les conditions sur les paramtres que
nous avons nonces prcdemment ; donc, dans notre cas, nous avons les deux
tches t
1
et t
3
lies par une contrainte de prcdence qui doivent satisfaire :
et (8.41)
1
10
1
4
Mesure
de
temprature
Calcul
dune fonction
P/T
Calcul
de la moyenne
sur 4 points
Mesure
de temprature
T
Mesure
de pression
P
Figure 8.62 Exemples dapplications faisant intervenir des prcdences gnralises
entre plusieurs tches.
r
1
r
3
Prio
3
Prio
1
>
466
8.5 Ordonnancement
des tches priodiques dpendantes
8 tude avance
des systmes temps rel
Les paramtres temporels de ces tches permettent de respecter ces conditions
tant donn que les deux dates de rveil sont gales et, les priodes tant identiques,
nous pouvons affecter les priorits avec les valeurs dsires dans le cas de lalgo-
rithme priorit xe RM. La gure 8.64 retrace les trois excutions possibles en
respectant la condition nonce 8.41. Ces excutions montrent des squences non
valides (squences numrotes 1, 2 et 3), cest--dire quune des trois tches ne res-
pecte pas son chance : tche t
1
pour la squence 1, tche t
1
pour la squence 2
et tche t
2
pour la squence 3. Il est important de noter que ces excutions sont
construites en prenant en compte les primitives de synchronisation des tches t
1
et t
3
.
Nous pouvons alors tester les autres affectations de priorits ne respectant pas la
condition de contrainte de prcdence 8.41. La gure 8.64 montre ces trois autres
excutions possibles (squences numrotes 4, 5 et 6). Les deux premires squences
sont non valides, cest--dire quune des trois tches ne respecte pas son chance :
tche t
1
pour la squence 4 et tche t
2
pour la squence 5. Seule la dernire squence
dexcution est valide et permet de respecter toutes les chances des tches. Cette
squence a pour priorits des tches la relation suivante :
Cette relation dordre est en effet contradictoire avec la relation 8.41 qui aurait d
tre respecte dans le cas de cette relation de prcdence entre t
1
et t
3
. Nous pouvons
donc constater une anomalie de comportement. Cette anomalie provient essentiel-
lement du fait de la contradiction entre la relation de prcdence et les primitives
de synchronisation implmentes dans le code des tches.
Tableau 8.23 Exemple dune configuration de trois tches ayant des liens de prcdence.
Tche r
i
C
i
D
i
T
i

1
0 1 3 4

2
0 1 2 2

3
0 1 2 4
ENVOYER_EVT(evt1)
Graphe de prcdence :

3

1

2
tche
1
ATTENDRE_EVT(evt1)
tche
2
tche
3
Figure 8.63 Description des codes et des relations de prcdence des tches
dcrites dans le tableau 8.23.
Prio
1
Prio
2
Prio
3

8.5 Ordonnancement
des tches priodiques dpendantes
467


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
Nous pouvons donc conclure par :
Cas du respect de Prio
3
> Prio
1
: les tches sont indpendantes dans le sens o
les primitives de synchronisation sont inutiles car les priorits traduisent cette
synchronisation ou prcdence. Les squences obtenues sont non valides.
Cas du non respect de Prio
3
> Prio
1
: il est possible de trouver un exemple daffec-
tation des priorits qui donne une conguration ordonnanable avec une synchro-
nisation due aux primitives efcientes (la conguration est non ordonnanable
sans cette prcdence).
En conclusion, nous pouvons noter que les transformations des priorits pour la
prise en compte de la prcdence ne sont pas optimales.
m Prise en compte des relations de prcdence avec lalgorithme RM
Nous allons considrer que les tches ne contiennent pas de primitives de synchro-
nisation qui sont, en particulier, en contradiction avec la ou les relations de prc-
dence souhaites. Dans le cas des algorithmes priorit xe et pour des tches de
mme priode avec des contraintes de prcdence, on affecte les priorits an de
satisfaire les relations nonces 8.41. Cette affectation des priorits ne doit pas contre-
dire les ordres de priorit entre des tches de priodes diffrentes.
Considrons lexemple du graphe de prcdence de la gure 8.60 avec les six tches.
En supposant que les tches t
1
et t
2
ont une priode de 4 et les quatre autres tches
t
1
, t
2
, t
3
et t
4
ont une priode suprieure de 5. Pour respecter la fois lalgorithme
t
t
t

3
?
t
t
t
?
t
t
t
?

3
t
t
t
?
t
t
t
?
t
t
t

3
Prio(
1
)=1-Prio(
2
)=3-Prio(
3
)=2
Prio(
1
)=3-Prio(
2
)=1-Prio(
3
)= 2
non ordonnanable
non ordonnanable
2
5
Prio(
1
)=2-Prio(
2
)=1-Prio(
3
)=3
Prio(
1
)=3-Prio(
2
)=2-Prio(
3
)=1
non ordonnanable
ordonnanable
3
6 4
Prio(
1
)=1-Prio(
2
)=2-Prio(
3
)=3
Prio(
1
)=2-Prio(
2
)=3-Prio(
3
)=3
non ordonnanable
non ordonnanable
1
Figure 8.64 Les diffrentes squences dexcution possibles
pour la configuration des trois tches prsentes dans le tableau 8.23 et la figure 8.63.
468
8.5 Ordonnancement
des tches priodiques dpendantes
8 tude avance
des systmes temps rel
RM daffectation de priorits entre les deux groupes de tches et les contraintes de
prcdence nous pouvons avoir les quatre affectations de priorits, notes dans le
tableau 8.24, qui suivent les rgles suivantes :
rgle RM :
rgle prcdence :
et .
m Prise en compte des relations de prcdence avec lalgorithme EDF
Dans le cas dun algorithme priorit variable, la prise en compte de la prcdence
est ralise par la modication de r
i
et d
i
, en r
i
* et d
i
* suivant les relations :
Une tche ne sera activable que si tous ses prdcesseurs ont termin leur excu-
tion, cest--dire que la date de dbut de cette tche doit tre suprieure toutes
les dates de dbut de ces prdcesseurs immdiats augmentes de leur dure
dexcution :
Pour une instance donne, lchance dune tche doit tre infrieure toutes
les chances de ses successeurs immdiats diminues de leur temps dexcution :
Comme le montre la gure 8.65, cette transformation doit tre effectue en partant
des tches sans prdcesseur pour le calcul des r
i
* et en commenant par les tches
sans successeur pour le calcul des d
i
*.
Pour appliquer cette transformation, considrons lexemple dune conguration de
cinq tches dont les paramtres temporels sont donns dans le tableau 8.25. Dans
une premire phase considrons ces tches sans relation de prcdence et construisons
la squence avec lalgorithme priorit variable EDF. Le facteur dutilisation est
U 0,917 et la priode dtude est H 12. tant donn que certaines tches ne
Tableau 8.24 Affectations des priorits aux tches
selon lalgorithme RM et les contraintes de prcdence du graphe de la figure 8.60.
Cas
1

2

3

4

5

6
I 6 5 4 3 2 1
II 6 5 3 4 1 2
III 6 5 3 4 2 1
IV 6 5 2 4 1 3
Prio
1

2
, ( ) Prio
3

4

5

6
, , , ( ) >
Prio
1
( ) Prio
2
( ) Prio
3
( ) Prio
5
( ) > , >
Prio
4
( ) Prio
5
( ) > Prio
4
( ) Prio
6
( ) >
r
i
*
Max r
i
,Max r
j
*
C
j
+ ; si
j
avant
i
pour
j
prdcesseurs immdiats ( ) ( ) =
d
i
*
Max d
i
,Max d
j
*
C
j
+ ; si
j
avant
i
pour
j
prdcesseurs immdiats ( ) ( ) =
= =
8.5 Ordonnancement
des tches priodiques dpendantes
469


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
sont pas chance sur requte, il est ncessaire de tracer la squence dexcution
sur la priode dtude H. Cela donne une squence valide qui est visualise sur la
gure 8.66. Cette squence est obtenue en considrant des tches indpendantes,
supposons maintenant que ces tches sont lies par des relations de prcdence
donnes sur la gure 8.67. Il est donc ncessaire de faire le calcul des paramtres
r
i
* et d
i
* des cinq tches.
Soit le calcul des r
i
* :
Et le calcul des d
i
* :
Tableau 8.25 Exemple dune configuration de cinq tches ayant des liens de prcdence.
Tche r
i
C
i
D
i
T
i

1
0 3 12 12

2
0 2 11 12

3
0 3 12 12

4
0 1 11 12

5
0 2 9 12
t
r
2
d
2
* r
2
* d
2
r
1
C
1
d
3
C
3
Calculs des r
i
* Calculs des d
i
*

1

2

3
Figure 8.65 Transformation des paramtres des tches pour la prise en compte des relations
de prcdence entre les tches avec un algorithme priorit variable de type EDF.
r
1
*
Max r
1
Max ( ) , ( ) 0 = =
r
2
*
Max r
2
Max r
1
*
C
1
+ ( ) , ( ) Max 0 Max 3 ( ) , ( ) 3 = = =
r
3
*
Max r
3
Max r
2
*
C
2
+ ( ) , ( ) Max 0 Max 5 ( ) , ( ) 5 = = =
r
4
*
Max r
4
Max r
3
*
C
1
+ ( ) , ( ) Max 0 Max 3 ( ) , ( ) 3 = = =
r
5
*
Max r
5
Max r
4
*
C
4
r
2
*
C
2
+ , + ( ) , ( ) Max 0 Max 4 5 , ( ) , ( ) 5 = = =
d
5
*
Min d
5
Min ( ) , ( ) 9 = =
d
4
*
Min d
4
Min d
5
*
C
5
( ) , ( ) Min 11 Min 7 ( ) , ( ) 7 = = =
470
8.5 Ordonnancement
des tches priodiques dpendantes
8 tude avance
des systmes temps rel
Dans cette nouvelle conguration les tches sont devenues indpendantes et dpart
diffr ; alors nous obtenons la squence donne dans la gure 8.68.
t
0 2 5 5 1 0 1

5

2

4

1

3

5

2

4

1

3
Figure 8.66 Squence dexcution des tches du tableau 8.25,
considres comme indpendantes, avec lalgorithme priorit variable EDF.

3

3

2
2
Figure 8.67 Graphe de prcdence reliant les tches de la configuration
dcrite dans le tableau 8.25.
d
3
*
Min d
3
Min ( ) , ( ) 12 = =
d
2
*
Min d
2
Min d
3
*
C
3
d
5
*
C
5
, ( ) , ( ) Min 11 Min 9 7 , ( ) , ( ) 7 = = =
d
1
*
Min d
1
Min d
2
*
C
2
d
4
*
C
4
, ( ) , ( ) Min 12 Min 5 6 , ( ) , ( ) 5 = = =
t
t
t
t
t

1
0 1 5

2
0 1 5

3
0 1 5

4
0 1 5

5
0 1 5
t
0 2 5 5 1 0 1

1

2

4

5

3

1

2

4

5

3
Figure 8.68 Squence dexcution des tches du tableau 8.25, considres comme dpendantes
(graphe de prcdence de la figure 8.67), avec lalgorithme priorit variable EDF.
8.5 Ordonnancement
des tches priodiques dpendantes
471


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
Cette squence (
1
,
2
,
4
,
5
,
3
) respecte les relations de prcdence imposes par
la modication des paramtres ; remarquons que la squence est diffrente de la
squence (
5
,
2
,
4
,
1
,
3
) labore avec les tches considres sans relation de
prcdence (gure 8.66). Rappelons que pour tester lordonnanabilit de cette nou-
velle conguration avec des tches dpart diffr (quation 8.24), il est thori-
quement ncessaire de tracer la squence sur une dure maximale de 29 units de
temps correspondant r
i,max
+2H. En ralit cette nouvelle squence a la mme
priode dtude que prcdemment sans phase transitoire.
Il est important de remarquer quil y a quivalence de la conguration modie T*
avec la conguration initiale T, cest--dire :
Si la conguration initiale tait ordonnanable avec le respect des con-
traintes de prcdence, cette conguration modie le sera et rciproque-
ment : T T*.
8.5.2 Ordonnancement des tches en prsence de ressources critiques
m Les difficults de lordonnancement en prsence de ressources critiques
M Inversion de priorit
Le principal but, qui conditionne lutilisation dalgorithme dordonnancement bas
sur les priorits, est la limitation du temps de rponse dune ou plusieurs tches de
la conguration. Ainsi, soit un ensemble de n tches partageant un ensemble de
m ressources critiques en exclusion mutuelle, pour une tche t
i
de la conguration
ayant une pire dure dexcution gale C
i
, la question primordiale est :
Quel est le pire temps de rponse de la tche au cours de son excution
(sur la priode dtude H) ?
Nous allons donc analyser le comportement dune application temps rel compose
de tches partageant des ressources critiques pour dterminer sil est possible de dter-
miner pour les tches de haute priorit un temps de rponse born : qualit premire
requise pour un systme critique. Pour cette tude, nous allons faire les hypothses
suivantes :
ordonnancement en ligne premptif bas sur une priorit xe ou variable ;
gestion de la le dattente des ressources selon la priorit ;
temps dexcution de la demande ou de la libration des ressources ngligeables.
Ainsi, pour garantir un temps de rponse born une tche donne t
0
, il faut pou-
voir dterminer de faon prcise les autres tches qui peuvent interrompre lexcution
de cette tche t
0
. Pour une conguration de n tches, la tache t
0
peut tre retarde
ou suspendue par deux types de tches :
les tches plus prioritaires que la tche t
0
;
les tches qui partagent au moins une ressource critique avec cette tche t
0
et
qui lutilisent avant la demande par la tche t
0
.
Dans une conguration donne, les deux ensembles de tches peuvent tre parfai-
tement identis et il est alors possible deffectuer le calcul du retard maximum dans
472
8.5 Ordonnancement
des tches priodiques dpendantes
8 tude avance
des systmes temps rel
le pire des cas. Soit p tches de priorits suprieures la tche t
0
, n tches moins
prioritaires accdant une ressource critique utilise par cette tche t
0
ou m res-
sources utilises par cette tche t
0
et accdes par des tches moins prioritaires.
Dans ces conditions, nous pouvons exprimer le temps de rponse TR
0
, dni selon
lquation 8.10, de la tche t
0
de la faon suivante :
(8.42)
avec Sc
max
la dure maximale des sections critiques.
Pour illustrer ce comportement prenons un exemple simple dune conguration
quatre tches dont la tche t
0
que nous dsirons tudier. La tche t
1
est une tche
plus prioritaire que la tche t
0
. La tche t
3
partage une ressource critique avec la
tche t
0
et la tche t
2
est indpendante des autres tches. En appliquant la relation
8.42, nous devons avoir une estimation du temps de rponse :
(8.43)
La gure 8.69 prsente une squence dexcution de cette conguration pour des
dates de rveil particulires qui vont amener une situation o la tche t
0
va tre
interrompue dans le pire des cas. Nous pouvons faire le commentaire suivant sur cet
exemple de privation dexcution par occupation dune ressource critique : le retard
pour la tche t
0
, engendr par la tche t
1
, est normal (t
1
plus prioritaire que t
0
), le
retard pour la tche t
0
, engendr par la tche t
3
, est aussi normal (t
3
partage une
ressource critique avec t
0
). Mais le retard engendr par la tche t
2
est un mauvais
fonctionnement de lordonnancement, car la tche t
2
est moins prioritaire que la
tche t
0
et ne partage aucune ressource critique avec celle-ci. Nous sommes en pr-
sence du phnomne dit dinversion de priorit, abord dans le chapitre 4. Dans
ce contexte, il est impossible de dterminer un temps de rponse born pour une
tche donne et donc dobtenir une application temps rel au comportement pr-
visible
M Blocage fatal
Un autre inconvnient, dj identi, du partage de ressources critiques est le blo-
cage fatal de deux ou plusieurs tches lors de lutilisation dau moins deux mmes
ressources critiques par deux tches. La gure 8.70 illustre ce phnomne de blo-
cage fatal (deadlock). La demande des ressources R
1
et R
2
de la part des deux tches
t
1
et t
2
dans un ordre inverse conduit les deux tches se mettre dans une situation
dattente rciproque (par exemple attente de prise de smaphore).
Une mthode, trs utilise dans les systmes temps rel critique o le blocage de deux
tches ou plus peut tre fatal une application critique, est la mise en place dun
chien de garde (watchdog), gardien dun temps de blocage maximum dune tche.
Lorsquune tche se trouve bloque pendant un temps suprieur un temps x, une
alerte de type interruption peut tre utilise pour lancer une tche de reconguration
ou faire une remise zro du systme.
TR
0
C
0
T
i
T
0
------ C
i
i =1
p

inf n m , Sc
max
+ + =
TR
0
C
0
T
1
T
0
[ ]C
1
Sc
max
+ + =
8.5 Ordonnancement
des tches priodiques dpendantes
473


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
Une autre des mthodes classiques pour viter le blocage fatal est dutiliser dans
lcriture des codes des tches la mthode des classes ordonnes. Lensemble des
ressources du systme est numrot et les tches doivent prendre les ressources dans
lordre croissant des numros des ressources et les rendre dans lordre inverse. Cette
mthode permet dobtenir des rsultats trs satisfaisants. Ce principe est illustr sur
la gure 8.71.
t
t
t
t
TR
0
priorit
des
tches
fin de tche
Tche
1
Tche
0
Tche
2
Tche
3
date de rveil
demande
ressources critiques
utilisation
ressources critiques
Inversion de priorit
Figure 8.69 Reprsentation du phnomne dinversion de priorit
dans un ordonnancement en prsence de ressources critiques.
R
2
R
2
R
1
R
1
t
t
Interblocage
priorit
des
tches
Tche
1
Tche
2
Figure 8.70 Reprsentation du phnomne de blocage fatal
dans un ordonnancement en prsence de ressources critiques.
t
t
Tche
1
Tche
2
R
1
R
1
R
2
R
2
R
1
et R
2
R
2
priorit
des
tches
Figure 8.71 Reprsentation du procd dvitement du blocage fatal dans un ordonnancement
en prsence de ressources critiques par la mthode des classes ordonnes.
474
8.5 Ordonnancement
des tches priodiques dpendantes
8 tude avance
des systmes temps rel
M Anomalie de comportement en prsence de ressources critiques
Nous avons tudi deux inconvnients majeurs de lordonnancement en prsence
de ressources critiques : linversion de priorit qui interdit une valuation borne du
temps de rponse dune tche et le blocage fatal qui conduit une situation critique
de lapplication. Un autre inconvnient est plus dissimul puisquil peut faire croire
un bon fonctionnement de lapplication teste dans le pire des cas et conduire
un dysfonctionnement dans un autre cas semblant moins contraint en termes de
paramtres temporels (dure dexcution, chance).
Considrons lexcution dune conguration de trois tches priodiques dont les
paramtres sont donns dans le tableau 8.26. Le facteur dutilisation est U 1 et la
priode dtude H 16. Laffectation des priorits a t effectue selon lalgorithme
DM. Les deux premires tches t
1
et t
2
partagent une ressource critique pendant
toute la dure de leur excution. La dernire tche t
3
, compltement indpendante
des deux autres, a une dure dexcution qui peut varier entre 5 et 6.
Il parat logique de tester la conguration avec la dure pire cas de la tche t
3
. Cette
squence dexcution, prsente sur la gure 8.72, est valide. Un deuxime test peut
tre effectu pour une dure dexcution plus petite de la tche t
3
. Si lordonnance-
ment en prsence de ressources critiques avait un comportement normal, le relche-
ment dune contrainte temporelle comme la dure dexcution devrait conduire
une ordonnanabilit plus aise de la conguration. Or la squence dexcution,
obtenue pour une dure dexcution de 5 pour la tche t
3
, est non valide comme
le montre la gure 8.73. Lors de son rveil au temps 8, la tche t
2
trouve la ressource
prise par la tche t
1
et doit donc se mettre en attente. Quand la ressource est libre
par la tche t
1
, la tche t
2
na plus le temps de sexcuter avant son chance.
Cette anomalie de comportement permet de conclure la fragilit des tests,
en particulier si seules les situations de pire cas sont testes avec des tches
dont la dure dexcution peut varier en deux instances dexcution.
En dehors de toute considration sur la dure de la tche t
3
, ce dysfonctionnement
tait prvisible. En effet, la tche t
2
, la plus prioritaire, partage une ressource critique
avec la tche t
1
moins prioritaire. Donc, il est normal que la tche t
2
puisse se
retrouver bloque par cette tche moins prioritaire qui partage une ressource critique
avec elle. Donc le temps de rponse maximum TR
2
de la tche t
1
peut tre calcul
sans tenir compte du phnomne dinversion de priorit :
Tableau 8.26 Exemple dune configuration de trois tches partageant une ressource critique.
Tche r
i
C
i,
C
i,
C
i,
C
i
D
i
T
i
priorit

1
0 0 6 0 6 16 16 1

2
0 0 2 0 2 6 8 3

3
0 5 ou 6 0 0 5 15 16 2
=
=
8.5 Ordonnancement
des tches priodiques dpendantes
475


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
Ce temps de rponse est donc suprieur lchance de la tche ; par consquent,
il tait probable que ce dysfonctionnement se produise lors dune excution. Ainsi,
la dure plus courte de la tche t
3
, a conduit la tche t
1
prendre la ressource
avant la tche t
2
.
m Protocole hritage de priorit pour le traitement des ressources critiques
An de rpondre la limitation dterministe du temps de rponse dune tche,
il est possible dutiliser le protocole hritage de priorit ou priorit hrite.
Ce protocole permet de grer laccs (dbut et n de section critique dune tche)

3
15 5 0
t
15 5 0
t
15 5 0
t
utilisation de la ressource
pas dutilisation de ressource
10
10
10
Figure 8.72 Exemple dune squence dexcution avec un ordonnancement
en prsence de ressources critiques : squence valide.

3
15 10 5 0
t
15 10 5 0
t
15 10 5 0
t
utilisation de la ressource
pas dutilisation de ressource
Figure 8.73 Exemple dune squence dexcution avec un ordonnancement
en prsence de ressources critiques : squence non valide.
TR
2
C
1
C
1
+ 2 6 + 8 = = = D
2
6 = >
476
8.5 Ordonnancement
des tches priodiques dpendantes
8 tude avance
des systmes temps rel
de telle faon que les rgles de priorit, qui ont conduit lvaluation du temps de
rponse de lquation 8.42, soient vraies. Ce protocole hritage de priorit peut
se dcrire ainsi (gure 8.74) :
si la ressource est libre : une tche accde cette ressource ;
si la ressource nest pas libre : la tche est bloque et la tche possdant la ressource
hrite de la priorit de la tche bloque.
Avec ce protocole hritage de priorit, lexemple, dcrit sur la gure 8.69, a un com-
portement diffrent. La tche t
2
, qui stait immisce dans lattente de la tche
tudie t
0
, est maintenant rejete aprs celle-ci, et cela cause de la priorit de la
tche t
3
hrite de la tche t
0
jusqu la n de sa section critique (gure 8.75). Les
calculs du temps de rponse donns dans les quations 8.42 et 8.43 pour cet exemple
sont exacts.
t
t
priorit
des
tches
Tche
1
Tche
2
Hritage de priorit
Figure 8.74 Principe du protocole dhritage de priorit permettant dviter le phnomne
dinversion de priorit dans un ordonnancement en prsence de ressources critiques.
TR
0
t
t
t
t
priorit
des
tches
fin de tche
Tche
1
Tche
0
Tche
2
Tche
3
date de rveil
demande
ressources critiques
utilisation
ressources critiques
Hritage de priorit
Figure 8.75 Reprsentation du protocole dhritage de priorit permettant dviter le phnomne
dinversion de priorit dans un ordonnancement en prsence de ressources critiques.
8.5 Ordonnancement
des tches priodiques dpendantes
477


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
Si la prise des ressources pour une mme tche est faite de manire embote, ce
protocole peut sappliquer plusieurs fois pour une mme tche : hritage multiple.
Ce processus est visualis sur la gure 8.76.
Un exemple complet de prise en compte du partage de ressources critique avec un
protocole hritage de priorit est trait avec la conguration de trois tches donne
dans le tableau 8.27.
Cette conguration de tches comprend trois tches priodiques chance sur
requte et dpart simultan. Le facteur dutilisation est U 0,917 et la priode
dtude H 24. Laffectation des priorits a t effectue selon lalgorithme DM.
Les deux tches t
1
et t
3
partagent une ressource critique. Lautre tche t
2
est compl-
tement indpendante des deux autres tches. La premire analyse dordonnancement
a t faite sans utiliser le protocole hritage de priorit et nous pouvons constater
une inversion de priorit sur la gure 8.77. Cette inversion de priorit peut tre
facilement vite par lutilisation du protocole hritage de priorit comme le montre
la gure 8.78.
Tableau 8.27 Exemple dune configuration de trois tches partageant une ressource critique.
Tche r
i
C
i,
C
i,
C
i,
C
i
D
i
T
i

1
0 1 1 0 2 6 6

2
0 2 0 0 2 8 8

3
0 0 4 0 4 12 12
t
t
Hritage de la priorit de
2
Hritage de la priorit de
1
Priorit initiale
t
priorit
des
tches
R
1
R
2
R
2
R
1
R
1
R
2
R
2
R
1
Tche
1
Tche
2
Tche
3
fin de tche
demande
ressources critiques
date de rveil
utilisation R
1
utilisation R
2
utilisation R
1
et R
2
Figure 8.76 Reprsentation du protocole dhritage de priorit hritage multiple permettant
dviter le phnomne dinversion de priorit dans un ordonnancement en prsence de plusieurs
ressources critiques.
=
=
478
8.5 Ordonnancement
des tches priodiques dpendantes
8 tude avance
des systmes temps rel
m Protocole priorit plafond pour le traitement des ressources critiques
Le protocole prcdent permet donc dviter linversion de priorit et donc de pou-
voir borner le temps de rponse dune tche. Toutefois ce temps de rponse comme le
montre lquation 8.42 peut avoir une valeur leve si beaucoup de tches partagent
une mme ressource. De mme, ce protocole na nullement permis dviter le ph-
nomne de blocage fatal. Pour rpondre ces deux inconvnients, il est possible
dutiliser le protocole dit priorit plafond.
Une ressource possde une priorit seuil, appele priorit plafonne ou PP, qui
est la priorit de la tche la plus prioritaire accdant cette ressource. Le mcanisme
du protocole de gestion des ressources est alors le suivant :
Si la ressource est libre :
une tche accde cette ressource si sa priorit est strictement suprieure aux
priorits plafonnes des ressources en cours dutilisation au niveau de toute
lapplication ;
t

2
4 2 0 2 6 1 8 4
t
4 2 0 2 6 1 8 4

3 t
4 2 0 2 6 1 8 4
Inversion de priorit
12
12
12
utilisation ressource
pas dutilisation de ressource
Figure 8.77 Squence dexcution de la configuration dcrite dans le tableau 8.27 dans un
ordonnancement en prsence de ressources critiques : phnomne dinversion de priorit.
t
1

2
4 2 0 2 6 1 2 1 8 4
t
4 2 0 2 6 1 2 1 8 4

3
t
4 2 0 2 6 1 2 1 8 4
utilisation ressource
pas dutilisation de ressource
Hritage de priorit
Figure 8.78 Squence dexcution de la configuration dcrite dans le tableau 8.27 dans un
ordonnancement en prsence de ressources critiques : protocole hritage de priorit.
8.5 Ordonnancement
des tches priodiques dpendantes
479


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
sinon la tche est bloque et la tche possdant la ressource hrite de la priorit
de la tche bloque.
Si la ressource nest pas libre : la tche est bloque et la tche possdant la ressource
hrite de la priorit de la tche bloque.
Notons que ce protocole se diffrencie du protocole hritage de priorit simple
uniquement sil y a plus de 2 ressources critiques partages. Prenons lexemple de
deux tches t
1
et t
2
qui utilisent les deux ressources critiques R
1
et R
2
. La tche t
1
ayant la priorit la plus forte, les deux ressources possdent la mme priorit pla-
fond (PP
1
PP
2
Prio
1
), cest--dire la priorit de t
1
. La gure 8.79 montre le
principe de fonctionnement de ce protocole.
Un exemple plus complet est prsent sur la gure 8.80. Les trois tches partagent
deux ressources. La tche t
1
, la plus prioritaire, utilise les deux ressources R
1
et R
2
.
La tche t
2
, de priorit intermdiaire, utilise la ressource R
2
. Enn, la tche t
3
, pos-
sdant la priorit la plus faible, utilise la ressource R
1
. Le protocole donne aux deux
ressources une priorit plafonne identique celle de la tche t
1
(PP
1
PP
2
Prio
1
).
Lors de lexcution, le protocole hritage de priorit permet de limiter le temps de
rponse de la tche t
1
. En effet, la tche t
2
ne peut prendre la ressource R
2
alors
quelle est libre, puisque la priorit de la tche t
2
possde une priorit infrieure
la priorit plafond de la ressource utilise (R
1
) : Prio
2
< PP
1
. Avec Sc
max
la dure
maximale de la plus grande section critique des tches de plus faible priorit, le
temps de rponse TR est donc :
(8.44 )
Ainsi, en plus de limiter le temps de rponse des tches, ce protocole priorit pla-
fond permet de saffranchir des situations de blocage fatal. Mme si la ralisation
du code na pas suivi la mthode des classes ordonnes, le blocage ne peut se mettre
en place (gure 8.81). Ainsi, nous pouvons constater que la tche t
1
ne peut pas
prendre la ressource R
2
qui aurait bloqu lapplication, car la priorit de la tche t
1
= =
t
t
R
2
R
1
Hritage de la priorit de
1
priorit
des
tches
Tche
1
Tche
2
Blocage d la priorit plafonne de R
1
Figure 8.79 Principe du protocole priorit plafond
dans un ordonnancement en prsence de ressources critiques.
= =
TR
0
C
0
T
i
T
0
------ C
i
i =1
p

Sc
max
+ + =
480
8.5 Ordonnancement
des tches priodiques dpendantes
8 tude avance
des systmes temps rel
a une priorit qui nest pas strictement suprieure la priorit plafond de la ressource
utilise (R
1
).
Dans le cas de lalgorithme EDF, cet algorithme est complexe puisque la priorit
plafonne des ressources change au fur et mesure de lexcution. Le cot systme
est bien videmment plus important en utilisant un algorithme dordonnancement
de type Earliest Deadline First avec un protocole de gestion des ressources critiques
de type hritage de priorit avec priorit plafonne dynamique. Dautres algo-
rithmes peuvent tre utiliss comme le protocole pile. Plusieurs excutifs (POSIX,
OSEK/VDX, Ada) mettent en uvre une version simplie du protocole hritage
de priorit et priorit plafonne.
m Conclusion sur les protocoles utiliss pour le traitement des ressources critiques
Nous pouvons noter que, si lalgorithme dordonnancement est mis en place au
niveau de lordonnanceur du noyau, les protocoles de gestion des ressources critiques
sont intgrs aux primitives de protection des sections critiques (smaphore).
La validation temporelle de lexcution des applications avec les algorithmes RM,
DM, ED, ML est toujours possible avec des tches partageant des ressources
Priorit initiale
t
t
t
priorit
des
tches
fin de tche
demande
ressources critiques
R
1
R
2
R
2
R
2
R
2
R
2
R
2
R
2
Tche
1
R
1
et R
2
R
2
R
2
Tche
1
Tche
1
date de rveil
utilisation R
1
utilisation R
2
utilisation R
1
et R
2
Hritage de la priorit de
2
Hritage de la priorit de
1
Figure 8.80 Exemple du comportement du protocole priorit plafond
dans un ordonnancement en prsence de ressources critiques.
t
t
Tche
1
Tche
2
R
1
R
2
R
1
R
2
R
2
R
1
R
1
R
2
priorit
des
tches
Figure 8.81 vitement du blocage fatal grce au protocole priorit plafond.
8.6 Analyse dordonnanabilit
en environnement monoprocesseur
481


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
critiques ; il faut intgrer aux dures des tches les dures de blocage maximum dues
aux attentes des ressources critiques (cette dure de blocage dpend du protocole
de gestion des ressources). Donc chaque tche de lapplication aura une dure dex-
cution exprime sous la forme :
avec B
i
: dure de blocage due aux ressources critiques
Cette proprit sera utilise dans la prochaine section pour faire une validation des
applications.
8.6 Analyse dordonnanabilit
en environnement monoprocesseur
8.6.1 Modlisation et ordonnancement des applications temps rel
Nous sommes partis dun modle thorique simple : la tche priodique et indpen-
dante. Sur la base de ce modle thorique, nous avons tudi des algorithmes dordon-
nancement, optimaux dans leur domaine, permettant dlaborer des conditions
dordonnanabilit. Il est donc extrmement intressant de pouvoir transformer toutes
les applications temps rel en un ensemble de tches priodiques indpendantes.
Or nous trouvons dans les applications temps rel, des tches apriodiques, des tches
dpendantes et des tches partageant des ressources critiques. La mthodologie dana-
lyse des applications temps rel consiste donc transformer lapplication initiale pour
la rendre compatible avec lenvironnement thorique de validation. Ainsi, nous avons
les transformations suivantes (gure 8.82) :
tches priodiques indpendantes : les tches restent identiques (modle thorique
initial) ;
tches apriodiques indpendantes : les tches sont transformes en tches prio-
diques laide dun des modles de serveur ( 8.4) ;
tches dpendantes : les tches sont transformes en tches indpendantes en
transformant les paramtres temporels ( 8.5) ;
tches partageant des ressources : lutilisation des protocoles de gestion des res-
sources (protocoles hritage de priorit ou priorit plafond) permet de borner
la dure de chaque tche et ainsi de considrer les tches comme indpendantes :
mthode danalyse RMA ( 8.6.2).
Lapplication ainsi transforme est quivalente en termes dordonnanabilit lappli-
cation initiale ; par consquent, si lapplication temps rel transforme est ordon-
nanable, lapplication initiale non transforme est aussi ordonnanable. Si, dans
le contexte dun algorithme optimal pour la conguration, lapplication temps rel
transforme est non ordonnanable, lapplication initiale non transforme ne peut
pas tre ordonnanable en utilisant un algorithme de la mme puissance (algorithmes
priorit xe ou algorithmes priorit variable).
C
i
*
C
i
B
i
+ =
482
8.6 Analyse dordonnanabilit
en environnement monoprocesseur
8 tude avance
des systmes temps rel
8.6.2 Mthode de validation RMA
Cette prise en compte des dures de blocage a permis de mettre en uvre une mtho-
dologie de validation temporelle dapplication temps rel dont lalgorithme dordon-
nancement est fond sur Rate Monotonic RM (affectation des priorits selon la
priode) et un protocole de gestion de ressources (hritage de priorit ou hritage
de priorit avec priorit plafonne). La mthodologie est appele Rate Monotonic
Analysis ou RMA.
Nous allons supposer dune part que les tches sont priodiques (utilisation dun
serveur priodique) et dautre part que les tches sont indpendantes au sens synchro-
nisation (utilisation de la modication des paramtres des tches). Ensuite, nous
allons procder au calcul du temps de blocage des tches.
Considrons un ensemble de n tches indpendantes, chance sur requte, class
par ordre de priorit (la tche t
i
plus prioritaire que la tche t
j
si i<j : Prio
i
>Prio
j
).
Ces tches partagent m ressources critiques R
k
. Nous allons de plus dnir les gran-
deurs suivantes :
b
j,k
: la dure de la section critique de la tche t
j
utilisant la ressource R
k
avec
b
j,k
0 si la tche t
j
nutilise pas la ressource R
k
.
PP
k
: la priorit plafond de la ressource R
k
, cest--dire la priorit la plus haute
des tches utilisant la ressource R
k
.
Ainsi, nous pouvons crire que le temps de blocage dune tche t
i
, appel B
i
,
sexprime de la faon suivante :
Algorithmes
dordonnancement
permettant la validation
(RM, DM, ED, ML)
Protocoles
de gestion
des ressources critiques
(hritage, plafond)
Tches indpendantes
Tches partageant des ressources
Cration
de serveurs
+
Tches
apriodiques
Tches
avec prcdence
Modification
paramtres
Figure 8.82 Mthodologie danalyse dune application temps rel
afin dutiliser des algorithmes dordonnancement permettant une validation.
=
8.6 Analyse dordonnanabilit
en environnement monoprocesseur
483


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
Cas du protocole hritage de priorit :
(8.45)
Cas du protocole priorit plafond :
(8.46 )
Considrons une conguration compose de six tches priodiques chances
sur requte et dpart simultan. Ces tches, dont les priorits sont affectes selon
lalgorithme RM et classes par ordre de priorit selon les indices (le plus petit indice
correspond la tche la plus prioritaire), partagent trois ressources critiques R
1
, R
2
et R
3
. Les caractristiques temporelles des tches sont donnes dans le tableau 8.28.
Le facteur dutilisation est U 0,4 et la priode dtude H 5000. Les priorits
plafond de ces ressources critiques sont : PP
1
Prio
2
, PP
2
Prio
1
et PP
3
Prio
1
.
Nous pouvons dterminer la matrice B
sc
des dures des sections critiques de cette
application :
Nous pouvons donc calculer les dures de blocage en utilisant les relations 8.45 et
8.46 pour les deux types de protocoles (tableau 8.29). Dans le cas du protocole
hritage de priorit, nous avons lvaluation du terme B
1
:
car
Dans le cas du protocole priorit plafond, nous avons lvaluation du terme B
1
:
car
B
i
Min Max

k
b
j, k
: si PP
k
Prio
i
[ ]
j =i+1
n

Max

j >i
b
j , k
: si PP
k
Prio
i
[ ]
k =1
n

,
( ,
, (
j \
=
B
i
Max

k 1, m [ ] j >i ,
b
j, k
: si PP
k
Prio
i
[ ] =
= =
= = =
B
sc
b
j k ,
R
1
R
2
R
3

1
0 2 2

2
5 5 5

3
10 0 0

4
10 0 0

5
0 10 0

6
0 15 0
=
B
i
Min Max b
j, 2
b
j , 3
, [ ]
j =2
6

Max b
2, k
b
3, k
b
4, k
b
5, k
b
6, k
, , , , [ ]
k =2
3

,
( ,
, (
j \
=
PP
1
Prio
1
<
M = in Max 5 5 , ( ) Max 0 0 , ( ) Max 0 0 , ( ) Max 10 0 , ( ) Max 15 0 , ( ) + + + + [ ]
Max 5 0 0 10 15 , , , , ( ) Max 5 0 0 0 0 , , , , ( ) + [ ] =
Min 5 0 0 10 15 + + + + [ ] 15 5 + [ ] , ( ) Min 30 20 , ( ) 20 = = =
B
i
Max b
2, 2
b
3, 2
b
4, 2
b
5, 2
b
6, 2
b
2, 3
b
3, 3
, b
4, 3
b
5, 3
b
6, 3
, , , , , , , , [ ] = PP
1
Prio
1
<
Max 5 0 0 10 15 5 0 0 0 , , , , , , , , [ ] = 15 =
484
8.6 Analyse dordonnanabilit
en environnement monoprocesseur
8 tude avance
des systmes temps rel
Les dures de blocage sont ainsi calcules et reportes dans le tableau 8.29. partir
de ces donnes, nous pouvons mettre en uvre plusieurs techniques danalyse de
lordonnanabilit de la conguration. Celles-ci permettent de valider de plus en plus
prcisment lapplication, cest--dire que lanalyse devient de moins en moins
pire cas .
m Technique 1 : analyse RM simple
Considrons une premire technique danalyse qui est une traduction directe de la
condition sufsante de lalgorithme RM (quation 8.27) en intgrant pour chacune
des tches le temps de blocage associ, soit :
Tableau 8.28 Exemple dune configuration de six tches partageant trois ressources critiques.
Ressource R
1
(PP
1
=Prio
2
) R
2
(PP
2
=Prio
1
) R
3
(PP
3
=Prio
1
)
Tche r
i
C
i,
C
i,
C
i,
C
i,
C
i,
C
i,
C
i,
C
i,
C
i,
C
i
D
i
T
i

1
0 0 0 0 0 2 2 2 2 0 4 40 40

2
0 0 5 10 5 5 5 10 5 0 15 50 50

3
0 0 10 0 0 0 0 0 0 0 10 500 500

4
0 0 10 0 0 0 0 0 0 0 10 500 500

5
0 0 0 0 20 10 20 0 0 0 50 1000 1000

6
0 0 0 0 15 15 20 0 0 0 50 5000 5000
Tableau 8.29 Exemple dune configuration de six tches partageant trois ressources critiques :
calcul des dures de blocage.
Tche u
i
Prio B
i
(priorit hrite) B
i
(priorit plafond)

1
0,1 6 20 15

2
0,2 5 25 15

3
0,02 4 25 15

4
0,02 3 15 15

5
0,05 2 15 15

6
0,01 1 0 0
U = 0,4
8.6 Analyse dordonnanabilit
en environnement monoprocesseur
485


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
(8.47)
Pour lapplication dcrite dans les tableaux 8.28 et 8.29, nous avons un facteur
dutilisation sans prendre en compte les ressources de U 0,4 (tableau 8.29). La
limite suprieure permettant de dcider de lordonnanabilit de la conguration
est donc satisfaite comme le montre le calcul suivant :
Nous pouvons maintenant faire lvaluation du facteur dutilisation en prsence des
ressources critique avec lquation 8.47. Donc, dans les deux cas correspondant aux
deux protocoles de gestion de ressources critiques, nous obtenons :
Cas du protocole hritage de priorit :
Cas du protocole priorit plafond :
Nous voyons que, dans les deux cas, la condition nest pas respecte et que nous
devons conclure une non validit de lordonnancement de la conguration avec
une affectation de priorit base sur lalgorithme RM et les protocoles de gestion
de ressources critiques dnis. Nous pouvons remarquer que ces calculs montrent
des facteurs dutilisation suprieurs 100 % ; cela met en exergue laspect pire cas
trs pessimiste de ce test.
U C
i
B
i
+ ( )
i =1
n

T
i
n 2
1
n
---
1
( ,
, (
j \
=
=
U
C
i
T
i
-----
( ,
j \
i =1
6

4
40
------
10
50
------
10
500
---------
10
500
---------
50
1000
------------
50
5000
------------ + + + + + = =
0,4 6 2
1
6
---
1
( ,
, (
j \
0,735 =
U
C
i
B
i
+
T
i
----------------
( ,
j \
i =1
6

4 20 + ( )
40
--------------------
10 25 + ( )
50
-----------------------
10 25 + ( )
500
-----------------------
10 15 + ( )
500
----------------------- + + +
(
j
= =

50 15 + ( )
1 000
-----------------------
50
5 000
------------- +
,
\
+
1,43 0,735 >
U
C
i
B
i
+
T
i
----------------
( ,
j \
i =1
6

4 15 + ( )
40
--------------------
10 15 + ( )
50
-----------------------
10 15 + ( )
500
-----------------------
10 15 + ( )
500
----------------------- + + +
(
j
= =

50 15 + ( )
1 000
-----------------------
50
5 000
------------- +
,
\
+
1,14 0,735 >
486
8.6 Analyse dordonnanabilit
en environnement monoprocesseur
8 tude avance
des systmes temps rel
m Technique 2 : analyse RM amliore
La technique prcdente peut tre amliore en considrant que le blocage ne doit
tre pris en compte que pour une tche pour une priode dtude. Ne connaissant
pas la tche qui va tre bloque par les autres, il est ncessaire de considrer le
temps de blocage maximum, do la relation :
(8.48)
Appliquons cette technique lapplication que nous avons dj teste. Donc, dans
les deux cas correspondant aux deux protocoles de gestion de ressources critiques,
nous obtenons :
Cas du protocole hritage de priorit :
Cas du protocole priorit plafond :
Cette condition dordonnanabilit est encore trop pessimiste pour permettre de
conclure sur lordonnanabilit de cette conguration. Il est donc ncessaire de mettre
en uvre une mthode plus ne.
m Technique 3 : analyse RM itrative
Considrons une autre technique danalyse qui est une traduction itrative de la
condition sufsante de lalgorithme RM (quation 8.27). Le test est effectu partir
de la tche la plus prioritaire en intgrant progressivement chacune des tches avec
leur temps de blocage, soit :
(8.49)
U
C
i
T
i
-----
( ,
j \
Max

i 1 n , [ ]
B
i
T
i
-----
( ,
j \
+
i =1
n

= n 2
1
n
---
1
( ,
, (
j \

U
4
40
------
10
50
------
10
500
---------
10
500
---------
50
1000
------------
50
5000
------------ + + + + + =
Max
20
40
------
25
50
------
25
500
---------
15
500
---------
15
1000
------------ , , , ,



+
0,4 0,5 + = 0,9 0,735 NON < =
U
4
40
------
10
50
------
10
500
---------
10
500
---------
50
1000
------------
50
5000
------------ + + + + + =
Max
15
40
------
15
50
------
15
500
---------
15
500
---------
15
1000
------------ , , , ,



+
0,4 0,375 + = 0,775 0,735 NON < =
j 1 n , [ ] : U
C
i
T
i
-----
C
j
B
j
+
T
j
---------------- +
i =1
j 1

j 2
1
j
---
1
( ,
, (
j \
=
8.6 Analyse dordonnanabilit
en environnement monoprocesseur
487


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
Le principe dvelopp dans cette technique est simple. Pour une tche t
j
, on consi-
dre dune part les tches qui peuvent linterrompre (les tches les plus prioritaires) ;
cela correspond au premier terme de lquation 8.49 (sommation du facteur duti-
lisation de toutes les tches plus prioritaires que de la tche t
j
). Et dautre part, il faut
prendre en compte la dure de la tche t
j
et son terme de blocage B
j
.
Appliquons cette technique lapplication que nous avons dj teste. Dans les deux
cas correspondant aux deux protocoles de gestion de ressources critiques, nous
obtenons :
Cas du protocole hritage de priorit :
Pour
Pour
Pour
Pour
Pour
Pour
Cas du protocole priorit plafond :
Pour
Pour
Pour
Pour
Pour
Pour
Avec cette technique lordonnanabilit de la conguration est prouve. Nous pou-
vons ainsi dclarer que la conguration des six tches partageant des ressources cri-
tiques est ordonnanable avec laffectation de priorit selon lalgorithme RM.
Nous pouvons remarquer toutefois que lutilisation du protocole de gestion de res-
j 1 :
4 20 + ( )
40
-------------------- 0,6 1 < = =
j 2 :
4
40
------
10 25 + ( )
50
----------------------- + 0,8 0,828 < = =
j 3 :
4
40
------
10
50
------
10 25 + ( )
500
----------------------- + + 0,37 0,779 < = =
j 4 :
4
40
------
10
50
------
10
500
---------
10 15 + ( )
500
----------------------- + + + 0,37 0,757 < = =
j 5 :
4
40
------
10
50
------
10
500
---------
10
500
---------
10 15 + ( )
500
----------------------- + + + + 0,405 0,743 < = =
j 6 :
4
40
------
10
50
------
10
500
---------
10
500
---------
50
1000
------------
50
5000
------------ + + + + + 0,4 0,735 < = =
j 1 :
4 15 + ( )
40
-------------------- 0,475 1 < = =
j 2 :
4
40
------
10 15 + ( )
50
----------------------- + 0,6 0,828 < = =
j 3 :
4
40
------
10
50
------
10 15 + ( )
500
----------------------- + + 0,35 0,779 < = =
j 4 :
4
40
------
10
50
------
10
500
---------
10 15 + ( )
500
----------------------- + + + 0,37 0,757 < = =
j 5 :
4
40
------
10
50
------
10
500
---------
10
500
---------
10 15 + ( )
500
----------------------- + + + + 0,405 0,743 < = =
j 6 :
4
40
------
10
50
------
10
500
---------
10
500
---------
50
1000
------------
50
5000
------------ + + + + + 0,4 0,735 < = =
488
8.6 Analyse dordonnanabilit
en environnement monoprocesseur
8 tude avance
des systmes temps rel
sources critiques de type hritage de priorit donne une validation trs proche de
la limite (cas j 2).
Il est intressant de remarquer que cette technique permet dexpliquer la technique
prcdente. En effet, lquation 8.48 de la technique 2 est une majoration gros-
sire de lquation 8.49 de la technique 3.
(8.49)
m Technique 4 : analyse par temps de rponse
Cette technique calcule le pire temps de rponse dun ensemble de tches. Pour
effectuer ce calcul, il est ncessaire de dnir le temps pendant lequel le processeur
est occup excuter des tches de priorit suprieure ou gale Prio
i
(priode
dactivit ou busy period de niveau i). Cette analyse seffectue en plusieurs tapes :
tape 1 : valuation de la date de n dexcution a
0
de la tche t
i
dans cette
priode dactivit. Le calcul de a
0
prend en compte lexcution dune instance
de toutes les tches plus prioritaires que la tche t
i
et le temps de blocage de la
tche t
i
:
(8.50)
tape 2 : en utilisant le calcul de a
n
, lquation 8.51 dtermine la prochaine it-
ration a
n+1
:
(8.51)
Notons que, dans cette priode dactivit de niveau i, au plus un facteur de blocage
B
i
est pris en compte. En effet, aucune tche de priorit infrieure ce niveau i
ne peut dbuter et donc prendre une ressource dans cette priode.
=
j 1 n , [ ] : U
C
i
T
i
-----
C
j
B
j
+
T
j
---------------- +
i =1
j 1

j 2
1
j
---
1
( ,
, (
j \
=
j 1 n , [ ] : U
C
i
T
i
-----
C
j
B
j
+
T
j
---------------- +
i =1
j 1

n 2
1
n
---
1
( ,
, (
j \
=
j 1 n , [ ] : U
C
i
T
i
-----
B
j
T
j
----- +
i =1
n

n 2
1
n
---
1
( ,
, (
j \
=
U
C
i
T
i
----- Max

i 1 n , [ ]
B
i
T
i
-----
( ,
j \
n 2
1
n
---
1
( ,
, (
j \
+
i =1
n

=
a
0
B
i
C
i
j =1
i

+ =
a
n 1 +
B
i
C
i
a
n
T
j
----- C
j
j =1
i 1

+ + =
8.6 Analyse dordonnanabilit
en environnement monoprocesseur
489


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
tape 3 : cette tape va dterminer si cette approximation a
n+1
est le temps de
terminaison de t
i
. Si la valeur de a
n+1
est suprieure lchance de la tche :
D
i
, alors lanalyse et termine et le test a chou. Si a
n+1
a
n
, alors reprendre
ltape 2.
tape 4 : si a
n+1
a
n
, alors nous avons obtenu le temps de terminaison de la
priode dactivit. Nous pouvons alors obtenir le temps de rponse TR
i
de la
tche t
i
, soit :
(8.52)
Nous pouvons alors conclure sur lordonnancement si ce temps de rponse TR
i
de la tche t
i
est infrieur son chance D
i
.
Illustrons cette technique pour la conguration prcdemment tudie et dcrite par
les tableaux 8.28 et 8.29 en considrant un protocole hritage de priorit. Nous
allons nous intresser au temps de rponse de la tche t
2
sachant que cela corres-
pond une tude classique : analyser le temps de rponse maximum dune tche
dune conguration . En suivant les diffrentes tapes donnes, nous obtenons :
tape 1 : valuation de la date de n dexcution a
0
de la tche t
2
dans la priode
dactivit du niveau de priorit 3 :
tape 2 : en utilisant le calcul de a
0
, nous obtenons a
1
:
tape 3 : comme a
1
a
0
, alors nous allons ltape 4.
tape 4 : nous avons obtenu le temps de terminaison de linstance de la tche
t
2
. Nous pouvons alors obtenir le temps de rponse TR
2
de cette tche t
2
, soit :
tape 5 : La priode dactivit est termine, car TR
2
est infrieur ou gal T
2
;
lchance de la tche t
2
est donc bien respecte : TR
2
39<D
2
T
2
50.
Poursuivons notre analyse par la tche t
3
. Soit les tapes suivantes :
tape 1 : valuation de la date de n dexcution a
0
de la tche t
3
dans la priode
dactivit du niveau de priorit 3 :
=
TR
i
a
n
=
a
0
B
2
C
j
j =1
2

+ 25 4 10 + ( ) + 39 = = =
a
1
B
2
C
2
a
0
T
j
----- C
j
j =1
1

+ + 25 10 ( )
39
40
------ 4 + + 39 = = =
=
TR
2
a
2
39 = =
= = =
a
0
B
3
C
j
j =1
3

+ 25 4 10 10 + + ( ) + 49 = = =
490
8.6 Analyse dordonnanabilit
en environnement monoprocesseur
8 tude avance
des systmes temps rel
tape 2.1 : en utilisant le calcul de a
0
, nous obtenons une valeur de a
1
qui fait
apparatre le fait que la tche t
1
peut sexcuter deux fois avant la date a
0
, soit :
tape 3.1 : comme a
1
a
0
(d lexcution de deux instances de la tche t
1
),
alors nous reprenons ltape 2.
tape 2.2 : en utilisant le calcul de a
1
, nous obtenons a
2
qui fait apparatre le fait
que les tches t
1
et t
2
peuvent sexcuter deux fois avant la date a
1
, soit :
tape 3.2 : comme a
2
a
1
(d lexcution des deux instances des tches t
1
et
t
2
), alors nous reprenons ltape 2.
tape 2.3 : en utilisant le calcul de a
2
, nous obtenons a
3
:
tape 3.3 : comme a
3
a
2
(d la n litration car, avant la date a
2
, les tches
t
1
et t
2
peuvent sexcuter deux fois et la tche t
3
une seule fois), alors nous
allons ltape 4 (gure 8.83).
tape 4 : nous avons obtenu le temps de terminaison de la tche t
3
. Nous pou-
vons alors obtenir le temps de rponse TR
3
de cette instance de la tche t
3
, soit :
Lchance de la tche t
3
est donc bien respecte : TR
3
63 < D
3
T
3
500.
Cette analyse peut tre effectue pour lensemble des tches de la conguration et
conduire la conclusion de lordonnanabilit de la conguration si tous les tests
sont positifs.
Il est important de noter que toutes ces validations ne sont valables et appli-
cables quen faisant lhypothse de dures de tches xes, connues et dter-
ministes.
a
1
B
3
C
3
a
0
T
j
----- C
j
j =1
1

+ + 25 10 ( )
49
40
------ 4
49
50
------ 10 + + + 53 = = =
a
2
B
3
C
3
a
1
T
j
----- C
j
j =1
2

+ + 25 10 ( )
53
40
------ 4
53
50
------ 10 + + + 63 = = =
a
3
B
3
C
3
a
2
T
j
----- C
j
j =1
2

+ + 25 10 ( )
63
40
------ 4
63
50
------ 10 + + + 63 = = =
=
TR
3
a
3
= 63 =
= = =
8.7 Ordonnancement
en environnement multiprocesseur
491


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
8.7 Ordonnancement
en environnement multiprocesseur
8.7.1 Introduction gnrale
m Dfinitions
Le systme informatique de contrle est souvent constitu de plusieurs quipements
informatiques interconnects par un rseau et ce pour les raisons suivantes :
le procd est, par nature, constitu dquipements multiples, dots chacun de
son unit informatique : chane de fabrication ;
la sret de fonctionnement conduit multiplier les quipements de contrle
pour diminuer la dfaillance de lensemble du procd : systmes embarqus (aro-
nautique) ;
les contraintes de temps conduisent utiliser plusieurs systmes informatiques
pour une excution en parallle de certaines tches : simulateur de vol. Ce
dernier cas peut conduire des systmes de type multiprocesseur.
La dnition gnrale dun systme informatique multiprocesseur ou rparti pour-
rait tre la suivante : un ensemble de systmes informatiques, appels nuds, relis
entre eux par un rseau de communication en vue dchanger des informations .
Nous pouvons distinguer deux grandes catgories de systmes informatiques rpartis :
Les systmes rpartis contrle centralis ou systmes multiprocesseurs ou
encore systmes fortement coupls qui prsentent des analogies fortes avec les
systmes centraliss (monoprocesseur) en se diffrenciant essentiellement par la
capacit mettre en uvre un paralllisme dexcution:
base de temps commune (ordonnancement global des vnements et des
tches) ;
(blocage)
Nouvelle
demande de
1
Nouvelle
demande de
2
t

1

2

3

3
a
0
= 49
(blocage)
t

1

2

3

3

1
a
1
= 53
(blocage)
t

1

2

3

1

2

3
a
2
= 63
Figure 8.83 Analyse dordonnanabilit selon la technique RMA
base sur lvaluation du temps de rponse.
492
8.7 Ordonnancement
en environnement multiprocesseur
8 tude avance
des systmes temps rel
mmoire unique (vecteur de la communication entre les tches) ;
vue globale de ltat du systme chaque instant dobservation.
Les systmes rpartis ou distribus ( contrle dcentralis) ou systmes faible-
ment coupls :
pas de mmoire commune et dhorloge commune
la synchronisation et la communication se font laide dchanges de messages
travers le rseau, ce qui amne des dlais de transmission plus longs et moins
dterministes.
La rpartition sur plusieurs nuds dexcution induit de nombreuses difcults
dans les systmes informatiques rpartis :
Lordonnancement : les algorithmes optimaux classiques dordonnancement
dans les systmes monoprocesseurs ne sappliquent plus dans un contexte multi-
processeur ou rparti o il existe des algorithmes dordonnancement spciques
pour ces deux cas.
Allocation ou placement ou encore rpartition des tches : une certaine phase
de la conception, lapplication (tches et donnes) doit tre partitionne travers
les diffrents nuds du systme pour assurer efcacement sa fonction.
Fiabilit (tolrance aux fautes) : les systmes rpartis conduisent tout naturelle-
ment une abilit accrue lie au fait que lapplication est plus tolrante vis--vis
des pannes processeurs. En revanche, le rseau (panne, surcharge, incohrence
temporelle ou spatiale des donnes) amne une difcult supplmentaire dans
la ralisation dapplications haut degr de sret de fonctionnement dont la
abilit et la scurit sont deux des lments essentiels.
Autres difcults pour les systmes rpartis : synchronisation des processus
entre les diffrents sites (horloge globale), validit des donnes (cohrence spatiale
et temporelle), dures de communication, etc.
m Synchronisation dans les systmes distribus : horloge globale
Lordonnancement en environnement distribu ncessite une synchronisation,
cest--dire une cadence ou une horloge identiques sur les diffrents sites. Les dif-
cults majeures cette synchronisation sont les suivantes :
les horloges des diffrents sites drivent ;
la dure de la transmission dun message est inconnue.
La seule manire de synchroniser les sites est lenvoi de messages entre les sites. En
revanche, il est ncessaire de trouver un compromis entre les deux options :
envoyer de nombreux messages an dobtenir une meilleure synchronisation,
mais un encombrement important du rseau ;
envoyer un nombre restreint de messages conduisant une synchronisation moins
bonne.
De nombreuses recherches ont conduit des rsultats trs intressants. Il est possible
de dnir le nombre de messages envoyer par chaque site an dobtenir une horloge
avec une prcision donne sur lensemble des sites.
8.7 Ordonnancement
en environnement multiprocesseur
493


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
m Placement des tches dans les systmes distribus
Le problme de placement ou dallocation des tches peut tre rsolu partir des
paramtres statiques de lapplication, soit :
Caractristiques statiques des tches : dure dexcution, place mmoire, cots
de communications, interactions avec le procd, importance
Caractristiques statiques de larchitecture oprationnelle : nombre de nuds,
architecture interne des nuds (mono ou multiprocesseur), vitesses de traitement
des processeurs, caractristiques du rseau de communication (dlai de propaga-
tion, dlai de transmission), etc.
La solution du placement des tches sur les diffrents sites est dtermine partir
de la prise en compte de nombreux critres comme :
minimiser le nombre de processeurs ;
quilibrer la charge des processeurs ;
minimiser la communication entre les nuds ;
prendre en compte les contraintes de rsidence ;
minimiser le temps de rponse dune tche ou dun ensemble de tches ou dun
site ;
respecter le degr de redondance pour chaque tche
La solution ne peut tre quun compromis par rapport lensemble de ces critres.
Une fois places sur les diffrents sites, les tches peuvent migrer entre les diffrents
nuds selon les besoins de lapplication : surcharge dun ou plusieurs sites, panne
dun ou plusieurs sites. Nous avons traiter le processus de la migration dynamique
qui peut tre ralise chaque instance ou en cours dexcution avec la migration du
contexte de la tche. Il est important de noter que la migration dynamique con-
cerne un changement de site dexcution car le code est install sur plusieurs sites
(gure 8.84).
Tche
E
Tche
F
Tche
C
Tche
G
Tche
A
Tche
C
Tche
B
Tche
D
Rseau
Figure 8.84 Rpartition des tches sur deux sites :
duplication de la tche C qui peut donc sexcuter sur les deux nuds.
494
8.7 Ordonnancement
en environnement multiprocesseur
8 tude avance
des systmes temps rel
8.7.2 Ordonnancement dans les systmes multiprocesseurs
m Anomalie de fonctionnement
Dans le cadre de lordonnancement en environnement multiprocesseur, nous pou-
vons avoir un comportement semblable aux excutions en environnement mono-
processeur en prsence de ressources critiques, cest--dire une anomalie de fonc-
tionnement.
Prenons lexemple dune conguration de six tches qui doivent sexcuter sur deux
processeurs identiques. Nous supposons que les tches sont premptibles et que la
migration peut tre effectue uniquement en n de tche. Les caractristiques tem-
porelles sont donnes dans le tableau 8.30.
Il est important de noter que, dune part, les tches sont dpart diffr et, dautre
part, que la tche t
2
a une dure dexcution qui peut varier de 2 6. Nous allons
tudier lexcution de cette conguration avec diffrentes valeurs de la dure de la
tche t
2
. Dans ce type de test, il est naturel de considrer les valeurs extrmes du
domaine de variation de la dure de la tche t
2
. Ainsi, nous avons les squences
suivantes (gure 8.85) :
cas I : dure dexcution de la tche t
2
de 2. La squence est valide ; mais nous
pouvons constater que le phnomne dinversion de priorit se produit lors de
lexcution de la tche t
5
qui sexcute avant la tche t
4
;
cas II : dure dexcution de la tche t
2
de 6. La squence est aussi valide ; et nous
pouvons constater que le phnomne dinversion de priorit ne se produit pas ;
cas III : dure dexcution de la tche t
2
de 5. La squence est valide ; et nous
pouvons constater que nous obtenons les meilleurs temps de rponse pour les
tches t
4
et t
6
.
Ces trois tests dexcution semblent dmontrer lordonnanabilit de la congura-
tion. Les tests correspondent aux deux valeurs extrmes et une autre valeur inter-
Tableau 8.30 Configuration de six tches excutes
sur deux processeurs identiques.
Tche r
i
C
i
D
i

1
0 5 10

2
0 [2,6] 10

3
4 8 15

4
0 10 20

5
5 100 200

6
7 2 22
8.7 Ordonnancement
en environnement multiprocesseur
495


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
mdiaire de la dure dexcution de la tche t
2
[2,6]. Un autre test est effectu avec
une valeur de la dure dexcution de la tche t
2
de 3, valeur faible dans lintervalle
de variation de la dure. La gure 8.86 montre que cette excution conduit une
inversion de priorit et surtout aux dpassements des chances pour les tches t
4
et t
6
. Nous pouvons ainsi constater que le comportement de lexcution nest pas
logiquement li aux paramtres temporels des tches, comme leur dure.
r P
1
0 2 5 1 0 1 5 0
t
r P
2
0 2 5 1 0 1 5 0
t
r P
1
0 2 5 1 0 1 5 0
t
r P
2
0 2 5 1 0 1 5 0
t
Meilleurs
temps de rponse
r P
1
0 2 5 1 0 1 5 0
t
r P
2
0 2 5 1 0 1 5 0
t
Inversion
de priorit

1

3

5

2

4

6

2

4

6

2

4

3

6

5
I
II
III
Figure 8.85 Squences dexcution de la configuration, dcrite dans le tableau 8.30,
traces pour trois dures diffrentes de la tche t
2
: 2 (cas I), 6 (cas II) et 5 (cas III).
r P
1
0 2 5 1 0 1 5 0
t
r P
2
0 2 5 1 0 1 5 0
t
Dpassement
dchance
Inversion
de priorit

2

2

6

5
Figure 8.86 Squence dexcution de la configuration, dcrite dans le tableau 8.30,
trace pour une dure de la tche t
2
de 3.
496
8.7 Ordonnancement
en environnement multiprocesseur
8 tude avance
des systmes temps rel
m Les algorithmes dordonnancement monoprocesseur
en environnement multiprocesseur
Remarque
Il ne peut exister dalgorithme quasi en ligne qui construise une squence valide sur une conguration
matrielle comportant m 2 processeurs pour une conguration de tches temps rel date critique.
Cette remarque entrane obligatoirement lutilisation dheuristiques ou dutilisation
de mthode danalyse exhaustive. Ainsi, un algorithme hors ligne (rsolution de pro-
blme doptimisation de systme linaire) pourra traiter certaines congurations
non rsolues par un algorithme quasi en ligne ou en ligne.
Nous allons nous placer dans un environnement constitu de m processeurs avec une
conguration de n tches priodiques excuter, dnies par les quatre paramtres
temporels classiques : (r
i
,C
i
,D
i
,T
i
). Une premire condition ncessaire dordonnan-
abilit de la conguration concerne le facteur dutilisation, soit :
(8.54 )
La proprit de cyclicit pour des tches dpart simultan se retrouve pour un
systme multiprocesseur, ainsi la priode dtude est identique celle prsente
pour les systmes monoprocesseurs :
Nous pouvons effectuer une premire analyse laide des algorithmes optimaux et
puissants tudis en environnement monoprocesseur : EDF et ML. Considrons un
exemple simple, constitu de trois tches priodiques, dcrit dans le tableau 8.31.
Le facteur dutilisation est U 1,39 et la priode dtude H 72. Cette congu-
ration peut donc sexcuter sur un environnement deux processeurs en considrant
la relation 8.54.
Nous allons supposer possible la migration en cours dexcution. La gure 8.87
montre lexcution de cette conguration avec lalgorithme dordonnancement de
type EDF. La squence nest pas valide cause du dpassement dchance de la
tche t
1
. La gure 8.88 montre la mme excution avec lalgorithme ML ; et, dans
ce cas, la squence dexcution est valide.
Tableau 8.31 Configuration de trois tches excuter
sur une plate-forme deux processeurs.
Tche r
i
C
i
D
i
T
i

1
0 8 9 9

2
0 2 8 8

3
0 2 8 8
U C
i
T
i
m
i =1
n

=
H PPCM

T
i

i 1 n , [ ]
=
= =
8.7 Ordonnancement
en environnement multiprocesseur
497


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
chance
non respecte
0 1
0 2
0 1
0 2

3
r P
1
r P
2

3
t
t
Figure 8.87 Squence dexcution de la configuration dcrite dans le tableau 8.31
avec lalgorithme EDF.

3
r P
1
0 1 0 1 0 1
0 1 0 2
0 1 0 2
r P
2

1

1

2

2

2

2

3

3

3

3
t
t
0 1 2 3 4 5 6 0 1 2 3 4 5 6 3 4 5 6
0 1 2 3 4 5 6 0 1 2 3 4 5 6 3 4 5 6
Figure 8.88 Squence dexcution de la configuration dcrite dans le tableau 8.31
avec lalgorithme ML.
498
8.7 Ordonnancement
en environnement multiprocesseur
8 tude avance
des systmes temps rel
partir de cet exemple, nous pouvons faire les deux conclusions suivantes :
Le comportement des algorithmes en environnement multiprocesseur ne peut
pas tre rapproch du comportement en environnement monoprocesseur, en
particulier les proprits ne sont plus vraies : optimalit
Lalgorithme ML semble plus puissant que lalgorithme EDF dans un environne-
ment multiprocesseur ; ils taient identiques en environnement monoprocesseur.
m Techniques dordonnancement en environnement multiprocesseur
De nombreuses techniques dordonnancement existent en environnement multi-
processeur. Ces techniques sont gnralement utilises pour des congurations pos-
sdant des proprits particulires.
Nous allons seulement donner un exemple de ce type de technique base sur le dcou-
page temporel du temps processeur au prorata du facteur dutilisation du processeur
par chacune des tches. Considrons une conguration de n tches chance sur
requte et dpart simultan excuter sur un environnement compos de m pro-
cesseurs. Les tches sont classes selon leur facteur dutilisation du temps processeur,
cest--dire :
pour (8.55)
Dans ce contexte, nous avons une condition ncessaire et sufsante dordonnana-
bilit qui est donne par la relation suivante :
(8.56 )
Cette expression un peu complexe cache une construction aise de la squence
comme nous allons ltudier sur un exemple prcis. tudions lexemple de con-
guration de trois tches dcrite dans le tableau 8.32.
Nous vrions que cette conguration respecte bien le classement donn par la
relation 8.55. Dautre part, le facteur dutilisation globale (U 1,66) indique quil
est ncessaire de disposer dune architecture au moins deux processeurs pour
Tableau 8.32 Configuration de trois tches excuter sur une plate-forme deux processeurs
selon un algorithme bas sur la proportionnalit de laffectation du temps processeur lie au
facteur dutilisation de chaque tche.
Tche r
i
C
i
D
i
T
i
u
i

1
0 2 3 3 0,66

2
0 2 4 4 0,5

3
0 3 6 6 0,5
u
i
u
i +1
i 1 n 1 , [ ]
Max Max
1
j
--- u
i
pour j 1 m , [ ]
i =1
j




;
1
m
---- u
i
i =1
n




1
=
8.7 Ordonnancement
en environnement multiprocesseur
499


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
satisfaire la condition ncessaire 8.54. La priode dtude est H 12. Enn, nous
pouvons tester que la condition ncessaire et sufsante 8.56 est bien satisfaite, soit :
Pour raliser la construction de la squence, il suft de noter sur le diagramme tem-
porel les instants de rveil des diffrentes tches. Entre deux de ces instants, la dure
processeur utile peut tre divise entre les diffrentes tches au prorata des facteurs
dutilisation processeur u
i
des diffrentes tches. Ainsi, entre les deux premires dates
de rveil, intervalle [0,3], la dure processeur disponible est de 3 units de temps ;
donc la rpartition du temps processeur parmi les tches est donne dans le
tableau 8.33. Il suft ensuite daffecter cette dure processeur sur chaque processeur
comme le montre la gure 8.89. Nous trouvons ainsi un placement de lexcution
de toutes les tches sur la priode dtude H. Nous pouvons remarquer que cette
mthode de placement du travail du processeur par tranche conduit mettre des
temps libres tout au long de la squence.
Tableau 8.33 Calcul de laffectation du temps processeur lie au facteur dutilisation
de chaque tche pour le premier intervalle de la squence dexcution.
Tche u
i
Temps processeur
dans lintervalle [0,3]

1
0,66 3*0,66=2

2
0,5 3*0,5=1,5

3
0,5 3*0,5=1,5
=
Max Max
2
3
---;
1
2
---
2
3
---
1
2
--- +
( ,
j \
7
12
------ =



;
5
6
---



5
6
--- = 1
r P
1
r P
2
dates
dactivation

2

3
12 11 10 9 8 7 6 5 4 3 2 1 0
12 11 10 9 8 7 6 5 4 3 2 1 0
12 11 10 9 8 7 6 5 4 3 2 1 0
Figure 8.89 Squence dexcution de la configuration dcrite dans le tableau 8.32
avec un algorithme bas sur laffectation du temps processeur lie au facteur dutilisation.
500
8.7 Ordonnancement
en environnement multiprocesseur
8 tude avance
des systmes temps rel
8.7.3 Ordonnancement dans les systmes distribus
Les systmes rpartis ou distribus ( contrle dcentralis) ou systmes faiblement
coupls font deux hypothses principales :
pas de mmoire commune (pas de connaissance de ltat global du systme) ;
pas dhorloge commune (pas de datation globale des vnements).
Dans ce contexte, deux problmes cruciaux se posent :
le contrle global de lapplication qui est rsolu de faon efcace si le travail se fait
sur la base dune coopration dynamique (synchronisation et communication)
entre les diffrents sites (et tches) laide dchanges de messages travers le
rseau ;
le dlai de communication sur le rseau, abilit du rseau, pannes partielles ou
totales (processeur ou rseau).
Pour rpondre au problme de la coopration dynamique entre les sites, il est nces-
saire de mettre en place un ordonnanceur rparti. Celui-ci doit pouvoir assurer les
diffrentes fonctions suivantes :
assurer un quilibrage des charges (pas de site surcharg) ;
assurer un partage des charges (pas de site inactif ) ;
palier au dysfonctionnement (surcharge, dpassement dchance prvisible pour
une tche, occurrence de tches sporadiques, panne dun processeur, etc.).
La solution rside sur la migration de tches aprs dcision par communication entre
les diffrents sites (les sites possdant des rpliques des tches). La dcision de demande
ou doffre de migration va tre faite en utilisant les diffrents services disponibles
localement sur chacun des nuds, soit :
exploration des listes de tches en attente ;
utilisation de la fonction donnant les temps creux dynamiques ;
conditions analytiques dacceptation ;
utilisation de la notion dimportance de la surcharge avec gestionnaire rparti.
Ainsi, au niveau de chaque site et en supplment de lordonnanceur local, nous
trouvons un ordonnanceur rparti qui change des messages avec les autres ordon-
nanceurs rpartis des autres sites (gure 8.90).
An doptimiser les performances de ces changes de messages utiles uniquement
lordonnancement, il est ncessaire de trouver la meilleure stratgie. Nous supposons
quun site A, dit site demandeur , dsire transfrer une partie de sa charge vers
dautres sites B et C, dits sites offreur . Les principales politiques existantes pour
rpondre cette question sont classes selon la provenance de la demande de
migration, soit :
linitiative du site demandeur :
algorithme stable : le site surcharg recherche site par site un appariement
possible. La surcharge est mesure selon le nombre de tches en attente dans
la liste des tches activables ;
8.7 Ordonnancement
en environnement multiprocesseur
501


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
algorithme aux enchres : la demande du site surcharg aux autres sites
(demande par diffusion), les rponses concernent lestimation de la charge des
sites (notion de surplus) et sont considres comme des enchres la prise en
compte de la demande daide : algorithme 3 messages (gure 8.91).
linitiative du site offreur :
algorithme brouillon : lobjectif de cette stratgie est de diminuer le nombre
de phase de lalgorithme prcdent aux enchres (politique trois communi-
cations) deux communications : proposition de migration et acceptation de la
migration. Pour cela chaque site maintien jour une information surplus
qui est diffuse priodiquement de faon ce que les tches connaissent un
instant donn les tches les moins charges ;
algorithme du site hte : par rapport lalgorithme prcdent, cette stratgie
considre un site hte ou foyer qui est le site le moins charg la connaissance
solution
rseau
surcharge
local
tche
excuter
demande ou offre
de service
demande
de migration
Allocateur
Ordonnanceur
rparti
Ordonnanceur
rparti
Figure 8.90 Architecture des sites au niveau de lagencement de lordonnancement.
site B site C site A
demandeur
demande
de migration
migration
dexcution
offre
en retour
(enchre)
demande
de migration
offre
en retour
(enchre)
Figure 8.91 Stratgie dchanges de messages pour la migration des tches
linitiative du demandeur : algorithme aux enchres.
502
8.7 Ordonnancement
en environnement multiprocesseur
8 tude avance
des systmes temps rel
du site demandeur. La demande de migration est donc envoye prfrentiel-
lement ce site (gure 8.92).
linitiative des deux sites (demandeur et offreur) :
algorithme souple : toujours dans le but de minimiser les messages changs
avant la migration effective, cette stratgie ajoute lalgorithme du site hte
la diffusion simultane de ce choix du site hte particulier auquel doivent tre
renvoyes directement les enchres des autres sites (gure 8.93).
Nous allons illustrer la mise en uvre du dernier algorithme tudi (algorithme
souple) avec un exemple simple. Considrons une application constitue de trois
site B
site A
demandeur site C
diffusion des surplus
site foyer
offre
dacceptation
offre
dacceptation
migration
dexcution
Figure 8.92 Stratgie dchanges de messages pour la migration des tches
linitiative du demandeur : algorithme du site hte.
diffusion des surplus
site B site C
site foyer
offre
dacceptation
offre
dacceptation
demande
de migration
migration
dexcution
offre
en retour
(enchre)
Figure 8.93 Stratgie dchanges de messages pour la migration des tches
linitiative du demandeur : algorithme souple.
8.7 Ordonnancement
en environnement multiprocesseur
503


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
tches priodiques et deux tches apriodiques excuter sur un environnement de
trois sites. Les paramtres temporels sont donns dans le tableau 8.34. La dure de
communication entre deux sites est xe 2 quel que soit le message chang.
Nous allons tester trois cas avec cette conguration, soit :
Cas I : la tche t
2
a une dure de 2 et la tche t
5
nest prise en compte. La
gure 8.94 montre les squences obtenues sur les trois processeurs. Il ny a aucune
migration de tche car le processeur 1 peut accepter la tche t
4
.
Cas II : la tche t
2
a une dure de 7 et la tche t
5
nest prise en compte. La
gure 8.95 montre les squences obtenues sur les trois processeurs. Le processeur 1
ne peut prendre en charge la tche t
4
avant son chance. La migration seffectue
vers le processeur 2 qui est le processeur le moins charg (site foyer). Une offre
arrive au processeur 2 ; mais elle est inutile dans ce cas.
Tableau 8.34 Configuration de trois tches priodiques et de deux tches apriodiques
excuter sur trois processeurs.
Tche r
i
C
i
D
i
T
i
Processeur

1
0 2 ou 7 8 8 1

2
0 3 8 8 2

3
0 5 8 8 3

4
0 2 8 1

5
1 4 8 2
r P
1
8 7 6 5 4 3 2 1 0
r P
2
8 7 6 5 4 3 2 1 0
r P
3

3
t
t
t
8 7 6 5 4 3 2 1 0
Figure 8.94 Illustration du fonctionnement de lalgorithme souple
pour la configuration dcrite dans le tableau 8.34, cas I.
504
8.7 Ordonnancement
en environnement multiprocesseur
8 tude avance
des systmes temps rel
Cas III : la tche t
2
a une dure de 7 et la tche t
5
est prise en compte. La
gure 8.96 montre les squences obtenues sur les trois processeurs. Le processeur 1
ne peut prendre en charge la tche t
4
avant son chance. La migration seffectue
vers le processeur 2 qui le processeur le moins charg au moment de la demande
(site foyer). Mais le processeur 2 ne peut pas prendre en charge la tche t
4
cause
de la tche t
5
. Loffre, arrive au processeur 2 par le processeur 3, est accepte et
renvoye vers le processeur 3 qui excute la tche t
4
.
8.7.4 Validation des systmes distribus
Dans la section prcdente nous avons analys des congurations dont les seuls
paramtres dnis taient les sites et les tches avec leurs paramtres temporels.
Lordonnanceur local doit traiter avec les autres sites en cas de surcharge ou de panne.
Mais, de manire courante, les applications temps rel embarques et distribues
sont compltement dtermines au niveau de la communication des messages.
Nous allons nous placer dans ce contexte, o sites, tches et messages sont connus,
pour conduire lanalyse de lapplication an de la valider temporellement.
r P
1
r P
2
8 7 6 5 4 3 2 1 0
r P
3

3
t
t
t
demande
pour
4
demande
pour
4 offre
pour
4
Figure 8.95 Illustration du fonctionnement de lalgorithme souple
pour la configuration dcrite dans le tableau 8.34, cas II.
r P
1
r P
2
r P
3
8 7 6 5 4 3 2 1 0

5 2
t
t
t
demande
pour
4
demande
pour
4
demande
pour
4
offre
pour
4

4
Figure 8.96 Illustration du fonctionnement de lalgorithme souple
pour la configuration dcrite dans le tableau 8.34, cas III.
8.7 Ordonnancement
en environnement multiprocesseur
505


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
m Anomalie en environnement distribu
Lorsque le systme est distribu, un rseau informatique est lunique moyen de
communication entre les processeurs et constitue ainsi une ressource partage par les
tches. La transmission des messages sur un rseau va conduire au mme phno-
mne dinversion de priorit puisque la transmission dun message ne peut pas tre
interrompue par une autre mission, le mdium de transmission tant physiquement
occup. Ainsi, pour illustrer la mme anomalie que nous avons analyse en environ-
nement monoprocesseur avec ressources critiques, considrons le cas de deux sites
intgrant chacun deux tches : site 1 (tches t
1
et t
4
) et site 2 (tches t
2
et t
3
). La
communication entre les deux sites est compose de deux messages : m
1
de t
1
vers
t
3
, et m
2
de t
2
vers t
4
(gure 8.97). Lordonnancement des deux sites est conduit
par les chances d
i
des tches ; ainsi nous avons un ordre de priorit dordonnan-
cement sur le site 1 (t
1
et ensuite t
4
) et sur le site 2 (t
2
et ensuite t
3
).
La gure 8.98 montre deux excutions possibles de cette conguration selon la
dure de la tche t
2
du site 2. Ainsi, nous avons :
Cas I (la dure de la tche t
2
est suprieure celle de la tche t
1
). La tche t
1
se
termine donc la premire et par consquent envoie le message m
1
sur le rseau.
Ensuite, la tche t
2
se termine, envoie le message m
2
lors de la libration du
rseau par le message m
1
. Cela oblige la tche t
4
attendre ; mais son chance
tant lointaine, les squences dordonnancement sur les deux sites sont valides.
Cas II (la dure de la tche t
2
est infrieure celle de la tche t
1
). La tche t
2
se
termine donc la premire et par consquent envoie le message m
2
sur le rseau.
Ensuite, la tche t
1
se termine, envoie le message m
1
lors de la libration du
rseau par le message m
2
. Cela conduit la tche t
3
attendre et dpasser son
chance. La squence dordonnancement sur le site 1 est valide mais pas la
squence sur le site 2 ; donc, dune faon gnrale, lapplication nest pas valide.
En conclusion, comme pour les systmes monoprocesseurs avec ressources critiques
ou les systmes multiprocesseur, nous pouvons ainsi constater que le comportement
de lexcution nest pas logiquement li aux paramtres temporels des tches, comme
leur dure. Par consquent nous allons nous placer dans un contexte o tous les
paramtres temporels des tches et des messages sont connus et xs a priori, et,
avec ces hypothses, faire une analyse du pire cas.
Site 2
Site 1

2
m
1
m
2
Figure 8.97 Modlisation dune application distribue dfinie par deux sites,
deux tches sur chacun des sites et deux messages changs.
506
8.7 Ordonnancement
en environnement multiprocesseur
8 tude avance
des systmes temps rel
m Analyse holistique des systmes distribus
Les principales hypothses que ncessite cette analyse temporelle des systmes dis-
tribus sont les suivantes :
horloge globale (utilisation dun moyen externe ou par envoi de messages) ;
rseau able (pas de perte de messages) ;
tches dpart simultan au dmarrage du systme ;
pas de migration des tches dans le systme ;
messages lus au dbut de lexcution des tches ;
messages mis la n dexcution des tches.
Lordonnancement conjoint des tches et des messages conduit considrer que la
date dmission dun message dpend du temps de rponse de la tche mettrice et
la date de rveil de la tche rceptrice dpend du temps de transmission ou temps
de rponse du message. Ce dcalage temporel impos par la prcdence dune tche
ou dun message est appel gigue (ne pas confondre avec la gigue comme paramtres
temporels danalyse prsente au 8.2). Ainsi, le message mis m
1-2
et la tche
rceptrice t
2
sont obligatoirement dcals des gigues respectives J
m
et J
2
par rap-
port au dbut de lexcution de la tche mettrice t
1
(gure 8.99).
Soit un ensemble de tches tri par ordre de priorit sur chacun des sites (la tche
t
i
plus prioritaire que la tche t
j
si i<j : Prio
i
>Prio
j
). Nous supposons que lalgo-
rithme choisi est bas sur une affectation de priorit xe. La technique de calcul du
t
t
t
m
1
m
2
t
t
t
m
1
m
2
Dpassement dchance

2

3

1

4

1

4
d
1

d
2

d
2
d
2

d
3
d
1
d
4
d
4

Site 1
Site 2
Rseau
Site 1
Site 2
Rseau
Cas l
Cas ll
Figure 8.98 Illustration dune anomalie de fonctionnement
dans le cas des applications distribues.
8.7 Ordonnancement
en environnement multiprocesseur
507


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
pire temps de rponse des tches est base sur le mme principe que celui que nous
avons utilis dans lanalyse RMA ( 8.6.2). Pour effectuer ce calcul, il est ncessaire
de dnir le temps pendant lequel le processeur est occup excuter des tches de
priorit suprieure ou gale Prio
i
(priode dactivit de niveau i).
Par rapport au calcul des temps de rponse dans lanalyse RMA, les quations 8.50
et 8.51 vont tre augmentes de la gigue initiale que peuvent avoir les tches tant
donn le pire temps dattente de message sur le rseau. Ainsi, les quations rsoudre
sont :
(8.57)
et
(8.58)
Le point xe t
n+1
t
n
est recherch par une mthode itrative. Dans une priode
dactivit, la charge minimale est dnie par lexcution dune instance de chaque
tche. Sous cette forme, q est un paramtre. Chaque incrmentation de q revient
explorer une priode supplmentaire de la tche t
i
, appartenant la priode dacti-
vit de niveau i. Le principe de lalgorithme va consister incrmenter q tant que
le test darrt nest pas vri : le temps de rponse de linstance courante est infrieur
ou gal la prochaine date de rveil de la tche. La borne du pire temps de rponse
peut alors tre value par :
(8.59)
Un exemple dexploration de cette zone dactivit de niveau i est prsent sur la
gure 8.100 en ne prenant pas en compte la gigue et le temps de blocage. La tche t
i
est excute selon quatre instances dans cette zone dactivit. Remarquons que, dans
t
t
t
m
1-2
m
1-2
J
m
J
2

2
d
1
d
2
Figure 8.99 Illustration du dcalage temporel ou gigue dun message
et de la tche rceptrice.
t
0
q 1 + ( )C
i
B
i
J
j
T
j
-----C
j
j =1
i 1

+ +
1
C
j
T
j
-----
j =1
i 1

----------------------------------------------------------- =
t
n+1
B
i
q 1 + ( )C
i
+ =
J
j
t
n
+
T
j
------------- C
j
j =1
i 1

+
=
TR
i
Max t J
i
kT
i
+ ( ) =
508
8.7 Ordonnancement
en environnement multiprocesseur
8 tude avance
des systmes temps rel
cette gure, la tche t
i
nest pas chance sur requte ; en revanche, la n de la
priode dactivit se situe avant la n de la quatrime priode de la tche t
i
.
Un calcul identique peut tre ralis dans le cas dun algorithme priorit dynamique
(EDF) conduisant des quations de la forme de celles obtenues prcdemment.
Dans le cas qui nous intresse o nous avons une application distribue avec un
rseau, il est ncessaire de calculer le pire temps de rponse des messages de la mme
manire que pour les tches ordonnances en environnement priorit xe. La
diffrence essentielle rside dans le fait que la premption nest plus autorise puis-
quun message envoy occupe le rseau jusqu sa n. Ainsi, en considrant que les
messages sont classs par ordre de priorit comme les tches (le message m
i
de dure
C
i
plus prioritaire que la tche m
j
de dure C
j
si i<j), nous avons pour m messages
la relation suivante :
(8.60)
Et le pire temps de rponse du message m
i
:
(8.61)
La dure C
i
dun message m
i
est calcule selon le type de protocole avec les infor-
mations donnes dans le chapitre 4.
La mise en uvre de lensemble de ces calculs ncessite dans la plupart des cas des
calculs complexes. Prenons un exemple trs simple pour illustrer cette validation des
applications distribues par valuation des pires temps de rponse. Soit une appli-
cation distribue constitue de trois tches priodiques indpendantes rparties sur
deux processeurs avec un seul message chang (gure 8.101 et tableau 8.35).
Le site 1 est ordonnanc avec une politique RM, cest--dire que la tche t
1
est plus
prioritaire que la tche t
2
. Remarquons que la tche t
3
, lie la tche t
2
par le
message m
1
, possde une priode identique la tche t
2
. Nous allons calculer la
gigue du message m
1
et ensuite la gigue de la tche t
3
. Pour un calcul aussi simple,
il nest pas ncessaire dutiliser les quations prcdentes. Ainsi, nous commenons
par le site 1 ; la gure 8.102 montre que la tche t
2
est prempte par la deuxime
instance de la tche t
1
. Par consquent, la gigue du message m
1
est donne par :
temps
temps
2 1
T
i
T
i
T
i
C
i
C
i
TR
i
= t-q T
i
Periode dactivit de niveau i de longueur t
Tches
plus prioritaires
que
i

i
2 3
4
Figure 8.100 Exemple du calcul de la longueur dune zone dactivit de niveau i.
t
n+1
q 1 + ( )C
i
=
J
j
t
n
+
T
j
------------- 1 +
( ,
j \
C
j
j =1
i 1

max

i k m
C
k
( ) + +
TR
i
Max t J
i
kT
i
+ ( ) =
8.7 Ordonnancement
en environnement multiprocesseur
509


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
8 tude avance
des systmes temps rel
tant donn que dans cet exemple simple il ny a quun seul message, celui-ci ne peut
pas tre retard donc la gigue de la tche t
3
du deuxime site est :
Le pire temps de rponse de la tche t
3
sera donc infrieur son chance qui est
gale la priode :
Tableau 8.35 Configuration de trois tches priodiques indpendantes
excuter sur deux processeurs.
Tche r
i
C
i
D
i
T
i
Processeur

1
0 30 100 100 1

2
0 80 200 200 1

3
0 10 200 200 2
m
1
0 20
J
m
1
C
2
2 C
1
80 60 + 140 = = + =
J
3
J
m
1
C
m
1
+ C
2
2 C
1
C
m
1
+ + = =
80 60 20 + + 160 = =
TR
3
J
3
C
3
+ 160 10 + 170 d
3
< T
3
200 = = = = =
Site 2
Site 1

1
m
1
Figure 8.101 Exemple dune application distribue
dfinie sur deux sites avec trois tches et un message chang.
t
t
t
J
m
1

1

1

1
d
1
et d
2
d
1

d
3

m
1
Site 1
Site 2
J
3

3
Figure 8.102 Squence dexcution de lune application dcrite dans le tableau 8.35.
Annexes
513


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

A REPRSENTATION DE LINFORMATION

Cette annexe prsente les mthodes utilises pour la reprsentation des nombres
entiers signs et des nombres fractionnaires virgule xe et virgule ottante.

A.1 Reprsentation binaire des entiers signs

Pour un entier sign (

i.e.

pouvant prendre des valeurs ngatives) sur

n

bits, une
reprsentation nave utiliserait un bit de signe (par exemple le bit de poids fort), et
les

n1

bits restants pourraient permettre de reprsenter la valeur absolue du nombre.
Cependant, le 0 aurait deux reprsentations (+ 0, et 0), et les oprations arith-
mtiques ncessiteraient des circuits plus labors quils ne le sont. Par exemple,
il serait ncessaire dans les processeurs de prvoir laddition et la soustraction, de
tester les signes des oprandes avant de choisir lopration effectuer, de plus, un test
0 ncessiterait de comparer un nombre avec deux valeurs (ou bien de restreindre
la comparaison aux bits de la valeur absolue), etc. cause de tous ces inconvnients,
la reprsentation des entiers signs en signe et valeur absolue na t que trs peu
utilise dans la ralit. Cest la notion de complment qui est utilise la place. Le
complment 1 dun nombre binaire consiste simplement inverser tous les bits
dun nombre donn en valeur absolue, ainsi, le nombre 9 sur 8 bits vaut b00001001.
Son complment 1 vaut b11110110 (chaque chiffre du nombre se voit remplacer
par la diffrence entre lui et 1, soit, en binaire, remplacement des 1 par 0 et des 0
par 1). Supposons que lon reprsente 9 par le complment 1 de 9, et addition-
nons 9 + 9 : b00001001 + b11110110 b11111111. On obtient le complment
de 0, soit 0, dans cette reprsentation, 0 a donc deux reprsentations (+ 0 et 0).
Or, la proprit dune reprsentation borne est quen ajoutant 1 0, on obtient
+ 0 avec une retenue qui dborde de la reprsentation. Lide, an dviter le pro-
blme de la double reprsentation du 0, est dajouter 1 au complment dun nombre
pour obtenir son oppos. Cela sappelle le complment 2 (complment 1 + 1).
Ainsi, le complment 2 de 9, qui sert reprsenter 9, est b11110110 + b1
b11110111. Si lon additionne sur 8 bits 9 et 9 en complment 2, on obtient
alors b00001001 + b11110111 b00000000 plus une retenue sur le 9

e

bit, qui
est ignore puisque dbordant de la reprsentation. Il est primordial de considrer
la taille de la reprsentation pour cette technique. On peut noter que le complment
2 de 0 est 0 (reprsentation unique du 0). Chaque nombre a une reprsentation
unique en complment 2.
=
=
=
514

A.1 Reprsentation binaire des entiers signs

A Reprsentation
de linformation

Le tableau A.1 montre les diffrentes reprsentations possibles des entiers signs
sur 8 bits.
Remarquons quil est simple de savoir en reprsentation des entiers en complment
2 si le nombre est ngatif : en effet, le bit de poids fort (le bit le plus gauche)
vaut 0 si lentier est positif, et 1 si lentier est ngatif, comme pour la reprsentation
en signe et valeur absolue. Lobtention de la valeur absolue dun nombre ngatif
(dont le bit de poids fort vaut 1) se fait donc en retranchant 1 et en complmentant.
Ainsi, le nombre b11110011 est ngatif (bit de poids fort 1), sa valeur absolue
est le complment de b11110011 b1 b11110010, soit b00001101, cest--dire
13. b11110011 est donc la reprsentation en complment 2 de 13. La seule
exception concerne le plus petit nombre ngatif (voir tableau A.1), puisque le
domaine des entiers signs nest pas symtrique ( cause du + 1 du complment 2) :
[ 2

n

1

..2

n

1

1]. Ainsi, le domaine est partitionn en 2, mais le 0 est reprsent
par + 0.
On peut remarquer que laddition et la soustraction sont faites exactement de la
mme faon : effectuer

a b

consiste effectuer

a

+

complment__2(b)

.
Il faut retenir que pour les entiers signs, la reprsentation la plus communment
utilise dans les processeurs est le complment 2. Lors du choix dun type de repr-
sentation pour une variable, il est primordial de savoir si lon choisit une reprsen-

Tableau A.1

Reprsentation des entiers signs
(signe et valeur absolue, complment 1, complment 2) sur 8 bits.

Valeur
dcimale
Signe
et valeur absolue
Complment
1
Complment
2

127 01111111 01111111 01111111
126 01111110 01111110 01111110

1 00000001 00000001 00000001
0 00000000 00000000 00000000
0 10000000 11111111
1 10000001 11111110 11111111

126 11111110 10000001 10000010
127 11111111 10000000 10000001
128 10000000
=
A.2 Reprsentation des nombres fractionnaires

515


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

A Reprsentation
de linformation

tation signe ou non signe. Par exemple, si en langage C on utilise un type caractre
sign (char) il faut avoir conscience que son domaine de variation est [ 128..127]
et non [0..255].
An dillustrer la technique du complment, la gure A.1 prsente son application
dcimale sur 8 chiffres : le complment 10 (complment 9+1). Notons cepen-
dant que dans ce cas, le chiffre de poids fort ne peut prendre que les valeurs 0 et 9
pour + et .

A.2 Reprsentation des nombres fractionnaires

Pour clore le chapitre de la reprsentation de linformation, il convient dtudier
succinctement le codage binaire des nombres fractionnaires. Ceci an de dmontrer
la complexit des oprations sur ce type de nombres (la plupart des microprocesseurs
possdent une unit spcialise dans ce type de calculs, alors que peu de microcon-
trleurs en ont une), et avertir le lecteur sur les dangers inhrents lapproximation
de nombres rels par une reprsentation discrte et borne.
Il existe deux types de reprsentation de nombres fractionnaires : la reprsentation
en point xe, et la reprsentation en virgule ottante.

A.2.1 Nombres virgule fixe

Lorsque lon connat le domaine de variations des nombres manipuls, et la pr-
cision dsire, il est possible de dnir un type

point xe

, caractris par le plus petit
nombre reprsentable appel

delta

(gnralement il sagit dune puissance ngative
de 2, comme 2

3

par exemple). Ce sera la puissance de 2 associe au bit de poids
faible. Ensuite, comme illustr sur la gure A.2, les puissances vont croissantes
comme pour les nombres binaires classiques. Gnralement, les nombres en point
xe sont reprsents sous la forme signe et valeur absolue. Lintervalle de reprsen-
tation dun nombre point xe sign reprsent sur

n

bits va de 2

n

-1

*

delta

+

delta


+ 2

n

-1

*

delta

-

delta

(le

n

1 est d au fait que lon perd le bit de signe pour la repr-
sentation de la valeur absolue), et sa prcision est de

delta

(

i.e.

il existe un intervalle
de

delta

entre deux nombres reprsentables conscutifs). On peut remarquer que la
reprsentation point xe en signe et valeur absolue souffre dune double reprsen-
tation du 0.
Complment 9 de -352 sur 4 chiffres = 9647
Complment 10 (9+1) de -352 = 9648
0456
+9648
0104
La dernire retenue (celle provoque par le signe) est ignore
1 1 1
Figure A.1 Addition des nombres dcimaux 456 et 352 en complment 10.
516

A.2 Reprsentation des nombres fractionnaires

A Reprsentation
de linformation

En fait, la reprsentation point xe correspond xer la virgule dans le nombre
rationnel. En effet, le chiffre correspondant 2

0

correspond au chiffre des units,
et les chiffres qui correspondent aux puissances ngatives de 2 correspondent aux
chiffres qui suivent la virgule.
Il est noter que certaines reprsentations en type point xe utilisent le complment
2 pour reprsenter les nombres signs. Par consquent, lutilisation du type point
xe est relativement efcace, puisque lon peut utiliser tels quels les circuits arith-
mtiques du processeur : deux nombres donns en point xe (sur le mme

delta

)
ont exactement les mmes proprits arithmtiques que les entiers.

A.2.2 Nombres virgule flottante

Lorsque lon na pas dide prcise du domaine de variations des nombres manipuls,
on utilise plutt une reprsentation virgule ottante. La reprsentation commu-
nment utilise a t normalise sous la norme IEEE 754. Lide de base est dutiliser
des points xes par intervalles de valeurs : si le nombre est grand, on positionne la
virgule de sorte que le

delta

soit grand, si le nombre est petit, on positionne la virgule
de faon avoir un

delta

petit. Bien videmment, la prcision de la reprsentation
change avec le

delta

.
Lide de base est la suivante (gure A.3) : un nombre est (sauf exceptions prsentes
aprs) reprsent en forme normalise, cest--dire sous la forme

signe

*1,

mantisse

*
2

exposant

. Or en binaire, il est inutile de reprsenter le bit toujours 1 avant la vir-
gule. Ce bit nest donc pas reprsent pour un ottant normalis : il est appel bit
cach. Lexposant ne se reprsente pas laide dun signe et dune valeur absolue,
ni mme dune reprsentation des ngatifs en complment, mais avec un biais. Le
biais consiste scinder les 2

n

valeurs possibles de

n

bits en dcalant du biais linter-
valle [0..2

n

1]. Cela revient donc considrer que les valeurs possibles de lexpo-
sant sont comprises dans [

biais

..2

n

1

biais

]. Par exemple, pour un exposant
donn sur 8 bits avec un biais de 127, les valeurs possibles de lexposant se situent
dans [ 127..128] (alors que la reprsentation de lexposant varie videmment dans
[0..255]).
An dafner la prcision autour du 0, la norme IEEE 754 propose certains am-
nagements rcapituls dans le tableau A.2. On pourra noter une reprsentation
signe
delta.2
0
delta.2
1
delta.2
2
delta.2
n-2
Sur 8 bits, pour un delta valant 2
-3
, reprsentation de 10,375
Nombres reprsentables : 15,875 15,875 avec un pas de 0,125
1 1 0 1 0 0 1 1
sgn 2
3
2
2
2
1
2
0
2
-1
2
-2
2
-3
Figure A.2 Reprsentation dun nombre fractionnaire en point fixe.
A.2 Reprsentation des nombres fractionnaires

517


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

A Reprsentation
de linformation

dnormalise lorsque lexposant est gal

biais

(reprsentation 0 de la partie
exposant biais du ottant).
La gure A.4 montre que les ottants correspondent des points xes par partie,
avec autant de parties que dexposants possibles.

Tableau A.2

Smantiques spcifiques du format IEEE 754.

Nombre Caractrisation

0 exposant biais = 0
mantisse = 0
exposant biais = plus grand nombre reprsentable
(255 en 32 bits)
mantisse = 0
NaN
(

Not a Number

)
exposant = plus grand nombre reprsentable
(255 en 32 bits)
mantisse



0
Nombre
dnormalis
exposant biais = 0
mantisse


0
Le bit cach vaut 0,
et lexposant vaut 126
( biais + 1)
Exposant biais sgn Mantisse
8 bits biaiss de 127 :
En normalis
exp = exposant biais 127
23 bits+1 bit cach
En normalis, le bit cach se lit 2
exp
2
-2+exp
2
-1+exp
2
-3+exp
2
-22+exp
2
-21+exp
2
-23+exp
Figure A.3 Reprsentation dun nombre virgule flottante au format IEEE 754 sur 32 bits.
e=0
m=0
0
Flottants normaliss
e=1
m=0
2
-126
e=1
m=1
2
-126
+2
-149
Flottants dnormaliss
e=0
m=1
2
-149
e=0
m=2
2*2
-149
e=0
m=3
3*2
-149
2
-149
e=1
m=2
23
1
2
-126
2
-149
e : exposant biais
m : valeur binaire prsente dans la mantisse
e=1
m=2
23
1
2
-125
2
-149
e=2
m=0
2
-125
e=2
m=1
2
-125
2
-148

e=254
m=2
23
1
2
128
2
104
2
-149
2
-149
2
-149
2
-149
2
-149
2
-148
2
-148
2
104
Figure A.4 Domaines et prcisions des flottants IEEE 754 sur 32 bits.
518

A.2 Reprsentation des nombres fractionnaires

A Reprsentation
de linformation

An dillustrer la complexit des oprations arithmtiques sur les ottants, citons
la prise en compte des smantiques diffrentes suivant la reprsentation (inni,


Not a Number

, normalis ou dnormalis), citons aussi la complexit, relativement
aux oprations entires, dune opration basique, telle laddition de deux ottants.
An dadditionner deux nombres ottants, il faut :
mettre les deux nombres au mme exposant, ce qui peut faire apparatre le bit
cach dans le ottant de plus petit exposant, au dtriment des bits de poids faible
qui peuvent tre perdus (le ottant peut tre arrondi).
Laddition des mantisses peut alors tre ralise.
Le ottant obtenu est alors renormalis (si lexposant le permet).
An doptimiser ces oprations, les microprocesseurs sadjoignent souvent un copro-
cesseur spcialis dans les calculs virgule ottante. Pour les microcontrleurs, cela
est moins frquent. Un concepteur souhaitant raliser une rgulation, par PID (Pro-
portionnelle, Intgrale, Drive) par exemple, devra donc tre conscient du fait que
sil manipule des nombres ottants, et quil ne possde pas de coprocesseur spcia-
lis, chaque opration arithmtique ottante ncessite de nombreuses instructions
et est donc coteuse en nombre de cycles processeur.
Enn, il est indispensable davoir conscience que larithmtique en nombres ot-
tants perd de nombreuses proprits arithmtiques classiques sur les nombres rels.
Par exemple, laddition nest pas associative (

i.e.

en fonction des ordres de grandeur
de trois ottants

a

,

b

, et

c

, on peut observer (

a

+

b

)+

c





a

+(

b

+

c

)), cela est d aux
arrondis lors des mises au mme exposant. Il peut alors arriver, par exemple lors de
linversion dune matrice de faon numrique, que les valeurs obtenues soient signi-
cativement diffrentes de celles que lon aurait obtenues laide dun calcul sym-
bolique.
519


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

B STANDARDS POSIX

Nom IEEE Nom Notes

1003.0 Guide de lenvironnement dun systme
dexploitation POSIX (

Guide to POSIX
Operating Systems Environment

)
Abandonn en 2002.

1003.1

Interface systme (

System Interface

) Dfinit linterface de programmation
systme dun systme dexploitation
POSIX Dernire version 2004. Depuis
2001, intgre diffrents amendements
donns ci-aprs.
1003.1a Services systmes additionnels
(

Additional System Services

)
Intgre dans la 1003.1 depuis 2001.

1003.1b

Extensions temps rel



(

Realtime Extensions

)
Dernire version 1993,
intgre dans 1003.1 depuis 2001.

1003.1c

Tches (

Threads

) Dernire version 1995,
intgre dans 1003.1 depuis 2001.

1003.1d

Extensions temps rel additionnelles
(

Additional Realtime Extensions

)
Dernire version 1999.
1003.1e Scurit (

Security

) Abandonn en 1998.
1003.1f Accs transparent aux fichiers
(

Transparent File Access

)
Abandonn en 1997.
1003.1g Interfaces indpendantes des protocoles
(

Protocol Independant Interfaces

)
Dernire version 2000.
1003.1h Tolrance aux fautes (

Fault Tolerance

) Dernire version 2000 Devenu 1003.25.

1003.1i

Corrections aux extensions temps rel
(Fixes to 1003.1b)
Dernire version 1995,
intgre dans 1003.1 depuis 2001.
520

1003.1j

Extensions temps rel avances
(

Advanced Realtime extensions

)
Dernire version 2000.
1003.1k Interface de programmation
des supports amovibles
(

Removable Media API

)
Abandonn en 1997.
1003.1L Non utilis (pour viter les confusions
1003.11 1003.1l ?)
1003.1m Point de contrle/Redmarrage
(

Checkpoint/Restart

)
Abandonn en 2000.
1003.1n Corrections aux 1003.1, 1b, 1c, 1i
(

Fixes to 1003.1/1b/.1i/.1c

)
Abandonn en 2001.
1003.1o Non utilis (pour viter les confusions
1003.10 1003.1o ?)
1003.1p Limites de ressources (

Resource Limits

) En dveloppement depuis 1995.
1003.1q Trace (

Tracing

) Dernire version 2000. Intgr
dans 1003.1 depuis 2001.
1003.1r (

1003.1g Alignment w/ Single Unix Spec

) Abandonn en 1997.
1003.1s Synchronisation dhorloges (

Sync Clock

) Choix dabandonner en 2002.
1003.2&2a Shell & outils, extension de portabilit
(

Shell & Tools, User Portability Extensions

)
Dernire version 1992.
1003.2b Utilitaires supplmentaires
(

Additional Utilities

)
Intgre dans la 1003.1 depuis 2001.
1003.2c Scurit (

Security

) Intgre dans 1003.1e.
1003.2d Batch (

Batch

) Dernire version 1994. Intgre
dans 1003.1 depuis 2001.
1003.2e Utilitaires de supports amovibles
(

Removable Media Utilities

)
Abandonn en 1997.
1003.3 Mthodes de test de conformit POSIX
(

Test Methods for Measuring
Conformance to POSIX

)
Dernire version IEEE en 1991.
Intgre dans ISO/IEC 13210 :1999
en 1999.
1003.5 Interface Ada avec 1003.1
(

Ada Binding to 1003.1

)
Dernire version 1997.
1003.5a Mise jour Ada (

Ada Update

) Abandonn en 1996.

Nom IEEE Nom Notes
521


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

1003.5b

Ada temps rel (

Ada Realtime

) Dernire version 1996.
1003.5c Interface Ada 1003.1g
(

Ada bindings to 1003.1g

)
Dernire version 1998.
1003.5d (

Ada PII Sockets

) Abandonn en 1996.
1003.5f Interface Ada 1003.21
(

Ada binding to 1003.21

)
En dveloppement depuis 1997.
1003.5g Interfaces temps rel Ada
(

Ada Binding to Real-Time Interfaces

)
En cours dabandon en 2002.
1003.5h Interface Ada aux horloges
(

Ada binding to 1003.1s Sync Clock

)
En cours dabandon en 2002.
1003.9 Interface Fortran 1003.1
(

Fortran binding to 1003.1

)
Dernire version 1996,
abandonn en 2002.
1003.10 Environnement pour les applications
sur super ordinateurs (

Supercomputing
Application Environment Profile

)
Dernire version 1995,
abandonn depuis 2001.
1003.11 (

Trans Proc Application Environment
Profile

)
Abandonn en 1993.

1003.13

Profils temps rel (

Realtime Application
Environment Profile

)
Dernire version 1998.
1003.13a Profils temps rel embarqu
(

Embedded Systems Application Profile
Environment

)
Abandonn en 2002.
1003.13b Profils temps rel supplmentaires
(

Additional Real-Time Profiles

)
Abandonn en 2002.
1003.14 (

Multi Processing Application
Environment Profile

)
Abandonn en 1998.
1003.16 Interfaces indpendantes dun langage
1003.1 (

LIS binding to 1003.1

)
Abandonn en 1993.
1003.17 Interface de programmation XDS
(

XDS Directory API

)
En dveloppement depuis 1993.
Pass norme ISO depuis.
1003.18 Profil POSIX (

POSIX profile

) Abandonn en 1998.
1003.19 Interface Fortran 90 1003.1
(

Fortran90 binding to 1003.1

)
Abandonn en 1993.

Nom IEEE Nom Notes
522

1003.21 Communication indpendante
du langage de programmation dans
les systmes temps reel distribus
(

Realtime Distrib Sys Comm (LIS)

)
En dveloppement (version 4 en 2002).
1003.22 Guide de scurit (

Security Framework
Guide

)
En dveloppement depuis 1995.
1003.23 Guide de dveloppement de profils
utilisateurs pour systmes ouverts
(

Guide for Developing User
Organizations Open Systems
Environment (OSE) Profiles

)
Dernire version 1998.
Abandonn en 2004.
1003.24 Interface de programmation

X-Window


pour Ada (

Ada binding : X Window
Modular Toolkit

)
Abandonn en 2001.
1003.25 Tolrance aux fautes (

Fault Tolerance

) Nouveau nom de 1003.1h.
En dveloppement depuis 1999.
1003.26 Interface de programmation des
contrleurs de priphriques
(

Device Control APIs

)
En dveloppement depuis 2000.
2003.1 Mthodes de test pour mesurer
la conformit 1003.1
(

Test Methods for 1003.1

)
Dernire version 2000.

2003.1b

Mthodes de test pour mesurer
la conformit 1003.1b
(

Test Methods for 1003.1b

)
Dernire version 2001.
2003.2 Mthodes de test pour mesurer
la conformit 1003.2
(

Test Methods for 1003.2

)
Dernire version en 1996,
raffirm en 2002.

Nom IEEE Nom Notes
523


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

C MODULE DE BOTES AUX LETTRES POSIX

Cette annexe prsente le code source comment dun module de botes aux lettres
implment en C, en utilisant la norme POSIX. Le module intgre les botes aux
lettres de taille 1 prsentes au paragraphe 6.2.1, p. 291, et y adjoint les botes aux
lettres de taille

n

(avec et sans crasement).

C.1 En-tte de module

/*
BaLs.h : dfinitions de diffrents types de BaL
Taille 1, sans ecrasement: bal
Taille 1, avec crasement: bal_ecr
Taille n, sans ecrasement: bal_n
Taille n, avec crasement: bal_n_ecr
*/
#ifndef _BALS_H_
#define _BALS_H_
#include <pthread.h>
/*
Bote aux lettres de taille 1 sans crasement (i.e. envoi et
rception bloquants)
*/
typedef struct s_bal {
char * buf;/* Zone dans laquelle le message est stock, mmoire
alloue DYNAMIQUEMENT par bal_init */
unsigned char vide;/* boolen permettant de savoir si la bote
est vide ou pleine */
pthread_mutex_t mutex;/* Smaphore dexclusion mutuelle
garantissant quune seule tche manipule la structure */
pthread_cond_t pas_plein,pas_vide;/* Variables conditionnelles
utilises pour signaler un ajout/retrait dlment susceptible de
rveiller une tche en attente */
unsigned taille_element;/* taille dun lment de bote aux
lettres */
} *bal;
bal bal_init(const unsigned taille_element);
/* Cre et initialise une bote aux lettres vide
pouvant contenir un lment de taille_element octets
Ncessite: taille_element>0
Renvoie: la BaL si succs, 0 sinon */
int bal_recevoir(bal b, char *buf);
/* Attend un message et reoit un message de la BaL b
Primitive bloquante
524

C.1 En-tte de module

C Module
de botes aux lettres POSIX

Ncessite: b initialise par bal_init
taille(buf) >= taille_element donn lors de bal_init
Entraine: buf contient le message reu
Renvoie: taille_element */
int bal_envoyer(bal b, const char *buf);
/* Envoie un message dans la BaL b (peut attendre que la BaL soit
vide)
Primitive bloquante
Ncessite: b initialise par bal_init
taille(buf) >= taille_element donn lors de bal_init
Entraine: la bote aux lettres contient le message buf
Renvoie: taille_element */
void bal_delete(bal b);
/* Supprime la BaL b
Ncessite: b initialise par bal_init
Entraine: b est supprime */
/* Bote aux lettres avec crasement de taille 1 (i.e. rception
bloquante, envoi non bloquant) */
typedef struct s_bal_ecr {
char * buf; /* Zone dans laquelle le message est stock, mmoire
alloue DYNAMIQUEMENT par bal_ecr_init */
unsigned char vide;/* boolen permettant de savoir si la bote
est vide ou pleine */
pthread_mutex_t mutex;/* Smaphore dexclusion mutuelle
garantissant quune seule tche manipule la structure */
pthread_cond_t pas_vide;/* Variable conditionnelle utilise
pour signaler un ajout dlment susceptible de rveiller une tche en
attente */
unsigned taille_element;/* taille dun lment de bote aux
lettres */
} *bal_ecr;
bal_ecr bal_ecr_init(const unsigned taille_element);
/* Cre et initialise une bote aux lettres crasement vide
pouvant contenir un lment de taille_element octets
Ncessite: taille_element>0
Renvoie: la BaL si succs, 0 sinon */
int bal_ecr_recevoir(bal_ecr bal, char *buf);
/* Attend un message et reoit un message de la BaL b
Primitive bloquante
Ncessite: b initialise par bal_ecr_init
taille(buf) >= taille_element donn lors de bal_ecr_init
Entraine: buf contient le message reu
Renvoie: taille_element */
int bal_ecr_envoyer(bal_ecr bal, const char *buf);
/* Envoie un message dans la BaL b en crasant si besoin le message
prsent
Primitive non bloquante
Ncessite: b initialise par bal_ecr_init
taille(buf) >= taille_element donn lors de bal_ecr_init
Entraine: la bote aux lettres contient le message buf
Renvoie: taille_element */
void bal_ecr_delete(bal_ecr bal);
/* Supprime la BaL b
Ncessite: b initialise par bal_ecr_init
Entraine: b est supprime */
/* Bote aux lettres sans crasement de taille n gre en FIFO */
C.1 En-tte de module

525


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

C Module
de botes aux lettres POSIX

typedef struct s_bal_n {
char ** buf;/* Zone dans laquelle les messages sont stocks,
mmoire alloue DYNAMIQUEMENT par bal_n_init
Elle correspond un tableau de taille cases, chaque case
contenant un lment de taille taille_element */
unsigned debut, fin;/* utiliss pour grer buf sous forme dun
tableau circulaire */
unsigned char vide;/* boolen permettant de discriminer les 2
cas o debut=fin (vide ou plein) */
pthread_mutex_t mutex;/* Smaphore dexclusion mutuelle
garantissant quune seule tche manipule la structure */
pthread_cond_t pas_plein, pas_vide;/* Variables conditionnelles
utilises pour signaler un ajout ou retrait dlment susceptible de
rveiller une tche en attente */
unsigned taille, taille_element;/* taille de la bote en
lments, et taille de chaque lment */
} *bal_n;
bal_n bal_n_init(const unsigned taille, const unsigned
taille_element);
/* Cre et initialise une bote aux lettres de taille n vide
pouvant contenir n lment de taille_element octets
Ncessite: taille_element>0 et taille>0
Renvoie: la BaL si succs, 0 sinon */
int bal_n_recevoir(bal_n bal, char *buf);
/* Attend un message et reoit un message de la BaL bal
Primitive bloquante
Ncessite: bal initialise par bal_n_init
taille(buf) >= taille_element donn lors de bal_n_init
Entraine: le message reu est le premier de la file de messages de bal
Renvoie: taille_element */
int bal_n_envoyer(bal_n bal, const char *buf);
/* Envoie un message dans la BaL bal (peut attendre que la BaL soit
vide)
Primitive bloquante
Ncessite: bal initialise par bal_n_init
taille(buf) >= taille_element donn lors de bal_n_init
Entraine: le message buf est ajout la fin de la file de messages de
bal
Renvoie: taille_element */
void bal_n_delete(bal_n bal);
/* Supprime la BaL bal
Ncessite: bal initialise par bal_n_init
Entraine: bal est supprime */
/* Bote aux lettres avec crasement de taille n */
typedef struct s_bal_n_ecr {
char ** buf; /* Zone dans laquelle les messages sont stocks,
mmoire alloue DYNAMIQUEMENT par bal_n_ecr_init
Elle correspond un tableau de taille cases, chaque case
contenant un lment de taille taille_element */
unsigned debut, fin;/* utiliss pour grer buf sous forme dun
tableau circulaire */
unsigned char vide;/* boolen permettant de discriminer les 2
cas o debut=fin (vide ou plein) */
pthread_mutex_t mutex;/* Smaphore dexclusion mutuelle
garantissant quune seule tche manipule la structure */
526

C.2 Corps de module

C Module
de botes aux lettres POSIX

pthread_cond_t pas_vide;/* Variable conditionnelle utilise
pour signaler un ajout dlment susceptible de rveiller une tche en
attente */
unsigned taille, taille_element;/* taille de la bote en
lments, et taille de chaque lment */
} *bal_n_ecr;
bal_n_ecr bal_n_ecr_init(const unsigned taille, const unsigned
taille_element);
/* Cre et initialise une bote aux lettres de taille n crasement
vide
pouvant contenir n lment de taille_element octets
Ncessite: taille_element>0 et taille>0
Renvoie: la BaL si succs, 0 sinon */
int bal_n_ecr_recevoir(bal_n_ecr bal, char *buf);
/* Attend un message et reoit un message de la BaL bal
Primitive bloquante
Ncessite: bal initialise par bal_n_ecr_init
taille(buf) >= taille_element donn lors de bal_n_ecr_init
Entraine: le message reu est le premier de la file de messages de bal
Renvoie: taille_element */
int bal_n_ecr_envoyer(bal_n_ecr bal, const char *buf);
/* Envoie un message dans la BaL bal (peut attendre que la BaL soit
vide)
Primitive non bloquante
Ncessite: bal initialise par bal_n_ecr_init
taille(buf) >= taille_element donn lors de bal_n_ecr_init
Entraine: le message buf est ajout la fin de la file de messages de
bal,
si la file est pleine, le plus ancien message est supprim
Renvoie: taille_element */
void bal_n_ecr_delete(bal_n_ecr bal);
/* Supprime la BaL bal
Ncessite: bal initialise par bal_n_ecr_init
Entraine: bal est supprime */
#endif

C.2 Corps de module

/*
BaLs.c : dfinitions de diffrents types de BaL
Taille 1, sans ecrasement: bal
Taille 1, avec crasement: bal_ecr
Taille n, sans ecrasement: bal_n
Taille n, avec crasement: bal_n_ecr
*/
#include "BaLs.h"
bal bal_init(const unsigned taille_element) {
bal b;
if (!(b=(bal)malloc(sizeof(struct s_bal)))) return 0; /*
Allocation de la structure */
if (!((*b).buf=(char *)malloc(taille_element))) return 0; /*
Allocation du buffer contenant un message */
(*b).vide=1; /* Initialement la bal est vide */
pthread_mutex_init(&((*b).mutex),0); /* Cration du smaphore
garantissant lexclusion mutuelle des accs la structure */
(*b).taille_element=taille_element;
C.2 Corps de module

527


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

C Module
de botes aux lettres POSIX

pthread_cond_init (&((*b).pas_vide), 0); /* Variable
conditionnelle qui sera dclenche lorsquun message est ajout */
pthread_cond_init (&((*b).pas_plein), 0); /* Variable
conditionnelle qui sera dclenche lorsque la bal est vide */
return b;
}
int bal_recevoir(bal b, char *buf) {
pthread_mutex_lock (&(*b).mutex);
/* Exclusion mutuelle */
while ((*b).vide) {
pthread_cond_wait (&(*b).pas_vide, &(*b).mutex);
/* On attend que la bal contienne un message */
}
memcpy(buf,(*b).buf,(*b).taille_element); /* Copie du message
dans buf */
(*b).vide=1; /* La bote est maintenant vide */
pthread_mutex_unlock (&(*b).mutex); /* Fin de lexclusion
mutuelle */
pthread_cond_broadcast (&(*b).pas_plein); /* On rveille
dventuelles tches en attente sur la bote pleine */
return (*b).taille_element;
}
int bal_envoyer(bal b, const char *buf) {
pthread_mutex_lock (&(*b).mutex);
/* Exclusion mutuelle */
while (!(*b).vide) {
pthread_cond_wait (&(*b).pas_plein, &(*b).mutex);
/* On attend que la bal soit vide */
}
memcpy((*b).buf,buf,(*b).taille_element); /* On copie le
message dans la bal */
(*b).vide=0; /* La bote contient un message */
pthread_mutex_unlock (&(*b).mutex); /* Fin de lexclusion
mutuelle */
pthread_cond_signal (&(*b).pas_vide); /* On rveille
lventuelle tche en attente dun message */
return (*b).taille_element;
}
void bal_delete(bal b) {
pthread_cond_destroy(&(*b).pas_vide);
pthread_cond_destroy(&(*b).pas_plein);
pthread_mutex_lock(&(*b).mutex);
free((*b).buf);
pthread_mutex_unlock(&(*b).mutex);
pthread_mutex_destroy(&(*b).mutex);
free(b);
}
bal_ecr bal_ecr_init(const unsigned taille_element) {
bal_ecr bal;
if (!(bal=(bal_ecr)malloc(sizeof(struct s_bal_ecr)))) return
0;/* Allocation de la structure */
if (!((*bal).buf=(char *)malloc(taille_element))) return 0;/*
Allocation du buffer contenant un message */
(*bal).vide=1;/* Initialement la bal est vide */
pthread_mutex_init(&((*bal).mutex),0);/* Cration du smaphore
garantissant lexclusion mutuelle des accs la structure */
528

C.2 Corps de module

C Module
de botes aux lettres POSIX

(*bal).taille_element=taille_element;
pthread_cond_init(&((*bal).pas_vide), 0);/* Variable
conditionnelle qui sera dclenche lorsquun message est ajout */
return bal;
}
int bal_ecr_recevoir(bal_ecr bal, char *buf) {
pthread_mutex_lock (&(*bal).mutex);
/* Exclusion mutuelle */
while ((*bal).vide) {
/* Tant que la bote aux lettres est vide */
pthread_cond_wait (&(*bal).pas_vide, &(*bal).mutex);/* On
attend que la bal contienne un message */
}
memcpy(buf,(*bal).buf,(*bal).taille_element);/* Copie du
message dans buf */
(*bal).vide=1;/* La bote est maintenant vide */
pthread_mutex_unlock (&(*bal).mutex);/* Fin de lexclusion
mutuelle */
return (*bal).taille_element;
}
int bal_ecr_envoyer(bal_ecr bal, const char *buf) {
pthread_mutex_lock (&(*bal).mutex);
/* Exclusion mutuelle */
memcpy((*bal).buf,buf,(*bal).taille_element);/* Le message
crase un ventuel message prsent dans la bal */
(*bal).vide=0;/* La bote contient un message */
pthread_mutex_unlock (&(*bal).mutex);/* Fin de lexclusion
mutuelle */
pthread_cond_signal (&(*bal).pas_vide);/* On rveille
lventuel thread en attente dun message */
return (*bal).taille_element;
}
void bal_ecr_delete(bal_ecr bal) {
pthread_cond_destroy(&(*bal).pas_vide);
pthread_mutex_lock(&(*bal).mutex);
free((*bal).buf);
pthread_mutex_unlock(&(*bal).mutex);
pthread_mutex_destroy(&(*bal).mutex);
free(bal);
}
bal_n bal_n_init(const unsigned taille, const unsigned taille_element)
{
bal_n bal;
if (!(bal=(bal_n)malloc(sizeof(struct s_bal_n)))) return 0;/*
Allocation de la structure */
if (!((*bal).buf=(char **)calloc(taille,taille_element)))
return 0; /* Allocation du buffer contenant taille messages */
(*bal).vide=1; /* La bal est initialement vide */
pthread_mutex_init(&((*bal).mutex),0); /* Cration du smaphore
garantissant lexclusion mutuelle des accs la structure */
(*bal).debut=0; /* indice de dbut de la file dans le tableau
circulaire */
/* Invariant: non vide => debut est lindice du plus vieux
message non lu
vide => debut=fin*/
(*bal).fin=0;
C.2 Corps de module

529


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

C Module
de botes aux lettres POSIX

/* Invariant: vide ou debut!=fin => fin est lindice de la
premire case disponible du tableau
non vide et debut=fin => fin est lindice du message le
plus ancien */
(*bal).taille_element=taille_element;
(*bal).taille=taille;
pthread_cond_init (&((*bal).pas_plein), 0);
/* Variable conditionnelle qui sera dclenche lorsquun message
est retir (i.e.
quand il y a au moins une place disponible */
pthread_cond_init (&((*bal).pas_vide), 0);
/* Variable conditionnelle qui sera dclenche lorsquun message
est ajout (i.e.
quand il y a au moins un message lire */
return bal;
}
int bal_n_recevoir(bal_n bal, char *buf) {
pthread_mutex_lock (&(*bal).mutex);
/* Exclusion mutuelle */
while ((*bal).vide) {
pthread_cond_wait (&(*bal).pas_vide, &(*bal).mutex);
/* On attend que la bal contienne un message */
}
/* Il existe au moins un message, le plus ancien a lindice
debut */
memcpy(buf,&(*bal).buf[(*bal).debut],(*bal).taille_element); /*
Copie du message le plus ancien dans buf */
(*bal).debut=((*bal).debut+1)%(*bal).taille;
if ((*bal).debut==(*bal).fin) (*bal).vide=1; /* Respect de
linvariant */
pthread_mutex_unlock (&(*bal).mutex); /* Fin de lexclusion
mutuelle */
pthread_cond_broadcast (&(*bal).pas_plein); /* Rveil dun
ventuel thread en attente de place dans la bal */
return (*bal).taille_element;
}
int bal_n_envoyer(bal_n bal, const char *buf) {
pthread_mutex_lock (&(*bal).mutex);
/* Exclusion mutuelle */
while ((!(*bal).vide) && ((*bal).debut==(*bal).fin)) {
/* La bal est pleine */
pthread_cond_wait (&(*bal).pas_plein, &(*bal).mutex);
/* On attend quil y ait de la place dans la bal */
}
memcpy(&(*bal).buf[(*bal).fin],buf,(*bal).taille_element); /*
Copie du message la fin de la file (indice fin daprs linvariant)
*/
(*bal).fin=((*bal).fin+1)%(*bal).taille;
(*bal).vide=0; /* Respect de linvariant */
pthread_mutex_unlock (&(*bal).mutex);
/* Fin de lexclusion mutuelle */
pthread_cond_signal (&(*bal).pas_vide); /* Rveil de lventuel
thread en attente de message */
return (*bal).taille_element;
}
void bal_n_delete(bal_n bal) {
530

C.2 Corps de module

C Module
de botes aux lettres POSIX

pthread_cond_destroy(&(*bal).pas_plein);
pthread_cond_destroy(&(*bal).pas_vide);
pthread_mutex_lock(&(*bal).mutex);
free((*bal).buf);
pthread_mutex_unlock(&(*bal).mutex);
pthread_mutex_destroy(&(*bal).mutex);
free(bal);
}
bal_n_ecr bal_n_ecr_init(const unsigned taille, const unsigned
taille_element) {
bal_n_ecr bal;
if (!(bal=(bal_n_ecr)malloc(sizeof(struct s_bal_n_ecr))))
return 0; /* Allocation de la structure */
if (!((*bal).buf=(char **)calloc(taille,taille_element)))
return 0;/* Allocation du buffer contenant taille messages */
(*bal).vide=1; /* La bal est initialement vide */
pthread_mutex_init(&((*bal).mutex),0); /* Cration du smaphore
garantissant lexclusion mutuelle des accs la structure */
(*bal).debut=0;
/* Invariant: non vide => debut est lindice du plus vieux
message non lu
vide => debut=fin*/
(*bal).fin=0;
/* Invariant: vide ou debut!=fin => fin est lindice de la
premire case disponible du tableau
non vide et debut=fin => fin est lindice du message le
plus ancien */
(*bal).taille_element=taille_element;
(*bal).taille=taille;
pthread_cond_init (&((*bal).pas_vide), 0);
/* Variable conditionnelle qui sera dclenche lorsquun message
est ajout (i.e.
quand il y a au moins un message lire */
return bal;
}
int bal_n_ecr_recevoir(bal_n_ecr bal, char *buf) {
pthread_mutex_lock (&(*bal).mutex);
/* Exclusion mutuelle */
while ((*bal).vide) {
pthread_cond_wait (&(*bal).pas_vide, &(*bal).mutex);
/* On attend que la bal contienne un message */
}
/* Il existe au moins un message, le plus ancien a lindice
debut */
memcpy(buf,&(*bal).buf[(*bal).debut],(*bal).taille_element); /*
Copie du message le plus ancien dans buf */
(*bal).debut=((*bal).debut+1)%(*bal).taille;
if ((*bal).debut==(*bal).fin) (*bal).vide=1; /* Respect de
linvariant */
pthread_mutex_unlock (&(*bal).mutex);
/* Fin de lexclusion mutuelle */
return (*bal).taille_element;
}
int bal_n_ecr_envoyer(bal_n_ecr bal, const char *buf) {
pthread_mutex_lock (&(*bal).mutex);
/* Exclusion mutuelle */
memcpy(&(*bal).buf[(*bal).fin],buf,(*bal).taille_element);
C.2 Corps de module

531


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

C Module
de botes aux lettres POSIX

/* Copie du message la fin de la file (indice fin daprs
linvariant) avec
crasement ventuel du plus ancien message */
if ((*bal).fin==(*bal).debut && !(*bal).vide) {
/* La bote tait dj pleine, il y a eu crasement => debut est
repouss sur le plus ancien message restant */
(*bal).debut=((*bal).debut+1)%(*bal).taille;
}
(*bal).fin=((*bal).fin+1)%(*bal).taille;
(*bal).vide=0; /* Respect de linvariant */
pthread_mutex_unlock (&(*bal).mutex);
/* Fin de lexclusion mutuelle */
pthread_cond_signal (&(*bal).pas_vide);/* Rveil de lventuel
thread en attente de message */
return (*bal).taille_element;
}
void bal_n_ecr_delete(bal_n_ecr bal) {
pthread_cond_destroy(&(*bal).pas_vide);
pthread_mutex_lock(&(*bal).mutex);
free((*bal).buf);
pthread_mutex_unlock(&(*bal).mutex);
pthread_mutex_destroy(&(*bal).mutex);
free(bal);
}
533


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

D MODULE DE COMMUNICATION ADA

Cette annexe prsente le code source comment dun module Ada gnrique dnis-
sant les modules de donnes, synchronisations et botes aux lettres.

D.1 Spcification de module

D.1.1 Gestion de files bornes

Les botes aux lettres dnies ci-aprs ncessitent lemploi de les de messages bornes.
Le module prsent dans cette section dnit des les bornes implmentes sous
la forme de tableaux circulaires.

m

Spcification de module

-- FileBornee est une file borne:
-- lorsquon enfile un lment dans une file pleine, llment le plus
-- ancien est cras
-- Notations: si F est une file borne:
-- tte est la tte de F
-- [F] est le contenu (ordonn) de F
-- [F\tte] est le contenu de F sans la tte
-- e[F] est la file F laquelle on ajoute llment e en queue
-- F reprsente F avant une primitive
-- F reprsente F aprs une primitive
generic
type element is private;
package File_Bornee is
type File_Bornee(taille: positive) is private;
function Vide(F: File_Bornee) return boolean;
-- Retourne: vrai ssi cardinal([F])=0
function Pleine(F: File_Bornee) return boolean;
-- Retourne: vrai ssi cardinal([F])=taille
procedure Enfiler(F: in out File_Bornee; e: element);
-- Ajoute un lment en queue de la file
-- (si la file est pleine, le plus ancien lment est supprim)
-- Entraine: non Pleine(F) => F= e[F]
-- Pleine(F) => F= e[F\tte]
procedure Defiler(F: in out File_Bornee; e: out element);
-- Dfile un lment de F
-- Ncessite: non Vide(F)
-- Exception: Vide(F) => Constraint_Error
-- Entraine: e = tte et F=[F\tte]
534

D.1 Spcification de module

D Module
de communication Ada

private
-- Implmentation par tableau gr sous forme de liste circulaire
type Tableau_Elements is array (positive range <>) of element;
-- Tableau non contraint dlments
type File_Bornee(taille: positive) is record
T: Tableau_Elements(1..taille);
Debut, Fin: natural :=1;
Vide : boolean :=true;
end record;
end;

m

Corps de module

-- File_Bornee est une file borne:
-- lorsquon enfile un lment dans une file pleine, llment le plus
-- ancien est cras
-- Notations: si F est une file borne:
-- tte est la tte de F
-- [F] est le contenu (ordonn) de F
-- [F\tte] est le contenu de F sans la tte
-- e[F] est la file F laquelle on ajoute llment e en queue
-- F reprsente F avant une primitive
-- F reprsente F aprs une primitive
package body File_Bornee is

procedure Defiler (F: in out File_Bornee; e: out element) is
-- Dfile un lment de F
-- Ncessite: non Vide(F)
-- Exception: Vide(F) => Constraint_Error
-- Entraine: e = tte et F=[F\tte]
begin
if F.Vide then raise Constraint_Error; end if;
E := F.T(F.Debut);
F.debut:= (F.debut mod F.Tlength)+1;
if F.debut = F.fin then
F.Vide := true;
end if;
end Defiler;

procedure Enfiler (F: in out File_Bornee; e: element) is
-- Ajoute un lment en queue de la file
-- (si la file est pleine, le plus ancien lment est supprim)
-- Entraine: non Pleine(F) => F= e[F]
-- Pleine(F) => F= e[F\tte]
begin
F.T(F.Fin) := E;
if not F.Vide and F.Fin=F.Debut then
-- Il y a eu crasement
F.Debut:=(F.Debut mod F.TLength)+1;
end if;
F.Fin:=(F.Fin mod F.TLength)+1;
F.Vide := false;
end Enfiler;
function Pleine(F: File_Bornee) return boolean is
-- Retourne: vrai ssi cardinal([F])=taille
begin
return F.debut = F.fin and not F.Vide;
end;
D.1 Spcification de module

535


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

D Module
de communication Ada

function Vide (F: File_Bornee) return boolean is
-- Retourne: vrai ssi F est vide
begin
return F.Vide;
end Vide;
end File_Bornee;

D.1.2 Spcification du module de communication

-- Paquetage Communications
-- Dfinit des outils gnriques de communication DARTS
-- Modules de donnes, synchronisation, botes aux lettres
-- avec ou sans crasement, de taille unitaire ou borne
with System; use System; -- Pour les priorits
with File_Bornee; -- Dfinit une file borne dobjets gre sous forme
de tableau circulaire
generic
type element is private;
package Communications is
package File_Bornee_N_Elements is new
File_Bornee(Element=>Element);
-- Instanciation dune file borne sur le type element
use File_Bornee_N_Elements;

type Pt_Element is access all element; -- Pointeur sur element
------------------------
-- Modules de donnes
------------------------
protected type MDD(priorit: natural := prioritylast) is
-- module de donnes sans valeur initiale
-- Note: la valeur par dfaut sur la priorit (utilise si le
-- paramtre est omis)
-- est le paramtre par dfaut choisi par Ada lors de la cration
-- dun module de donnes
pragma Priority(priorit);
procedure Ecrire(e: element);
-- modifie le contenu
function Lire return element;
-- retourne le contenu
private
val: element;
end;
protected type Mddi(Initial: Pt_Element:=null; Priorit: Natural :=
PriorityLast) is
-- module de donnes avec valeur initiale
-- le passage par pointeur est d au fait quun discriminant
-- doit tre de type discret ou pointeur
-- Note: la valeur par dfaut sur la priorit (utilise si le
-- paramtre est omis)
-- est le paramtre par dfaut choisi par Ada lors de la cration
-- dun module de donnes
pragma Priority(priorit);
procedure Ecrire(e: element);
-- modifie le contenu
function Lire return element;
-- retourne le contenu
536

D.1 Spcification de module

D Module
de communication Ada

private
val: element := initial.all;
end;
------------------------
-- Synchronisation
------------------------
protected type Synchro_C(priorit: natural := prioritylast) is
-- Synchronisation compte (les dclenchements successifs
-- non pris en compte sont accumuls)
pragma Priority(priorit);
procedure Signal;
entry Wait; -- when Nombre_Signals > 0
private
Nombre_Signals: natural := 0;
end;
protected type Synchro_B(priorit: natural := prioritylast) is
-- Synchronisation binaire (les dclenchements successifs
-- non pris en compte ne sont pas accumuls)
pragma Priority(priorit);
procedure Signal;
entry Wait; -- when Signal
private
Signal: boolean := false;
end;
------------------------
-- Botes aux lettres
------------------------
protected type BaL_1_Ecrasement(priorit: natural := prioritylast)
is
-- Bote aux lettres de taille 1 avec crasement
pragma Priority(priorit);
procedure Envoyer(e: element);
entry Recevoir(e: out element); -- when Pleine
private
Pleine: boolean := false;
val: element;
end;
protected type BaL_1(priorit: natural := prioritylast) is
-- Bote aux lettres de taille 1 sans crasement
pragma Priority(priorit);
entry Envoyer(e: element); -- when not Pleine
-- lenvoi peut tre bloquant
entry Recevoir(e: out element); -- when Pleine
private
Pleine: boolean := false;
val: element;
end;
protected type BaL_n_Ecrasement(n:positive:=1; priorit: natural :=
prioritylast) is
-- Bote aux lettres de taille n avec crasement
pragma Priority(priorit);
procedure Envoyer(e: element);
entry Recevoir(e: out element); -- when not Vide(F)
private
F: File_Bornee_N_Elements.File_Bornee(n); -- File borne de
taille n
end;
D.2 Corps de module

537


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

D Module
de communication Ada

protected type BaL_n(n:positive:=1; priorit: natural :=
prioritylast) is
-- Bote aux lettres de taille n sans crasement
pragma Priority(priorit);
entry Envoyer(e: element); -- when not Pleine(F)
-- lenvoi peut tre bloquant
entry Recevoir(e: out element); -- when not Vide(F)
private
F: File_Bornee_N_Elements.File_Bornee(n); -- File borne de
taille n
end;
end;

D.2 Corps de module

-- Paquetage Communications
-- Dfinit des outils gnriques de communication DARTS
-- Modules de donnes, synchronisation, botes aux lettres
-- avec ou sans crasement, de taille unitaire ou borne
package body Communications is
protected body BaL_1 is
entry Envoyer (e: element) when not Pleine is
begin
val := e;
Pleine := true;
end Envoyer;
entry Recevoir (e: out element) when Pleine is
begin
e := val;
Pleine := false;
end Recevoir;
end BaL_1;
protected body BaL_1_Ecrasement is
procedure Envoyer (e: element) is
begin
val := e;
Pleine := true;
end Envoyer;
entry Recevoir (e: out element) when Pleine is
begin
e := val;
Pleine := false;
end Recevoir;
end BaL_1_Ecrasement;
protected body BaL_n is
entry Envoyer (e: element) when not Pleine(F) is
begin
Enfiler(F,e);
end Envoyer;
entry Recevoir (e: out element) when not Vide(F) is
begin
Defiler(F,e);
end Recevoir;
end BaL_n;
538

D.2 Corps de module

D Module
de communication Ada

protected body BaL_n_Ecrasement is
procedure Envoyer (e: element) is
begin
Enfiler(F,e);
end Envoyer;
entry Recevoir (e: out element) when not Vide(F) is
begin
Defiler(F,e);
end Recevoir;
end BaL_n_Ecrasement;
protected body MDD is
procedure Ecrire (e: element) is
begin
val := e;
end Ecrire;
function Lire return element is
begin
return Val;
end Lire;
end MDD;
protected body MDDi is
procedure Ecrire (e: element) is
begin
val := e;
end Ecrire;
function Lire return element is
begin
return Val;
end Lire;
end MDDi;
protected body Synchro_B is
procedure Signal is
begin
Signal := true;
end Signal;
entry Wait when Signal is
begin
Signal := false;
end Wait;
end Synchro_B;
protected body Synchro_C is
procedure Signal is
begin
Nombre_Signals := Nombre_Signals+1;
end Signal;
entry Wait when Nombre_Signals>0 is
begin
Nombre_Signals := Nombre_Signals-1;
end Wait;
end Synchro_C;
end Communications;
539


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

BIBLIOGRAPHIE

G. A

SCH

, et coll.,

Les capteurs en instrumentation industrielle

, Dunod (1991).
J.G.P. B

ARNES

,

Programmer en Ada 95

, Addison-Wesley (2000).
A. B

URNS

, A. W

ELLINGS

,

Concurrency in Ada

, Cambridge University Press (1998).
G. B

OOCH

,

Ingnierie du logiciel ADA

,



InterEditions (1988).
L. B

RIAND

,

Systmes temps rel en ADA,

Masson (1991).
F. C

OTTET

,

LabVIEW : Programmation et applications

, Dunod (2001).
F. C

OTTET

,

Traitement des signaux et Acquisition de donnes

, Dunod (2002).
F. C

OTTET

, J. D

ELACROIX

, C. K

AISER

, Z. M

AMMERI

,

Ordonnancement temps rel

,
Hermes (2000).
A. D

ORSEUIL

, P. P

ILLOT

,

Le temps rel en milieu industriel

, Dunod (1991).
P. F

ICHEUX

,

Linux embarqu

, Eyrolles (2002).
S. G

OLDSMITH

,

Real-time Systems Developments,

Prentice Hall (1993).
H. G

OMAA

,

Software Design Methods for Concurrents and Real-Time Systems

,



Addi-
son-Wesley (1993).
D. H

ATLEY

, I. P

IRBHAI

,

Stategies for Real-Time System Specication

,



Hermes (1988).
B.W. K

ERNIGHAN

, D.M. R

ITCHIE

,

Le langage C, norme ANSI

, Dunod (1997).
M.H. K

LEIN

, T. R

ALYA

, B. P

OLLAK

, R. O

BENZA

, M.G. H

ARBOUR

,

A Practitioners
Handbook for Real-Time Analysis

,



Kluwer Academic Publishers (1993).
H. K

OPETZ

,

Real-Time Systems

,



Kluwer Academic Publishers (1997).
A.M. L

ISTER

,

Principes fondamentaux des systmes dexploitation

, Eyrolles (1983).
M. M

ALAGARDIS

,

Projet Sceptre : proposition de standard de noyau dexcutif temps
rel

,



Bureau dOrientation de la Normalisation en Informatique (Rapp. BNI 26/2).
N. N

ISSANKE

,

Realtime Systems

,



Prentice Hall, series in Computer Science (1997).
H. N

USSBAUMER

,

Informatique industrielle

,



Presses Polytechniques Romandes (1986).
P. R

ICHARD

, M. R

ICHARD

, F. C

OTTET

,

Analyse holistique des systmes temps rel
distribus : principes et algorithmes

, chapitre 7 de Ordonnancement pour linfor-
matique parallle , Hermes (2003).
A. T

ANENBAUM

,

Architecture de lordinateur, cours et exercices

, Dunod (2001).
540

A. T

ANENBAUM

,

Rseaux, cours et exercices

, Dunod (1997).
J. T

OUX

,

Capteurs

, Techniques de lIngnieur, trait Mesure et Contrle.
D. T

SCHIRHART

,

Commande en Temps rel

, Dunod, Informatique Industrielle (1990).

Sites internet

Le protocole CAN (en anglais) : http://www.can-cia.de/can/
La norme POSIX (en anglais) : http://www.opengroup.org/
La norme OSEK/VDX (en anglais) : http://www.osek-vdx.org/
Le prol

Ravenscar

(en anglais) : http://polaris.dit.upm.es/~str/proyectos/ork/
541


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

LEXIQUE ANGLAIS FRANAIS

Anglais Franais

Absolute deadline chance
Access Point Point dAccs
Actuator Actionneur
Arrival time (release time or ready time) Date de rveil
Availability Disponibilit (dun systme)
Best effort strategy Stratgie de meilleur effort
Binding Interface entre deux langages
Board Support Package Module spcifique une architecture matrielle
Broadcast communication Communication par diffusion
Broadcast communication Communication par diffusion
Buffer Zone de mmoire tampon
Busy period Priode dactivit
Byte Octet
Coding (Implementation) Codage (implmentation)
Context switching Changement de contexte
Critical (or exclusive access) resources Ressources critiques
Critical resource Ressource critique
Deadline chance ou dlai critique
Deadline Monotonic Scheduling Ordonnancement bas sur dlai critique
Deadlock Interblocage
Dedicated real-time system Systme temps rel ddi
542

Deferrable server Serveur ajournable
Deferred Service Routine Routine de traitement dinterruption diffre
Dependability Sret de fonctionnement
Design Conception
Dispatcher Squenceur
Distributed applications Applications distribues
Distributed real-time system Systme temps rel distribu
Earliest Deadline Scheduling Ordonnancement bas sur lchance la plus proche
Embedded real-time system Systme temps rel embarqu
Failure Dfaillance
Feasible schedule Squence valide
Firmware Logiciel enregistr en EPROM
First In First Out Premier arriv premier servi
Flags Registre dtat
Full-Duplex Dans les deux sens
Garbage collector Ramasse miettes
Hard real-time system Systme temps rel contraintes temporelles strictes
Heap Segment de donnes, tas
Hook Crochet, fonction pouvant tre attache un vne-
ment particulier du systme
Hub Rpteur
Independent or dependant tasks Tches indpendantes ou dpendantes
Interoperability Interoprabilit
Interrupt latency Temps de masquage des interruptions
Interrupt Service Routine Routine de traitement dinterruption
Interrupt Request Requte dinterruption
Local area network Rseau local
Log Trace dexcution
Mailbox Bote aux lettres
Message queue Bote aux lettres (file de messages)

Anglais Franais
543


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

Minimum Laxity Scheduling Ordonnancement bas sur la laxit
Multi-Level Feedback Ordonnancement tourniquets par priorit dynamique
Multi-user resource Ressource partageable
Mutex Smaphore dexclusion mutuelle
Mutual exclusion Exclusion mutuelle
Offset Dcalage
On-line or off-line scheduling Ordonnancement en ligne ou hors ligne
One shot Horloge dclenche une fois
Open source Logiciel libre
Operating system Systme dexploitation
Overhead Surcot processeur d au systme dexploitation
Overload Surcharge
Patch Modification
Pattern matching Recherche de motif
Periodic ou aperiodic task Tche priodique ou apriodique
Pipe Tube
Polled Loop Boucle de scrutation
Polling Scrutation, attente active
Polling server Serveur scrutation
Polling task Tche de scrutation
Precedence constraints Contraintes de prcdence
Preemptive latency Temps de retard de lordonnanceur
Priority inheritance Hritage de priorit
Probing Test
Process Control Contrle de procd
Processor laxity Laxit du processeur
Processor load factor Facteur de charge du processeur
Processor slack time Temps creux du processeur
Processor utilization factor Facteur dutilisation du processeur

Anglais Franais
544

Pthread Tche POSIX
Quality of service (QoS) Qualit de service
Rate Monotonic Scheduling Ordonnancement bas sur la priode
Real-time Temps rel
Real-time kernel Noyau temps rel
Real-time languages Langages temps rel
Real-time network Rseau temps rel
Real-time system Systme temps rel
Reliability Fiabilit
Requirements Besoins (spcifications)
Resource constraints Contraintes de ressources
Resources Ressources
Response time Temps de rponse
Round Robin A tourniquet
Safety Scurit (innocuit)
Sensor Capteur
Shell Invite de commande
Scheduling Ordonnancement
Scheduling algorithm Algorithme dordonnancement
Scheduling period (or schedule length) Priode dtude
Security Scurit (confidentialit)
Sensor Capteur
Shared memory Mmoire partage
Shortest Remaining Time First Ordonnancement bas sur le temps de calcul restant
Socket Connexion rseau
Soft real-time system Systme temps rel contraintes temporelles relatives
Software life cycle Cycle de vie dun logiciel
Specification languages Langages de spcification
Spinlock Verrou

Anglais Franais
545


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

Stack Pile
Structured Analysis Real Time Analyse structure temps rel
Timeout Expiration dun dlai
Swap change
Switch Commutateur
Task Tche
Task criticality (task importance) Importance de la tche
Task period Priode de la tche
Task priority Priorit de la tche
Task set Ensemble de tches
Thread Tche gre directement par le systme dexploitation
ou lexcutif (processus lger)
Time sharing Travail en temps partag
Timer Horloge
Timing failure Faute temporelle
Token Jeton
Trigger Rveil
Watchdog Chien de garde
War-Driving Piratage de rseaux sans fil
Worst-case computation time Dure maximale dexcution

Anglais Franais
546

SIGLES

Sigle Dsignation complte

ADARTS Ada Based Design Approach for Real-Time Systems (GOMAA, 1987)
AFNOR Association Franaise de Normalisation
AGP Advanced Graphic Port
ANSI American National Standards Institute
ARP Address Resolution Protocol
ASCII American Standard Code for Information Interchange
ASIC Application Specific Integrated Circuit
ASR Asynchronous Service Routine
ATA Advanced Technology Attachment
BaL Bote aux Lettres
BCC Basic Conformance Class
BCP Bloc de Contrle de Processus
B.N.F. Backus-Naur Form
BSP Board Support Package
CAN Controller Area Network (1994) Convertisseur Analogique Numrique
CCC Com Conformance Class
CCITT Comit Consultatif International Tlphonique et Tlgraphique
CIN Code Interface Node
CNA Convertisseur Numrique Analogique
CODARTS Concurrent Design Approach for Real-Time Systems (GOMAA, 1987)
CODOP Code Opration
547


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

CRC Cyclic Redundancy Check
CSMA/CA Carrier Sense Multiple Access/Collision Avoidance (1990)
CSMA/CD Carrier Sense Multiple Access/Collision Detection Ethernet (1985)
CSMA/DCR Carrier Sense Multiple Access/Deterministic Collision Resolution (1990)
DARTS Design Approach for Real-Time Systems (GOMAA, 1984)
DFD Diagramme Flot de Donnes
DHCP Dynamic Host Configuration Protocol
DM Deadline Monotonic
DSR Deferred Service Routine
E/S Entres/Sorties
ECC Extended Conformance Class
EDF Earliset Deadline First
EDL Earliset Deadline Last
FAT File Allocation Table
FDDI Fibber Distributed Data Interface (1990)
FIFO First In First Out
FIP Factory Instrumentation Protocol (1990)
FPGA Field Programmable Gate Array
FPLA Field Programmable Logic Array
FTP File Transfer Protocol
GCC Gnu Compiler Collection
GNAT GNU Ada Translator
GNU GNUs Not Unix
GPL General Public License
GRAFCET Graphe Fonctionnel de Commande tape Transition (IEC 1988)
HTR Horloge Temps Rel
HOOD Hiearchical Object Oriented Design (CRI-Cisi Ingnierie-Matra, 1987)
HTTP Hyper Text Transfer Protocol
I-PDU Interaction layer Processor Data Unit
IBSS Independent Basic Service Set

Sigle Dsignation complte
548

ICANN Internet Corporation for Assigned Names and Numbers
IDE Integrated Drive Electronics
IEC International Electrotechnical Commission
IEEE Institute of Electrical and Electronics Engineers
IMAP Internat Message Access Protocol
IMFS In Memory File System
IP Internet Protocol
IPC InterProcess Communication
IPTES Incremental Prototyping Technology for Embedded Real-Time Systems
IRQ Interrupt ReQuest
ISA Industry Standard Architecture
ISO International Organization for Standardization
ISR Interrupt Service Routine
ITU International Communication Union
JSD Jackson System Design (Michal Jackson, 1981)
LL Least Laxity
LLC Logical Link Protocol
MAC Medium Access Control
MDD Module De Donnes
ML Minimum Laxity
MLF Multi-Level Feedback
MMU Memory Management Unit
MSMC Modlisation Simulation des machines Cyberntiques (Brenier, 2001)
MTU Maximal Transfer Unit
MUX Multiplexeur
NFS Network File System
NTFS New Technology File System
OIL OSEK Implementation Language
OMG Object Management Group
OMT Object Modeling Technique

Sigle Dsignation complte
549


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

OS Operating System
OSEK Offene Systeme und deren Schnittstellen fr die Elektronik im Kraftfahrzeug
OSI Open Systems Interconnection
PC Personal Computer
PCF Point Coordination Function
PCI Peripheral Componant Interconnect
PCMCIA Personnal Computer Memory Card International Association
PDU Protocol Data Unit
POP Post Office Protocol
POSIX Portable Operating System Interface
PSE Profil denvironnement gnrique POSIX
PXI PCI Extensions for Instrumentation
RAM Random Access Memory
RIPE Rseaux IP Europens
RM Rate Monotonic
RMA Rate Monotonic Analysis
RR Round Robin
RT FIFO File temps rel de messages
RTEMS Real-Time Executive for Multiprocessor Systems
SA Structured Analysis
SA_DT Structured Analysis Design Technics
SA_RT Structured Analysis Real Time (Ward-Mellor, 1984 ; Pirbha-Hatley, 1986)
SCSI Small Computer System Interface
SD Structured Design (E. Yourdon, L.L. Constantine, G. Meters, 1979)
SDL Specification and Description Language (CCITT, 1988)
SE Systme dExploitation
SMTP Simple Mail Transfer Protocol
SRPT Shortest Remaining Time First
TDMA Time Division Multiple Access (1990)
TCP Transmission Control Protocol

Sigle Dsignation complte
550

TFTP Trivial File Transfer Protocol
TOR Tout Ou Rien
UAL Unit Arithmtique et Logique
UDP User Datagram Protocol
UML Unified Modeling Language (OMG, 1995)
USB Universal Serial Bus
VAN Vehicle Area Network
VDX Vehicle Distributed eXecutive
VHDL VHSIC Hardware Description Language
VHSIC Very High Speed Integrated Circuit
VI Virtual Instrument
VME Versatile Module Eurocard
VXI VME Extensions for Instrumentation
Wi-Fi Wireless Fidelity
XSI X/Open System Interface

Sigle Dsignation complte
Index


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

551

INDEX

Gnralits

.dll 394

A

Access Point

169
accumulateur 111
accus de rception 173
actionneur 2

Ada body

273

Ada specication

273
Ad-Hoc 169
adresses IP prives 173
AFNOR 164
algbre boolenne 115
algorithme
priorits 141
dordonnancement 431
du tourniquet (

round robin

) 141
hors-ligne 407
allocation 492
analyse structure SA 28
anneau jeton 166, 169
anomalie
de comportement 465, 474
de fonctionnement 494
environnement distribu 505
arbitrage de bus 160
architecture multitche 8
ARINC 629 166
ARP 171
ASCII 125
tendu 125
ASR (

Asynchronous Service Routine

)
192
assembleur 112
asservissement 391
associativit 118
atomique 146
attente active 126
attributs Ada 250

B

BCC1 229
BCC2 229

big endian

388
binaire 120

binary digit

110

binding

400
Ada 284
bit 110
Bloc de Contrle de Processus (BCP)
138
blocage fatal 472
bloqu 138
bote aux lettres 88, 194
nomme 212
botier de conditionnement 131
BSP (

Board Support Package

) 184
bus
jeton 169
AGP (

Advanced Graphic Port

) 129
ATA (

Advanced Technology Attach-
ment

) 129
dentres/sorties 128
externe 128

FireWire

129
IDE (

Integrated Drive Electronics

) 129
ISA (

Industry Standard Architecture

)
129
Index

552
mmoire 111
parallle 128
PCI (

Peripheral Component
Interconnect

) 129
PCMCIA (

Personal Computer
Memory Card International
Association

) 129
SCSI (

Small Computer System
Interface

) 129
srie 128
USB 128

C

cadre 157
CALL 157
CAN (

Controller Area Network

) 166,
177
capteur 2
carte dacquisition 131, 388
CCC0 230
CCC1 230
CCCA 230
CCCB 230
CCITT 164
centrale
dacquisition 388
de conditionnement 388
chanes de caractres 256, 258
chien de garde 208, 472
cible 23
classes
dadresses IP 170
de conformit 229
client 173
client/serveur 173
code
intermdiaire 269
machine 112

CodeWarrior

239
CODOP (code opration) 113
coercion 368
cohrence
du contrle 99
spatiale 180
temporelle 180
cohsion 99
fonctionnelle 100
squentielle 99
temporelle 99
commande 251
dun moteur combustion 65
communication 9, 87, 463
asynchrone 194
par diffusion 160
par messages 193
point point 160
commutateur 167
commutativit 118
compilation 270
complment 116
1 513
2 513
compteur 134
ordinal 111
conception prliminaire 19
conditionnement de signaux 136
conjonction 116
connecteurs 116, 268
connexion 175
contexte 139
contraintes
de bout en bout 409
de rgularit 410
de temps 409
temporelles 3
Convertisseur Analogique Numrique
(CAN) 135
Convertisseur Numrique Analogique
(CNA) 136
corps de module 270
CRC 179
crochet (

hook

) 229
CSMA/CA 169
CSMA/CD 166-167
CSMA/DCR 166, 168
CSMA/MA 166
cycle 110
de dveloppement en W 183, 351

D

datagramme 171, 174
date
dactivation 6
de rveil 6, 411

Deadline Monotonic

436

deadlock

149
Index


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

553
dfaut de page 158
dlai
critique 412
dynamique 418
de latence 416

delta

515
drfrencement 256
drive des horloges 209, 297
dsarmer une interruption 128
dveloppement
crois 183
incrmental 231
DHCP 173
diagramme 247
de contexte 36
de dcomposition 39
tat-transition 45
prliminaire 38
dictionnaire de donnes 31
direction des lignes 132

dispatcher

139
distribu 4
distributivit 118
division euclidienne 120
DQDB 166

driver

279
DSR (

Deffered Service Routine

) 207
dure dexcution 6, 410

E

Earliest Deadline First

440
ECC1 230
ECC2 230
changeur de chaleur 341
chance 6, 412
chelle 404
croulement du rseau 168
diteur de liens 270
lection 139
lment
absorbant 118
neutre 118
embarqu 3
empreinte mmoire 183
en ligne 11
enregistrement 252
en-tte de module 270
entier sign 513
entres/sorties 109
analogiques 135
numriques 132
numration 254
environnement multiprocesseur 491
quit 142
quivalence 116
espace
de collision 168
de noms 275
et logique 116
Ethernet 166
commut 168
vnement 191
exception 276
exclusion mutuelle 91, 145
excut 138
excutif 182
temps rel 181
excution
asynchrone 11
synchrone 10

F

face avant 247
facteur
dutilisation 424-425
de charge 424
FDDI 166, 169
fentre glissante 175
chier
dchange 158
excutable 269
temps rel 214
FIFO (

First In First Out

) 141
le temps rel 244
FIP 166, 180
ot de donnes 30, 251, 331
ottant dnormalis 517
fonction 265
frquence dhorloge 110
front montant ou descendant 134
FTP 176

G

gain 135
gamme 135
garde 186
Index

554
GCC 246
gestion
derreur en langage LabVIEW 277
de la scurit dune mine 56
des erreurs en langage C 275
gigue 410, 418
temporelle 6
GNAT 246, 363
groupe de tches 225

H

heap

155
hexadcimal 120
horloge
globale 492
temps rel (HTR) 139
hors ligne 11
hte 23
HTTP 176

hub

167

I

I16 251
I32 251
I8 251
IBSS 169
ICANN 170
idempotence 118
IEC 617 119
IEEE 1394 129
IEEE 754 516
IEEE 802.11 168
IEEE 802.3 166
IEEE 802.3D 168
IEEE 802.4 169
IEEE 802.5 169
IEEE 802.6 169
IEEE 209
implication 116

IN

266

IN OUT

267
indicateur 251
infrastructure 169
instant critique 430
instrument virtuel 251
interblocage 149
interruption 126
logicielle 206
matrielle 206
intranet 173

Inverse Deadline

436
inversion de priorit 154, 471
IP 170-171
IPC 211
I-PDU (

Interaction layer Processor Data
Unit

) 226
IRQ (

Interrupt ReQuest

) 206
ISO 164
ISO/IEC-9945 209
ISR 126
ITU 164

L

LabVIEW 251
langage
Ada 246
C 245
LabVIEW 246
macro 271
langages
ots de donnes 246
ractifs 16
latence due au noyau 182
laxit
dynamique 418
L 416

Least Laxity

443
ligne 132

little endian

388
LLC (

Logical Link Control

) 165
lois de De Morgan 119

M

MAC 165

main

266
masque 132
masquer une interruption 128

Measurement and Automation eXplorer


402

Medium Access Control

165
mmoire
cache 115
centrale 110
virtuelle 158
message
priodique 226
Index


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.

555
queue 212
mthode 27
ESML++ 70
DARTS 81
de conception 81
SA-RT 27

Metrowerks

239
microcontrleur 110
micronoyau 183
microprocesseur 109
migration de tches 500
MIL STD 806 119

Minimum Laxity

443
MLF (

Multi-Level Feedback

) 143
MMU (

Memory Management Unit

) 158
MODBUS 394
modle OSI 164
module 269
de donnes 91
de traitement 86
modulo 120
moniteur 150
la Ada 186
de Hoare 186
mot
machine 111
mmoire 110
MTU 175
multitche coopratif 333

mutex

147, 185

N

nombre fractionnaire 515
non logique 116
normalis 516
noyau 181
dirig par le temps 208
dirig par les vnements 208
monolithique 181
temps rel 11, 183

O

objet 269
protg 317
octal 120
octet 110
OIL (

OSEK Implementation Language

)
222

one shot

217
oprandes 113

Operating System

(

OS

) 138
optimal 432
optimalit 409
ordonnanabilit 409
ordonnancement 10, 140
en ligne 407
global 215
local 214
mixte 215
systmes distribus 500
systmes multiprocesseurs 494
OSEK/VDX 221

OSEKturbo

239
ou logique 116
exclusif 116

overhead

139, 309

P

package

273
page 158
pagination 157
paquetage 267, 273
partage
de ressources 9
de ressources critiques 423
passerelle 171

pattern matching

134
priode
dtude 425
dexcution 411
priodicit 6
priphrique dentres/sorties 278
PID 394
pilotage dun four verre 61
pilotes de priphrique 278

pipe

196

pipeline

115
point
dentre 111
xe 515
pointeur 255, 258

polling

126
port 176
numrique 132
srie 388
portage 396
Index

556
POSIX 209
1003.1b 211
prcdence 420, 463
prchargement des instructions 114
prempt 138
premptible 11, 228
non ~ 11, 228

prefetch

114
prprocesseur 271
prt 138
primitives 151
principe de localit 115
priorit 287
des oprateurs 118
problme
de la concurrence 144
du lecteur/crivain 148
du producteur/consommateur 149
procdure 265
processeur 110
processus 138, 214
de contrle 34
fonctionnel 30
primitif 39, 49
prols
de communication 230
temps rel 220
programmation 19
programme principal 266
protocole 162
arbitre centralis 169
hritage de priorit 475
priorit plafond 290, 478
immdiat 318
PSE 220
pthread 218, 285
Q
quantum 139
R
ramasse miettes (garbage collector) 258
Rate Monotonic 431
Analysis 482
Ravenscar 319
rcursivit 269
rentrance 151
rfrencement 256
registre 111
dcalage 262
dtat (ags) 112
relais lectriques 388
rendement 143
rendez-vous 198, 201
synchronis 204
rparti 4
reprsentation des entiers 123
rseau
internet 161
local 161, 171
rseaux
de Petri 72
de terrain 176
rsolution 135
ressource critique 9, 145, 471
RIPE 171
RMA 482
Round Robin 437
routeur 161, 170-171, 174
routine de traitement dinterruption
(ISR) 126, 206
RS-232 128, 388
RT FIFO 195
RTAI 243
RTEID/ORKID 240
RTEMS 240
RTLinux 241
S
scrutation 126
section critique 145
segment 174
de code 154
de donnes 154
de pile 154
smaphore 146, 185
compte 147, 185
binaire 146-147, 185, 238
binaire (mutex) 219
compteur 238
dexclusion mutuelle 238
en lecture/criture 219
nomm 212
squence sature 429
squenceur 11, 407
de commandes 111
Index


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
557
serveur 173
scrutation 450
ajournable 454
priodique 447
sporadique 457
dynamique 459
shared memory 213
shell 235
Shortest Remaining Time First 143
signal 187, 191
compte 193
apriodique 83
asynchrone 191
fugace 192
mmoris 193
priodique 83
synchrone 191
SMTP 176
socket 197, 363
sortie derreur 277
sous-programme 265
spcication globale 19
spinlocks 220
SRPT 143
stack 154
structure squence 265
surcot processeur 139
suspendu 138
suspensif 128
swap 158
switch 167
synchronisation 9, 87, 201, 463
diffusion 204
de processus 149
systme
dexploitation (SE) 138
de contrle-commande 1
de freinage automobile 36
multiprocesseur 491
rparti 492
T
table
de vrit 116
des pages 159
tableau 254, 257
noir 200
tche 86, 183-184, 214
anonyme 316
apriodique 414, 447
atomique 408
basique 222
communicante 98
cre 184
mettrice 194
endormie 184
tendue 222
excute 184
existante 184
logicielle 83
matrielle 83
priodique 297
prempte 184
prte 184
rceptrice 194
rveille 184
supprime 184
suspendue 184
tas 154
TCP 164, 173
TCP/IP 164
TDMA 166, 170
temps
daccs 110
dattente 142
de rponse 6, 142, 417
libre processeur 428
Test and Set Lock 220
thermocouple 388
thread 214
tick 208, 235
timer 217
priodique 217
TOR 132
Tornado

314
tourniquet 437
tranche canal 167
trigger 134
tube 196
type
enregistrement 250
numr 249-250
U
U16 251
U32 251
Index
558
U8 251
UDP 173
Unicode 125
unit arithmtique et logique (UAL)
111
USB (Universal Serial Bus) 128
V
validation systmes distribus 504
variable conditionnelle 189
vecteur dinterruption 206
virgule ottante 516
virtual instrument ou vi 251
vi non rentrant 335
voie virtuelle 404
VxWorks 231
W
wait 187
War-Driving 169
Wi-Fi 168
Win32 239
WindView 239
WorldFIP 180
X
X.25 164
xor 116
XSI 212
Langage informatique
#dene 271
#endif 272
#ifndef 272
#include 271
A
access 258
ActivateTask 224
Ada.Real_Time 326
aliased 258
and then 262
Any_Priority 317
array 257
attendre 334
attendre un multiple de 334
B
boolean 250
C
calloc 256
case 260
case 1 260
Ceiling_Locking 319
ChainTask 224
char 248
character 250
ClearEvent 225
CLOCK_CPU_TIME 217
clock_getres 218
CLOCK_MONOTONIC 217
clock_nanosleep 218
CLOCK_REALTIME 216
CLOCK_THREAD_CPU-
TIME_ID 217
cluster 252
D
default 260
Default_Priority 317
delay 325
delay until 325
delta 250
DisableAllInterrupts 227
do 260
double 248
E
else 260
elsif 260
EnableAllInterrupts 227
entry 317
enum 249
errno 275
ErrorHook 229
Index


D
u
n
o
d


L
a

p
h
o
t
o
c
o
p
i
e

n
o
n

a
u
t
o
r
i
s

e

e
s
t

u
n

d

l
i
t
.
559
F
oat 248, 250
for 260
free 256
function 267, 318
G
GetResource 225
I
if 260
int 248
intConnect 238
integer 250
Interrupt_Priority 317
K
kill 213
L
Locking_Policy 319
long 248
long double 248
long long 248
loop 260
M
malloc 256
memcmp 255
memcpy 255
mlock 217
mlockall 217
mmap 213, 217
mq_receive 212
mq_send 212
MSG_Q_ID 311
msgQCreate 238, 308
msgQReceive 238, 307
msgQSend 238
N
nanosleep 218
natural 250
O
or else 262
others 257
P
positive 250
pragma 319
pragma Attach_Handler 327
priority 317
Priority_Queuing 319
procedure 267, 317
protected type 317
pthread_attr_destroy 287
pthread_attr_init 287
pthread_attr_setinheritsched 288
pthread_attr_setschedpolicy 288
pthread_attr_setscope 287
pthread_barrier 220
pthread_barrier_init 220
pthread_barrier_wait 220
pthread_cond 219
pthread_cond_broadcast 220, 293
pthread_cond_destroy 292
pthread_cond_init 219, 292
pthread_cond_signal 219, 292
pthread_cond_t 291
pthread_cond_timedwait 297
pthread_cond_wait 292
pthread_create 218, 285, 287
pthread_join 287
pthread_make_periodic_np 297
pthread_mutex_lock 289
pthread_mutex_t 289
pthread_mutex_unlock 289
pthread_mutexattr_init 290
pthread_mutexattr_setprioceiling 290
pthread_mutexattr_setprotocol 290
pthread_mutexattr_t 290
pthread_rwlock_rdlock 219
pthread_rwlock_wrlock 219
pthread_self 219
pthread_spin_init 220
pthread_spin_lock 220
Q
Queuing_Policy 319
R
raise 213
record 250
ReleaseResource 225
ResumeAllInterrupts 227
rwlocks 219
Index
560
S
SCHED_FIFO 215
SCHED_OTHER 216
sched_param 288
SCHED_RR 216
SCHED_SPORADIC 216
Schedule 228
SEM_ID 310
sem_open 212
sem_post 212
sem_timedwait 299
sem_wait 212
semBCreate 238
semCCreate 238, 308
semGive 238, 308
semMCreate 238, 307
semTake 238, 308
SendDynamicMessage 226
SendMessage 226
SendZeroMessage 226
Set_Priority 316
SetEvent 225
shm_open 213
short 248
sigaction 213
sigemptyset 213
sigwait 213
sizeof 247
strcmp 257
strcpy 257
strlen 257
struct 247
SuspendAllInterrupts 227
switch 260
sysClkRateGet 309
sysClkRateSet 309
T
task type 314
Task_Dispatching_Policy 319
taskActivate 235
taskDelay 238, 305, 309
taskDelete 235
taskInit 235, 305
taskLock 237
taskPrioritySet 237
taskResume 305
taskSafe 237
taskSpawn 235, 305
taskUnlock 237
taskUnsafe 237
TerminateTask 224
tExcTask 238
Time_Span 326
timer_create 218
timer_settime 218
typedef struct 249
U
union 249
unsigned 248
unsigned char 248
unsigned long 248
unsigned long long 248
unsigned short 248
use 275
usleep 287
W
WaitEvent 225
while 260
with 275
SYSTMES
TEMPS REL
DE CONTRLE-
COMMANDE
Conception
et implmentation
Francis Cottet
Emmanuel Grolleau
SRIE | EEA
ISBN 2 10 007893 3
Cet ouvrage prsente une mthodologie complte et oprationnelle
de dveloppement des systmes temps rel de contrle-commande.
Il permet au lecteur de :
connatre et mettre en uvre les mthodes de spcification et de
conception ;
dfinir et paramtrer lenvironnement dexcution des systmes ;
raliser limplmentation multitche base sur un noyau temps
rel ;
dvelopper lapplication en C, Ada ou LabVIEW.
Louvrage fait galement le point sur les dernires avances dans le
domaine des systmes temps rel multitches. De nombreux exemples
industriels sont traits, permettant de comprendre puis de mettre en
uvre les principes de cette mthodologie de dveloppement.
Ce livre sadresse tous les ingnieurs ou techniciens concepteurs
dapplications temps rel de contrle-commande de procds
industriels. Il est galement destin aux tudiants en informatique
industrielle.
TECHNIQUE ET INGNIERIE
Srie EEA
Francis Cottet Emmanuel Grolleau
F
.

C
O
T
T
E
T
E
.

G
R
O
L
L
E
A
U
S
Y
S
T

M
E
S

T
E
M
P
S

R

E
L

D
E

C
O
N
T
R

L
E
-
C
O
M
M
A
N
D
E
SYSTMES TEMPS REL DE
CONTRLE-COMMANDE
Conception et implmentation
FRANCIS COTTET
est professeur lENSMA
(cole Nationale
Suprieure de Mcanique
et dArotechnique).
EMMANUEL GROLLEAU
est matre de confrences
lENSMA.
Tous deux
sont chercheurs
au Laboratoire
dinformatique
scientifique et industrielle
(LISI), dans lquipe
Systme temps rel ,
coordonne par Francis
Cottet lui-mme.
www.dunod.com
GESTION INDUSTRIELLE
CONCEPTION
FROID ET GNIE CLIMATIQUE
MCANIQUE ET MATRIAUX
CHIMIE
ENVIRONNEMENT ET SCURIT
EEA

Vous aimerez peut-être aussi