Vous êtes sur la page 1sur 570

SRIE

| EEA

Francis Cottet
Emmanuel Grolleau

SYSTMES
TEMPS REL

CONTRLECOMMANDE
DE

Conception
et implmentation

Francis Cottet
Emmanuel Grolleau

SYSTMES TEMPS REL


DE
CONTRLE-COMMANDE
Conception et implmentation

DU MME AUTEUR : FRANCIS COTTET


LabVIEW Programmation et applications, Dunod, 2001

Dunod, Paris, 2005


ISBN 2 10 007893 3

TABLE DES MATIRES

Avant-Propos

1 Dveloppement des systmes de contrle-commande

1.1 Introduction
1.2 Architecture des applications de contrle-commande
1.3 Dveloppement des applications de contrle-commande

2 Spcification selon la mthode SA-RT


2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9

Introduction gnrale la mthode SA-RT


Prsentation de la syntaxe graphique de la mthode SA-RT
Les diagrammes flot de donnes
Laspect contrle de la mthode SA-RT
Spcification des processus primitifs
Spcification des donnes
Organisation gnrale de la mthode SA-RT
Exemples
Extensions de la mthode SA-RT

3 Conception selon la mthode DARTS

Dunod La photocopie non autorise est un dlit.

3.1 Introduction
3.2 Prsentation de la mthode DARTS
3.3 Exemples de conception avec la mthode DARTS

4 Architectures systmes
4.1 Architecture matrielle
4.2 Architecture logicielle
4.3 Rseaux et bus de terrain

5 Excutifs temps rel


5.1
5.2
5.3
5.4

Introduction
Concepts des excutifs temps rel
Principales normes temps rel
Exemples dexcutifs temps rel

7
18

27
27
30
36
41
49
51
54
56
70

81
81
85
102

109
109
138
160

181
181
184
209
230

III

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

IV

Dunod La photocopie non autorise est un dlit.

AVANT-PROPOS

Les applications informatiques dites de contrle-commande ont envahi lenvironnement 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 infiniment 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 applications est la fourniture de fonctionnalits toujours plus sophistiques : interface
homme-machine (cran couleur de haute dfinition, 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 : llectronique, 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 dexploitation 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 signification du terme correctement est prcise 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 utilisations peuvent avoir un impact financier important, un effet nuisible sur lenvironnement, ou plus gravement, mettre en jeu des vies humaines. Aussi la mthodologie de dveloppement des applications de contrle-commande doit assurer
une qualit de ralisation en termes de fiabilit, defficacit, de maintenabilit,
dvolutivit, etc.
Il est important de noter quil nest pas possible de parler des applications de contrlecommande comme un ensemble homogne au sens de leur ralisation. En effet,
V

entre les dveloppements de lapplication informatique grant un four microonde 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 spcification 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 flot de donnes LabVIEW.
Dans le domaine informatique, en parallle, ces applications ont conduit la mise
en place de mthodes de spcification 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 important de noter que ces mthodes ont une drivation trs directe vers une implmentation 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 afin de rpondre un besoin fort de modlisation des donnes et de leurs
volutions. Ces mthodes, dites orientes objets, permettent une spcification 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, unifies sous le nom UML (Unified
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 initialement 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 applications 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 prcdemment, les utilisateurs de ces outils ont une culture de conception de type fonctionnel qui a une trs grande efficacit. Ensuite les mthodes orientes objets vont
VI

conduire des difficults pour passer ltape de limplmentation multitche ;


cette rupture de la chane de dveloppement diminue fortement lintrt de ces
mthodes de spcification et de conception.
Cet ouvrage a donc pris le parti de prsenter une mthodologie complte de dveloppement dapplications de contrle-commande bas sur un aspect fonctionnel conduisant 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 spcificit de ces applications en termes darchitectures logicielles et matrielles. Le second chapitre traite de la mthode de spcification 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 afin 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 enfin un environnement spcifique
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. Enfin, le chapitre 8 ouvre le dveloppement de ces
applications vers des aspects avancs concernant lordonnancement.
Tlchargement sur Internet

Dunod La photocopie non autorise est un dlit.

Vous trouverez en tlchargement sur le site www.dunod.com les codes sources de


tous les programmes prsents dans cette ouvrage.

VII

1 DVELOPPEMENT DES SYSTMES


DE CONTRLE-COMMANDE

1.1 Introduction
1.1.1 Dfinitions

Nous pouvons dfinir un systme de contrle-commande comme un systme informatique en relation avec lenvironnement physique rel externe par lintermdiaire
de capteurs et/ou dactionneurs, contrairement aux systmes dinformatiques scientifiques (gestion de base de donnes, CAO, bureautique) qui ont des entres
constitues de donnes fournies par des fichiers ou ventuellement un oprateur.
Les grandeurs physiques acquises permettent au systme de contrle-commande
de piloter un procd physique quelconque. Donnons ainsi une dfinition gnrale
dun systme de contrle-commande (figure 1.1) :

Dunod La photocopie non autorise est un dlit.

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 afin 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 scientifiques :
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 dynamique du procd par rapport la vitesse dexcution du systme de contrlecommande ;
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 contrlecommande travaille sur un domaine de donnes relles approximes qui sont
trs rarement identiques.

1 Dveloppement des
systmes de contrle-commande

1.1 Introduction

Systme informatique
Entres
Systme
de contrle-commande

Procd
externe

Sorties

Figure 1.1 Reprsentation schmatique dun systme de contrle-commande.

Linteraction du systme de contrle-commande avec le procd extrieur piloter


se dcompose en deux parties (figure 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 (modification dtat physique du systme) ou simplement sous la forme dun affichage (diodes, lampes,
afficheurs, crans, etc.).
Cette dfinition 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 linitialisation 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 interaction avec lenvironnement sous diffrentes formes (clavier, fichier, 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,
Mesures
Interruptions
capteur
capteur
capteur
Procd externe
piloter

Systme informatique
de contrle-commande

actionneur

Commandes
Affichages

Figure 1.2 Reprsentation schmatique de linteraction


du procd physique pilot et du systme de contrle-commande.

1 Dveloppement des
systmes de contrle-commande

Proprits temporelles

1.1 Introduction

Aspect
comportemental
Aspect temporel

Systmes ractifs
ou de contrle-commande

Aspect relation
entre entits
du programme

Systmes
interactifs
(ex. : bureautique, CAO)

Aspect
transformationnel

Systmes
transformationnels
(ex. : code de calcul)

Donnes produites par lenvironnement


Contraintes de temps

Synchronisations
ou communications
Donnes produites par lenvironnement
Pas de contraintes de temps

Algorithmique
Donnes linitialisation
Pas de contraintes de temps

Dunod La photocopie non autorise est un dlit.

Figure 1.3 Comparaison des systmes de contrle-commande


par rapport aux autres applications informatiques.

laspect temps a une place importante sous la forme dun temps de raction,
dune chance respecter, etc.
Nous terminons cette section par des dfinitions qualifiant des systmes de contrlecommande ayant des spcifications particulires. La premire de ces catgories
concerne les systmes temps rel (real-time system) dont la dfinition est : un systme 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 dfaillance 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 qualificatifs suivants :
systme de contrle-commande embarqu (embedded real-time system) : pas
dintervention humaine directe (pas de modification du programme ou des paramtres du programme) ;
systme de contrle-commande ddi (dedicated real-time system) : les architectures matrielles ou logicielles sont spcifiques lapplication (noyau, processeur) ;
3

1 Dveloppement des
systmes de contrle-commande

1.1 Introduction

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 spcifications 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 figure 1.4. Cet exemple de contrle-commande dun moteur combustion est repris de faon dtaille dans le chapitre suivant. Le contrle-commande
de cette application est fait par lintermdiaire dun ensemble de capteurs et dactionneurs (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 dapplication 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 ;

Commande de r-injection
gaz chappement

Capteur
Calculateur
pression collecteur

Bus CAN
Communications
avec les autres
calculateurs

Commande admission air


(papillon)

Capteur
pdale acclrateur

Capteur
pollution en amont

Capteur
temprature air

Capteur
pollution en aval

Commande
injecteur essence

Capteur temprature eau

air

Commande
allumage

Capteur vitesse de rotation


du vilebrequin

Figure 1.4 Exemple dune application de contrle-commande


dun moteur combustion.

1 Dveloppement des
systmes de contrle-commande

1.1 Introduction

prise en compte des comportements concurrents : lensemble de ces donns


physiques qui arrivent de lextrieur et le rseau qui permet de recevoir des messages 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 suffisante 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 (figure 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.
Temps
Contrle
en chimie

1 heure
Contrle
fabrication

Dunod La photocopie non autorise est un dlit.

1 minute
Contrle
stockage

1 seconde
10 ms
1 ms

1 s
100 ns

Robotique
Systmes
vocaux

Systmes
radar

Systmes
mesures
scientifiques
Application

Figure 1.5 Comparaison de la dynamique


de diffrentes applications de contrle-commande.

1 Dveloppement des
systmes de contrle-commande

1.1 Introduction

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 formulations. Ainsi, nous pouvons dfinir de manire non exhaustive :
Dure dexcution dune activit : lactivit dune application, qui peut tre
lenchanement de plusieurs activits lmentaires (acquisition, traitement, commande, affichage), 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 lapplication ou absolue (plus rarement). Cette date de rveil nimplique pas obligatoirement 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 fix 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 rgulation 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 fin 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 spcifique (peinture,
assemblage, tri) sur une chane de production, doit effectuer son travail en des
temps fixs par la cadence de fabrication. Sil agit trop tt ou trop tard, lobjet
manufacturier trait sera dtruit ou endommag conduisant des consquences
financires 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 fixes ou mobiles afin de
ne pas conduire sa perte.
6

1 Dveloppement des
systmes de contrle-commande

1.2 Architecture des applications


de contrle-commande

Dunod La photocopie non autorise est un dlit.

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 diffrents). 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 imperceptibles lutilisateur.
Systme de vidoconfrence : ce systme doit permettre lmission et la rception dimages numrises une cadence de 20 25 images par seconde pour avoir
une bonne qualit de service. Afin de minimiser le dbit du rseau, une compression des images est effectue. Dautre part la parole doit aussi tre transmise.
Bien que correspondant un dbit dinformation moindre, la rgularit de la
transmission, qualifie par une gigue temporelle, est ncessaire pour une reproduction correcte. De plus ce signal doit tre synchronis avec le flux 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 vrification 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 affiche un compte rendu sur lcran de loprateur
toutes les 200 ms et enfin imprime ces rsultats dtaills toutes les 2 s. Un fonctionnement non correct de ce systme de contrle de la qualit peut avoir des
consquences financires importantes : production non conforme la spcification
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
7

1 Dveloppement des
systmes de contrle-commande

1.2 Architecture des applications


de contrle-commande

est une architecture multitche. Ainsi, au paralllisme de lenvironnement, la


rponse est le paralllisme de conception. Nous pouvons dfinir 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 figure 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 dactionneurs 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 intgrent 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 modifier 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 importante (tableau de bord) ou de type graphique (reprsentation 3D).
Rseaux

Programmation multitche

Liaison
Liaison
Liaison
rseau
rseau
rseau
Consignes

Mesures
Interface
homme/machine

Oprateurs

Traitements
des donnes

Procd
physique
externe

Interface
entres/sorties

Visualisation

Commandes
Liaison
stockage

Rcupration

Sauvegarde

Units de stockage

Figure 1.6 Architecture logicielle dune application de contrle-commande multitche.

1 Dveloppement des
systmes de contrle-commande

1.2 Architecture des applications


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 fixs. 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 afin 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 fonctionnel peut tre modifi 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 relations de type (figure 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.

Entre

Tche 8
Tche 1

Synchronisation
Sortie
Tche 7

Dunod La photocopie non autorise est un dlit.

Ressource
critique
Tche 2

Tche 3

R
Tche 4

Tche 5

Tche 6

Figure 1.7 Reprsentation schmatique


de larchitecture multitche dune application de contrle-commande.

Ces diffrents concepts sont tudis de faon dtaille dans le chapitre 4.


9

1 Dveloppement des
systmes de contrle-commande

1.2 Architecture des applications


de contrle-commande

m Modles dexcution et ordonnancement

Cette architecture logicielle peut tre vue comme un ensemble de tches synchronises, 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 lordonnancement. Ce principe dordonnancement est un point crucial des systmes de contrlecommande ; en effet lordonnancement va dterminer les caractristiques temporelles et tre le garant du respect des contraintes de temps imposes lexcution de
lapplication.
Nous pouvons distinguer deux modles dexcution de ces systmes de contrlecommande : lexcution dite synchrone et lexcution asynchrone. Nous allons prsenter 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 dexcution synchrone, la perception de loccurrence de tout vnement 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 fin de la tche Lecture_consigne (figure 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
Alarme
Application
Lecture_consigne
Occurrences
observes
par le systme
Raction perue comme immdiate
par le systme

Occurrences
mises
par le procd

temps
Clavier

Alerte
Raction perue comme diffre par le procd

Figure 1.8 Modle dexcution synchrone dune application de contrle-commande.

10

1 Dveloppement des
systmes de contrle-commande

1.2 Architecture des applications


de contrle-commande

des vnements externes a donc t artificiellement 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 vrifier que larchitecture oprationnelle 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 dordonnancement 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 lordonnancement 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 immdiatement 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 fin de la tche Lecture_
consigne (figure 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 asynchrone.
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 dexcution : excutif ou noyau temps rel.
Alarme

Dunod La photocopie non autorise est un dlit.

Application
Lecture_consigne

Lecture_consigne

Occurrences
observes
par le systme
Suspension d'un traitement en cours

Occurrences
mises
par le procd

temps
Clavier

Alerte

Les vnements sont immdiatement perus


par le systme

Figure 1.9 Modle dexcution asynchrone dune application de contrle-commande.

11

1 Dveloppement des
systmes de contrle-commande

1.2 Architecture des applications


de contrle-commande

Pour terminer cette section, nous allons rappeler trois dfinitions importantes que
nous avons utilises et fixer le contexte de cet ouvrage. Nous avons ainsi dfini :
Tche non premptible ou premptible :
Une tche non premptible ne peut tre interrompue qu des endroits spcifiques et la demande de la tche elle-mme : fin_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 vnement externe peuvent tre trs courts ; mais nous avons alors une programmation 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 prdfinie, il se rduit un squenceur.
En revanche, lapplication ainsi fige est peu flexible.
Une analyse de lordonnancement en ligne correspond un choix dynamique
de la prochaine tche excuter en fonction des paramtres de la tche en utilisant 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 sexcutent les unes aprs les autres dans un ordre qui peut tre dfini 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 obligatoirement en ligne.
Dans la suite de cet ouvrage, nous nous intressons plus particulirement aux systmes 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 spcifique, 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 afin 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 dex12

1 Dveloppement des
systmes de contrle-commande

1.2 Architecture des applications


de contrle-commande

cution avec des paramtres temporels fixs (temps de prise en compte dune interruption, changement de contexte entre deux tches, etc.). Nous pouvons comparer
les diffrences au niveau des objectifs fixs 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 processeur : 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
fluctuations temporelles (difficult pour dterminer prcisment les dures des
tches) ;
gestion des temporisateurs ou de lhorloge pas assez fine (plusieurs millisecondes) ;
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 :
efficacit 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 certification pour les applications de certains domaines comme
lavionique, lautomobile

Dunod La photocopie non autorise est un dlit.

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 dfinition 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, surveillance, changements de mode, traitement des surcharges) ;
3. relations entre les tches (synchronisation, communication, accs une ressource
critique en exclusion mutuelle, gestion du temps).
13

1 Dveloppement des
systmes de contrle-commande

1.2 Architecture des applications


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 (figure 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 correspondant cette tche et lui alloue les ressources disponibles. La tche active occupe le
processeur jusqu la fin 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 prioritaire.
Tche i

Requte

Activation

Tche j

Noyau
temps rel

Excution
programme

Excution
primitives et ordonnanceur

Excution
programme

Figure 1.10 Interaction entre les tches et le noyau temps rel.

Nous pouvons donc dcrire schmatiquement le contexte complet dexcution dune


application temps rel avec les deux parties : tches et noyau temps rel (figure 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, lordonnanceur 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 spcifications 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 lenvironnement dexcution que nous venons de dcrire (noyau temps rel avec les trois
14

1 Dveloppement des
systmes de contrle-commande

1.2 Architecture des applications


de contrle-commande

Application
Mesures

Tche i

Tche j

Tche k

Tche x

Commandes

Tche y

Requte

Activation

Noyau ou Excutif

Horloge
temps rel

Gestion
du temps

Gestion
des vnements

Gestion
des interruptions

Interruptions

Primitives

Ordonnanceur

Figure 1.11 Architecture de lapplication : tches et noyau temps rel.

fonctions dcrites : 1. gestion des interruptions, 2. ordonnancement, 3. relations


entre les tches), il est possible de dcliner les langages en trois groupes (figure 1.12) :
langages standards (langage C) : le noyau temps rel qui supporte ce type de
langage doit tre complet puisque le langage nintgre aucune spcificit 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 ;

Dunod La photocopie non autorise est un dlit.

Noyau temps rel

Noyau temps rel

1
Langages
ractifs

3
Langages
standards
(Langage C)

Noyau temps rel

Langages
multitches
(Langage Ada)
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).

15

1 Dveloppement des
systmes de contrle-commande

1.2 Architecture des applications


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 importance dans les applications de contrle-commande. Cette implication est lie dune
part la connexion directe avec le monde physique rel laide dune grande diversit de systmes dentres/sorties et dautre part au matriel informatique parfois
spcifique et dvelopp pour une application donne. Ce dernier point concerne les
applications dites ddies et embarques ; le matriel a t conu et cr spcifiquement 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 (figure 1.13). Dans
ces matriels, nous trouvons un processeur de type microcontrleur redond pour
avoir un haut niveau de scurit, des composants spcifiques (ASIC : Application
Specific 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
spcifiques 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.
Enfin, 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.

16

Figure 1.13 Matriel ddi utilis pour implmenter


une application de contrle-commande du domaine de lautomobile.

Alimentation
Alimente le calculateur en lectricit
en diminuant la tension en provenance
de la batterie.

Microcontrleur de scurit
Certains calculateurs (injection, ABS,
etc.) disposent dun microcontrleur
de secours (redondance).

Horloge
Dtermine la vitesse
dexcution des oprations.
Elle se mesure en mgahertz.
(50 MHz).

Mmoire
Stocke les tches utilisant
le microcontrleur.

Microcontrleur
Excute les diffrentes tches
stockes en mmoire.

Botier
Les calculateurs situs dans des parties
exposes sont placs dans des botiers
mtalliques tanches et blinds.
Ceux de lhabitacle sont en plastique.

ASIC
Un ASIC (Application Specific
Integrated Circuit) est une puce
ddie une application quelle
excute directement.

Amplification
des informations dentre.

Dunod La photocopie non autorise est un dlit.

1 Dveloppement des
systmes de contrle-commande
1.2 Architecture des applications
de contrle-commande

17

1 Dveloppement des
systmes de contrle-commande

1.3 Dveloppement des applications


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 spcification, 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 maintenabilit et lvolutivit. En particulier, cette rigueur de dveloppement accrot de faon
significative 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 classiques, en revanche, dans le cas des applications de contrle-commande, les tests
oprationnels en excution relle sont souvent difficiles 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 fixs. Nous pouvons 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 dsynchronisation 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
Pathfinder, une remise zro priodique des donnes acquises a fortement perturb 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 spcifiques dun point de vue dure et taille du fait des caractristiques 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
18

1 Dveloppement des
systmes de contrle-commande

1.3 Dveloppement des applications


de contrle-commande

modules logiciels utiliss dans le contexte dAriane IV. Les spcifications, attaches
lacclration, auraient d tre diffrentes en termes de limites afin 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 dveloppement 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 classiques que sont la spcification, 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 (figure 1.14) :
spcification 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 raffinement
selon la taille de lapplication ;
programmation : traduction dans un langage excutable de larchitecture logicielle de lapplication dcrite prcdemment. Suivant la mthode de conception
employe et le niveau de raffinement, la traduction dans un langage de programmation 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 vrifier 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.
Spcification

Dunod La photocopie non autorise est un dlit.

Analyse
des
besoins

Cahier
des
charges

Conception

Spcification
globale

Validation externe

Programmation

Conceptions
prliminaire
et dtaille

Logiciel

Validations internes

Figure 1.14 Cycle de dveloppement dune application informatique classique.

19

1 Dveloppement des
systmes de contrle-commande

1.3 Dveloppement des applications


de contrle-commande

Une prsentation gnralement plus adapte est celle du cycle en V (figure 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 ;
spcification et validation globale.
Il est vident que cette formalisation mthodologique du dveloppement des applications informatiques a pour principaux objectifs : viter les fautes logicielles, accrotre
la maintenabilit, faciliter lvolutivit chaque tape ou ensemble dtapes correspond 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).
VALIDATION

SPCIFICATION

CONCEPTION
PRLIMINAIRE

CONCEPTION
DTAILLE

INTGRATION

TESTS UNITAIRES

CODAGE

Figure 1.15 Cycle de dveloppement en V


dune application informatique classique.

Lexprience du dveloppement de logiciels prouve que llaboration complte de


lapplication ne se fait pas en une seule fois : volution du cahier des charges, modifications 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 dveloppement. Lide forte retenir est que, lors de toutes modifications apportes lapplication 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 spcificits, il est important de remarquer la particularit 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 procd va intgrer dans la grande majorit des cas la fois la description du matriel et
20

1 Dveloppement des
systmes de contrle-commande

1.3 Dveloppement des applications


de contrle-commande

les fonctions remplir par ce procd (figure 1.16). Ainsi, la spcification de lapplication commence par une spcification 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 spcifique FPLA : Field Programmable Logic Array ou FPGA : Field Programmable 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 difficile. En effet, une partie logicielle va tre insre dans un
environnement matriel trs spcifique.
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 nombreuses mthodes permettant davoir des dveloppements de qualit. Ainsi, le langage 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 spcifique comportant un ensemble de

Logiciel

Architecture
oprationnelle
Matriel

S P CIFICATION
SYSTME

Dunod La photocopie non autorise est un dlit.

Architecture
logicielle

Architecture
matrielle

CONCEPTION
P R LIMINAIRE

CONCEPTION
DTAILLE

CONCEPTION
DTAILLE

CODAGE

RALISATION

TEST

TEST

I N T GRATION

VALIDATION

Figure 1.16 Cycle de dveloppement matriel et logiciel


dune application de contrle-commande de procd.

21

1 Dveloppement des
systmes de contrle-commande

1.3 Dveloppement des applications


de contrle-commande

boutons, un haut-parleur et un cran couleur. De plus, ces consoles intgrent gnralement une liaison vers lextrieur de type infrarouge ou filaire 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 spcifications, 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 figure 1.17. Les spcifications 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, multiprocesseur), taille mmoire, dimension physique, consommation, environnement
(temprature, pression, corrosion) ;
noyau temps rel : primitives, taille (micronoyau), certifi
Spcifications du systme
Aspect fonctionnel et aspect comportemental
Autres contraintes de dveloppement :
matriel (processeur, architecture, taille, consommation)
noyau temps rel
langage de dveloppement
Environnement de dveloppement
Logiciel
applicatif

Environnement dexcution
Matriel

Logiciel
Noyau
temps rel

Logiciel

Figure 1.17 Environnement spcifique du dveloppement


dune application de contrle-commande de procd.

22

1 Dveloppement des
systmes de contrle-commande

1.3 Dveloppement des applications


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 matrielle 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 modifications consquentes du programme. Ce processus conduit modifier le cycle en V de dveloppement 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 (figure 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 lapplication 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 afin de pouvoir faire les premiers tests du logiciel
multitche ralis ;
SPCIFICATION

VALIDATION

SIMULATION

INTGRATION
avec noyau

Dunod La photocopie non autorise est un dlit.

INTGRATION
CONCEPTION
ADAPTE

CONCEPTION
TESTS

CODAGE
Dveloppement
en environnement hte

TESTS

CODAGE - Crois
Dveloppement
en environnement cible

Figure 1.18 Cycle de dveloppement en W


dune application de contrle-commande de procd.

23

1 Dveloppement des
systmes de contrle-commande

1.3 Dveloppement des applications


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 quelconque (Ethernet). De nombreux environnements proposent une reprsentation graphique de lexcution des tches. La plus grande difficult rside dans le
fait de ne pas modifier lexcution de lapplication par cette observation.
Toutes ces remarques impliquent dans le choix dun environnement de dveloppement 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 interruption 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 applications de contrle-commande de procd. Ces mthodes couvrent une ou plusieurs
tapes du cycle de dveloppement selon les niveaux de raffinement 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 flots 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 vrifications plus avances que les prcdentes. La troisime 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 :
24

1 Dveloppement des
systmes de contrle-commande

1.3 Dveloppement des applications


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 : Specification 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 : Unified Modeling Language (OMG, 1995)
HOOD : Hiearchical Object Oriented Design (CRI-Cisi Ingnierie-Matra, 1987)
La figure 1.19 reprend le cycle en V de dveloppement avec le positionnement
de quelques-unes de ces mthodes dans ce cycle.

VALIDATION

SPCIFICATION
SA-RT
MSMC
StateCharts
UML

Dunod La photocopie non autorise est un dlit.

SA-RT
DARTS
MSMC
StateCharts
UM
HOOD

CONCEPTION
PRLIMINAIRE

INTGRATION

CONCEPTION
DTAILLE

DARTS
StateCharts
GRAFCET
HOOD

TESTS UNITAIRES

CODAGE

Figure 1.19 Quelques mthodes de dveloppement


dune application de contrle-commande de procd.

Comme cela a t justifi et expliqu dans lavant-propos, les mthodes SA-RT et


DARTS, qui permettent de dcrire compltement le cycle dans ses phases de spcification 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.
25

1 Dveloppement des
systmes de contrle-commande

1.3 Dveloppement des applications


de contrle-commande

1.3.4 Quelques exemples industriels dapplications de contrle-commande

Afin 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 observation de la terre (mtorologie, environnement, agriculture)
Spcifications et conceptions : HOOD
Langages : Ada, Assembleur
Programme Ariane 5 (Arospatiale/CNES) : lanceur
Spcifications 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
Spcifications 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
Spcifications 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
Spcifications 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 justifie une mthode oriente objet.

26

2 SPCIFICATION
SELON LA MTHODE SA-RT

Dunod La photocopie non autorise est un dlit.

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 description 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 dfinies. En
revanche, elle ne permet pas deffectuer une vrification de proprits de lapplication
partir des seules descriptions SA-RT. Des tudes ont t menes pour associer la
mthode SA-RT des mthodes formelles afin dapporter des possibilits de simulation
et de vrification. Une de ces mthodes est prsente la fin du chapitre. Aucune
rgle officielle 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 spcifiques 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 efficace 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 flux ou flots de donnes, de contrle ou autres. Laspect
oprationnel de la description est alors visualis par la propagation de ces flux.
Ainsi, nous trouvons la mthode SA-DT (Structured Analysis Design Technics) de
spcification dun systme qui permet dexprimer un bloc reprsentant soit les
activits (fonctions) soit les donnes. Les flots entrants sont les donnes, un contrle
ou des mcanismes (mthodes) et les flots sortants correspondent aux sorties de
27

2 Spcification
selon la mthode SA-RT

2.1 Introduction gnrale


la mthode SA-RT

donnes. Cette mthode trs gnrale de description dun systme a t adapte


la spcification de logiciels avec la mthode trs connue SA (Structured Analysis)
(figure 2.1).
Spcification
dun systme

SADT

Structured Analysis Design Technics


(D.T. Ross, 1976)

Spcification
statique
dun logiciel

SA

Structured Analysis
(E. Yourdon, T. Demarco, 1979)

Spcification
dynamique
dun logiciel

SA-RT

Structured Analysis Real Time


(Ward/Mellor, 1985 ; Hatley/Pirbhai, 1986)

ESML

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.

Lanalyse structure SA, dfinie par E. Yourdon et T. Demarco, est une mthode
descendante par affinages 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 flots de donnes
(DFD) ;
dictionnaire de donnes ;
spcifications des process primitifs.
Les diagrammes de flots de donnes sont construits partir de quatre lments
graphiques : traitement (cercle), flot de donnes (flche), 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 flots
de donnes. Un exemple, prsent sur la figure 2.2, montre lanalyse dune application 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 flots


de donnes de SA manquait dun moyen permettant de spcifier laspect oprationnel,
28

2 Spcification
selon la mthode SA-RT

2.1 Introduction gnrale


la mthode SA-RT

Tableau 2.1 Les diffrents lments graphiques de la mthode SA.


Fonction

Signification

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

Tension lue

Thermistance

Temprature

Acqurir
temprature

Temprature_consigne

Reprsentation graphique

Acqurir
Mesures

Mesures

Mesures

Capteur

Tension_commande

Commander
chauffage

Rsistance
chauffante

Tmoin
de chauffage

Commande_chauffage

Dunod La photocopie non autorise est un dlit.

Figure 2.2 Exemple simple du diagramme flot de donnes de la mthode SA


correspondant une application de rgulation de temprature.

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 spcification. Nous prsentons dans cet ouvrage la
mthode SA-RT tablie par Ward et Mellor en 1985.
Comme le montre la figure 2.1, la mthode SA-RT a continu voluer au sein
des entreprises en intgrant des besoins spcifiques un domaine dapplications.
Ainsi, nous trouvons une mthode SA-RT, appele ESML et utilise dans lavionique,
qui a t enrichie dun point de vue flot de contrle.
29

2 Spcification
selon la mthode SA-RT

2.2 Prsentation de la syntaxe graphique


de la mthode SA-RT

La mthode SA-RT intgre les trois aspects fondamentaux dune mthode de spcification 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 transformation que le systme opre sur les donnes et spcification des processus qui
transforment les donnes ;
aspect vnementiel (pilot par les vnements) : reprsentation des vnements
qui conditionnent lvolution dun systme et spcification 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) : spcification des donnes sur les flots ou dans
les stockages. Ce dernier aspect qui est en gnral assez nglig dans ce type dapplication peut faire lobjet dune description spcifique choisie au sein dune entreprise.

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 reprsente une transformation de donnes. Un ou plusieurs flux de donnes en entres
sont traits pour donner un ou plusieurs flux de donnes en sortie (figure 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 flot de donnes est reprsent par un arc orient avec une tiquette
ou label explicite form de (figure 2.4) :
tiquette_Flot_de_Donnes = nom (+ qualifiant)
Les valeurs de ce flot de donnes sont supposes disponibles pendant tout le temps
o le processus producteur de ce flot est en mesure de les gnrer.
Le flot 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,
30

2 Spcification
selon la mthode SA-RT

2.2 Prsentation de la syntaxe graphique


de la mthode SA-RT

Lecture
de donnes

criture
de donnes
tiquette
Processus
N

Transformation
de donnes
Exemples
Mesurer
temprature
1

Commander
vanne
2

Calculer
moyenne
3

Figure 2.3 Processus fonctionnel de la mthode SA-RT.

Signal
temprature

Signal
interrupteur

Mesurer
temprature
1

Commander
lampe
2

Temprature
mesure

Allumage
lampe

Distance
parcourue
Calculer
vitesse
3

Affichage
vitesse

Dunod La photocopie non autorise est un dlit.

Top horloge

Figure 2.4 Exemples simples de flots de donnes de la mthode SA-RT.

exemple Position_interrupteur . Un flot 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 apparatre ltiquette du flot de donnes sous la forme suivante :
tiquette_Donne_Structure = tiquette_Donne_1, tiquette_Donne_2
Une spcification dtaille de cette donne, vhicule par le flot de donnes, est faite
dans le Dictionnaire de donnes (voir ci-aprs).
31

2.2 Prsentation de la syntaxe graphique


de la mthode SA-RT

e
nn

Donn e est envoy


sur les deux flots

Do

Donn e
nn

Do

_1

nn

_1

Donn e _ 1 et Donn e _ 2 sont


extraits de Donn e

Donn e _ 1 est extrait de Donn e

Do

nn

Donn e

_2

Donn e

nn

nn

_1

_1

Donn e

Do

Donn e

Donn e

Cration alternative de Donn e

Do

Do

Regroupement

Dcomposition

_2

2 Spcification
selon la mthode SA-RT

Le flot Donn e s est enrichi


de Donn e _ 1

Le flot Donn e est construit avec


les flots Donn e _ 1 et Donn e _ 2

Figure 2.5 Dcomposition et regroupement des flots de donnes de la mthode SA-RT.

Ces flots de donnes peuvent se dcomposer ou au contraire se regrouper lors des liaisons entre les processus fonctionnels dans le diagramme flot de donnes (figure 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 plusieurs fois. Comme le flot de donnes auquel il est troitement associ, il est nomm
par une tiquette ou label explicite form de :
tiquette_Stockage_de_Donnes = nom (+ qualifiant)
Le stockage de donnes est reprsent par deux traits horizontaux encadrant ltiquette dfinie ci-avant (figure 2.6). Les arcs flots 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.

Pression
Temprature
Paramtres_moteur

Paramtres_moteur

Figure 2.6 Unit de stockage de la mthode SA-RT.

Un exemple de diagramme flot de donnes intgrant ces trois lments graphiques


de la mthode SA-RT (processus fonctionnel, flot de donnes et unit de stockage)
est prsent sur la figure 2.7.
32

2 Spcification
selon la mthode SA-RT

2.2 Prsentation de la syntaxe graphique


de la mthode SA-RT

Temprature_consigne*

Signal_temprature

Mesurer
temprature
1

Rguler
temprature
2

Chauffage

Afficher
temprature
3

Affichage

Temprature_mesure

Temprature_consigne*

Figure 2.7 Exemple dun diagramme flot de donnes de la mthode SA-RT.

Remarque

Pour des besoins de clart graphique, un stockage de donnes peut tre visualis plusieurs fois sur
un diagramme flot 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).

Dunod La photocopie non autorise est un dlit.

m Syntaxe graphique de la Terminaison

Enfin, le dernier lment graphique, utilis dans cet aspect fonctionnel, est la Terminaison, 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 (figure 2.8) :
tiquette_Terminaison = nom (+ qualifiant)

33

2 Spcification
selon la mthode SA-RT

Capteur

Commande

2.2 Prsentation de la syntaxe graphique


de la mthode SA-RT

Signal

Production
de donnes

Consommation
de donnes

Actionneur

Figure 2.8 Terminaison ou bord de modle de la mthode SA-RT.

2.2.2 Syntaxe graphique pour laspect contrle

Dans les diagrammes flot 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
spcification 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) (figure 2.9). Cette vue dynamique du modle impose
la mise en place de la partie contrle : processus de contrle et flot de contrle
Pilotage de lexcution

vnement
Pilotage de lexcution

Donne_1
Donne_2

Donne_1
Processus
1
Donne_3

Donne_2

(a)

Processus
1
Donne_3

(b)

Figure 2.9 Pilotage de lexcution dun processus fonctionnel :


(a) pilot par les donnes et (b) pilot par les vnements.

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 fonctionnels. 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 (figure 2.10) :
tiquette_Processus_Contrle = verbe (+ un ou plusieurs complments) + numro
34

2 Spcification
selon la mthode SA-RT

2.2 Prsentation de la syntaxe graphique


de la mthode SA-RT

Contrler
temprature
1

Piloter
vanne
2

Grer
moteur
3

Figure 2.10 Processus de contrle de 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 flot de contrle est reprsent par un arc orient pointill avec une tiquette ou label explicite form de (figure 2.11) :
tiquette_Flot_de_Contrle = nom (+ qualifiant)
Temprature
Dclenchement
Vrifier
temprature
1

Trop_chaud

Contrler
chauffage
2

Temprature_consigne

Dunod La photocopie non autorise est un dlit.

Figure 2.11 Exemple simple dune partie contrle


lie une partie fonctionnelle de la mthode SA-RT.

Les vnements, fournis par le processus de contrle, sont gnralement lis


lactivation ou la dsactivation des processus fonctionnels. Aussi, ces vnements
spcifiques ont t formaliss et prdfinis :
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 fin 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-fin ou sporadique, cest--dire que le processus de contrle doit lancer lexcution de ce processus avec lvnement T et
ensuite le processus sarrte la fin de son excution sans intervention du contrle.

35

2 Spcification
selon la mthode SA-RT

2.3 Les diagrammes flot de donnes

2.3 Les diagrammes flot de donnes


2.3.1 Prsentation dun exemple simple dapplication de contrle-commande

Afin 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 simplifier, 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
spcifique (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 spcification 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 puisquelle va dfinir 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 figure 2.12.
Nous trouvons un et un seul processus fonctionnel, numrot 0 , qui traduit
lapplication raliser effectivement par le concepteur. Autour de ce processus fonctionnel, 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 daffichage (lampes, diodes, cran dordinateur, etc.) ;
systme de stockage ou de sauvegarde externe (disque, bande magntique, etc.) ;
systme dimpression (imprimante, drouleur papier, etc.) ;

36

2 Spcification
selon la mthode SA-RT

2.3 Les diagrammes flot de donnes

Oprateur 1
Consigne_1
Capteur 1

Capteur 2

Capteur 3

Donne_E_1
Donne_E_2

Donne_S_1

Piloter
application
0

Donne_E_3

Donne_S_2

Actionneur 1

Actionneur 2

Donne_S_3
Actionneur 3

Affichage_1
cran

Figure 2.12 Diagramme de contexte gnrique de la mthode de spcification SA-RT.

Dunod La photocopie non autorise est un dlit.

Lensemble des donnes ou vnements changs avec lextrieur du processus fonctionnel , qui reprsente lapplication, constitue les spcifications dentres et de
sorties de lapplication. La description de ces entres/sorties sera faite dans le dictionnaire 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 (figure 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 Affichage_ABS .
Ce diagramme de contexte dfinit parfaitement linterface entre le concepteur et le
client, cest--dire les donnes fournir ou gnrer. La suite du travail danalyse
Conducteur
Pdale de frein

Demande_freinage

Mise_en_marche
Commande_freinage

Bouton activation ABS


Activation_ABS

Capteur glissement

Contrler
systme
freinage
0

Affichage_ABS

Systme de freinage

Voyant ABS

Glissement_roue

Figure 2.13 Diagramme de contexte de lapplication systme de freinage automobile .

37

2 Spcification
selon la mthode SA-RT

2.3 Les diagrammes flot de donnes

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 prsent 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 flot de donnes gnrique peut
tre prsent pour chaque chane de contrle-commande implique dans le niveau
danalyse en cours dlaboration. Ce diagramme flot de donnes gnrique peut tre
utilis au niveau du diagramme prliminaire ainsi que dans les niveaux danalyse
suivant des diagrammes de dcomposition.
Donne_lue

Capteur_1
Actionneur_1

Acqurir
donne
1
Capteur_2

Traiter
donne
2

Donne_calcule Commander

actionneur
3
Actionneur_2

Autre_Donne_1

Autre_Donne_2

Figure 2.14 Dcomposition fonctionnelle gnrique.

Le passage des donnes entre les processus fonctionnels peut tre ralis selon les
besoins avec les deux mthodes de base : flots 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 diagramme prliminaire est constitu de cinq processus fonctionnels (figure 2.15). Au
niveau de cet exemple simple, nous navons pas une dcomposition fonctionnelle
aussi complexe que lexemple gnrique prsent prcdemment : seules les parties
38

2 Spcification
selon la mthode SA-RT

Demande_freinage

Glissement_roue

Activation_ABS

2.3 Les diagrammes flot de donnes

Acqurir
demande
freinage
1

Dtecter
glissement
de roue
2

Lire
bouton
ABS
4

Niveau_freinage

tat_glissement

tat_bouton_ABS

Commander
freinage
3

Afficher
tat bouton
ABS

Commande_freinage

Affichage_ABS

Dunod La photocopie non autorise est un dlit.

Figure 2.15 Diagramme flot de donnes prliminaire de lapplication


systme de freinage automobile .

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 (figure 2.13) et ce diagramme prliminaire au niveau des flots 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 modification de ce
diagramme prliminaire.
Cette dcomposition fonctionnelle en diagrammes flots de donnes peut se poursuivre en raffinant de plus en plus la description des processus fonctionnels
(figure 2.16). Chaque diagramme de dcomposition, associ un processus fonctionnel numrot N du diagramme hirarchiquement suprieur, est rfrenc au niveau des processus fonctionnels par des numros N.x .
Lexemple simple systme de freinage automobile choisi pour illustrer la mthodologie nest pas assez complexe pour justifier la dcomposition dun des processus
fonctionnels. Donc tous les processus fonctionnels du diagramme prliminaire de
la figure 2.15 sont des processus primitifs.
Lorsquil ny a plus dintrt dcomposer un processus, celui-ci est appel processus primitif et doit tre dcrit par une spcification sous forme textuelle, tabulaire
ou graphique (voir ci-aprs).
Nous pouvons noncer les deux premires rgles de cohrence de cette dcomposition hirarchique :
lensemble des flots entrants et sortants du processus dcompos doit se retrouver
dans le diagramme de dcomposition de ce processus avec les mmes typages
(donnes ou vnements) ;
39

2 Spcification
selon la mthode SA-RT

2.3 Les diagrammes flot de donnes

Diagramme de contexte
Capteur1

a
Contrler
systme
0

Capteur2

Actionneur

Diagramme prliminaire

Processus
1

Stockage

Processus
3

Processus
2

Diagramme de dcomposition

Processus
1.1

c
Lgende

Processus

: Processus
dcomposer

Processus

: Processus
primitif

d
Processus
1.2

Stockage

Figure 2.16 Dcomposition hirarchique en diagramme flots de donnes


de la mthode danalyse 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 utilisent.
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 flots de donnes. Ceci va donc faire
lobjet dun complment au niveau de ces diagrammes par laspect contrle .

40

2 Spcification
selon la mthode SA-RT

2.4 Laspect contrle de 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 spcifier 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 flots de contrle au niveau de ce
diagramme de contexte entre les terminaisons et le processus fonctionnel. Ces flots
de contrle, correspondant des signaux tout ou rien, doivent tre rservs des
signaux particuliers ne ncessitant aucun processus fonctionnel particulier (acquisition, 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 figure 2.17a illustre cette diffrence signal/vnement en considrant lexemple dun interrupteur. Le signal lectrique fourni par linterrupteur tout ou rien peut tre considr comme un vnement

(a)

Signal_interrupteur

Acqurir
interrupteur
6

vnement_interrupteur

Processus fonctionnel
Bord de modle

Dunod La photocopie non autorise est un dlit.

(b)

Signal_interrupteur

Circuit
anti-rebond

vnement_interrupteur

Signal_interrupteur
vnement_interrupteur

Figure 2.17 Mthodes de prise en compte dun signal lectrique afin de raliser une transformation donnes-vnements : (a) processus fonctionnel dans le diagramme prliminaire,
(b) circuit lectronique visualis au niveau du diagramme de contexte.

41

2 Spcification
selon la mthode SA-RT

2.4 Laspect contrle de 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 afin de transformer une donne en un vnement peuvent parfois tre remplacs de faon beaucoup plus facile et efficace par un circuit lectronique (figure 2.17b).
Dans le cas de lexemple simple du systme de freinage automobile ( 2.3.1), le diagramme de contexte peut tre enrichi dun flot de contrle manant dun nouveau
bord de modle Conducteur qui fournit un flot de contrle Mise_en_marche
au processus fonctionnel (figure 2.18).
Conducteur
Pdale de frein

Demande_freinage

Mise_en_marche
Commande_freinage

Bouton activation ABS


Activation_ABS

Capteur glissement

Contrler
systme
freinage
0

Affichage_ABS

Systme de freinage

Voyant ABS

Glissement_roue

Figure 2.18 Diagramme de contexte complet


de lapplication systme de freinage automobile .

Rappelons que lensemble des flots entrants et sortants de lunique processus fonctionnel du diagramme de contexte doit se retrouver dans le diagramme prliminaire
y compris les flots de contrle sils existent.
m Processus de contrle et diagramme prliminaire

Nous allons donc implanter un processus de contrle dans le diagramme prliminaire


afin 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 afin 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 figure 2.14. Rappelons que lvnement
coupl E/D est utilis pour piloter un processus fonctionnel de type boucle
sans fin et lvnement T est utilis pour activer un processus fonctionnel de type
dbut-fin . Dans cet exemple de la figure 2.19, deux processus fonctionnels,
supposs de type dbut-fin , sont activs lun aprs lautre par le processus de
contrle par un vnement T et envoient un vnement de fin dexcution vers
42

2 Spcification
selon la mthode SA-RT

2.4 Laspect contrle de la mthode SA-RT

Autre_Donne_2
Traiter
donne
2

Donne_lue

Donne_calcule
Traitement_termin

Capteur_1

Capteur_2

Actionneur_1
Acqurir
donne
1

Contrler
application
6

E/D

Commander
actionneur
3

Actionneur_2
Acquisition_termine

Mise_en_marche

Dunod La photocopie non autorise est un dlit.

Figure 2.19 Schma gnrique de linteraction


entre le processus de contrle et les processus fonctionnels.

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 fin .
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 difficilement concevable davoir plusieurs organes de contrlecommande 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 flots 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 dfinitivement au dbut de lapplication en utilisant lvnement E .
Dans le cas de lexemple du systme de freinage automobile, le diagramme prliminaire, reprsent sur la figure 2.15, va tre modifi pour intgrer un processus de
contrle. En particulier, les deux flots 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 figure 2.20.
Cet exemple de diagramme prliminaire, prsent sur la figure 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 flots de contrle de type E/D ou T . Le choix de lun ou lautre de ces
43

2 Spcification
selon la mthode SA-RT

Demande_freinage

Acqurir
demande
freinage
1

2.4 Laspect contrle de la mthode SA-RT

Niveau_freinage

Pa

s_

de

_f

in

ag

Commander
freinage
3

ag

ein
Fr

re

E/D
E/D

e_
Pas_d ent
m
glisse
E/D

Contrler
application
6

ent

E/D

Glissement_
roue

Dtecter
glissement
de roue
G li s s
2
em

S_
a

cti

AB
Activation_ABS

Lire
bouton
ABS
4

Commande_freinage

cti

_a

n
no

Afficher
tat bouton
ABS
5

Affichage_ABS

S_

AB

Mise_en_marche

Figure 2.20 Diagramme prliminaire complet


de lapplication systme de freinage automobile .

vnements est fait, comme nous lavons dj vu, en fonction de la structure de


fonctionnement interne du processus fonctionnel : processus de type boucle
sans fin ou de type dbut-fin .
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 pourraient tre caractriss par des variables de type boolen ; ainsi labsence doccurrence 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 flots 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 flot de donnes ainsi complt ne reflte pas cette excution.
Il est ncessaire dajouter cette information supplmentaire dcrivant le fonctionnement du processus de contrle, cela se traduit gnralement par un diagramme
tat/transition que nous allons dcrire dans le paragraphe suivant.
44

2 Spcification
selon la mthode SA-RT

2.4 Laspect contrle de la mthode SA-RT

2.4.2 Diagramme tat/transition


m Reprsentation dun diagramme tat/transition

Dans le cas o un diagramme flots de donnes possde un processus de contrle,


la comprhension de ce diagramme de flot de donnes, trac un certain niveau
danalyse, ncessite une description ou spcification du processus de contrle.
Cette spcification, reprsentant laspect comportemental ou temps rel de lapplication, peut tre faite de diverses manires : diagramme tat-transition, table tattransition, 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 (figure 2.21) :
tat courant correspondant un fonctionnement prcis du systme, en particulier 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 dsactiver ( 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.
tat courant
vnement
action
tat suivant

Dunod La photocopie non autorise est un dlit.

Figure 2.21 Reprsentation de base


dune cellule lmentaire dun diagramme tat/transition.

Pour illustrer cette description du processus de contrle avec un exemple trs gnrique, reprenons le diagramme prliminaire de la figure 2.19 qui reprsente la
coordination dun systme acquisition-traitement-commande par un processus de
contrle. La figure 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 fonctionnement 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 prliminaire.
45

2 Spcification
selon la mthode SA-RT

2.4 Laspect contrle de la mthode SA-RT

tat repos
Mise_en_marche
<E> 3
<T> 1
Phase dacquisition
Acquisition_termine
<T> 3
Phase de traitement
Traitement_termin
<T> 1

Figure 2.22 Reprsentation du diagramme tat/transition


du processus de contrle du diagramme prliminaire de la figure 2.19.

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> 1
<D> 5
Pas de freinage
demand
Freinage
<T> 4
<E> 3
Pas de freinage
<D> 3
<D> 2

Pas de freinage
<D> 3
<D> 2

Test
ABS
ABS_activ
<E> 5
<E> 2

Freinage
avec ABS
Glissement
<D> 3

Pas de freinage
<D> 3
ABS_non_activ
<D> 5

Freinage
sans ABS

Pas de Glissement
<E> 3

Pas de freinage
(ABS)

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.

46

2 Spcification
selon la mthode SA-RT

2.4 Laspect contrle de la mthode SA-RT

Si nous considrons lexemple du systme de freinage automobile, une solution possible du diagramme tat/transition du processus de contrle Contrler application
du diagramme prliminaire est prsente sur la figure 2.23. Ce diagramme tat/
transition explique le comportement de lapplication.
Une analyse rapide de cet exemple simple montre une incohrence dans ce comportement ; en effet, ltat initial de lapplication Pas de freinage demand nest
sensible qu loccurrence de lvnement Freinage provenant du processus fonctionnel 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 modification du voyant ABS quen actionnant la pdale
de frein.
Un deuxime diagramme tat/transition propose un autre comportement de lapplication plus conforme aux spcifications dun tel systme. Ce diagramme tat/transition, prsent sur la figure 2.24 (page suivante), montre clairement les deux fonctionnements 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 immdiatement la modification du voyant ABS lors de lappui sur le bouton ABS.
Une modification au niveau des vnements dactivation par le processus de contrle
a t effectue pour le processus 4 Lire bouton ABS . Dans le diagramme prliminaire de la figure 2.20, lvnement est de type T . Or, dans le nouveau diagramme tat/transition de la figure 2.24 par rapport au premier diagramme de la
figure 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 indispensable de modifier le diagramme prliminaire de la figure 2.20 comme le montre
la figure 2.25, page suivante.

Dunod La photocopie non autorise est un dlit.

m Rgles gnrales dlaboration dun diagramme tat/transition

Lexemple simple trait prcdemment montre de faon vidente quil est indispensable de conduire en parallle dune part la ralisation du diagramme prliminaire 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 fin de ce travail, nous
devons vrifier 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 plusieurs vnements. Il est donc possible dutiliser les oprateurs de la logique combinatoire 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
47

2 Spcification
selon la mthode SA-RT

2.4 Laspect contrle de la mthode SA-RT

Mise en marche
<E> 1, <E> 4, <D> 5

tat initial
et test ABS

ABS_activ
<E> 5

ABS_non_activ
<D> 5

ABS_non_activ
<D> 5
ABS activ
pas de freinage

Freinage
<E> 3, <E> 2

ABS_activ
<E> 5

Pas de freinage
<D> 3, <D> 2

ABS non activ


pas de freinage

Freinage
<E> 3

Pas de freinage
<D> 3
Freinage
sans ABS

Freinage
avec ABS

Pas de Glissement
<E> 3

Glissement
<D> 3

Pas de freinage
(ABS)

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 .

Contrler
Application
6

ac

tiv

v
cti
_a

E/D

AB
S_

_a
cti

AB
S
Activation_ABS

Lire
bouton
ABS
4

v
e

Contrler
Application
6

on

_n

S
AB

Activation_ABS

Lire
bouton
ABS
4

tiv

c
_a

on

_n

S
AB

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.

48

2 Spcification
selon la mthode SA-RT

2.5 Spcification des processus primitifs

tat 1
e1 ET e2
<E> 3

NON (e3)
<D> 1
tat 2

e3 OU e4
<E> 6

e5 ET (e1 OU e3)
<D> 1
tat 3

Figure 2.26 Exemple dutilisation de combinaisons logiques dvnements.

le fonctionnement de lapplication (figure 2.26). Aussi, il est fortement dconseill


dutiliser des combinaisons complexes dvnements comme celui du passage
de ltat 3 ltat 2 de la figure 2.26. Ainsi, se limiter la combinaison de deux vnements semble tre une rgle de bon compromis : lisibilit et puissance dexpression.

Dunod La photocopie non autorise est un dlit.

2.5 Spcification des processus primitifs


Le processus du diagramme de contexte tant numrot 0 , les processus du diagramme prliminaire seront nots 1, 2, 3 Les processus de ce diagramme flot de
donnes sont ensuite dcomposs si ncessaire et dcrits par des diagrammes flot
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 suffisamment simple, cest un processus primitif ;
il doit tre dcrit par une spcification sous forme textuelle (spcification procdurale, par prcondition et postcondition), tabulaire ou graphique. La mthode SA-RT
ntant pas normalise et sans indication particulire concernant la spcification des
processus primitifs, les utilisateurs dcrivent ces processus fonctionnels selon les
mthodes usites dans lentreprise.
Une des mthodes de spcifications de processus fonctionnels, la plus usite et adapte
ce domaine, est celle qui sappuie sur une spcification procdurale. Celle-ci se
dcline en 6 mots-cls :
E/ donnes : Nom_flots_de_donnes : liste des flots de donnes en entre
du processus fonctionnel ;
E/ vnements : Nom_flots_dvnements : liste des flots 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_flots_de_donnes : liste des flots de donnes en sortie du
processus fonctionnel ;
S/ vnements : Nom_flots_dvnements : liste des flots dvnements en
sortie du processus fonctionnel ;
49

2 Spcification
selon la mthode SA-RT

2.5 Spcification des processus primitifs

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 description procdurale de ce processus est la 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
Il est aussi possible de faire une spcification de type pr et postcondition sur le
modle suivant :
Prcondition : : liste des flots de donnes ou dvnements en entre du processus fonctionnel ave les conditions associes.
Postcondition : liste des flots de donnes ou dvnements en sortie du processus 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 spcifi de la faon
suivante :
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
50

2 Spcification
selon la mthode SA-RT

2.6 Spcification des donnes

2.6 Spcification des donnes


Au fur et mesure de la ralisation des diffrents diagrammes flots de donnes
(diagramme de contexte, diagramme prliminaire et diagrammes de dcomposition),
un ensemble de donnes et dvnements est dfini. 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 spcification des processus primitifs, il ny a pas de
mthode impose, les utilisateurs spcifient les donnes selon les mthodes personnalises dans lentreprise. Pour cet aspect informationnel de SA-RT, nous allons
dcrire deux mthodes qui peuvent rpondre des besoins simples de spcifications
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 spcification 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.
Tableau 2.2 Notation B.N.F. permettant de spcifier les donnes.
Symbole
=

Compos de

**

Commentaire

+
{}
n{}p
()
Dunod La photocopie non autorise est un dlit.

Signification

" "
(|) ou (/)

Regroupement sans ordre


Itration non borne
Itration de n p
Optionnel
Expression littrale
Ou exclusif

Ainsi, nous pouvons proposer une description de chaque donne ou vnement de


la faon suivante :
Donne ou vnement spcifier = dsignation.
Rle : description fonctionnelle de la donne ou de lvnement.
Type : description du codage, domaine de valeurs, etc.
51

2 Spcification
selon la mthode SA-RT

2.6 Spcification des donnes

La dsignation de la donne ou de lvnement peut tre faite avec quelques mots


prdfinis : 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
Affichage_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
52

2 Spcification
selon la mthode SA-RT

2.6 Spcification des donnes

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)

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 (figure 2.27), soit la reprsentation dune itration avec ou
sans bornes (figure 2.28).
Squence

Ou exclusif
Pression

Pression
air

Pression

Pression
huile

Pression
calcule

Pression
estime

Dunod La photocopie non autorise est un dlit.

Figure 2.27 Reprsentation graphique dune donne :


squence et ou exclusif .

Itration
Pression

Pression
7
air

Itration
avec bornes

Pression

1-5 Pression
air

Figure 2.28 Reprsentation graphique dune donne :


itration avec ou sans bornes.

53

2 Spcification
selon la mthode SA-RT

2.7 Organisation gnrale de 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 (excution) de lapplication analyse. Laspect informationnel, description des donnes
au sens large du terme, est trait de faon minimale.
Le schma de la figure 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 flot de donnes permettant de
dcrire lenvironnement de lapplication dvelopper.
Diagramme prliminaire : diagramme flot de donnes prsentant le premier
niveau danalyse fonctionnelle de lapplication.
Diagrammes de dcomposition : diagramme flot de donnes prsentant les analyses des processus fonctionnels non primitifs.
Spcifications des processus fonctionnels primitifs : spcification textuelle des
fonctions ralises par les processus fonctionnels.
Spcifications 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 spcification.
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 dcomposition, spcification dun processus primitif.
Processus de contrle dans un diagramme flots de donnes , diagramme
tat/transition du processus de contrle.
Cohrence de lenchanement des diffrentes tapes
Donnes et vnements correspondant entre deux diagrammes flots de donnes.
vnements identiques entre un diagramme flot de donnes intgrant un processus de contrle et le diagramme tat/transition du processus de contrle.
Nous pouvons ainsi rappeler les diffrentes rgles dlaboration des diagrammes flots
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.
54

2 Spcification
selon la mthode SA-RT

2.7 Organisation gnrale de la mthode SA-RT

Diagramme de contexte

Diagramme
de contexte

Systme
de
contrle

Diagramme prliminaire

Diagramme
prliminaire

h
1

e
2

Diagramme E-T du 4

Diagramme E-T du 4

Spcification
des processus
de contrle

Diagramme de dcomposition

Diagramme de
dcomposition

1.4

1.1
i

1.2
j

ire

onna

Dictionnaire
des donnes

Dicti

1.3

Spcif du 2
Spcif du 3
Spcif du 1.1
Spcif du 1.2
Spcif du 1.3

des d

onn

es

Spcification
des processus
primitifs

a = ..
...

b = ..
...

Dunod La photocopie non autorise est un dlit.

Figure 2.29 Organisation gnrale de la mthode SA-RT.

Un seul ou aucun processus de contrle par niveau de diagramme : diagramme


prliminaire ou diagrammes de dcomposition.
Lensemble des flots 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 diagramme tat/transition doivent tous appartenir au diagramme flot de donnes et
rciproquement tous les vnements du diagramme flot de donnes doivent tre
utiliss dans le diagramme tat/transition.
Pas de flots de donnes entre les processus fonctionnels et le processus de contrle.
Pas de flots 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 flots de donnes et tableau 2.4 pour les flots de contrle.
55

2 Spcification
selon la mthode SA-RT

2.8 Exemples

Tableau 2.3 Liaisons flots de donnes entre les entits du modle SA-RT.
Vers
De

Processus
fonctionnel

Processus
de contrle

Unit
de stockage

Processus fonctionnel

OUI

Processus de contrle

NON

NON

Unit de stockage

OUI

NON

NON

Bord de modle

OUI

NON

OUI

Bord
de modle

Tableau 2.4 Liaisons flots de contrle entre les entits du modle SA-RT.
Vers
De

Processus
fonctionnel

Processus
de contrle

Unit
de stockage

Processus fonctionnel

NON

Processus de contrle

OUI

OUI

Unit de stockage

NON

OUI*

NON

Bord de modle

OUI

OUI

OUI*

Bord de
modle

* si le modle intgre le stockage dvnements.

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 prsence humaine. Nous allons limiter notre tude au systme de gestion de la scurit
qui concerne principalement le contrle des deux fluides :
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
56

2 Spcification
selon la mthode SA-RT

2.8 Exemples

eaux, est contrl en permanence avec une vacuation laide de pompes afin
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 (figure 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 affichage de lalarme.

Console
oprateur

Commande
pompe

Systme
de contrle

Dunod La photocopie non autorise est un dlit.

MS

LS

Pompe

HLS
Puisard

LLS

Figure 2.30 Reprsentation schmatique


de lapplication de la gestion de laspect scurit dune mine.

57

2 Spcification
selon la mthode SA-RT

2.8 Exemples

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 afin 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 fixe MS_L2 (Methane Sensor Level 2)
avec la condition MS_L2 > MS_L1 afin 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 lapplication. Ce diagramme, reprsent sur la figure 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

Interrupteur
Mise_sous_tension

Console
oprateur

Pompe
MS
Commande_pompe
Grer
scurit
mine
0

Capteur
niveau eau

LS

Alarme

Console
oprateur

Figure 2.31 Analyse SA-RT de lapplication de la gestion de laspect scurit dune mine :
Diagramme de contexte.

58

2 Spcification
selon la mthode SA-RT

2.8 Exemples

lvnement Mise_sous_tension , nous avons quatre flots de donnes : deux entrants


(MS, LS) et deux sortants (Commande_pompe, Alarme). Lensemble de ces flots 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 figure 2.32, donne une analyse ou dcomposition 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 vrifier la cohrence
des flots de donnes ou dvnements entrants ou sortants par rapport au diagramme de contexte.
Les processus 1 (Acqurir capteur mthane) et 4 (Afficher alarme) concernent le
contrle du taux de mthane dans lair avec un processus dacquisition et de comparaison aux niveaux de consignes (MS_L1, MS_L2) stocks dans une mmoire de
stockage Niveaux_consignes_mthane et un processus de commande pour dclencher lalarme.
Mise_sous_tension

MS_L1 dpasse
MS

Niveaux_
Consignes_mthane
Niveaux_
Consignes_eau

Acqurir
capteur
mthane
1

Consig

ne_resp

E/D

ecte

E/D

MS_L2 dpasse

Dunod La photocopie non autorise est un dlit.

Alarme

Contrler
mine
5
E/D

Niveau_LLS
E/D
Niveau_HLS

LS

Afficher
alarme
4

Acqurir
capteur eau
2

Commander
pompe
3

Commande_pompe

Vitesse_pompe

Figure 2.32 Analyse SA-RT de lapplication de la gestion de laspect scurit dune mine :
Diagramme prliminaire.

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 fonctionnels 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.
59

60
tat alerte
(consignes dpasses)
et pompe en marche

Consigne respecte
<D> Afficher alarme

Niveau HLS ET NON (MS L1 dpasser)


<E> Commander pompe
<E> Afficher alarme

Niveau LLS
<D> Commander pompe

Pompe
en marche

MS L1 dpasse
<E> Afficher alarme

Chauffage_termin
<T> Analyser temprature

tat alerte
(consignes dpasses)

Niveau HLS
<E> Commander pompe

Fonctionnement
nominal
de la mine

Figure 2.33 Analyse SA-RT de lapplication de la gestion de laspect scurit dune mine :
Diagramme tat/transition.

Niveau HLS ET NON (MS L2 dpasser)


<E> Commander pompe

Consigne respecte
<D> Afficher alarme

<E> Acqurir capteurs air


<E> Acqurir capteurs eau

Mise_sous_tension

2 Spcification
selon la mthode SA-RT
2.8 Exemples

2 Spcification
selon la mthode SA-RT

2.8 Exemples

Le processus de contrle 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 figure 2.33. Ce diagramme tat/transition, description du fonctionnement 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, lvnement Consigne_respecte est mis.
2.8.2 Exemple : pilotage dun four verre

Dunod La photocopie non autorise est un dlit.

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 suffisant de matires fondues temprature
constante, une vacuation du trop plein tant prvue en cas dattente prolonge
dutilisation du verre. Cette application a t simplifie afin 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 dapprovisionnement en matires premires, chauffage du four). Nous avons donc comme prcdemment deux chanes de rgulation : temprature et approvisionnement en sable.
Une reprsentation schmatique de cette application est prsente sur la figure 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 temprature (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 fix court
mais avec une intensit qui peut dpendre du chauffage ncessaire.
Lacquisition du niveau de matire est lie linterruption gnre de faon apriodique 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 photo61

2 Spcification
selon la mthode SA-RT

2.8 Exemples

Capteur
dtection sable

Commande
dapprovisionnement

sable

Capteur de niveau
du four

Capteur
de temprature
Chauffage
du four

verre

Figure 2.34 Reprsentation schmatique


de lapplication de la gestion dun four verre.

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, afin dviter une solidification du sable fondu, il
est ncessaire de limiter lapport en matires premires si la temprature nest pas
suffisante.
m Analyse SA-RT
M Diagramme de contexte

La premire tape danalyse consiste laborer le diagramme de contexte de lapplication. Ce diagramme, reprsent sur la figure 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 fonctionnel initial 0 Piloter four verre constitue lapplication tudier. En rsum,
en plus des deux vnements prcdemment cits, nous avons cinq flots de donnes :
trois flots entrants (Temprature, Niveau_sable, Arrive_sable) et deux flots sortants
(Sable, Chauffage). Lensemble de ces flots doit se retrouver dans le diagramme prliminaire : premier niveau danalyse du processus fonctionnel 0.

62

2 Spcification
selon la mthode SA-RT

2.8 Exemples

Console oprateur

Capteur de temprature
Arrt

Marche
Commande approvisionnement

Temprature
Sable
Capteur de niveau
Niveau_sable

Piloter
four verre
0
Chauffage

Arrive_sable
Capteur
de dtection arrive sable

Commande chauffage

Figure 2.35 Analyse SA-RT de lapplication de la gestion dun four verre :


Diagramme de contexte.

Dunod La photocopie non autorise est un dlit.

M Diagramme prliminaire et diagramme tat/transition

Le diagramme prliminaire, prsent sur la figure 2.36, donne une analyse ou dcomposition 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 vrifier la cohrence des
flots 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 dcomposition fonctionnelle gnrique que nous avons vue (figure 2.14). Ainsi, les trois processus fonctionnels de base existent : acquisition (1 Acqurir temprature), traitement (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
63

2 Spcification
selon la mthode SA-RT

2.8 Exemples

Temprature_*
mesure
Temprature
Arrt

Aqurir
temprature
1

E/D

Temprature_*
mesure
Analyser
temprature
Trop_froid
2

T
Commande_
chauffage
Temprature_
consigne

T
E/D
Chauffage_
termin

Chauffer
four
3

Chauffage

sable

Analyser
besoin
sable
6

E/D
Rguler
four
7

Niveau_
consigne

Marche

Sable_
tomb

Niveau_mesur

Analyser
niveau
5

Niveau_sable

Dtecter
arrive
sable
4

Arrive_sable

Figure 2.36 Analyse SA-RT de lapplication de la gestion dun four verre :


Diagramme prliminaire.

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 fonctionnels par des vnements qui sont mis en place en mme temps que la ralisation
du diagramme tat/transition de la figure 2.37. Ce diagramme tat/transition, description 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 difficult concernant la rgulation du niveau
de sable ; en effet lajustement de lapprovisionnement en sable ne peut se produire
64

2 Spcification
selon la mthode SA-RT

2.8 Exemples

tat repos
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
Fonctionnement
nominal

Trop_ froid
<T> Chauffer four

Sable_tomb
<T> Acqurir niveau
<E> Analyser besoin en sable

Chauffage
du four

Rgulation
niveau
sable

Figure 2.37 Analyse SA-RT de lapplication de la gestion dun four verre :


Diagramme tat/transition.

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

Dunod La photocopie non autorise est un dlit.

m Prsentation du cahier des charges

Le contrle-commande dun moteur combustion est devenu de plus en plus complexe 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 consommation 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
afin 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 spcifique. Actuellement, un vhicule
possde de nombreux calculateurs ddis des fonctions trs diverses (freinage ABS,
gestion moteur, clairage, climatisation, etc.). Ces diffrents calculateurs commu65

2 Spcification
selon la mthode SA-RT

2.8 Exemples

niquent entre eux par un bus de terrain comme CAN (voir chapitre 4) afin de partager des informations et grer ainsi le vhicule de faon cohrente.
Cette application de commande dun moteur combustion est reprsente schmatiquement sur la figure 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.

Commande de rinjection
gaz chappement

Capteur pression
collecteur air

Bus CAN

Calculateur
Communication
avec les autres
calculateurs

Commande
admission air (papillon)
Capteur pdale
acclrateur
Capteur
pollution
en amont

Commande
injecteur

Capteur
pollution
en aval

Commande allumage

Capteur temprature eau

Capteur vitesse de rotation du villebroquuin

Figure 2.38 Reprsentation schmatique


de lapplication de la commande dun moteur combustion.

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 diffrentes sorties de commande. Nous nanalyserons pas cette loi de commande qui
prsente une relative complexit et correspond une spcificit 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 donnes 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 affichage.

66

2 Spcification
selon la mthode SA-RT

2.8 Exemples

m Analyse SA-RT
M Diagramme de contexte

Le diagramme de contexte de lapplication est reprsent sur la figure 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 identifies : en sortie (Com_S) et en entre
(Com_E).
Capteur acclrateur
Conducteur

Ac

Bus CAN

c
r

Capteur temprature air

T_

ge
ma

Piloter
moteur
0

Vite
Capteur vitesse

Po
llu

n_

tio

l
Po

n_

io
ut

Commande allumage

u
All

sse

Dunod La photocopie non autorise est un dlit.

T_eau

Capteur temprature eau

Capteur pollution sortie

om

om

air

Capteur pollution entre

_E

_S

ai

P_

ur

te

ra

Capteur pression air

Injecteur

En

Commande injecteur

tr

e_a
ir

En

tr

Commande admission air

e_

ga

z_

b
Commande admission gaz brls

Figure 2.39 Analyse SA-RT de lapplication de la commande dun moteur combustion :


Diagramme de contexte.

Le processus fonctionnel initial 0 Piloter moteur constitue lapplication tudier.


En rsum, en plus des deux vnements prcdemment cits (Arrt, Marche),
nous avons 13 flots 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 flots doit se retrouver dans le
diagramme prliminaire : premier niveau danalyse du processus fonctionnel 0.

67

2 Spcification
selon la mthode SA-RT

2.8 Exemples

M Diagramme prliminaire et diagramme tat/transition

Le diagramme prliminaire, prsent sur la figure 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 fixe pour avoir une bonne
comprhension globale du diagramme flots 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 vrifier la cohrence des flots de donnes ou dvnements entrants ou
sortants par rapport au diagramme de contexte de la figure 2.39. Afin 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

Arrt
Paramtres_*
moteur_entre

Com_S
Marche

Acqurir
acclrateur
1

P_air

E/D

T_air

Acqurir
paramres
moteur
2

T_eau

Paramtres_*
Moteur en entre

se

Commande_
prte

Messages*

on
uti

T
T

E/D

Lire
capteur
pollution
4

_E

Paramtres_*
moteur_entre

Commande
allumage
8

Paramtres_*
moteur_sortie

laborer
commande
moteur
5

Paramtres_*
moteur_sortie

Allumage

Commander
injection
7

Injecteur
Commander
Entres gaz
6

Entre_air
Entre_gaz_b

Po
ll

ut
ion

_S

ll
Po

Communiquer
bus CAN
9

Messages*
Contrler
moteur
10

E/D
Acqurir
vitesse
3

s
Vite

E/D

E/D

Com_E

Figure 2.40 Analyse SA-RT de lapplication de la commande dun moteur combustion :


Diagramme prliminaire.

68

2 Spcification
selon la mthode SA-RT

2.8 Exemples

Une autre unit de stockage est ddie aux messages (Messages). Cette unit de stockage est un peu particulire par rapport aux autres units de stockage. En effet, en
entre, nous avons une file gre de faon FIFO ou priorit et, en sortie, la file
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 figure 2.41. Nous avons simplifi le
fonctionnement de ce processus de contrle en supposant que les processus fonctionnels dacquisition taient lancs au dbut de lexcution (1, 2, 3 et 4) et fournissaient 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 commande moteur dclenche lensemble des processus fonctionnels de commande
(6, 7 et 8). Enfin, le processus fonctionnel 9 de communication gre priodiquement les messages au niveau rception et mission.
tat repos
marche
<E> 1
<E> 2
<E> 3
<E> 4
<E> 9

arrt
<D> 1
<D> 2
<D> 3
<D> 4
<D> 9

tat attente
tat_acclrateur
<T> 5

Dunod La photocopie non autorise est un dlit.

laboration
contrle
moteur

Commande_prte
<T> 6
<T> 7
<T> 8

Figure 2.41 Analyse SA-RT de lapplication de la commande dun moteur combustion :


Diagramme tat/transition.

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.

69

2 Spcification
selon la mthode SA-RT

2.9 Extensions de 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 spcifier prcisment certaines fonctions ou
certaines donnes. Dautre part, la mthode ntant pas normalise, il est tout fait
possible dtendre la mthode afin doffrir plus dexpressivit. Aussi de nombreuses
entreprises ont adapt la mthode leurs besoins et ajout des lments graphiques
pour exprimer des spcifications plus prcises. Nous prsentons dans ce chapitre
deux de ces extensions trs utilises : une extension concernant les flots 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 flots de donnes discrets
ou continus. Ainsi, lanalyse des flots de donnes permet et, donc oblige, de distinguer un flot de donnes discret (arc orient simple comme prcdemment) et un flot
de donnes continu (arc orient avec une double flche). Mais, dans ce cas, o la
richesse dexpression des donnes vhicules par ces flots est augmente, il est
ncessaire de prciser la smantique attache cette nouvelle description. Or deux
types de smantique peuvent tre attachs aux flots de donnes (figure 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) ;
Utilisateur
Distance_parcourue
Calculer
vitesse
3

Affichage_vitesse

Top_horloge

Smantique 1

Valider
conexion
3

Nom_valide

Entre_nom

Smantique 2

Figure 2.42 Extension de la syntaxe graphique des flots de donnes


selon deux smantiques.

70

2 Spcification
selon la mthode SA-RT

2.9 Extensions de 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 flots de donnes, une syntaxe graphique plus complte permet de
prciser les flots dvnements discrets ou continus. Ainsi, lanalyse des flots dvnements permet et, donc oblige, de distinguer un flot dvnements discret (arc
orient simple comme prcdemment) qui concerne des vnements consommables
ou lisibles une seule fois (existence des temps discrets). De mme un flot dvnements continu (arc orient avec une double flche) dcrit un vnement continuellement disponible (existence permanente).
Il est important de noter que les vnements prdfinis E, D, T sont des vnements discrets, envoys chaque fois pour activer ou arrter un processus fonctionnel.
En revanche, un flot dvnements continu permet au processus de contrle de tester
en permanence le rsultat dun processus fonctionnel qui est indpendant du processus de contrle (figure 2.43).
Temprature
Mesurer
Trop chaud
temprature
2

Climatiser
enceinte
3

E/D

T_consigne

Figure 2.43 Extension de la syntaxe graphique des flots dvnements.

De mme, pour les stockages de donnes, le stockage dvnements modlise le


besoin de mmorisation dun vnement de faon ce que son occurrence soit utilise plusieurs fois. Comme le flot dvnements auquel il est troitement associ,
il est nomm par une tiquette ou label explicite form de :
tiquette_Stockage_vnements = nom (+ qualifiant)

Dunod La photocopie non autorise est un dlit.

et il est reprsent par deux traits parallles en pointills (figure 2.44).

Consigne_dpasse

Jetons disponibles

Figure 2.44 Extension de la syntaxe graphique de SA-RT :


Stockages dvnements.

71

2 Spcification
selon la mthode SA-RT

2.9 Extensions de 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 spcification 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 flots de donnes
reflte 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 flots 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 finis 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
figure 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 spcification, 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 spcification.
Lutilisateur dcrit sa spcification 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 spcification : simulation et vrification.
Pour atteindre ce but, il est ncessaire davoir une traduction unique dun modle
vers lautre.
Interface utilisateur

Noyau formel d'excution

Langage graphique
de haut niveau
pour la spcification

Langage machine
pour l'analyse

Mthode SA-RT

Rseaux de Petri

Figure 2.45 Reprsentation schmatique


de lassociation dun modle formel avec la mthode SA-RT.

72

2 Spcification
selon la mthode SA-RT

2.9 Extensions de la mthode SA-RT

m Principes gnraux

Dunod La photocopie non autorise est un dlit.

La mthode SA-RT, utilise pour ce projet, correspond celle dcrite prcdemment


avec toutefois lextension des flots 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 t0 est la
date de sensibilisation de la transition :
Franchissement de la transition aprs le temps t0 + min ;
Franchissement de la transition avant le temps t0 + 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, afin de simplifier 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 flots de donnes, nous trouvons le modle dun flot de donnes
discret, qui sont des donnes consommables ou lisibles une fois, sur la figure 2.46
et le modle dun flot de donnes continu, qui sont des donnes continuellement
disponibles, sur la figure 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

crire_donne_vide

Processus
A
1

Donne

Processus
B
2

Vide

Valeur

crire_donne

Lire_donne

Figure 2.46 Traduction dun flot de donnes discret de la mthode SA-RT


par un rseau de Petri.

73

2 Spcification
selon la mthode SA-RT

2.9 Extensions de la mthode SA-RT

crire_donne_vide

Processus
A
1

Donne

Processus
B
2

Vide

Valeur

Lire_donne

crire_donne

Figure 2.47 Traduction dun flot de donnes continu de la mthode SA-RT


par un rseau de Petri.

(cas flot continue) ou qui a t consomme (cas du flot discret). Cette place possde
un jeton linitialisation. Dans le cas du flot de donnes continu, la premire criture de la donne la place Vide perd son jeton et la place Valeur sera ensuite
toujours marque. En revanche, dans le cas du flot de donnes discret, le franchissement 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 figure 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.

Donne

crire_donne

Stockage

Lire_donne

Figure 2.48 Traduction dune unit de stockage de la mthode SA-RT


par un rseau de Petri.
Tableau 2.5 Caractrisation du contenu de lenregistrement
dans lunit de stockage du modle SA-RT.

Initialement
Aprs crire_donne
Aprs Lire_donne

74

Donne

tat

Non dfinie
Dfinie
Dfinie

Ancien
Nouveau
Ancien

2 Spcification
selon la mthode SA-RT

2.9 Extensions de 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 flots de donnes.
La figure 2.49 dcrit un cas gnral avec des entres de type flot discret, flot continu
et unit de stockage. Ainsi, nous avons en entre un flot discret (Donne_d_1),
deux flots 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 flots discrets
(Donne_d_1 et Donne_d_2), un flot 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 ).
Do

nn

_d

Donne_c_1
Donne_c_2

_1

d_

e_

nn

Do
3
e_d_
onn
Processus D
A
1

Donne_c_3

Donne_s_1
Donne_s_3

Donne_s_2

Donne_d_1

Donne_d_2

Suppression
Excution
Donne_c_1

Fin

Oisif
Dunod La photocopie non autorise est un dlit.

Donne_d_3

Donne_c_3

Donne_c_2
Donne_s_3
Donne_s_1

Lancement

Donne_s_2

Figure 2.49 Traduction dun processus fonctionnel de la mthode SA-RT


par un rseau de Petri.

75

2 Spcification
selon la mthode SA-RT

2.9 Extensions de 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 fin 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 flots de donnes discrets, est mise en exergue sur cet
exemple. Le flot de donnes discret ne peut tre consomm quune seule fois pendant
lexcution dun processus fonctionnel ; par consquent une transition supplmentaire ( Suppression ) est ncessaire pour liminer les flots 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 fin douvrage.
m Exemple simple

La difficult 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 (figure 2.50). Ces lments sont lis par des flots de donnes discrets.
Dautre part des flots de donnes discrets arrivent sur les deux processus fonctionnels
(Donne_a et Donne_b) et un flot de donnes discret est mis (Donne_c).
Donne_s

Donne_a

Processus
A
1

Processus Donne_c
B
2
Donne_s

Figure 2.50 Exemple dun diagramme flots de donnes de la mthode SA-RT


pour appliquer la transformation en rseaux de Petri.

La traduction de ce diagramme flot de donnes est reprsente sur la figure 2.51.


Ce rseau de Petri est compos de 11 places et de 7 transitions. Nous pouvons immdiatement remarquer que nous retrouvons les diffrentes places correspondant aux
modles initiaux de chaque lment. Ainsi, les deux processus fonctionnels Processus 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 proces76

T_1
T_3

Donne_b_valeur

Donne_b_vide

A_Oisif

A_Excution
Donne_s

T_5

T_4

B_Oisif

B_Excution

T_7

T_6

Donne_c_vide

Donne_c_valeur

Figure 2.51 Traduction du diagramme flots de donnes de la figure 2.50 en rseaux de Petri.

Donne_a_valeur T _ 2

Donne_a_vide

Dunod La photocopie non autorise est un dlit.

2 Spcification
selon la mthode SA-RT
2.9 Extensions de la mthode SA-RT

77

2 Spcification
selon la mthode SA-RT

2.9 Extensions de 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 figure 2.48. En se basant sur le modle gnrique
de la figure 2.46, les trois flots de donnes discrets sont reprsents chacun par deux
places, soit, par exemple pour le flot 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 flots 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 flot de donnes Donne_a au processus fonctionnel A. La transition T_2 reprsente la fois
la transition Lire_donne du modle du flot 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 flot de donnes
discret et la transition Suppression du modle dun processus fonctionnel. La
dernire transition T_3, attache la modlisation du processus fonctionnel Processus 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 flots de donnes SA-RT,
peut tre utilis pour vrifier certaines proprits de la spcification comme la non
occurrence de lexcution simultane de deux processus fonctionnels, le cheminement 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 transition 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 flots de donnes
SA-RT. Prenons lexemple prcdent, le marquage prsent sur la figure 2.51 correspond un moment de lexcution o nous avons les lments suivants :
pas de donne sur le flot 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 flot de donnes discret Donne_b entrant ;
le processus fonctionnel Processus B en arrt ;
pas de donne sur le flot de donnes discret Donne_c sortant.
Par consquent, il est possible de visualiser ces diffrents tats sur le diagramme
flots de donnes initial, reprsent sur la figure 2.50. Cette visualisation peut tre
anime et donc ainsi permettre au concepteur de voir le droulement de lexcution
de diagramme flots de donnes SA-RT. Cette visualisation est schmatise sur la
78

2 Spcification
selon la mthode SA-RT

2.9 Extensions de la mthode SA-RT

figure 2.52 qui reprend la figure 2.50 avec une marque symbolisant lactivit dun
processus fonctionnel ou la prsence dune donne.
Donne_s

Donne_a

Processus
A
1

Processus Donne_c
B
2
Donne_s

Dunod La photocopie non autorise est un dlit.

Figure 2.52 Visualisation de lexcution dun diagramme flots de donnes


en utilisant le rseau de Petri.

79

3 CONCEPTION
SELON LA MTHODE DARTS

Dunod La photocopie non autorise est un dlit.

3.1 Introduction
La mthode de conception va permettre de passer dun modle de spcification
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 flots 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 efficace en
termes de ralisation et dexcution, cest--dire que le nombre de tches de
lapplication ne correspond pas obligatoirement au nombre de processus fonctionnels des diagrammes SA-RT ;
dautre part, les relations entre les processus fonctionnels des diagrammes flots
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 paragraphe 1.3.4, dassocier une mthode danalyse de type flot 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 figure 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 implmentation avec un langage de programmation de haut niveau excut dans un environnement de type noyau temps rel, ou avec un langage multitche (Ada) ou un
langage flots 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
81

3 Conception
selon la mthode DARTS

3.1 Introduction

Mthode et spcification fonctionnelle et structure


SA-RT

Mthodes de conception orientes flot de donnes

Mthodes de conception orientes objets

SD Structured Design
(E. YOURDON, L.L. CONSTANTINE, G. MEYERS, 1979)

HOOD Hierarchical Object Oriented Design


(CRI-Cisi Ingnirie-Matra, 1987)
UML Unified Modeling Language
(Booch, Jacobson, Rumbbaugh, 1997)

DARTS Design Approach for Real-Time Systems


(H. Gomaa, 1984)
MSMC Modlisation Simulation des Machines
Cyberntiques (H. Brenier, 1999)

Ada
C
labVIEW

Ada
C++

Figure 3.1 Les choix dune mthode de conception et du langage dimplmentation


suite une analyse de type SA-RT.

larchitecture donne sur la figure 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.

entre

Tche 8

synchronisation

Tche 1

sortie

Tche 7

Ressource
critique
synchronisation

Tche 2
communication
entre

Tche 5
sortie

Tche 3

Tche 4

communication

Tche 6

synchronisation

Figure 3.2 Architecture multitche dcrire avec la mthode de conception DARTS.

82

3 Conception
selon la mthode DARTS

3.1 Introduction

3.1.2 Modlisation des tches

Nous pouvons dfinir 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 luimme (horloge temps rel, temporisateur chien de garde ). Dans cette catgorie 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 spcifiques entre la tche
appelante et la tche appele. Ces tches doivent obligatoirement tre lies avec
une autre tche.
Tches matrielles

Tches logicielles

IT

Tche
acquisition

Capteur

Demande
d'affichage

Tche
affichage

Donnes

Dunod La photocopie non autorise est un dlit.

Figure 3.3 Exemple des deux types de tches matrielles et logicielles.

En ce qui concerne les tches matrielles, les spcifications 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
(figure 3.4) :
les signaux priodiques qui peuvent tre caractriss par une premire date
doccurrence et une priode. Ces signaux (rfrencs 1 sur la figure 3.4) proviennent en gnral dune horloge interne HTR Horloge Temps Rel . ;
les signaux apriodiques qui se produisent de faon rptitive mais sans priode
fixe (rfrencs 2 sur la figure 3.4). Pour dterminer les caractristiques des
tches associes ces signaux apriodiques, il est ncessaire de possder des informations temporelles les concernant, par exemple la dure minimale entre deux
occurrences ;
83

3 Conception
selon la mthode DARTS

3.1 Introduction

Systme de contrle
Procd contrler

Horloge
temps rel
1

2
Logiciel
Noyau
temps rel

Tches

Figure 3.4 Les diffrents types dactivation des tches matrielles.


Interactions du logiciel temps rel avec des vnements externes : (1) interruptions internes provenant dune horloge temps rel, (2) interruptions externes provenant du procd contrler.

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 lorsquune 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 figure 3.5 montre cette diffrence de relations de synchronisation 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 donnes) 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 communication 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.
84

3 Conception
selon la mthode DARTS

3.2 Prsentation de la mthode DARTS

Synchronisation
unilatrale ou asynchrone
Tche 1

Synchronisation
bilatrale ou synchrone (rendez-vous)

Tche 2

Tche 1

Tche 2

Tche 1
Tche 2

t
Attente

Cas l

Cas l

Point de synchronisation

Tche 1
Tche 2

t
Pas dattente

Tche 2

t
Attente

Point de synchronisation

Cas II

Cas II

Point de synchronisation

Tche 1

Tche 1
Tche 2

Point de synchronisation

Attente
Pas dattente

t
t

Point de synchronisation
excution de lune ou lautre tche

Figure 3.5 Relations de synchronisation entre les tches.

Dunod La photocopie non autorise est un dlit.

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 contrlecommande gnrales. Il est intressant de noter que des versions enrichies de cette
mthode de conception ont t cres afin de rpondre des besoins spcifiques.
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 flots de donnes. Ainsi, les diagrammes flots de
donnes de la mthode SA-RT (diagrammes prliminaires ou diagrammes de
dcomposition) sont traduits en diagramme flots 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 afin dobtenir
des applications dont le test ou la vrification peuvent tre conduits de faon fiable,
nous avons volontairement limit la possibilit dexpression en se donnant des rgles
de bonne conception . Ces rgles correspondent en partie un profil de programmation adopt dans le cadre de la programmation en langage Ada dapplications
haut niveau de scurit. La prsentation dtaille de ce profil de programmation,
85

3 Conception
selon la mthode DARTS

3.2 Prsentation de la mthode DARTS

appel Ravenscar profile (1997), est effectue dans le chapitre 5. Dans ce contexte,
nous pouvons ainsi dfinir les rgles suivantes :
Nombre fix 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 larchitecture multitche. Nous pouvons avoir un ou plusieurs flots de donnes en entres
et un ou plusieurs flots de donnes en sortie (figure 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)
Tche

Module de traitement

Signal dactivation
Entre

Acqurir
pression

Sortie

Entre

Calculer
FFT

Sortie

Figure 3.6 Reprsentations des tches et des modules.

Cette tiquette peut correspondre celle donne dans le cadre dun diagramme
flots 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 profil de conception fix.
Nous avons aussi le module de traitement qui correspond des programmes spcifiques appels par les tches pour effectuer des calculs particuliers. Nous pouvons
avoir un ou plusieurs flots de donnes en entres et un ou plusieurs flots de donnes
en sortie (figure 3.6). Les modules de traitement sont modliss par un rectangle
qui comporte une tiquette ou label explicite form de :
86

3 Conception
selon la mthode DARTS

3.2 Prsentation de 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
(figure 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 tiquette ou label explicite form de :
tiquette_Synchronisation = nom (+ qualifiant)
Cette synchronisation peut relier plusieurs tches en amont dune tche synchronise en considrant une opration OU entre toutes les synchronisations en provenance 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 profil de programmation nonc.
Synchronisation unique

Rendez-vous

Dunod La photocopie non autorise est un dlit.

Synchronisation multiple
de type OU

Figure 3.7 Reprsentations des synchronisations entre les tches.

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 (figure 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 communications sont donc reprsentes par un symbole orient avec une tiquette ou label
explicite form de :
87

3 Conception
selon la mthode DARTS

3.2 Prsentation de la mthode DARTS

tiquette_Communication = nom (+ qualifiant)


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 file
FIFO,
botes aux lettres bloquantes ne pouvant contenir quun seul message,
botes aux lettres bloquantes pouvant contenir n messages grs selon une file
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 file FIFO,
botes aux lettres non bloquantes en criture ne pouvant contenir quun seul
message.
BAL FIFO

BAL FIFO crasement

BAL une place

BAL une place et crasement

BAL priorit

Figure 3.8 Reprsentations des communications entre les tches.

Les communications, dites crasement, fonctionnent en liminant la donne la


plus vieille dans le cas dune file 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 (figure 3.9). En revanche, il est dconseill davoir
plusieurs tches en aval car cela nuit au dterminisme du programme.

88

3 Conception
selon la mthode DARTS

BAL FIFO multiple


de type OU

3.2 Prsentation de la mthode DARTS

BAL FIFO crasement multiple


de type OU

Figure 3.9 Reprsentations des communications entre les tches


avec entres multiples de type OU .

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 matrielle 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 lhorloge 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 (figure 3.10) :
tiquette_Activation_HTR = HTR (dure en ms)
tiquette_Activation_IT = IT (+ nom interruption)
tiquette_Activation_CG = CG (+ nom chien de garde)
Valeur de la priode en ms

Dunod La photocopie non autorise est un dlit.

HTR (Val_per)
Tche matrielle priodique
Entre

Acqurir
temprature

Sortie

IT (Nom_interruption),
CG (Nom_chien_de_garde)
Tche matrielle apriodique
Entre

Acqurir
temprature

Sortie

Figure 3.10 Reprsentations de lactivation des tches matrielles.

89

3 Conception
selon la mthode DARTS

3.2 Prsentation de 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 (figure 3.11) :
botes aux lettres crasement ou non gres selon une file FIFO ou FIFO
priorit ;
botes aux lettres crasement ou non une seule place ;
botes aux lettres n places gres selon la priorit.
Tche logicielle
HTR (250 ms)
Entre

Acqurir
temprature

Commander Sortie
vanne
ou

Figure 3.11 Reprsentations de lactivation des tches logicielles.

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
(figure 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.
IT (dclenchement_mesures)

Evt_mesure

Attendre
mesures

?
HTR (350 ms)
Entre_niveau

Acqurir
niveau

BAL_niveau

Commander Sortie
vanne

Figure 3.12 Exemple de dysfonctionnement de synchronisation dune tche logicielle


par deux tches matrielles.

90

3 Conception
selon la mthode DARTS

3.2 Prsentation de 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 explicite form de (figure 3.13) :
tiquette_module_donnes = nom (+ qualifiant)
Tche
1

Module_de_donnes
LIRE
CRIRE

Tche
2

Figure 3.13 Reprsentations dun module de donnes


partag par plusieurs tches.

Dunod La photocopie non autorise est un dlit.

Si laction met en jeu un transfert de donne entre la tche et le module de donnes


(LIRE, CRIRE, etc.), la flche est oriente dans le sens de ce transfert de donnes.
Si ce nest pas le cas (INITIALISER, TRIER, etc.), la flche est oriente de la tche
vers le module de donnes afin de montrer la demande queffectue la tche sur ce
module de donnes (figure 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
figure 3.13 sont totalement asynchrones et doivent possder leur propre mcanisme
dactivation. Nous pourrions dfinir le module de donnes comme une bote aux
lettres crasement en criture et lecture non destructive avec un message par dfaut
linitialisation.
Module_de_donnes
LIRE

Module_de_donnes
LIRE
CRIRE

CRIRE
INITIALISER

Figure 3.14 Reprsentations de diffrents modules de donnes


partags par plusieurs tches.

91

3 Conception
selon la mthode DARTS

3.2 Prsentation de la mthode DARTS

3.2.2 Mise en uvre de la mthode DARTS

Cette section dcrit le passage de la spcification 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 finissons par
lexemple du systme de freinage automobile dj spcifi.
m Rgles gnrales

Pour cette mthode de conception non formelle, nous allons dfinir des rgles gnrales permettant de passer dun diagramme flots 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 dfini prcisment (HTR, IT, CG). Pour les autres tches
logicielles, il est ncessaire didentifier 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. Afin damliorer et de
simplifier 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 dfinir 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 fonctionnel du diagramme SA-RT.
Rgle 1.2 : Une tche supplmentaire du modle DARTS est associe au processus 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).
92

3 Conception
selon la mthode DARTS

3.2 Prsentation de la mthode DARTS

Rgle 2.2 : Les autres tches sont dclares soit logicielles (activation par synchronisation 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 flots de donnes de SA-RT
peuvent tre traduits par des synchronisations qui sont utilises pour activer des
tches logicielles.
Enfin, 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 (flot 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 spcification 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 configuration multitche. De mme les deux rgles 3.1 et 3.2, concernant les communications entre les tches, ne dfinissent en rien la gestion de ces botes aux lettres
(FIFO ou priorit, crasement ou non, une ou plusieurs places). Ainsi, en partant
dune mme spcification SA-RT (diagramme flots 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

Dunod La photocopie non autorise est un dlit.

Nous allons appliquer quelques rgles nonces prcdemment en les illustrant


dexemples simples. Soit la figure 3.15, considrons le processus fonctionnel correspondant 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).
Temprature_moteur

Tester
tat
Moteur
3

HTR (2 ms)
Commande_moteur
Temprature_moteur
Vitesse_moteur

Contrle
moteur

Commande_moteur

Vitesse_moteur

Figure 3.15 Traduction dun processus fonctionnel dacquisition de donnes


en une tche priodique.

93

3 Conception
selon la mthode DARTS

3.2 Prsentation de 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 figure 3.16, nous avons aussi un processus fonctionnel correspondant 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 Afficher_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 .
Temprature_moteur

Tester
tat
Moteur
3

IT (Dpassement_temprature)
Afficher_alarme
Vitesse_moteur

Tester
tat moteur

Alarme

Vitesse_moteur

Figure 3.16 Traduction dun processus fonctionnel dacquisition de donnes


en une tche apriodique.

De la mme manire que pour la cration des tches partir des diagrammes flots
de donnes de SA-RT, la traduction des transferts de donnes peut suivre les rgles
affiches. Ainsi, la figure 3.17, qui prsente un flot 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 communication par bote aux lettres.
HTR

Produire
donnes
1

Donnes

Consommer
donnes
2

Produire
donnes

Consommer
donnes
Donnes

Figure 3.17 Traduction dun flot de donnes direct entre deux processus fonctionnels
par une bote aux lettres.

Le deuxime cas trait, illustr sur la figure 3.18, est celui du transfert de donnes
par une unit de stockage au niveau du diagramme flots de donnes SA-RT. Selon
94

3 Conception
selon la mthode DARTS

3.2 Prsentation de la mthode DARTS

la rgle 3.2, il est naturel de traduire ce flot 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 figure 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.
HTR_2

HTR_1
Produire
donnes
Produire
donnes
1

Consommer
donnes
2

Consommer
donnes

Donnes
CRIRE

Donnes
LIRE

Figure 3.18 Traduction dune unit de stockage entre deux processus fonctionnels
par un module de donnes.

Dunod La photocopie non autorise est un dlit.

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 dfini, celui de la figure 2.20,
modifi avec la partie de diagramme reprsent sur la figure 2.25. Ce diagramme
prliminaire, prsent sur la figure 3.19, sert de base pour la traduction en diagramme 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 figure 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
figure 3.19. Ce diagramme multitche DARTS, reprsent sur la figure 3.20, comporte 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 spcification 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 ,
95

3 Conception
selon la mthode DARTS

Demande_freinage

Acqurir
demande
freinage
1

3.2 Prsentation de la mthode DARTS

Niveau_freinage

Pa

s_

de

_f

in

ag

Commander
freinage
3

ag

ein
Fr

re

E/D

Commande_freinage

E/D
e_
Pas_d ent
m
glisse
E/D

Contrler
application
6

ent

E/D

tiv

Glissement_
roue

Dtecter
glissement
de roue
G li s s
2
em

AB

S_

ac

Activation_ABS

Lire
bouton
ABS
4

tiv

ac

_
on

Afficher
tat bouton
ABS
5

Affichage_ABS

n
S_

AB

Mise_en_marche

Figure 3.19 Diagramme prliminaire de lapplication systme de freinage automobile


servant de base la conception 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 dfinir 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
identifier sur le diagramme prliminaire de la figure 3.19 deux vnements Freinage
et ABS_activ qui vont agir respectivement sur les tches Contrler application et Afficher tat bouton ABS . Ces deux vnements peuvent donc tre
traduits par des synchronisations (figure 3.20).
Nous arrivons maintenant la troisime et dernire phase de traduction quasiautomatique du diagramme SA-RT en diagramme DARTS, sachant que la phase
suivante correspond la partie de la conception par reprise et amlioration du diagramme DARTS obtenu aprs les trois premires phases. La mise en place des communications se fait en suivant les rgles 3.1 et 3.2. Nous avons donc une traduction
du flot 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
96

3 Conception
selon la mthode DARTS

3.2 Prsentation de la mthode DARTS

HTR (100 ms)


Niveau_freinage
Demande_freinage

Acqurir
Demande freinage

Commander
freinage
Commande_freinage

tat_glissement
Evt _freinage
LIRE

Freinage

CRIRE

Contrler
application

HTR (150 ms)


Glissement_roue

Dtecter
glissement roue

tat_demande_ABS
LIRE
CRIRE

HTR (1 000 ms)


Activation_ABS

Lire
bouton ABS

Afficher
tat bouton ABS
ABS_activ

Affichage_ABS

Dunod La photocopie non autorise est un dlit.

Figure 3.20 Premire conception du diagramme multitche DARTS


partir du diagramme prliminaire de la figure 3.19.

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 . Enfin, la tche Afficher 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 dfinie (dans cet exemple, une horloge
temps rel), une deuxime tche de type logiciel quil est ncessaire de synchroniser
et un module de donnes cr afin de distribuer une donne vers dautres tches.
Ainsi, les diffrents cas, prsents sur la figure 3.21, sont les suivants :
Cas I : ce cas est celui adopt dans la solution du diagramme DARTS de la
figure 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.
97

3 Conception
selon la mthode DARTS

3.2 Prsentation de la mthode DARTS

tat_demande_ABS
LIRE
CRIRE

HTR (1 000 ms)

Cas l
Activation_ABS

Afficher
tat bouton ABS

Lire
bouton ABS
ABS_activ

Affichage_ABS

tat_demande_ABS
LIRE
CRIRE

HTR (1 000 ms)

Cas Il

Activation_ABS

Afficher
tat bouton ABS

Lire
bouton ABS
tat_demande_ABS_2

Affichage_ABS

tat_demande_ABS
LIRE
CRIRE
HTR (1 000 ms)

Cas IIl

Activation_ABS

Lire
bouton ABS

HTR (1 000 ms)


Afficher
tat bouton ABS
Affichage_ABS

Figure 3.21 Diffrentes mthodes de relations


entre deux tches communicantes dun diagramme multitche 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 (figure 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
98

3 Conception
selon la mthode DARTS

3.2 Prsentation de 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 efficace
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 figure 3.22
montre lexemple de deux processus fonctionnels qui se traduisent par deux tches
qui sexcutent au mme rythme.

tat_moteur

tat_frein

Contrler Moteur_arrt
frein
3
Moteur_en_marche
Contrler
Freinage
frein
4
Pas_de_freinage

Commande_moteur

tat_moteur
Contrler
tats
moteur et frein
tat_frein

Commande_frein

Figure 3.22 Exemple dun regroupement de tches dun diagramme multitche DARTS
bas sur une cohsion temporelle.

Cohsion squentielle : le regroupement concerne des processus fonctionnels


qui doivent sexcuter en squence. La figure 3.23 montre deux processus fonctionnels qui doivent obligatoirement sexcuter en squence.
IT (Capteur_roue)
Capteur_roue Dterminer
distance
1

Distance

Dterminer
distance
2

Vitesse
Dterminer
vitesse
Vitesse

Dunod La photocopie non autorise est un dlit.

Taille_roue

Temps

Figure 3.23 Exemple dun regroupement de tches dun diagramme multitche DARTS
bas sur une cohsion squentielle.

Cohrence du contrle : le regroupement concerne des processus fonctionnels


contrls par un ou plusieurs vnements corrls. La figure 3.24 montre deux
processus fonctionnels qui remplissent une fonction trs corrle et qui sont
cadencs par un processus de contrle.

99

3 Conception
selon la mthode DARTS

Afficher
nouvelle
valeur
2

3.2 Prsentation de la mthode DARTS

donne
HTR

Grer
affichage
1
T

Effacer
ancienne
valeur
3

Grer
affichage
des donnes
effacement

Commande_affichage

Figure 3.24 Exemple dun regroupement de tches dun diagramme multitche DARTS
bas sur une cohsion de contrle.

Cohsion fonctionnelle : le regroupement concerne des processus fonctionnels


lis une fonctionnalit unique. La figure 3.25 montre le regroupement de trois
processus fonctionnels qui concourent la mme fonction (pilotage dun robot).
Donne_capteur

E/D

Acqurir
capteur
3

Commander
robot
1
Position_finale

Programme_robot

Position_initiale

Commander
dplacements
2
Commande_robot

HTR
Donne_capteur

Piloter
robot
Commande_robot

Programme_robot

LIRE
CRIRE

Figure 3.25 Exemple dun regroupement de tches dun diagramme multitche DARTS
bas sur une cohsion fonctionnelle.

Il est important de noter que certaines tches remplissent parfois plusieurs de ces
critres la fois et donc la justification du regroupement est encore plus vidente.
En appliquant ces critres de cohsion au diagramme DARTS de lapplication systme de freinage automobile de la figure 3.20, nous obtenons un diagramme multitche 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 afin de raliser une synchronisation forte.
100

3 Conception
selon la mthode DARTS

3.2 Prsentation de la mthode DARTS

Le deuxime regroupement effectu concerne les deux tches Lire bouton ABS
et Afficher tat bouton ABS qui remplissent la fois le critre de cohsion temporelle et le critre de cohsion fonctionnelle. Nous obtenons alors une seule tche
qui est appele Lire et afficher demande ABS . Dans ce cas aussi, le diagramme
fait lconomie dune synchronisation.
Nous obtenons ainsi un diagramme DARTS plus simple dun point de vue multitche. Cette clarification de larchitecture logicielle permet alors une comprhension
plus aise qui peut conduire une validation plus complte.
HTR (100 ms)
Demande_freinage

Acqurir
Demande freinage

Niveau_freinage
Contrler
freinage

tat glissement

tat demande ABS

LIRE

LIRE

CRIRE

CRIRE

HTR (150 ms)


Glissement_roue

Commande_freinage

Dtecter
glissement roue

HTR (1 000 ms)


Activation_ABS

Lire et afficher
demande ABS

Affichage_ABS

Dunod La photocopie non autorise est un dlit.

Figure 3.26 Deuxime conception du diagramme multitche DARTS


obtenue partir du regroupement de tches du diagramme DARTS de la figure 3.20.

Ainsi, nous avons mis en uvre la mthode de conception DARTS. partir de la


spcification 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.

101

3 Conception
selon la mthode DARTS

3.3 Exemples de conception


avec 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 spcifi dans le chapitre 2 et reprsent sur la figure 2.32.
Le diagramme prliminaire de cette application, qui comporte quatre 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 possible de lapplication, prsent sur la figure 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 figure 2.33.
Les deux processus fonctionnels dacquisitions de donnes ont t traduits par deux
tches matrielles Acqurir capteur mthane et Acqurir capteur eau dclenches par lhorloge temps rel. Elles possdent des priodes trs diffrentes lies la
HTR (500 ms)

MS

Acqurir
capteur mthane

Alarme

afficher
alarme

Evt_alarme
Niveau_mthane
Contrler
mine

Niveau_eau
LIRE

Vitesse_pompe

CRIRE

Commander
pompe
HTR (5 000 ms)

LS

Commande_pompe

Acqurir
capteur eau

Figure 3.27 Diagramme multitche DARTS obtenu partir du diagramme prliminaire


de lapplication gestion de la scurit dune mine de la figure 2.32.

102

3 Conception
selon la mthode DARTS

3.3 Exemples de conception


avec 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 paramtres afin de dsynchroniser ces tches. La tche la plus rapide va cadencer le pilotage gnral de lapplication en se synchronisant avec les tches suivantes de rgulation : Contrler mine , Commander pompe et Afficher 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 flot de donnes direct entre les processus 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 vnements 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 . Enfin, lvnement E/D
de commande du processus fonctionnel Afficher alarme est traduit par une
synchronisation Evt_alarme entre les deux tches Contrler mine et Afficher
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 modifications de la traduction semi-automatique effectue
dans les trois premires phases. Lexemple suivant montre le contraire, o la phase 4
va modifier profondment le diagramme DARTS issu de la traduction semi-automatique du diagramme SA-RT.

Dunod La photocopie non autorise est un dlit.

3.3.2 Exemple : pilotage dun four verre

Pour lexemple dcrit pilotage dun four verre , nous allons considrer le diagramme prliminaire spcifi dans le chapitre 2 et reprsent sur la figure 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 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 figure 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 figure 2.37.
103

3 Conception
selon la mthode DARTS

3.3 Exemples de conception


avec la mthode DARTS

HTR (1 000 ms)


Evt_Temprature
Temprature

Acqurir
temprature

Rguler
temprature

Chauffage

Temprature_mesure
CRIRE
LIRE

Analyser
besoin sable
IT (Arrive_sable)

Sable

Niveau_mesur
Sable_tomb

Dtecter
arrive sable

Acqurir
niveau
Niveau

Figure 3.28 Premier diagramme multitche DARTS obtenu partir du diagramme prliminaire
de lapplication pilotage dun four verre de la figure 2.36.

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 flot 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 temprature , 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 .
104

3 Conception
selon la mthode DARTS

3.3 Exemples de conception


avec 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 figure 3.21.
Aussi, cette relation aurait pu tre traduite par les autres modles possibles (cas II
et III de la figure 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 initiale 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 finale Analyser besoin sable peut modifier lapprovisionnement
en sable. Afin 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
figure 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, conduira une modification de la vitesse dapprovisionnement.
HTR (1 000 ms)
Evt_Temprature
Temprature

Acqurir
temprature

Rguler
temprature

Chauffage

Temprature_mesure
CRIRE

Dunod La photocopie non autorise est un dlit.

LIRE

Analyser
besoin sable

CG (5 000 ms)
Alarme

Sable

Niveau_mesur
Sable_tomb

IT (Arrive_sable)
Dtecter
arrive sable

Acqurir
niveau
Niveau

Figure 3.29 Deuxime diagramme multitche DARTS obtenu partir du diagramme prliminaire de lapplication pilotage dun four verre de la figure 2.36 avec la prsence dune
tche dclenche par un chien de garde CG.

105

3 Conception
selon la mthode DARTS

3.3 Exemples de conception


avec la mthode DARTS

Nous obtenons ainsi un diagramme final de conception DARTS de six tches dont
deux nont pas dquivalent direct dans le diagramme flots 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 modification du diagramme multitche initial, issu dune traduction automatique
du diagramme flots 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 combustion 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 spcifi dans le chapitre 2 et reprsent sur
la figure 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 figure 3.30. Cette reprsentation multitche intgre huit 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 prsent une complexit algorithmique faible comme le montre
le diagramme tat/transition de la figure 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 Communiquer 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 afin 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
106

Lire
capteur
pollution

Acqurir
paramtres
moteur

Acqurir
vitesse

Acqurir
acclrateur

CRIRE

LIRE

LIRE

Entre_air

injecteur

allumage

Com_S

Com_E

Entre_gaz_b

Communiquer
bus CAN

HTR (50 ms)

Mlange

Commander
allumage

Commander
injection
mlange

Synchro_allumage

CRIRE

Messages

laborer
commande
moteur

Paramtres_pollution

CRIRE

LIRE

Paramtres_moteur

Vitesse_moteur

LIRE

CRIRE

Acclration

Figure 3.30 Diagramme multitche DARTS obtenue partir du diagramme prliminaire de lapplication
Commande dun moteur combustion de la figure 2.40.

Pollution_S

Pollution_E

HTR (2 000 ms)

T_air

T_eau

P_air

HTR (200 ms)

vitesse

HTR (5 ms)

acclrateur

HTR (100 ms)

Dunod La photocopie non autorise est un dlit.

3 Conception
selon la mthode DARTS
3.3 Exemples de conception
avec la mthode DARTS

107

3 Conception
selon la mthode DARTS

3.3 Exemples de conception


avec 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 afin de dsynchroniser 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 dfinie une architecture multitche. Dans ce sens, les diagrammes multitches 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.

108

4 ARCHITECTURES SYSTMES

Avant de prsenter les outils et mthodes utiliss lors du dveloppement de programmes 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 temporel 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 informatiss pour le lecteur non familiaris avec ce domaine.

4.1 Architecture matrielle

Dunod La photocopie non autorise est un dlit.

4.1.1 Dfinitions de base

Le chapitre 3 met laccent sur la ncessit de programmer les applications de contrlecommande 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. Gnralement plus rapide quun microcontrleur, cest le cur des micro-ordinateurs.
Il est capable deffectuer des entres/sorties (moyens de communication entre lordinateur 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 enfichables nommes
cartes dacquisition. Par exemple, on trouvera des cartes dacquisition pouvant
senficher dans des ports au format PCI, PCMCIA ou autre (voir 4.1.4, p. 128).
109

4 Architectures systmes

4.1 Architecture matrielle

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 enfichables 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 quelques 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 microcontrleur ou un microprocesseur. Il est noter que de plus en plus de processeurs
dupliquent certaines parties centrales afin dtre capables dexcuter plusieurs instructions en parallle. Cependant, afin de simplifier 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 programme 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
figure 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.
110

4 Architectures systmes

4.1 Architecture matrielle

Dunod La photocopie non autorise est un dlit.

m Fonctionnement dun processeur

Les instructions dun programme, mmorises sous forme doctets en mmoire centrale, 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 rfrence la vitesse de la mmoire). Un bus mmoire est un bus parallle : schmatiquement, il est capable de faire passer en parallle un nombre de bits correspondant 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 (figure 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 modifier des donnes ou instructions se situant une certaine adresse en mmoire centrale ;
une unit arithmtique et logique (UAL), se chargeant de lexcution des instructions comme un calcul en nombres entiers, une opration logique, ou une
111

4 Architectures systmes

Dcodeur

4.1 Architecture matrielle

RAM de 512 MO Adresse

Registre
Instruction

0x00000000
0x00000001

Squenceur

0x00000002

Compteur
Ordinal

0x00000003
0x00000004

BUS de donnes

g
Re

at
UAL
t
d
re
Unit
ist

Arithmtique
et Logique

0x1FFFFFFC
BUS dadresse

0x1FFFFFFD

Registres

0x1FFFFFFE

Gnraux

0x1FFFFFFF

Processeur

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


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

opration de manipulation binaire (oprations arithmtiques, logiques, manipulation des reprsentations binaires) ;
des registres gnraux permettant entre autres choses de stocker les donnes
utilises lors des calculs, les rsultats, etc. ;
un registre dtat (flags), dont un des rles est de communiquer des informations
dtat de lunit arithmtique et logique.
m Exemple dexcution dun programme

Afin dillustrer le fonctionnement dun processeur, voyons comment serait trait le


programme simple ci-aprs par un processeur de type PENTIUM :
si i>j alors i:=i-1
sinon i:=i+5
fin si

Ce langage nest pas directement comprhensible par un processeur. Il faut dabord


le compiler en un fichier 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 lassembleur, 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
spcifiques 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).
112

4 Architectures systmes

4.1 Architecture matrielle

Le tableau 4.1 prsente la traduction du programme simple en langage de haut


niveau en code machine. Afin de comprendre ce code, la correspondance en assembleur est donne pour chaque instruction.
Tableau 4.1 Traduction binaire et assembleur dun programme simple.

Dunod La photocopie non autorise est un dlit.

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 eax,dword ptr


[i (40A6E4h)]

j est stock dans un


autre registre gnral
(ecx)

00401023

8B 0D E0 A6 40 00

mov ecx,dword ptr


[j (40A6E0h)]

Prparation
du registre de pile

00401029

83 C4 10

add esp,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

cmp eax,ecx

Si i < j sauter
ladresse 0x401033

0040102E

7E 03

jle 401033h

eax :=eax-1

00401030

48

dec eax

Sauter ladresse
0x401036

00401031

EB 03

jmp 401036h

eax :=eax+5

00401033

83 C0 05

add eax,5

Le registre eax est


copi ladresse de i

00401036

A3 E4 A6 40 00

mov dword ptr


[i (40A6E4h)],eax

Lorsque le processeur doit excuter cette portion de programme, le compteur ordinal possde ladresse (en notation hexadcimale) 0x0040101E. Cette adresse est dispose 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 dinstruction. Une instruction est compose dun CODOP (code opration) et doprandes. Le CODOP de cette instruction est 0xA1, qui signifie 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 lins113

4 Architectures systmes

4.1 Architecture matrielle

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
afin 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) afin 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 afin 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 cmp eax,ecx 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 jle 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 modifier 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
(jmp) est excute, ce qui permet de sauter les instructions du bloc dinstructions
correspondant au cas sinon.
Dans le cas o le test a t positif, le cas alors est saut pour aller directement au
cas sinon.
Enfin, dans les deux cas, linstruction se trouvant ladresse 0x00401033 est excute, 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 difficile 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 afin dtre plus rapidement accessibles ;
114

4 Architectures systmes

4.1 Architecture matrielle

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 chaque transfert dinformation entre la mmoire et le processeur, le processeur doit
attendre les instructions ou donnes dont il a besoin. Or, la plupart des programmes contiennent des boucles (donc utilisent souvent les mmes instructions)
et accdent souvent aux mmes donnes. Cela est appel le principe de localit.
Afin 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 ;

Dunod La photocopie non autorise est un dlit.

de plus en plus de microprocesseurs du commerce dupliquent certains circuits


afin 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 matrielle, 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 contrlecommande. En effet, ce type de systme fait souvent appel de la programmation
de bas niveau (au niveau octet, voire mme bit bit). Afin 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 afin de dcider de lemploi de tel ou tel type de matriel (microcontrleur,
microprocesseur).
Enfin, 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 difficults que cela engendre dans le paragraphe 4.2.
4.1.2 Algbre de Boole

Lalgbre boolenne est lalgbre dfinie sur le domaine {vrai, faux} ou de faon
quivalente sur le domaine {1,0}, ce qui explique son emploi dans toutes les architectures informatises (systme binaire). Georges Boole, mathmaticien anglais
(1815-1864) proposa cette algbre prise aussi bien par les logiciens que par les
115

4 Architectures systmes

4.1 Architecture matrielle

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 dfinie 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 assimil 1 en binaire, et faux 0.
On dfinit usuellement trois oprateurs (appels connecteurs) de base : le complment (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 dfinir laide
de deux connecteurs).
La valeur dune formule boolenne, compose de connecteurs et de variables boolennes (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 , implication , 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 signifie 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 laffirmation
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 signifie que le seul cas o elle est fausse correspond au cas
o a est vrai, et b est faux. Ainsi, laffirmation si javais des pouvoirs magiques,
alors je soulverais la tour Eiffel , qui est une implication, ne peut pas tre infirme
tant que la personne qui prtend cela na pas effectivement de pouvoirs magiques.
Il suffit 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 oprateurs 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 logiques dans la norme amricaine (MIL STD 806) et la norme europenne (IEC 617).
116

4 Architectures systmes

4.1 Architecture matrielle

Tableau 4.2 Tables de vrit des connecteurs les plus usits.


a

faux

vrai

vrai

faux

ab

ab

ab

ab

ab

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

ab

a+b

a?b

a=b

ab

Les proprits algbriques peuvent tre vrifies trs simplement laide de tables
de vrit (tableau 4.3, pages suivantes).

Dunod La photocopie non autorise est un dlit.

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 possibles, (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
117

4 Architectures systmes

4.1 Architecture matrielle

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.

abba
a b b a
abba
(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
aaa
aaa

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.

aaa
aaa
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 .

118

a (bc) ab ac
a bc (ab)(ac)

a(b + c) = ab + ac
a + bc = (a + b)(a + c)

4 Architectures systmes

4.1 Architecture matrielle

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


aaba
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

Dunod La photocopie non autorise est un dlit.

Norme MIL STD 806

Norme IEC 617


1

a
b

&

ab

a+b

a
b

?1

a+b

a
b

a+b

a
b

=1

a+b

NAND

a
b

(ab)

a
b

&

(ab)

NOR

a
b

(a+b)

a
b

?1

(a+b)

EGAL

a
b

(a + b)

a
b

=1

(a + b)

IDENTIT

NON

ET

a
b

ab

OU

a
b

XOR (OU exclusif)

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 programmation de bas niveau (programmation des cartes dacquisition notamment).

119

4 Architectures systmes

4.1 Architecture matrielle

m Changements de base

Un nombre se reprsente dans une base b par une suite de chiffres bi compris entre
0 et b 1. Tout nombre se dcompose de faon unique en chiffres dans une base b :
bk bk + bk1 bk1 + + b1 b1 + b0 b0. Le nombre scrit dans la base b : bkbk1
b1b0.
Ainsi, en systme dcimal, le nombre 3 412 correspond 3 103 + 4 102 + 1 101
+ 2 100. 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
x

sous la forme dune suite de chiffres bkbk1 b1b0, avec b i = ----i b o a


b

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 suffit dutiliser la division euclidienne 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 euclidiennes 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 suffit donc
deffectuer des divisions euclidiennes successives, la premire donne le chiffre des
units, la seconde celui des b-zaines , , la nime celui des bn1-zaines . La
figure 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 prfixs par la lettre b
(sauf non ambigut), les nombres en octal seront prfixs par la lettre o, les nombres en hexadcimal seront prfixs par 0x , alors que les nombres en dcimal ne
seront pas prfixs du tout.
Certains changements de base se voient simplifis 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 lhexadcimal (base 16). En effet, un nombre reprsent en binaire est trs long, et difficilement lisible. Or 8 = 23 et 16 = 24. 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 suffit donc de regrouper les bits par 3 (en partant bien entendu des bits de poids faible !!!), alors que pour passer de la base 8 la
base 2, il suffit 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 figure 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 (figure 4.4). Cela peut sembler troublant, car la
division euclidienne se fait directement en base 8 (les rgles daddition et de soustraction sont diffrentes de celles de la base 10 que chacun a lhabitude de manipuler,
120

4 Architectures systmes

3412
-3412
0
0*2 0

3412
-3410
2
2*1
0
0

2
1706
-1706
0
+ 0
*2 1

2
2

853
- 852
1
+ 1
*2 2

426
- 426
0

4*8 0

8
426
- 424
2
+ 2
*8 1

8
-

53
48
5

+ 5
*8 2

6
0
6

10
341
- 340
1
+ 1
*10 1

213
- 212
0*2 3
1
+
1*2 4

3412
-3408
4

4.1 Architecture matrielle

10

+ 4
*10 2

2
106
- 106
0
+
0*2 5

10

34
30
4

10

3
0
3

+ 3
*10 3

2
2

53
52
1

+ 1
*2 6

26
26
0

13
12
1

+ 0
*2 7

+ 1
*2 8

6*8 3

3412
-3408
4
4*1
60

6
6
0

+ 0
*2 9

16
213
- 208
5
+ 5
*16 1

3
2
1

+ 1
*2 10

16
-

16

13
0
13

2
-

1
0
1

2
0

+ 1
*2 11

+ 1
3*1
62

3412 = b110101010100 = o6524 = 0xD54

Figure 4.2 Conversion de 3 412 en base 10, 2, 8, et 16.

1425 =b 10110010001
2

1425 =o2621

1425 =b 10110010001
5

1425 =0x591

Dunod La photocopie non autorise est un dlit.

Figure 4.3 Illustration de changement de base :


binaire-octal et binaire-hexadcimal.

o2621 o20=16
-o20
o20
o131
o62
-o120
-o60
o5
o11
o21
- o0
-o20
o5
o1*
o20o1
0
+ o
11*
o2 1
+ o
5*o

o20
o0

20 2

Figure 4.4 Changement de base direct entre base 8 et 16.

121

4 Architectures systmes

4.1 Architecture matrielle

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 (figure 4.5).
1 1 1

57
+24
81

b111001
+b011000
b1010001

Figure 4.5 Addition de deux nombres entiers en binaire.

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 qualificatif supplmentaire) correspond la taille du mot machine,
soit le plus souvent 32 bits sur un microprocesseur, souvent moins sur un microcontrleur. Le choix de la taille de la reprsentation dun entier influe bien entendu
sur le domaine possible de lentier (voir tableau 4.4) puisqu laide de n bits, on
peut reprsenter 2n 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.
Afin dillustrer le rapport profond qui lit lalgbre boolenne avec la reprsentation
binaire, la figure 4.6 donne le circuit logique qui pourrait tre utilis pour additionner deux nombres binaires. Soient a et b deux entiers reprsents sur n bits respectivement par an1 a1a0 et bn1bn2 b1b0. La ralisation de a + b = c (reprsent
par cn1cn2 c1c0) est prsente sur la figure 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) sousjacente. Cependant, un programmeur Ada peut dfinir lui-mme le domaine dun
entier.
Les techniques utilises pour reprsenter les entiers signs et les nombres fractionnaires (points fixes et flottants) sont prsentes en annexe A.

122

4 Architectures systmes

4.1 Architecture matrielle

Demi-additionneur : (a+b)*i2 = R*2i+1 + S*2i


(non prise en compte de la retenue prcdente)
ai
bi

Encapsulation du additionneur
(correspond au additionneur gauche)
a

Ri+1

R
Add

Si

Additionneur : (a+b)*2i + R*2i = R*2i+1 + S*2i


(prise en compte de la retenue prcdente)

Ri (Retenue prcdente)

Ri+1

Add
ai

R
Add

bi

Si

Figure 4.6 Addition de deux entiers ralise laide de lalgbre boolenne.

Tableau 4.4 Intervalles de reprsentation des entiers.


Taille (en bits)

Domaine [0..2n1]

Nom du type

[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

Dunod La photocopie non autorise est un dlit.

m Oprations arithmtiques et logiques

Des exemples dadditions ont t prsents dans la section prcdente. La multiplication 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, afin 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 afin de configurer une carte dacquisition) ou bien
123

124
Mettre 0 le bit 5 de loctet k :
k :=k et non(0x20)
Mettre 0 le bit i de loctet k :
k :=k et non(1 dcal gauche de i)

Mettre 0 un bit dans un nombre

Mettre 1 le bit 5 de loctet k :


k := k ou 0x20
Mettre 1 le bit i de loctet k :
k := k ou (1 dcal gauche de i)

Obtenir le 2e octet dun nombre entier k cod sur 32 bits :


(k dcal gauche de 8) et 0xFF

Accder une partie dun nombre

Mettre 1 un bit dans un nombre

Le bit 2 de loctet k est 0 si et seulement si :


k et 0x04 = 0
Le bit de poids fort de loctet k est 0 si et seulement si :
k et 0x80 = 0
Le bit i de loctet k est 0 si et seulement si :
k et (1 dcal gauche de i) = 0

Vrifier quun bit est 0 dans un octet

1 absorbant et 0 neutre sur le ou

Le bit 2 (3e bit) de loctet k est 1 si et seulement si :


k et 0x04 0
Le bit de poids fort de loctet k est 1 si et seulement si :
k et 0x80 0
Le bit i de loctet k est 1 si et seulement si :
k et (1 dcal gauche de i) 0

Vrifier quun bit est 1 dans un octet

0 absorbant et 1 neutre sur le et

Octet dont le bit 5 (6e bit) est 1 :


b0010 0000 = 0x20
Octet dont tous les bits sont 1, sauf le bit 3 :
b1111 0111 = 0xF7

Exemples

Passage ais binaire hexadcimal

Utilisations type

16 = 24

Proprit algbrique

Tableau 4.5 Quelques repres en binaire et hexadcimale.

4 Architectures systmes
4.1 Architecture matrielle

4 Architectures systmes

4.1 Architecture matrielle

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 reprsentation 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).
Enfin, 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
suffit de connatre les puissances de 2, et de faire mentalement quelques soustractions. 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 27), on retranche
128 155, il reste donc 27 exprimer en binaire. On passe alors toutes les puissances 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.

Dunod La photocopie non autorise est un dlit.

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
dfini, 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 reprsentation ASCII, ce qui permet dobtenir 256 caractres. Cela est loin dtre suffisant
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 affichs, 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
affiche, 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 figure 4.7 prsente
un rcapitulatif des diffrents formats utiliss pour reprsenter les donnes de base.

125

4 Architectures systmes

4.1 Architecture matrielle

ASCII
BCD
EBCDIC
ANSI
Unicode

Donnes
non numriques

Donnes 0

Binaire positif

Donnes 0 et 0

Signe, valeur absolue


Complment 1
Complment 2

Donnes
entires

Donnes
numriques

Donnes
fractionnaires

Virgule fixe
Virgule flottante (IEEE)

Figure 4.7 Diffrents formats de reprsentation de donnes.

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, afin
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 efficace, 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
efficace, 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 traitement (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 vrifier 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
126

4 Architectures systmes

4.1 Architecture matrielle

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 afin 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 caractris 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 sexcute alors, et la fin de la routine, ltat du processeur est restaur. Le programme
en cours dexcution est donc interrompu, mais la fin du traitement de linterruption, le processeur est remis dans le mme tat quau moment de linterruption :
il continue donc son excution comme sil navait pas t interrompu (figure 4.8).

Excution dun programme

Interruption

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

Dunod La photocopie non autorise est un dlit.

Restauration du registre dtat


et du compteur ordinal
Le programme reprend
comme si rien ne stait pass

Processeur utilis
par un programme

Processeur utilis
par lISR

Figure 4.8 Prise en compte dune interruption matrielle.

127

4 Architectures systmes

4.1 Architecture matrielle

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 signifie quun programme qui envoie des donnes
sur un bus dentres/sorties (par exemple, un programme qui effectue un affichage
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 communication 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 protocole bidirectionnel de type ASCII (ce sont des caractres qui sont changs),
permettant au processeur denvoyer des commandes ou des informations de configuration, 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 inertielles intgrant acclromtres, gyromtres et magntomtres, crans alphanumriques, etc. Cest un bus relativement simple programmer, car il existe de nombreuses bibliothques logicielles permettant de tirer parti de ce bus capable de
transporter des flots 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
128

Dunod La photocopie non autorise est un dlit.

4 Architectures systmes

4.1 Architecture matrielle

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 format 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 priphriques 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 (quivalent 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 (lorsquil est prsent, se trouve sur la carte mre des ordinateurs utilisant un microprocesseur) 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 laffichage 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
129

4 Architectures systmes

4.1 Architecture matrielle

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

Parallle

240 Ko/s

Tout type de capteurs


intelligents, modem

3 Mo/s

Presque plus utilis

USB

Universal Serial
Bus

60 Mo/s

Vido, imprimante,
souris, clavier

FireWire

IEEE 1394

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

130

4 Architectures systmes

4.1 Architecture matrielle

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.
Tableau 4.7 Mesures de frquences et de taille.
Mesures de frquence
kHz

103 cycles/s

Frquences audibles (< 15 kHz)

MHz

106 cycles/s

Frquence du bus de donnes (plusieurs centaines de MHz)

GHz

109 cycles/s

Frquence dun microprocesseur (quelques GHz)

THz

1012 cycles/s

Frquence ondulatoire des ondes lumineuses (370 750 THz)

PHz

1015 cycles/s

Frquence ondulatoire des rayons X (> 30 PHz)

Dunod La photocopie non autorise est un dlit.

Mesures de capacit
k

kilo

103

ko

210

1024

Taille dun petit fichier ASCII

mga

106

Mo

220

1048576

Taille dun fichier MP3


(musique compresse)

giga

109

Go

230

1073741824

Taille dune heure de film au format


MPEG2 (tlvision numrique)

tra

1012

To

240

1099511627776

Taille des informations stockes


dans une petite universit

pta

1015

Po

250

1125899906842624

Taille des informations stockes


par une socit spcialise dans
le stockage

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 puissance) directement du matriel dacquisition ou commande (capteurs ou actionneurs). 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 analogiques.
131

4 Architectures systmes

4.1 Architecture matrielle

M Entres/sorties numriques

Les entres/sorties numriques sont de type tout ou rien (2 tats possibles qui correspondent lectriquement par exemple 5 V, + 5 V). Ce type dentre peut tre
branch (via une adaptation de puissance et ou tension) des capteurs ou actionneurs de type tout ou rien (TOR) (lectrovanne TOR, capteur de prsence, alimentation). On appelle ligne une entre ou sortie numrique (physiquement correspondant 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 dfinir des ports de taille multiple de 8 (ports
de 16 ou 32 bits par exemple). Chaque ligne dun port peut tre configure 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
(figure 4.9) :
Configuration du port numrique laide dun octet de configuration de direction
des lignes. Le plus souvent, le bit i (i = 0..taille du port-1) permet de configurer
la ligne i (i = 0..taille du port-1). Par exemple, en fonction de la carte dacquisition ou du microcontrleur, un bit 1 peut correspondre mettre la ligne correspondante en sortie, alors quun bit 0 configure la ligne en entre. Dans ce
cas, un octet de configuration valant 0x73 (b01110011) configurerait les lignes
6,5,4,1,0 en sortie et les lignes 7,3,2 en entre. Loctet de configuration 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) configurerait le port en sortie. La configuration 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 reprsentation binaire correspond ltat des lignes. Ainsi, si on lit loctet 0xA3
(b10100011) sur un port pralablement configur en entre, cela signifie 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 configur en entre, les bits lus correspondant aux lignes configures
en sorties ont des valeurs non significatives.
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, configur 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 modifier ltat dun
seul actionneur, donc dune seule ligne. Il faut alors connatre ltat complet du
port, modifier 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 frquemment 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 configuration de port. Supposons
132

4 Architectures systmes

4.1 Architecture matrielle

Sens des lignes du port 0


pour une configuration
b01100011 = 0x63
Exemple dciture sur le port 0
Exemple de masque
1

Ligne 0

Ligne 1

Ligne 2

Relais
lectrique

Ligne 3

5 V-+5 Vcc 0 V-220 V~

Port 0

lectrovanne TOR
220 V ~

Ligne 5

Ligne 6

Relais
lectrique

Ligne 7

5 V-+5 V cc 0 V-24 Vcc

Ligne 4
lment alimenter
en 24 V cc

Ligne 0
Ligne 1
Ligne 2
Port 1

Ligne 3
Ligne 4
Ligne 5
Ligne 6
Ligne 7

Exemple de lecture
sur le port 1

Relais
lectrique

Capteur de prsence
0 V-12 Vcc

5 V-+5 Vcc 0 V-12 Vcc

Les masses et alimentations externes des relais


ne sont pas reprsentes

Sens des lignes du port 0


pour une configuration
b10111000 = 0xB8

Dunod La photocopie non autorise est un dlit.

Figure 4.9 Lignes et ports numriques.

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 (figure 4.10), si un port
dun octet est configur en criture, et si lon veut mettre 1 la ligne numro 6
sans toucher aux autres lignes, il suffit 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.
133

4 Architectures systmes

4.1 Architecture matrielle

Sens des lignes du port 0


pour une configuration 0xFF (criture)
Exemple dciture sur le port 0
Masque 0x40
1

Ligne 0

Ligne 1

Ligne 2

Ligne 4

Ligne 5

Ligne 6

Ligne 7

Port 0

Ligne 3

Seule la ligne 6 est modifie

Figure 4.10 Exemple de masque binaire numrique.

Il est noter que le fait dcrire sur une ligne configure en entre na gnralement
aucun effet, et que le fait de lire sur une ligne configure en sortie donne des valeurs
non significatives.
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 spcifiques 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 signifie 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 configuration de la carte. Le
fait dcrire sur un de ces octets a pour effet de modifier 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 fin de lentre/sortie. La lecture
nest pas bloquante : cela signifie 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 supportant le pattern matching (capables de gnrer une interruption sur une diffrence
dentre).

134

4 Architectures systmes

4.1 Architecture matrielle

Les entres de type trigger sont gnralement utilises pour synchroniser les acquisitions 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 interruption 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 difficile 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

Dunod La photocopie non autorise est un dlit.

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 spcifique, 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, 2n valeurs de
tension diffrentes peuvent tre fournies par une entre analogique. Si le domaine
est 10 V-+ 10 V, alors 2n valeurs sont utilises pour reprsenter une gamme de
20 V. La finesse de la lecture est alors, en plus de la prcision physique de la
carte, de 20 V/2n. 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/2n) ;
la gamme, caractris par la tension minimale et maximale pouvant tre lue,
typiquement 10 V-+ 10 V ;
le gain permet damplifier 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.
135

4 Architectures systmes

4.1 Architecture matrielle

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 conversion. 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 interruption sur certains seuils de tension.
Malheureusement, beaucoup de capteurs (thermocouples par exemple) dlivrent un
courant trop faible pour tre lu de faon fiable directement par des entres analogiques. On utilise donc souvent du matriel de conditionnement, dont le rle est
de filtrer, amplifier 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 influenc 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 figure 4.11 prsente un schma simplifi de carte dacquisition.

136

Bus PCI (micro-ordinateur)

Horloge

Horloges

Slection
des registres

Dcodeur
dadresses

Donnes

Interface bus

Dunod La photocopie non autorise est un dlit.

16 1

Multiplexeur

Convertisseur 12 bits
numrique - analogique

Amplificateur
gain
programmable

Compteur
(24 bits)

Figure 4.11 Schma simplifi de carte dacquisition.

Circuits compteurs/temporisateurs

Compteur
(24 bits)

Interface dentres/sorties numriques

Interface dentres/sorties
numriques programmable

Interface de sorties analogiques (2 voies)

Convertisseur 12 bits
numrique-analogique

Convertisseur 12 bits
numrique-analogique

Interface dentres analogiques (16 voies)

Mmoire tampon
(512 mots)

Amplificateur
chantillonneur
Bloqueur

Horloge externe
Dclenchement
Fin de comptage

32 entres/sorties
numriques (type TTL)

1 sortie analogique

1 sortie analogique

16 entres analogiques

4 Architectures systmes
4.1 Architecture matrielle

137

Connecteur dentres/sorties (100 broches)

4 Architectures systmes

4.2 Architecture logicielle

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 (figure 4.12) : il prsente aux programmes une machine virtuelle,
relativement indpendante du matriel sous-jacent.

Applications

Systme dexploitation

Matriel

Figure 4.12 Rle du systme dexploitation.

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 didentification, mmoire alloue,
fichiers ouverts, temps dexcution, tat). Les tats dexcution dun processus
sont reprsents sur la figure 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 signifie 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
138

4 Architectures systmes

4.2 Architecture logicielle

Terminaison
Attente dune dure
Excut

Endormi
Premption

Rveil
Suppression

Attente bloquante

lection
Prt

Cration et initialisation

Suppression
Bloqu

vnement attendu arriv

Existant

Suppression
Inexistant

Dunod La photocopie non autorise est un dlit.

Figure 4.13 tats dun processus.

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 (figure 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
spcifique du systme dexploitation appele dispatcher. Souvent, dans les microprocesseurs, 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 figure 4.14, cet overhead est
visible sur la ligne SE du diagramme de Gantt. Typiquement, sur un systme dexploi139

4 Architectures systmes

4.2 Architecture logicielle

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
Temps
Autre vue : le diagramme de Gantt
SE
Temps

P1
P1

Figure 4.14 Principe de lentrelacement temporel.

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 dordonnancement spcifiques pour le temps rel qui seront abordes par la suite. Dans ce chapitre, nous prsentons quelques stratgies de bases, utilises par les systmes dexploitation.
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 instruc140

4 Architectures systmes

4.2 Architecture logicielle

tion suspensive ou bloquante, cette instruction fait un appel au systme dexploitation, 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 figure 4.15 que la dfinition 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 figure), ou en fin de tourniquet.
Notons que sur la figure 4.15, le surcot processeur est nglig.
Algorithme dordonnancement FIFO
P1
P2
P3
P4

Algorithme dordonnancement du tourniquet (Round Robin)

Dunod La photocopie non autorise est un dlit.

P1
P2
P3
P4
Symbolise linstant de cration

Figure 4.15 Illustration des algorithmes FIFO et tourniquet.

141

4 Architectures systmes

4.2 Architecture logicielle

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 signifie que lutilisateur ne peut pas excuter 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. Enfin, 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 choisissant 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
(figure 4.16). Pour les algorithmes FIFO et priorits, le temps dattente de
chaque tche dpend des arrives et/ou priorits des autres tches ;

P1
Temps dattente maximal
P2
P3

Dure dun quantum

Temps

P4
SE
Dure du surcot

Figure 4.16 Illustration du temps dattente.

le temps de rponse dun processus est la dure sparant sa cration de sa terminaison. 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 (figure 4.17) car pour diminuer le temps dattente
142

4 Architectures systmes

4.2 Architecture logicielle

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 excuter la plus courte (algorithme nomm SRPT pour Shortest Remaining Time First).
Cependant, cela supposerait de connatre a priori la dure des processus (algorithme 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).
Algorithme dordonnancement FIFO
P1 dure = 6 u.t.
Temps de rponse (P1) = 6 u.t.
P1 dure = 4 u.t.
Temps de rponse (P2) = 9 u.t.
P3 dure = 3 u.t.
Temps de rponse (P3) = 11 u.t.
Algorithme dordonnancement du tourniquet (Round Robin)
P1 dure = 6 u.t.
Temps de rponse (P1) = 13 u.t.
P1 dure = 4 u.t.
Temps de rponse (P2) = 10 u.t.
P3 dure = 3 u.t.
Temps de rponse (P3) = 7 u.t.
Temps de rponse moyen FIFO = 8,67 u.t.
Temps de rponse moyen tourniquet = 10 u.t.

Dunod La photocopie non autorise est un dlit.

Figure 4.17 Illustration du temps de rponse pour 3 processus.

Pour caractriser un algorithme dordonnancement, on peut aussi utiliser la notion de


rendement (nombre de processus termins par quantum de temps), la dure du quantum lui-mme ou le nombre de premptions, qui vont influencer 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,
143

4 Architectures systmes

4.2 Architecture logicielle

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 communication 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 (figure 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

R
0
Premption par B (sauvegarde du contexte de A dans son BCP)

BCPA

R=0
CO

Transfrer X dans registre R


R

Incrmenter le registre R

Transfrer le registre R dans X

lection de A (restauration du contexte de A partir de son BCP)


R

Incrmenter le registre R
Transfrer le registre R dans X

Figure 4.18 Problme dexclusion mutuelle.

144

4 Architectures systmes

4.2 Architecture logicielle

Initialement, la variable x vaut 0. Lorsque les deux processus ont termin leur excution, sa valeur peut tre 1 ou 2 (cela est dtermin uniquement par les premptions).
On imagine facilement comment le rsultat final de x peut valoir 2, voyons comment il est possible dobtenir 1. Lincrmentation dune variable se dcompose au
minimum en trois instructions : copie de la variable dans un registre du processeur,
modification du registre, puis recopie du registre ladresse mmoire de la variable.
Supposons que le processus P1 ait commenc son excution : il charge x dans un
registre du processeur, sa valeur est donc 0. Il est alors prempt par P2, les registres
de P1, y compris le registre contenant la valeur 0, sont sauvegards dans le contexte
de P1. P2 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. P1 peut alors poursuivre son excution. Ses registres sont
restaurs : le registre utilis pour le calcul vaut donc 0, et le compteur ordinal correspond 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. Afin 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 exclusion mutuelle. Ainsi, si lon respecte lexclusion mutuelle entre les sections critiques
de lexemple de la figure 4.18, la valeur finale de x est forcment 2.

Dunod La photocopie non autorise est un dlit.

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 signifie 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 signifiant
si la ressource est libre : par exemple 1 pour libre, 0 pour pris. Le code des processus
voulant entrer en section critique serait alors :
Tant que libre1 attendre
libre :=0
-- Entre en section critique

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 figure 4.18. Il ny a aucune solution purement
145

4 Architectures systmes

4.2 Architecture logicielle

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 file dattente du smaphore. Un smaphore est donc compos dun entier
et dune file dattente. Les actions prendre et vendre peuvent se drouler de la faon
suivante (cas dun smaphore binaire, cest--dire deux tats) :
Un smaphore S consiste en un entier S.val, et une file dattente
didentificateurs de processus S.file.
Procdure Prendre(S: in out smaphore)
Dbut
Masquer les interruptions
-- La procdure prendre ne doit pas tre interrompue
Si S.val=0 alors
Ajouter le n de processus S.file
Dmasquer les interruptions
Passer dans ltat bloqu et appeler le dispatcher
Sinon
S.val 0
Dmasquer les interruptions
FinSi
Fin
Procdure Vendre(S:in out smaphore)
Dbut
Masquer les interruptions
Si il existe un processus dans S.file alors
Enlever un processus de la file
Mettre ce processus dans ltat prt
Sinon
S.val1
FinSi
Dmasquer les interruptions
Appel au dispatcher
Fin

lintrieur des primitives, les interruptions sont masques afin de les rendre non
premptibles : ces primitives sont atomiques, dans le sens o elles sont non interruptibles.
Il est important de bien comprendre que ce sont les processus qui excutent les
primitives Prendre et Vendre. Ces primitives, fournies par le systme dexploitation ou prsentes dans les langages de programmation, utilisent le masquage des
interruptions afin dexcuter des parties critiques (test de la valeur du smaphore,
mise jour de la valeur et de la file dattente). Un processus qui excute Prendre se
bloque si le smaphore nest pas libre, un processus qui excute Vendre rveille lui146

4 Architectures systmes

4.2 Architecture logicielle

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.
Afin dillustrer le fonctionnement du smaphore, supposons que trois processus A,
B, et C excutent chacun le code suivant en parallle :

Dunod La photocopie non autorise est un dlit.

S : Semaphore := crer_smaphore("mutex_x",1)
-- S est un smaphore partag par tous les processus nomm mutex_x
-- Ce smaphore commun protge les accs la variable x partage par
-- les processus
Prendre(S)
x := x+1
Vendre(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 crer_smaphore renvoie alors une rfrence
ce smaphore, qui est utilise en paramtre des fonctions Prendre et Vendre. Aprs
que ce smaphore ait t cr, il est repr par son nom dans le systme. Les appels
suivants crer_smaphore("mutex_x",1) se contentent alors de renvoyer la rfrence 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 file 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 file 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 file dattente est gre en FIFO), qui peut alors entrer en section
critique. La valeur du smaphore ne change pas, puisque cela reviendrait lincrmenter 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 section critique. C, lorsquil vend le smaphore la fin de sa section critique, incrmente 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 suffirait simplement dinitialiser le
smaphore la valeur 2. Nous aurions alors un smaphore que lon qualifierait 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
147

4 Architectures systmes

4.2 Architecture logicielle

Prendre et Vendre sont alors modifies 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 (modification 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 modifiant la base de donnes) ne doit pouvoir
avoir accs la base pendant sa modification (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 :
Smaphore_bdd : smaphore(n)
Processus lecteuri,i=1..n :
Dbut
Faire toujours
Prendre(smaphore_bdd)
Lire la base de donnes
Vendre(smaphore_bdd)
Fait
Fin
Processus crivaini,i=1..m :
Dbut
Faire toujours
Prendre(smaphore_bdd,n)
-- on prend les n instances du smaphore
Modifier la base de donnes
Vendre(smaphore_bdd,n)
Fait
Fin

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 suffisamment dinstances disponibles. La valeur du smaphore
tombe alors 0, et le processus se bloque et il est mis dans la file 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 manquantes diminue. Lorsquil tombe 0, le processus est mis dans ltat prt. Grce
ce fonctionnement, si la file dattente est gre en FIFO, laccs la ressource critique
base de donnes aura lieu en FIFO, respectant ainsi lordre des demandes (lorsquun
148

4 Architectures systmes

4.2 Architecture logicielle

crivain se bloque, comme il prend toutes les instances disponibles du smaphore,


les lecteurs voulant prendre une instance du smaphore se retrouvent bloqus derrire lcrivain dans la file dattente, dans leur ordre darrive).
Le smaphore a de nombreuses utilisations possibles dans ce quon appelle la synchronisation 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 (figure 4.19). Un second processus 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.
Producteur
Dbut
Prendre(Libre)
Produire
Dposer dans tampon
Vendre(Plein)
Fin

Tampon

Libre taille_tampon
Plein 0

Consommateur
Dbut
Prendre(Plein)
Prendre dans tampon
Consommer
Vendre(Vide)
Fin

Smaphores

Figure 4.19 Le problme du producteur/consommateur.

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 :

Dunod La photocopie non autorise est un dlit.

s1 : smaphore(1)
s2 : smaphore(1)
Processus A :
Faire toujours
Prendre(s1)
Prendre(s2)
section critique
Vendre(s2)
Vendre(s1)
Fait

Processus B :
Faire toujours
Prendre(s2)
Prendre(s1)
section critique
Vendre(s1)
Vendre(s2)
Fait

On voit que si lun des processus dtient une ressource, et que lautre processus
dtient lautre ressource, alors les deux processus sont bloqus indfiniment : 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 (figure 4.20). Plusieurs philosophes sont assis autour dune table,
pensent, et mangent de temps en temps en utilisant des baguettes. Mais les factieux
149

4 Architectures systmes

4.2 Architecture logicielle

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.
Philosophe 0

Baguette 0

Baguette 1

Philosophe 1

Philosophe 3

Baguette 3

Baguette 2

Philosophe 2

Philosophei,i=0..3:
Faire toujours
Penser
Prendre(baguettei)
Prendre(baguettei-1 mod 4)
Manger
Vendre(baguettei-1 mod 4)
Vendre(baguettei)
Fait

Figure 4.20 Un exemple classique dinterblocage, le dner des philosophes.

Une solution simple dvitement de linterblocage consiste, lorsque cela est possible, 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 figure 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 ressource 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,
150

4 Architectures systmes

4.2 Architecture logicielle

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 permettre 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 dfini 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 (figure 4.21), ce qui signifie 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 file dattente du moniteur.
Ainsi, la gestion dune section critique est trs simple, et il est impossible doublier
de garantir son exclusion mutuelle : il suffit de ne rendre accessible la ressource
(une variable par exemple) qu travers le moniteur.

Variables prives invisibles de lextrieur


X: entier := 0

Primitives non rentrantes du moniteur

Dunod La photocopie non autorise est un dlit.

Incrmenter
Dcrmenter
Lire
Attendre_valeur_positive

Moniteur

Pi

Pj

File dattente de processus bloqus

Un seul processus peut tre en cours


dexcution dune primitive du moniteur

Figure 4.21 Illustration dun moniteur.

Par exemple, voici une variable x partage par plusieurs processus :


Moniteur moniteur_x
x : entier :=0
Procdure incrmenter
Dbut
x :=x+1

151

4 Architectures systmes

4.2 Architecture logicielle

-- cause de la non rentrance, il est impossible que


-- deux processus aient accs simultanment x, via
-- incrmentation ou dcrmentation
Fin
Procdure dcrmenter
Dbut
x :=x-1
Fin
Fonction Lire renvoie entier
Dbut
Renvoyer x
Fin
Fin du moniteur

Il suffit un processus voulant incrmenter x dappeler la procdure moniteur_x.


incrmenter. 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
Procdure produire(e:lment)
Dbut
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 lment
Dbut
Tant que nombre_pris=0 faire
-- le tampon est vide
rien
Fait
nombre_pris:=nombre_pris-1
Enlever et retourner un lment de T
Fin
Fin du moniteur

Cette solution nest pas satisfaisante. En effet, dune part, mme si elle pouvait fonctionner, elle contiendrait de lattente active. Mais surtout, elle ne peut pas fonctionner, tant donn que lorsquun processus se trouve dans la boucle tant que ,
il bloque laccs au moniteur, et empche alors lautre processus de modifier nombre
_pris. Un processus entrant dans la boucle tant que reste donc indfiniment
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 processus appelant, librant ainsi le moniteur, jusqu lappel de la procdure signal.
lappel de cette procdure, les processus bloqus sur wait seront remis dans ltat
152

4 Architectures systmes

4.2 Architecture logicielle

prt et poursuivront leur excution. Ce sont ces procdures (voir code ci-aprs) qui
sont utilises lorsquun processus doit tre bloqu sous certaines conditions lintrieur 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
Procdure produire(e:lment)
Dbut
Tant que nombre_pris=taille faire
-- le tampon est plein
wait - le processus sendort jusquau prochain
- signal
Fait
Mettre e dans T
nombre_pris:=nombre_pris+1
signal
-- rveille un ventuel consommateur bloqu
Fin
Fonction consommer renvoie lment
Dbut
Tant que nombre_pris=0 faire
-- le tampon est vide
wait
Fait
nombre_pris:=nombre_pris-1
Enlever et retourner un lment de T
signal
-- rveille un ventuel producteur bloqu
Fin
Fin du moniteur

Lorsquun processus doit produire (resp. consommer) une donne, il lui suffit 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.

Dunod La photocopie non autorise est un dlit.

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 afin 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 gnralistes.
Observons un effet possible de lexclusion mutuelle sur des processus (figure 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.
153

4 Architectures systmes

4.2 Architecture logicielle

Prendre(s)
Algorithme dordonnancement priorits

Vendre(s)

P1
Priorit faible
Vendre(s)
P2 est bloqu

P2
Priorit forte
Prendre(s)
P3
Priorit moyenne

Inversion de priorit

Section critique

Figure 4.22 Inversion de priorit.

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 figure 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) afin de mieux affronter les problmes poss par le
paralllisme : identifier les problmes dexclusion mutuelle, comprendre la notion
de rentrance, comprendre le mcanisme de la mmoire virtuelle qui peut sur certains
systmes dexploitation influencer lordonnancement des processus, et leur dure
dexcution.
m Segmentation de la mmoire

Chaque processus possde sa mmoire propre : ceci sexplique par le fait quun systme 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,
154

4 Architectures systmes

4.2 Architecture logicielle

ou heap) contenant les variables globales ou alloues dynamiquement pendant lexcution du processus. La figure 4.23 montre un exemple de segmentation. Cette segmentation permet divers contrles : ainsi, il est vrifi que le compteur ordinal pointe
toujours vers une instruction situe dans le segment de code, on peut aussi vrifier
que le segment de code nest pas modifi par lexcution (segment en lecture seule),
et que la pile ne dborde pas sur un autre segment. Enfin, le systme dexploitation
peut vrifier, 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.

Pile ou stack
(segment de pile)

Pile dappel
Variables locales aux fonctions/procdures
Paramtres, rsultat et adresses de retour
des sous-programmes
Zone disponible pour la pile ou le tas

Tas ou heap
(segment de donnes)

Code du programme
(segment de code)

Variables globales du programme, ou variables


alloues dynamiquement par pointeur

Les instructions (codop + oprandes)


sous forme de code machine

Adresse de base du programme

Figure 4.23 Exemple de segmentation de la mmoire dun processus.

Dunod La photocopie non autorise est un dlit.

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.
155

156

Adresse de
retour de 1

Processus

f1(3)

Excution f3(vi,4)
.
fin

Excution f2(vi)
.
fin

Adresse
de retour 1

vi

vi

Adresse
de retour 1
3

vi

Adresse
de retour 1

vi

Adresse
de retour 1

vi

Adresse
de retour 1

Adresse
de retour 1

tat de la pile

Figure 4.24 tats successifs de la pile lors de lappel de sous-programmes.

Adresse de retour 3

fin

Adresse de retour 2

f3(i,4)

Excution f1(3)
i, j:entier
.
f2(i)

Procdure f1(a: entier)


Procdure f2(a:entier)
Procdure f3(a,b: entier)
vi signifie valeur de la variable i
vj signifie valeur de la variable j

vj

vj

vj

vj

vj

vi

vi

Adresse
de retour 3

Adresse
de retour 2

4 Architectures systmes
4.2 Architecture logicielle

4 Architectures systmes

4.2 Architecture logicielle

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 sousprogramme), 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 fin du sous-programme,
les variables locales sont dpiles, et une instruction RET est appele. Cette instruction 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 compteur 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 (figure 4.24), si un processus appelle un sous-programme f 1 qui luimme 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 fin 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 fin 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.

Dunod La photocopie non autorise est un dlit.

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 physiques. 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
157

4 Architectures systmes

4.2 Architecture logicielle

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 fichier 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 fichier dchange. Lorsquun processus a besoin daccder une
page qui se trouve dans le fichier dchange, il faut librer un cadre de la mmoire
centrale afin dy placer la page ncessaire. Cela implique une copie vers le fichier
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 fichier
dchange.
Lexcution est donc flexible, 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 fil des changes entre mmoire
centrale et fichier 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 fichier 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 fichier 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 simplifier lexplication, nous supposerons que les pages sont de 4 Ko, soit
212 octets, et que 32 bits sont utiliss pour exprimer une adresse, ce qui implique
une mmoire adressable de 4 Go (232 octets). Une adresse de 32 bits est donc dcompose 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 220 pages. Supposons que le systme possde une mmoire centrale
de 512 Mo, soit 217 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 fichier dchange. Lorsquun
processus demande accder ladresse 32 bits a31a30 a1a0, cette adresse est vue
par la MMU en p19p18 p1p0y11y10 y1y0 (figure 4.25), soit 20 bits donnant un
numro de page du processus, et 12 bits donnant la position de loctet dans la page.
158

4 Architectures systmes

4.2 Architecture logicielle

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 effectuant 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 contenir 212 octets, ce qui nest pas suffisant pour contenir les ventuelles 220 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 significative cause de la
mmoire virtuelle : en effet un accs physique la mmoire centrale cote gnraDcalage dans la page
Numro de page

0
1
...
x

Adresse
logique

Dunod La photocopie non autorise est un dlit.

x2

Adresse
physique
y
Table des pages

Un niveau de table

x1

Adresse
logique

0
1
...
x1

Adresse
physique
y

Table des pages


externe
Deux niveaux de table

0
1
...
x2

z
Table des pages
situe dans la page y

Figure 4.25 Accs ladresse physique par table des pages.

159

4 Architectures systmes

4.3 Rseaux et bus de terrain

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 millisecondes. 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 nanoseconde 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 kilomtres 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, fibre optique) ou par
ondes hertziennes (ondes radio, lumineuses), il existe deux grands modes de
communication :
la communication point point, o deux entits, appeles nuds, communiquent 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 directement de la part de nimporte quel nud du rseau.
En mode point point, diffrentes architectures de rseau peuvent tre employes
(figure 4.26). Larbitrage de laccs au mdium de communication peut tre centralis (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 flexibilit).
Pour la communication par diffusion (figure 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.
160

4 Architectures systmes

4.3 Rseaux et bus de terrain

Arbre

Maillage

Anneau

toile

Dunod La photocopie non autorise est un dlit.

Figure 4.26 Architectures de communication point point.

BUS

Anneau ( diffusion)
ou boucle

Radio ou satellite

Figure 4.27 Architectures de communication par diffusion.

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,
161

4 Architectures systmes

4.3 Rseaux et bus de terrain

ce qui permet nimporte quel nud dun rseau local de communiquer avec
nimporte quel nud dun autre rseau local (figure 4.28), comme nous le verrons
avec le protocole TCP/IP.

Routeur
ou passerelle
Routeur
ou passerelle

Rseau local

Rseau local

Figure 4.28 Structure dinternet ou le mlange des genres.

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 (figure 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. correspondent des protocoles. La finalit 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
162

Couche Physique

Couche MAC
Medium Access Control

Couche LLC
Logical Link Control

Couche ARP
Address Resolution
Protocol

Couche IP
Internet Protocol

Couche TCP
Transmission Control
Protocol

Application

Rassemblage ventuel

Vrification dadresse MAC,


vrification cohrence trame
reue
Lecture et dcodage des bits
circulant sur le mdium
de communication

Ajout adresse physique de


destination, gestion daccs
au mdium
Transfert des bits aprs encodage
sur le medium de communication

Donnes

Donnes

Donnes

Signal

1011101100110011001010010111
Bits

En-tte En-tte En-tte En-tte


MAC
LLC
IP
TCP
Trame

PDU (Protocol Data Unit)

En-tte En-tte En-tte


LLC
IP
TCP

Datagramme

En-tte En-tte
IP
TCP

Segment

En-tte
TCP

Donnes

Figure 4.29 Structure en couche du protocole TCP/IP.

Mdium de communication :
paire torsade, cble coaxial, fibre optique, support immatriel

Peut soccuper du squencement


des trames, vrifier les erreurs,
envoi ventuel daccus
de rception

Prparation ventuelle de la mise


en oeuvre dune connexion
logique, squencement de trames,
peut ajouter contrles derreur,
possibilit de r-mission si erreur

Obtention adresse MAC partir dune adresse IP, diffusion de son


adresse IP et son adresse MAC

Recherche adresse IP de la
prochaine machine atteindre
pour transmettre les donnes
destination (routage),
fragmentation ventuelle

Gestion connexion logique adresse


IP:port adresse IP:port,
Envoi des accuss de rception,
fragmentation ventuelle des
gestion connexion, remise en
donnes, gestion de lordre,
ordre, rassemblage ventuel
congestion, r-missions

Dunod La photocopie non autorise est un dlit.

Donnes

Queue
MAC

4 Architectures systmes
4.3 Rseaux et bus de terrain

163

4 Architectures systmes

4.3 Rseaux et bus de terrain

donnes dapplication de faon fiable. Afin 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 afin de traiter les donnes reues.
Elle enlve ensuite ces informations qui sont spcifiques 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, fibre 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 Tlphonique 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 dfinis ultrieurement TCP/IP (comme par exemple
le protocole X.25 qui dfinit comment une communication par modem et ligne
tlphonique se droule en point point). Ce modle est illustr sur la figure 4.30.
Les couches diffrent dans leur dcoupage, mais on peut raliser les associations suivantes : couche 1 = couche physique, couche 2 = MAC + LLC + 1/2 ARP, couche 3

Couche 7

Application

Systme B
protocole

Application

Application
protocole
Couche 6

Prsentation

Couche 5

Session

Couche 4

Transport

Couche 3

Rseau

Couche 2

Liaison

Couche 1

Physique

Prsentation
protocole
Session

Session
protocole
Transport

Transport

Gestion
de la communication

Systme A

Rseau

Rseau

protocole
Liaison

Liaison

protocole
Physique
Physique
Support physique d'interconnexion

Figure 4.30 Structure en couche du modle OSI.

164

Gestion
de la transmission

protocole

4 Architectures systmes

4.3 Rseaux et bus de terrain

= 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 chacun 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 influencer le choix du type de mdium de communication utilis et de mode daccs :
le dbit binaire maximal, soit le nombre de bits par seconde que lon peut transfrer ;
la taille maximale dune trame en octets (une trame est une entit unitaire transfrable 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, fibre 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 partageant 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, afin 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 confidentialit des donnes (mme cryptes, les donnes transmises sur support
immatriel peuvent tre aisment reues par des nuds tiers).
m Protocoles rseaux gnralistes

Dunod La photocopie non autorise est un dlit.

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 afin dviter
une dsynchronisation dhorloge, et afin dtre tolrants aux perturbations lectromagntiques 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 influe videmment sur le dterminisme
165

4 Architectures systmes

4.3 Rseaux et bus de terrain

du temps de transmission dinformation entre deux nuds. Par consquent, cette


partie prsente quelques protocoles de niveau 2 afin dinformer le lecteur sur le
dterminisme temporel quil est possible dobtenir.
La figure 4.31 prsente diffrents types daccs au mdium de communication.
Accs au mdium de communication

Alatoire

Contrl

Rsolution de collision

ARINC 629 (CSMA/CA)


(Avionique)

CAN (CSMA/CA)
(Automobile)

Centralis

Distribu

Distribution
du droit de parole

Circulation
du droit de parole

CSMA/CD (Ethernet)
CSMA/DCR

FIP
DQDB

Anneau jeton
FDDI
TDMA

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)

Figure 4.31 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 financier 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 communication 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 (figure 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 ramifie (figure 4.33). Dans le
protocole originel, toute trame mise par un nud est diffuse tous les nuds
166

4 Architectures systmes

4.3 Rseaux et bus de terrain

Prambule Dlimiteur Adresses source Longueur du champ


Contrle
de dbut
et destination de donnes ou types Donnes Remplissage de trame
(1 o)
(7 o)
(2x2 o ou 2x6 o)
(2 o)
(4 o)

1500 o Taille 46 o
Taille 64 o

Figure 4.32 Format dune trame Ethernet.

Switch
Extrieur
Serveur
important

Routeur

Switch
Hub
Hub

Trame envoye par a b :


le hub la diffuse toutes ses sorties, le switch slectionne la bonne sortie

Dunod La photocopie non autorise est un dlit.

Figure 4.33 Un bus Ethernet ressemble davantage une toile ramifie qu un bus.

du rseau, ce qui revient considrer cette topologie comme un bus diffusion.


Chaque extrmit de ltoile ramifie est un nud (ordinateur, imprimante, photocopieuse, 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 afin 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 dterministe 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 continuant 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 vrifie que
ce quil lit sur le rseau correspond bien ce quil crit (i.e. il vrifie 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 afin dtre
167

4 Architectures systmes

4.3 Rseaux et bus de terrain

certain que tous les nuds concerns saperoivent aussi de la collision (il y a une
taille minimale de trame de 64 octets afin 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 2n 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.
Afin 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).
Enfin, 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 flexible, performant, et bon march mais
non dterministe.

Rsolution dterministe des collisions


Pour permettre lutilisation du protocole CSMA lorsque le dterminisme est ncessaire, 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 log2(n ) fois (n tant le nombre de nuds voulant
mettre en mme temps que lui).

Wi-Fi
Une version sans fil dEthernet a t normalise sous les normes IEEE 802.11,
appeles Wi-Fi (Wireless Fidelity). Ce protocole, utilisant une transmission analogique 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
168

4 Architectures systmes

4.3 Rseaux et bus de terrain

entrer en collision sans sen apercevoir. la place, le protocole CSMA/CA (Collision 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 transmettre 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 transmission 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 filaire) 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 utilis 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.

Dunod La photocopie non autorise est un dlit.

Arbitrage distribu base de jeton


Certaines mthodes daccs contrl au mdium se basent sur un jeton (token).
Par exemple, la norme IEEE 802.4 dfinit le bus jeton et la norme IEEE 802.5
dfinit 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 fini. Le temps dattente maximal daccs au mdium est alors
born, et le dbit minimal allou un nud est quantifiable. 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 fibre 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 dcentralis bass sur la transmission dun jeton (physique pour les anneaux, logique pour
le bus).

169

4 Architectures systmes

4.3 Rseaux et bus de terrain

Arbitrage centralis
Des protocoles accs contrl de faon centralise ont t dfinis, 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) afin 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 priodique 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 peuvent 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 communiquer 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 afin 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 (figure 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 spcifiques
prives, IP version 4 dfinit 5 classes dadresses IP.
Une adresse de classe A est compose dun octet dfinissant un rseau (par exemple,
11.0.0.0 dfinit un rseau de classe A), et de 3 octets dfinissant 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 (224-2 machine, le suffixe .0.0.0 tant rserv pour adresser le rseau entier,
et le suffixe .255.255.255 diffuser chaque nud du rseau).
Une adresse de classe B est compose de deux octets dfinissant le rseau (par
exemple, 130.15.0.0 est un rseau de classe B) et de deux octets pour dfinir ladresse
dun nud du rseau (par exemple, 130.15.65.123), ce qui permet dadresser 216-2
machine.
Enfin, les rseaux de classe C sont dfinis 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,
170

4 Architectures systmes

4.3 Rseaux et bus de terrain

Adresses IP de classe A : prfixe < 127


0

Rseau

Machine
Adresses IP de B : 128 prfixe 191

1 0

Rseau

Machine

Adresses IP de classe C : 192 prfixe 223


1 1 1

Rseau

Machine

Adresses IP de classe D : 224 prfixe 239


1 1 1 0

Groupe
Adresses IP de classe E : 240 prfixe

1 1 1 1 0

Rserv

Dunod La photocopie non autorise est un dlit.

Figure 4.34 Classes dadresses IP.

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 immdiatement 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 a1.a2.a3.a4, et que le masque est m1.m2.m3.m4,
alors toute machine dadresse a1.a2.a3.a4 telle que a1.a2.a3.a4 et m1.m2.m3.m4
= a1.a2.a3.a4 et m1.m2.m3.m4 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 dmission, le masque de sous-rseau du rseau local, et ladresse destination. Il suffit
alors dutiliser la formule mon adresse et masque = adresse destination et masque
afin 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 suffit 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, identifie
comme passerelle ou routeur (figure 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,
171

4 Architectures systmes

4.3 Rseaux et bus de terrain

dabord en remontant dans la hirarchie gographique, puis en redescendant vers


la rgion du rseau local destination). Au final, 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 ai du rseau local et le masque
de sous-rseau mi : sur la figure 4.35, ladresse dun rseau local est donc donne
sous la forme ai &mi .

Noeuda1

Hte a 2

Routeur r1
Routeur r 2
(Passerelle par dfaut) (Passerelle par dfaut)
du rseau a 1 & m1
du rseau a2 & m2
Application

Application

TCP

TCP
IP

IP:a1&m 1?a2&m2
ARP

ARP
Ethernet

Ethernet

Bus Ethernet

ARP
FDDI

IP:r2&m 2=a2&m 2
ARP
ARP
FDDI

Anneau FDDI

IP
ARP

Wi-Fi

Wi-Fi
Wi-Fi

Figure 4.35 Exemple de fonctionnement dIP.

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 fiable, mais que de tel tel autre nud, la transmission soit non fiable. Dans tous les cas, IP est un protocole rseau non fiable,
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 htrognes, ceci sans aucune garantie de fiabilit. Cest pourtant ce jour le protocole
de couche rseau le plus utilis.
172

4 Architectures systmes

4.3 Rseaux et bus de terrain

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 fixe, ou bien de faon dynamique par exemple en utilisant le protocole DHCP
(Dynamic Host Configuration Protocol), dans lequel un nud se connectant au
rseau va interroger un serveur DHCP pour obtenir dynamiquement une adresse IP,
gnralement prive.

Dunod La photocopie non autorise est un dlit.

M Couche 4 (transport)

La couche transport sappuie sur la couche rseau : la couche rseau fournit des
services permettant une transmission non fiable 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 services de la couche transport sont donc souvent directement utiliss par les processus.
Sur un nud, plusieurs processus peuvent utiliser le rseau (figure 4.36) : par exemple,
un navigateur internet, un logiciel de lecture de courrier, etc. Il faut donc distinguer
les donnes entrantes afin 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 finalement 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 connatre 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 fiable connect, empchant la congestion du
rseau. Sa fiabilit 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 dfinit 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
173

4 Architectures systmes

4.3 Rseaux et bus de terrain

TCP (Transfert Control Protocol)

Applications utilisant un protocole


quelconque ne ncessitant pas
une communication fiable

Applications utilisant TFTP


(Clients et serveurs TFTP)

Applications utilisant un protocole


quelconque ncessitant une
communication fiable
(Clients et serveurs divers)

Applications utilisant FTP


(Clients et serveurs FTP)

Applications utilisant POP ou IMAP


(Clients et serveurs de messagerie)

Applications utilisant SMTP


(Clients et serveurs de messagerie)

Applications utilisant HTTP


(Serveur web, navigateur)

Correspondance
avec le modle OSI

UDP

5, 6, 7

(User Datagram Protocol)


IP (Internet Protocol)
3
ARP (Address Resolution Protocol)
LLC (Logical Link Control)
2
MAC (Medium Access Control)
1

Physique

Figure 4.36 La pile TCP/IP et UDP/IP complte.

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 douverture 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 (figure 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 figure 4.29) afin quil soit achemin vers le nud destination en traversant un
certain nombre de routeurs (figure 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
174

Dunod La photocopie non autorise est un dlit.

4 Architectures systmes

4.3 Rseaux et bus de terrain

quelle a affaire une demande douverture de connexion sur un port particulier.


Elle vrifie 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 serveur. 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, signifiant 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 fiable. 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 fractionner 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 plusieurs 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. Afin
dviter cela, TCP utilise une fentre glissante : le principe est quil existe une taille
de fentre f , configurable, correspondant par exemple 4 segments TCP de taille
maximale. La rgle est que la couche TCP ne doit pas mettre plus de f segments
175

4 Architectures systmes

4.3 Rseaux et bus de terrain

sans avoir encore reu daccuss de rception. Par exemple, avec une fentre quivalente 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 fiable, bien que non dterministe en temps. Sa programmation 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 signifiant 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 fichier : les donnes crites sont transfres
la couche TCP qui se charge de les faire parvenir destination. Notons que lcriture 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 dfini, permettant 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 fichiers 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 fiable 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 :
176

4 Architectures systmes

4.3 Rseaux et bus de terrain

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 relativement 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 (tablissement 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.

Dunod La photocopie non autorise est un dlit.

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 (figure 4.37). De nombreux 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.
177

4 Architectures systmes

4.3 Rseaux et bus de terrain

Il ny a pas dadresse de nud pour CAN, et la trame CAN ne transporte pas dinformations sur la source ou la destination dun message. Par contre, un message est
caractris par un identifiant (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 lidentifiant 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 observant un message passer sur le rseau ne le lit que si lID lintresse. Cest une philosophie totalement diffrente de la philosophie client/serveur : en effet, tant donn
quune application utilisant un rseau de terrain est dtermine lavance, le concepteur 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), afin de vrifier que ce quelle lit est ce quelle
a mis. chaque bit de lID ainsi mis, la station coute le mdium afin de dterminer 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 propagation 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 signifie 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 fin de la transmission.

Bus de terrain VAN

Affichage
conducteur

Confort

Site monoprocesseur
OS : OSEK/VDX

Bus de terrain
CAN
Contrle
moteur

Contrle
freinage

Interface
rseaux

Contrle
suspension

Bote de
vitesse

Angle volant
phares

Climatisation

Figure 4.37 Exemple de rseau de terrain CAN.

Dans le cas o un nud a pass entirement son ID, il peut alors continuer mettre
sa trame (figure 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
1er bit du champ ACK 0. tant donn que la transmission est synchrone, le nud
178

4 Architectures systmes

SOF
1 bit

Identifier (ID)
11 bits

RTR IDE r0 DLC


1 bit 1 bit 1 bit 4 bits

4.3 Rseaux et bus de terrain

Donnes
0 8 octets

CRC
15 bits

ACK
2 bits

End of Frame
7 bits

Trame CAN 2.0A


SOF
1 bit

Identifier (ID)
11 bits

SRR IDE Identifier long RTR r1


r0 DLC
1 bit 1 bit
18 bits
1 bit 1 bit 1 bit 4 bits

Donnes
0 8 octets

CRC
15 bits

ACK
2 bits

End of Frame
7 bits

Trame CAN 2.0B

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
r0, r1 : bits rservs pour le futur

Dunod La photocopie non autorise est un dlit.

Figure 4.38 Format de trame CAN.

mettant la trame se rend compte si sa trame a t reue par au moins un nud,


sans identifier 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 fin 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 fin de chaque trame qui permet
de vrifier 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 messages, puisqu la fin 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 signifie que si le mdium
mesure n mtres, il faudra attendre 2n m/2 109 m/s = n/109 secondes, soit n 109
secondes. Ce qui donne un dbit thorique maximal de 109/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.

179

4 Architectures systmes

4.3 Rseaux et bus de terrain

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 dactionneurs. 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 priodiques 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 trafic
apriodique (valeurs de variables, messages, ou informations de configuration). 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.

180

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

Dunod La photocopie non autorise est un dlit.

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 lindpendance 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 doptimisations 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 lquit 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 maintenance 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 spcifiques lis la gestion
181

5 Excutifs temps rel

5.1 Introduction

du matriel (entres/sorties, rseau, systmes de gestion de fichiers, 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 fin, 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 contrlecommande fin.
Enfin, une structure monolithique est moins robuste quune structure en tches de
service, dans laquelle un noyau (figure 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.

Processus utilisateur

Modules

Tche
utilisateur
Noyau

Matriel

Tche
de services

Tche
de services

Noyau
Matriel

Figure 5.1 Structure monolithique contre structure en tches de service.

182

5 Excutifs temps rel

5.1 Introduction

Dunod La photocopie non autorise est un dlit.

5.1.2 Noyau, excutif et systme dexploitation temps rel

Le concept dindpendance des processus assur par un systme dexploitation gnraliste 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 implments 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 fichiers, etc. Le plus
souvent, ces services sont modulaires, et il est possible de configurer spcifiquement
un excutif en fonction de larchitecture utilise. Ces modules peuvent tre configurs 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 larchitecture cible (architecture sur laquelle le systme de contrlecommande sexcute), un concepteur doit choisir entre systme dexploitation et excutif (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 systme 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, afin 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 justification 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
183

5 Excutifs temps rel

5.2 Concepts des excutifs temps rel

matriel, et dun ensemble doutils et librairies spcifiques une cible. Cet ensemble
doutils est regroup sous la forme dun ensemble de pilotes de priphriques, de
fonctions spcifiques (gestion de la mmoire, accs aux matriels spcifiques, etc.)
nomm BSP (Board Support Package).
En gnral, les excutifs temps rel sont moins ouverts, moins flexibles, 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 afin de grer des tches, de les faire
communiquer, se synchroniser, de grer le temps, de traiter les interruptions matrielles. Ces services influencent ltat des tches, sur lequel sappuie lordonnanceur
afin de grer lexcution du systme.
5.2.1 Gestion des tches

Les noyaux temps rel grent les tches (figure 5.2) suivant le mme principe que les
systmes dexploitation gnralistes. Cependant, tant donn que les tches sont gres
finement, 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 dordonnancement choisie, cette tche se voit allouer un processeur afin 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. Afin de prvenir
la perte dune ressource suite la suppression dune tche la dtenant, certains excutifs 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 permettant 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 proposs par les excutifs, et le concepteur dune application doit parfois lui-mme les
implmenter, en utilisant les outils de base.
184

5 Excutifs temps rel

5.2 Concepts des excutifs temps rel

Terminaison
Attente dune dure
ou dune date
Excute

Endormie
Suppression

Premption

Attente
bloquante

Rveil

lection

Suppression

Prte
vnement
attendu arriv

Suppression

Bloque

Initialisation
Existante

Cre

Cration

Existante
mais non initialise

Inexistant

Figure 5.2 Graphe simplifi des tats possibles


des tches gres par un noyau temps rel.

m lments de base

Dunod La photocopie non autorise est un dlit.

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 smaphores 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 dinstances libres.
Un smaphore binaire (figure 5.3a) est caractris par une valeur boolenne et une
file dattente de tches en attente du smaphore. La file dattente peut tre gre,
en fonction de lexcutif sous-jacent, soit de faon FIFO, soit sous la forme de
plusieurs files 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 protocole priorit hrite ou bien un protocole priorit plafond afin dviter le
phnomne dinversion de priorit (voir 5.2.4). Dans le cas du protocole priorit
185

5 Excutifs temps rel

Smaphore binaire
tat
(1=libre, 0=pris)

File(s)
de tches
en attente

5.2 Concepts des excutifs temps rel

Smaphore binaire priorit plafond


tat
(1=libre, 0=pris)

File(s)
de tches
en attente

Priorit
plafond

(b)

(a)

Figure 5.3 Caractrisation dun smaphore binaire :


(a) sans protocole de gestion de ressource ou avec protocole priorit hrite,
(b) avec protocole priorit plafond.

plafond, il est ncessaire de caractriser le smaphore par une priorit plafond


(figure 5.3b), cest--dire la plus grande priorit parmi les tches susceptibles de lutiliser.
Un smaphore compte ou smaphore compteur (figure 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 ressource (figure 5.4b).
Smaphore compteur
Valeur
(n0)

File(s) dattente
{tches, nombre
dinstances requises}
(a)

Smaphore compteur priorit plafond


Valeur
(n0)

File(s) dattente
{tches, nombre
dinstances requises}

Priorit
plafond

(b)

Figure 5.4 Caractrisation dun smaphore compteur :


(a) sans protocole de gestion de ressource ou avec protocole priorit hrite,
(b) avec protocole priorit plafond.

Notons enfin quil existe une variante spcifique 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
186

5 Excutifs temps rel

5.2 Concepts des excutifs temps rel

Dunod La photocopie non autorise est un dlit.

plus fine et plus transparente des conditions daccs que dans le cas du moniteur
de Hoare. De plus, cette gestion est plus efficace 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 afin 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.
Afin 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

187

5 Excutifs temps rel

5.2 Concepts des excutifs temps rel

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

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 :
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

188

5 Excutifs temps rel

5.2 Concepts des excutifs temps rel

Procdure vendre_tout
Dbut
rseau_libre := vrai
rs232_libre := vrai
Fin

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 file FIFO (ou un ensemble de files FIFO classes par priorit de tches).
Le moniteur la Ada possde une file (ou un ensemble de files) 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 (figure 5.5).
Moniteur de Hoare
Verrou

Moniteur la Ada

Variables File(s) dattente


internes de tches sur wait

Verrou
Verrou
primitive: file(s) Priorit Variables
de lecture dcriture dattente de tches plafond internes

(a)

(b)

Figure 5.5 Caractrisation (a) dun moniteur de Hoare, (b) dun moniteur la Ada.

Dunod La photocopie non autorise est un dlit.

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
(figure 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.
Variable conditionnelle
Verrou
du moniteur

File dattente
de tches

Figure 5.6 Caractrisation dune variable conditionnelle.

189

5 Excutifs temps rel

5.2 Concepts des 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)

190

5 Excutifs temps rel

5.2 Concepts des excutifs temps rel

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

Lutilisation de variables conditionnelles permet daffiner 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 plusieurs 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 communications. 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.

Dunod La photocopie non autorise est un dlit.

Signaux synchrones
Un signal synchrone est le rsultat dun vnement interne une tche. Cet vnement 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 occurrence 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 processus pre, ou encore ne rien faire. Une tche peut dfinir une action spcifique
effectuer lorsquelle reoit un signal synchrone. De mme, elle peut dfinir 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).
191

5 Excutifs temps rel

5.2 Concepts des 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 (chronologiquement) 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 doccurrences : 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
(figure 5.7) ;

Tche
tat
mettrice du signal

Occurrence
non prise
en compte

Occurrence
prise
en compte

signal
non
signal
signal

signal

excute
prte

Tche sensible
au signal

wait

wait

excute
prte
bloque
en attente
du signal

Prise
en compte
du signal

Figure 5.7 Signal fugace,


les occurrences non prises en compte immdiatement sont perdues.

192

5 Excutifs temps rel

5.2 Concepts des 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 (figure 5.8). Ce type de mmorisation suppose quune tche (typiquement tche recevant le signal) rinitialise loccurrence ;

Tche
tat
mettrice du signal

Occurrence
mmorise
signal
non
signal
signal

signal

signal

excute
prte
wait

Tche sensible
au signal

Occurrence
prise
en compte

Occurrence
non prise
en compte

wait

wait

excute
prte
bloque
en attente
du signal

Prise
en compte
du signal

Figure 5.8 Signal mmoris,


au plus une occurrence est mmorise.

signal compte : les occurrences non prises en compte immdiatement sont


comptes pour utilisation ultrieure (figure 5.9), dans ce cas, la prise en compte
du signal suppose une dcrmentation du compte.

Dunod La photocopie non autorise est un dlit.

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 spcificits propres qui sont prsentes dans les paragraphes
suivants.

193

5 Excutifs temps rel

5.2 Concepts des excutifs temps rel

Tche
tat
mettrice du signal

signal

Occurrence
prise
en compte

Occurrence
mmorise

Occurrence
mmorise
1

non
signal
signal

signal

signal

excute
prte

Tche sensible
au signal

wait

wait

wait

excute
prte
bloque
en attente
du signal
n

Nombre doccurrences mmorises

Figure 5.9 Signal compte,


le nombre doccurrences non prises en compte est mmoris.

M La bote aux lettres

La bote aux lettres permet une communication asynchrone puisque lanalogie existant entre communication asynchrone et communication par bote postale permet
dapprhender trs simplement le concept.
Une bote aux lettres (figure 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.

mettrice

Message
2

Message
1

Rceptrice

File de messages
de la bote aux lettres

Figure 5.10 Bote aux lettres FIFO.

Les donnes de la bote aux lettres sont gres en FIFO (i.e. premier dpos/premier
retir) ou bien avec une file 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 :
194

5 Excutifs temps rel

5.2 Concepts des excutifs temps rel

oriente message (figure 5.11) : le message est muni dune priorit influenant
lordre dans lequel il va tre lu ;
Message
2

Message
1

File de messages normaux


Rceptrice

mettrice
Message
3

Messages lus en priorit

File de messages urgents

Figure 5.11 Bote aux lettres priorits de messages.

oriente tche (figure 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.
Message
4

mettrice
de priorit forte

Messages lus en priorit

Message
1

mettrice
de priorit moyenne

mettrice
de priorit faible

Message
2

Message
3

Rceptrice

Messages lus en dernier

Dunod La photocopie non autorise est un dlit.

Figure 5.12 Bote aux lettres priorits de tches mettrices.

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.
195

5 Excutifs temps rel

5.2 Concepts des 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 spcifi, une mission ou rception de message est avorte, la primitive renvoyant alors une erreur.
Une bote aux lettres (figure 5.13) peut donc tre reprsente par un tampon de
messages qui peut tre soit une file, soit un ensemble de files classes par priorits,
une file dattente de tches dsirant mettre (cas o la file est pleine et sans crasement),
et une file dattente de tches en attente de message (cas o la file est vide). Comme
pour les messages, ces files dattente peuvent tre gres en FIFO ou bien gres sous
forme de files de priorits.
Bote aux lettres

Bote aux lettres crasement

File(s) dattente Tampon = file(s) File(s) dattente


dmettrices
de messages
de rceptrices

Tampon = file(s) File(s) dattente


de messages
de rceptrices

Figure 5.13 Composition dune bote aux lettres.

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 technique 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 unidirectionnelle par passage de messages. Cependant, la philosophie du tube repose sur le
concept de flots doctets (comme tout priphrique Unix), exactement comme dans
un fichier : une tche transmettant des donnes travers un tube les envoie comme
un flot doctets dans un fichier (figure 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
mettrice

Rceptrice
Message2

Message1

Figure 5.14 Tube de communication.

196

5 Excutifs temps rel

5.2 Concepts des 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 (figure 5.15) est limite une file doctets pouvant
tre stocke sur disque, et une file dattente de rceptrice(s).

Tube
Tampon = file
doctets

File dattente
de rceptrices

Figure 5.15 Composition dun tube.

Cet outil de communication tant mme dutiliser des fichiers physiques, il noffre
aucune garantie de dlai de communication.
M Le socket

Le socket est un outil de communication bidirectionnelle (figure 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).

Flot doctets
Client

Serveur

Flot doctets

Dunod La photocopie non autorise est un dlit.

Figure 5.16 Communication par socket.

Les messages sont des flots doctets, comme pour le tube. Chaque lment communiquant 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 supplmentaires, 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 implmente sur UDP).
Un socket se caractrise au niveau de chaque lment communiquant (figure 5.17) par
deux tampons borns : les donnes arrives mais non lues, et les donnes en attente
197

5 Excutifs temps rel

5.2 Concepts des excutifs temps rel

denvoi, et une file dattente par tampon pouvant contenir la tche ou processus
communiquant sur le socket.
Socket
File dattente Tampon de sortie Tampon dentre
= file doctets
dmission
= file doctets

File dattente
de rception

Figure 5.17 Caractrisation dun socket au niveau dun processus ou dune tche.

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 (figure 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.
Tche acceptante

Tche appelante

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

a
b

Fin rendez-vous(a, b)

Demander rendez-vous(a, b)

Figure 5.18 Principe du rendez-vous.

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 fin du rendezvous 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 figure 5.19.
Lacceptation de rendez-vous, de mme que la demande de rendez-vous, sont des instructions bloquantes, un rendez-vous peut donc tre caractris (figure 5.20) par
un pointeur vers la tche acceptante, son tat (en attente de rendez-vous ou non),
et une file dattente gre en FIFO ou bien un ensemble de files 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_fin_rdz).
198

5 Excutifs temps rel

5.2 Concepts des excutifs temps rel

Demande
de rendez-vous
Tche appelante

Tche acceptante

Demande
de rendez-vous

Rendez-vous
Fin
du rendez-vous

Acceptation
de rendez-vous

Rendez-vous

Acceptation
de rendez-vous

(a)

Temps

Temps

Fin
du rendez-vous

(b)

Figure 5.19 Chronogrammes dexcution possibles dun rendez-vous :


(a) la demande a lieu avant lacceptation, (b) lacceptation a lieu avant la demande.

Rendez-vous
Tche
acceptante

tat (en attente,


pas en attente)

File(s) dattente
dappelants

Dunod La photocopie non autorise est un dlit.

Figure 5.20 Caractrisation dun rendez-vous.

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

199

5 Excutifs temps rel

5.2 Concepts des 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 rendezvous, alors que la bote utilise pour signifier la fin du rendez-vous est spcifique
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 (figure 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).
Tableau noir

Lecteur

Donne

crivain

Figure 5.21 Communication par tableau noir : la lecture est non destructive.

Entre processus, il existe des mcanismes particuliers de dclaration de zone de


mmoire commune (le segment mmoire des processus est protg des autres processus). 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 modifiant 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.
Tableau noir
Valeur actuelle

Mcanisme(s)
dexclusion
mutuelle

Figure 5.22 Caractrisation dun tableau noir.

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
200

5 Excutifs temps rel

5.2 Concepts des excutifs temps rel

cas, si possible, il convient dutiliser un protocole de gestion de ressources (protocole


priorit plafond ou dfaut priorit hrite) afin dviter le phnomne dinversion de priorits.
M Bilan sur la communication par message

La figure 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 synchronisation. 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. Enfin, 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 dfinie (figure 5.24) par une
ressource et une file dattente pouvant tre gre en FIFO ou en files FIFO classes
par priorit des tches.
Exclusion mutuelle
Ressource

Files(s)
dattente

Dunod La photocopie non autorise est un dlit.

Figure 5.24 Caractrisation dune exclusion mutuelle.

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)
afin 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 certaines conditions (dclenchement par une autre tche, ou bien dclenchement suite
une interruption) est en attente de synchronisation et sexcute sur dclenchement
de celle-ci.
201

202

Bote aux lettres


Unidirectionnelle
Bloquante en lecture
Bloquante en criture
Gestion des priorits
tches ou messages

Tableau noir
Unidirectionnelle
Non bloquante
(crasement, lecture
non destructive)

Non bloquant en lecture

Avec crasement

Bloquant en lecture

Socket
Bidirectionnelle
Bloquante en lecture
Bloquante en criture pour TCP
Non bloquante en criture
(avec pertes) pour UDP

Locale ou distante

Bote aux lettres crasement


Unidirectionnelle
Bloquante en lecture
Non bloquante en criture
(crasement du plus ancien message)
Gestion des priorits tches ou messages

Tube
Unidirectionnelle
Bloquante en lecture
Non bloquante en criture
avec pertes lorsque
le tampon est plein

Tampon (quasi) non born

Figure 5.23 Outils de communication par message.

Rendez-vous
Bidirectionnelle
Synchrone
Gestion
des priorits tches

Sans crasement

Tampon born

Locale

Communication par message

5 Excutifs temps rel


5.2 Concepts des excutifs temps rel

5 Excutifs temps rel

5.2 Concepts des 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 synchronisation 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 (figure 5.25a) peut tre caractrise par une file
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 (figure 5.25b) peut tre caractrise par un boolen
traduisant ltat de la synchronisation (dclenche ou non), et une file dattente
contenant au plus une tche.
Synchronisation n/1 compte
Nombre
de dclenchements
non pris en compte

File dattente

(a)

Synchronisation n/1 binaire

un dclenchement
en attente ? (boolen)

File dattente

(b)

Figure 5.25 Caractrisation dune synchronisation n/1 (a) compte, (b) binaire.

Dunod La photocopie non autorise est un dlit.

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

203

5 Excutifs temps rel

5.2 Concepts des 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 (dclenchement de la tche la plus prioritaire dabord), ce qui implique que soit le rpartiteur 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 paragraphe 5.2.2, p. 191. Comme pour les synchronisations n /1, la synchronisation
diffusion peut tre binaire (correspond au signal mmoris, voir figure 5.8) ou
compte (correspond au signal compte, voir figure 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).
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)

M Rendez-vous synchronis

Dans les rares cas o lon souhaite que n tches soient en mme temps un emplacement spcifique de leur excution, on y dfinit lattente dun rendez-vous synchronis n tches. Un rendez-vous synchronis est caractris par un nombre de tches
attendues au rendez-vous, et une file dattente de tches arrives au rendez-vous
(figure 5.26).
204

5 Excutifs temps rel

5.2 Concepts des excutifs temps rel

Rendez-vous synchronis
Nombre de tches
attendues

File dattente
de tches
arrives

Figure 5.26 Caractrisation dun rendez-vous synchronis.

Dunod La photocopie non autorise est un dlit.

Une tche excutant une attente de rendez-vous est insre dans la file 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 file 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 rendezvous.
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

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 smaphore et lattente du signal. Dans ce cas, le signal ne rveillerait pas lavant-dernire
tche.
205

5 Excutifs temps rel

5.2 Concepts des 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. Enfin, 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 afin 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 architecture 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 spcifique aux traitements dinterruptions.
La table contient aussi un bit par interruption signifiant si une interruption a eu lieu.
Le traitement sappelle une routine de traitement dinterruption (ISR) : ce traitement commence ventuellement par prvenir llment matriel qui a signal linterruption 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 interruption 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 gnralement 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.
206

5 Excutifs temps rel

5.2 Concepts des 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), vrifier 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 linterruption 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 spcifiquement dfini 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 manipulation de la file de messages, etc. Par consquent, pour un systme temps rel, le
traitement dune interruption consiste dclencher une tche de traitement de linterruption (figure 5.27). Une tche dclenche par une routine de traitement dinterruption 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 afin que la tche puisse
prendre en compte plusieurs interruptions survenues lors de son traitement dune
interruption.

Dunod La photocopie non autorise est un dlit.

Interruption

ISR
(Routine de traitement
dinterruption)

Vendre(synchro)

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

Fait

Figure 5.27 Principe de fonctionnement du traitement dune interruption matrielle.

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.
207

5 Excutifs temps rel

5.2 Concepts des excutifs temps rel

En effet, typiquement, lhorloge est programme de sorte dclencher une interruption 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 finement 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 programms de sorte :
dclencher priodiquement une interruption, typiquement, ce type de programmation est utilis par lexcutif pour dclencher priodiquement lordonnanceur.
Plusieurs excutifs qualifient 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 typiquement 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
spcifique 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 finesse 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 granularit la plus fine, et il est possible de rveiller une tche ou un processus de
faon trs fine, 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 excutifs 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 vnements 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 centaines de microsecondes (de plus, ce grain temporel, le surcot processeur d au
noyau est prohibitif ).
Enfin, notons que beaucoup de tches sont priodiques, et il faut avoir conscience
des problmes inhrents un code comme ce qui suit :

208

5 Excutifs temps rel

5.3 Principales normes temps rel

Tche une_tche_priodique
Dbut
Faire toujours
-- des actions
Attendre une dure gale une priode
Fait
Fin

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 + e1, la tche nest donc
rveille quau plus tt la date t + priode + e1. Il lui faut ensuite un temps e2
avant darriver linstruction dattente, ce qui dcale son prochain rveil au plus tt
la date t + 2priode + e1 + e2. 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 fonction 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 dfinis dans ces normes dfinissent 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

Dunod La photocopie non autorise est un dlit.

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/IEC9945. 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 lamendement, 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 afin de rendre compte des besoins modernes. La plupart
des aspects du systme dexploitation Unix sont normaliss, du rseau au systme
de fichiers en passant par le temps rel, linterfaage avec diffrents langages de programmation, etc. Les standards proposs concernent des interfaces et non pas des
209

5 Excutifs temps rel

5.3 Principales normes temps rel

implmentations, qui sont laisses libres aux dveloppeurs de systmes dexploitation,


excutifs ou noyaux conformes tel ou tel ensemble de standards POSIX.
Afin 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 standards 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.

210

5 Excutifs temps rel

5.3 Principales normes 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 directement 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).

Dunod La photocopie non autorise est un dlit.

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 respectivement 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 fonctionnalits 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 spcifiques 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 fil 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 ;
fichiers temps rel ;
211

5 Excutifs temps rel

5.3 Principales normes temps rel

ordonnancement ;
horloges haute prcision ;
mmoire non virtuelle.

Communication et synchronisation de processus


Trois outils sont dfinis pour permettre aux processus de communiquer et se synchroniser : 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 identifiant
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
lidentifiant de lIPC dj existant.
Botes aux lettres nommes
La manipulation dune bote aux lettres nomme se fait laide de fonctions dont
le nom est prfix 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 dfinit 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 possibilit de faire des attentes bornes une dure ou une date.
212

5 Excutifs temps rel

5.3 Principales normes temps rel

De mme, une interface XSI alternative existe. Linterface XSI augmente les possibilits 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 spcifiquement 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 afin de garantir lexclusion mutuelle des accs.
Comme pour les autres IPC, les tableaux noirs peuvent tre accds partir dune
interface XSI.

Dunod La photocopie non autorise est un dlit.

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 fin dune horloge (dlai programm, ou date programme),
ou bien encore vnement envoy la suite dune interruption matrielle
La spcificit des signaux temps rel par rapport aux signaux non temps rel est quun
signal mis est forcment reu (grce un mcanisme de files 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 dfinir 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 excution (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,
213

5 Excutifs temps rel

5.3 Principales normes temps rel

ils sont, si possible, placs dans des files dattente. Lorsque le processus est prt
traiter un signal, il commence par traiter les signaux de plus petit numro.

Fichiers temps rel


Les fichiers 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 fichiers. Une opration de lecture ou
dcriture est donc initie par un processus, mais celui-ci na pas attendre que lopration soit effectue pour continuer son excution. Le processus peut tre prvenu
par signal la fin 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 (figure 5.28)
et global (figure 5.29), avec une possibilit de mixer les deux niveaux (figure 5.30).

Processus i

Processus j

Tchej,n

Ordonnanceur

Processus k

Tchej,r

Tchej,p

Processus i

Tche l,q

Figure 5.28 Ordonnancement POSIX local.

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 file dattente par niveau de priorit). lintrieur dun processus multitche, les tches sont aussi gres par priorit, et le temps allou au
processus est rparti aux tches le composant. Ainsi, sur la figure 5.28, toutes les
tches sont ordonnances lintrieur de leur processus.
214

5 Excutifs temps rel

5.3 Principales normes 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.

Processus i

Tche j,n

Tche l,q

Processusj

Processus k

Tchej,r

Ordonnanceur

Processus i

Tche j,p

Dunod La photocopie non autorise est un dlit.

Figure 5.29 Ordonnancement POSIX global.

Dans un ordonnancement global (figure 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 processus, afin de modifier un paramtre influenant lordonnancement. Cependant,
les tches dun mme processus ne se bloquent pas lorsque lune des tches du processus 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 figure 5.30, la tche Tchel,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 file des tches
prtes.

215

5 Excutifs temps rel

Processus i

5.3 Principales normes temps rel

Tche j,n

Processus j

Processus k

Tche j,r

Ordonnanceur

Processus i

Tche l,q

Tche j,p

Figure 5.30 Ordonnancement POSIX mixte.

SCHED_RR : fonctionne comme SCHED_FIFO en se basant sur les priorits.


En cas dgalit, SCHED_RR (RR signifie Round Robin ou tourniquet) se base sur
un quantum de temps, et applique lalgorithme du tourniquet (voir chapitre 4).
SCHED_OTHER : dfini par limplmentation.
SCHED_SPORADIC : dfinie en 1998 dans POSIX.13, cette politique dordonnancement se base sur la technique du serveur sporadique (voir chapitre 8). Le
principe consiste allouer priodiquement une certaine quantit de temps processeur 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 dordonnancement choisie au niveau global, peut tre diffrente de la politique dordonnancement 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 (afin 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
1er janvier 1970 00 h 00. Cette horloge a une rsolution au pire de 20 ms, mais,
216

Dunod La photocopie non autorise est un dlit.

5 Excutifs temps rel

5.3 Principales normes temps rel

en fonction de larchitecture matrielle sous-jacente, on peut attendre une rsolution


de lordre de la microseconde. Afin de prvoir une granularit temporelle trs fine 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 modifier 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 modifie par lhorloge physique, mais ne peut pas, normalement, tre modifie par programme.
Deux autres horloges peuvent optionnellement exister : CLOCK_CPU_TIME,
donnant le temps processeur consacr un processus, et CLOCK_THREAD_CPUTIME_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) afin 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 (watchdog 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
Afin dviter les indterminismes lis lutilisation de la mmoire virtuelle, la norme
POSIX.1b dfinit le concept de mmoire bloque. Il est possible, laide des fonctions 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 fichier peut tre plac en mmoire centrale avec la fonction mmap,
ce qui permet des temps daccs presque dterministes.
217

5 Excutifs temps rel

5.3 Principales normes temps rel

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.

M POSIX 1003.1c et 1003.1j : tches POSIX

Lamendement POSIX.1c dfinit 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 dfinis par la norme
POSIX, ils peuvent dfinir 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 dfinition 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
218

5 Excutifs temps rel

5.3 Principales normes 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 modifier les attributs dune tche, et par exemple
de lattacher son crateur. Pour cela, il est ncessaire de connatre lidentificateur
dune tche, renvoy lors de la cration. Une tche peut connatre son propre identifiant grce la fonction pthread_self.

Synchronisation et communication de tches


POSIX dfinit 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 dfinis laide dattributs, comme le sont les
tches. Lutilisation dattributs, modifiables 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 spcifique, nomm pshared, permet de rendre un outil de synchronisation
visible lintrieur dun processus uniquement, ou bien tous les processus.
Enfin, notons la possibilit deffectuer des attentes bornes sur les instructions bloquantes des objets de synchronisation et de communication (soit en dure, soit
jusqu une certaine date).

Dunod La photocopie non autorise est un dlit.

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 files FIFO priorits.
Smaphores en lecture/criture
POSIX.1c propose les smaphores en lecture/criture (rwlocks) : ce sont des smaphores 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 dfini 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 propose 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
219

5 Excutifs temps rel

5.3 Principales normes 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_broadcast) qui rveille toutes les tches bloques sur une variable conditionnelle.
Il est noter quil est possible deffectuer une attente borne sur une variable conditionnelle. 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 peuvent 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 dfini 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 dfinit un systme dexploitation
complet.
Un excutif temps rel se doit dtre compact et davoir une petite empreinte mmoire
(occupation mmoire) afin dtre embarqu sur une architecture de type petit microprocesseur ou microcontrleur. De plus, ce type darchitecture matrielle ne fournit
que rarement tous les services fournis par un systme dexploitation (gestion matrielle du changement de contexte, mmoire virtuelle, systmes de fichiers).
POSIX.13 dfinit donc des profils (voir tableau 5.3), restreignant les lments utiliss. Ces profils sont prfixs par PSE (profil denvironnement gnrique), puis 5
(numro des profils temps rel), et sont au nombre de quatre : PSE 51, PSE 52,
PSE 53 et PSE 54.
220

5 Excutifs temps rel

5.3 Principales normes temps rel

Dunod La photocopie non autorise est un dlit.

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 systme de fichiers (les seuls fichiers utiliss sont les fichiers spciaux, 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, priphriques 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 interactions 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 stockage, pagination de la mmoire, support rseau Supporte
la prsence de tches temps rel et non temps rel.

Le profil PSE 51 est utilis pour un systme embarqu minimaliste, typiquement


un systme embarqu de contrle-commande. Un tel profil a une empreinte mmoire
de quelques kilo-octets.
Le profil PSE 52, proposant un systme de fichiers en plus du profil PSE 51, nest
pas (ou trs peu) implment. Il serait utile dans le cas dun systme de contrlecommande enregistrant des donnes sur un disque embarqu.
Le profil PSE 53 est typiquement utilis la place du profil PSE 51 sur un systme
embarqu multiprocesseur sur lequel on ne souhaite pas rpliquer de noyau sur
chaque processeur.
Le profil PSE 54 englobe les autres profils, 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 constructeurs 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).
221

5 Excutifs temps rel

5.3 Principales normes temps rel

Le but de la norme OSEK/VDX est de dfinir 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 dfinit un ensemble dobjets pour lesquels un excutif
OSEK/VDX doit ou peut dfinir un ensemble de services. Les objets sont :
les tches ;
les interruptions ;
les synchronisations ;
les timers ;
les messages ;
les erreurs.
La plupart des objets sont dfinis de faon statique llaboration de lexcutif et de
lapplication. En effet, le type de cible typique est un microcontrleur, dont les performances en vitesse de traitement et mmoire sont nettement infrieures celles dun
microprocesseur. De plus, la ligne directrice de la norme est de favoriser le dterminisme et la stabilit. Il ne faut donc pas sattendre trouver les mmes fonctionnalits que dans POSIX : bien que la plupart des objets OSEK/VDX puissent tre
configurs 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 seulement 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 figure 5.31 reprsente le mode de dveloppement typique dun systme sexcutant sur OSEK/VDX.
Ce choix, bien que moins flexible 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

Afin 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.
222

5 Excutifs temps rel

Fichiers
de configuration
(langage OIL)

5.3 Principales normes temps rel

Fichiers source
utilisateur
(langage C)

Source C ou binaire
de lexcutif

Gnrateur
Source C ou binaire
des pilotes
Compilateur
Fichiers
de configuration
traduits en C

diteur de liens
crois
pour microcontrleur
cible

Excutable
pour la cible

Dunod La photocopie non autorise est un dlit.

Figure 5.31 Mode de dveloppement typique dun systme sexcutant sur OSEK/VDX.

Les tches basiques ne peuvent pas se bloquer (attente dvnement, message, ressource) entre deux activations successives. Elles ne possdent donc pas dtat
bloque (figure 5.32). De plus, une tche est cre de faon statique, il ny a donc
pas dtat inexistante contrairement la figure 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 signifie 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 (figure 5.33). Typiquement, une tche se bloque en attendant une synchronisation ou une ressource.
Comme dans la norme POSIX, une tche est dfinie par une fonction. Cependant,
contrairement celle-ci, une tche nest pas cre dynamiquement, mais est dfinie
statiquement dans le fichier 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 dinterruption 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.
223

5 Excutifs temps rel

5.3 Principales normes temps rel

Excute
terminer

premption

lection

Endormie

activer
Prte

Figure 5.32 tats possibles dune tche basique.

Excute
attendre

terminer
lection

Bloque

Endormie
premption

relcher

activer
Prte

Figure 5.33 tats possibles dune tche tendue.

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.
224

5 Excutifs temps rel

5.3 Principales normes temps rel

M Synchronisation et communication de tches

OSEK/VDX met laccent sur les concepts du multitche (exclusion mutuelle, communication 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 dfinition de ressources (de faon statique dans
le langage OIL), qui correspondent des smaphores binaires dexclusion mutuelle,
grs avec le protocole priorit plafond immdiat, afin 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 spcificit 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 suprieure 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 dfinition.

Dunod La photocopie non autorise est un dlit.

Synchronisation par vnements


Les vnements, dfinis de faon statique dans le langage OIL, sont des synchronisations binaires de type n /1 : chaque tche tendue est lie un certain nombre
dvnements, quelle seule peut attendre. Un vnement est dailleurs dfini 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 commu225

5 Excutifs temps rel

5.3 Principales normes 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 communication.
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 file dattente de messages gre en FIFO, et consomme ses messages indpendamment des autres rceptrices (i.e. chaque message envoy est dpos dans chacune
des files 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 quelques restrictions, de dfinir 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 fixe),
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 calculateur que lmettrice, et quune autre rceptrice se trouve sur un autre calculateur.
Afin 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 figure 5.34, extraite de la norme OSEK/VDX, montre le schma simplifi de
communication par message sur un calculateur muni de lexcutif OSEK/VDX.
Notons la prsence de filtrage possible lmission vers un calculateur distant (typiquement, un filtre pourra viter les envois de valeurs identiques dun mme message
sur le rseau).
De mme, il est possible deffectuer un filtrage la rception de message, de sorte
ne prendre en compte que les messages jugs intressants (par exemple, message
diffrent des prcdents).
Enfin, il existe diffrentes notifications 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 dfinir des messages priodiques, qui seront automatiquement envoys chaque priode. Chaque message peut tre muni dune chance :
si le message nest pas reu dans le dlai imparti, une notification de violation
dchance est envoye.
226

5 Excutifs temps rel

5.3 Principales normes temps rel

Message arriv
Erreur
Violation dchance
Envoi effectu
1
Notification

Communication interne

Filtrage
Communication interne
Filtrage

Application

ReceiveMessage

SendMessage

Filtrage

Filtrage

Couche dinteraction

Communication externe

Extraction de message(s)
Communication externe

I-PDU

transmettre

I-PDU
reu
Requte de transmission

Indication de rception
Couches rseau

Figure 5.34 Paradigme de communication par message OSEK/VDX.

Dunod La photocopie non autorise est un dlit.

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 dfinition des ISR, et leur niveau,
est faite de faon statique dans le fichier OIL.
Pendant le fonctionnement dune application, il est ais de dsarmer/armer toutes
les interruptions pouvant tre dsarmes (primitive DisableAllInterrupts et EnableAllInterrupts) : 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 primitives 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.

227

5 Excutifs temps rel

5.3 Principales normes 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 dfinir 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 dfinis de faon statique dans le fichier OIL.
Enfin, 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 modifie que temporairement lors dun hritage de priorit d au protocole priorit plafond immdiat.
De mme, chaque interruption se voit munie dune priorit (normalement, les interruptions 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 files dattente FIFO gres par
priorit. Lune des spcificits 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 fin 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 fin de
la file 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 fin dune routine de traitement dinterruption.
Remarque

Lorsquune tche est prempte, elle reste en tte de la file 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.
Enfin, 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.
228

5 Excutifs temps rel

5.3 Principales normes 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
Afin de pouvoir modifier le comportement standard du systme lors dvnement
particulier (erreurs, activation et terminaison de tche, lancement et terminaison
du systme), il est possible de dfinir 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 dfinie, tche termine alors
quelle possde encore des ressources) ou bien une erreur critique (erreur matrielle, de mmoire).
Contrairement un noyau C standard, il nest pas ncessaire de tester indpendamment 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 absolument tre actif, alors que lors de la mise en fonctionnement, il est rare de consacrer
de la mmoire afin dautoriser le dbogage.
Par consquent, OSEK/VDX prvoit la dfinition de diffrents modes de fonctionnement dans les fichiers OIL.

Dunod La photocopie non autorise est un dlit.

Profils
Comme POSIX qui dfinit diffrents profils afin de permettre la normalisation
dexcutifs implmentant un sous-ensemble des fonctionnalits prvues, OSEK/
VDX dfinit 4 profils dfinissant des sous-ensembles de la norme. Le nom donn
aux profils 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.
229

5 Excutifs temps rel

5.4 Exemples dexcutifs 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 enfin que la norme impose seulement 8 niveaux de priorits de tches distincts pour les excutifs BCC, et 16 pour les ECC.
De mme, 4 profils de communication sont dfinis (Com Conformance Class). Les
profils CCCA et CCCB ne proposent que les communications internes. CCCA est
limit aux messages sans file dattente. Les profils 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 difficile dobtenir une valuation prcise du poids de chaque
excutif ou systme dexploitation temps rel sur le march. La figure 5.35 prsente
les rsultats dun sondage de 10 000 utilisateurs du site internet de lOpen Group.
16
14
12
10
8
6
4
2

Vx

Pr

W
or
op ks
i
ta
ire
p
W
S
in
O
do
S
w
s
W
N
in
T
do
w
Q
s
N
N
T- X
iR
W
M
X
in
do
O
w
Ss
9
N
TR
TX
VR
TX
L
W yn x
in
do OS
w
s
C
E
N
uc
le
u
R
T- s
Li
nu
C x
ho
ru
s
Au
H
yp
t
er re
ke
rn
e
C l
/O
S
O
SE
VR
TX

Excutifs utiliss principalement

Excutifs utiliss dans le futur

Excutifs en valuation

Figure 5.35 Utilisation des excutifs temps rel par les internautes
inscrits sur le site Open Group, sondage effectu en 2001.

230

5 Excutifs temps rel

5.4 Exemples dexcutifs temps rel

La plupart des excutifs utilisent un dveloppement crois, et fournissent un certain


nombre doutils de traage dapplication, dvaluation de performances et de dbogage. La figure 5.36 prsente larchitecture logicielle typique utilise lors dun dveloppement crois.
Station de dveloppement (Hte)

Sources
utilisateur

Sources
Sources
ou binaire
et configuration
noyau et excutif
du BSP

Cible
Application utilisateur

Environnement de dveloppement intgr


Excutif
Gestion
de projets

Gestion de
configurations
Compilateur
crois
diteur
de liens

diteur
Outils de traage,
valuation
Dbogueur
de performances

Communication avec la cible

Agent
de dbogage

Noyau
BSP

Processeur ou microcontrleur cible


Ordinateur ou carte de dveloppement

Liaison (srie, parallle, TCP/IP)

Figure 5.36 Architecture logicielle typique lors dun dveloppement crois.

Il est assez difficile 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 profil 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.

Dunod La photocopie non autorise est un dlit.

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 modifier 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, Coldfire, m68k, Arm, StrongArm, MIPS,
SuperH Chaque cible dispose de plusieurs dizaines de BSP spcifiques.
Support multiprocesseur : oui avec lextension VxMP.
231

232

Y a-t-il un support des calculs virgules flottantes ? Est-il logiciel ou matriel ? Y a-t-il une communaut de
dveloppeurs mettant en commun leur savoir-faire en partageant du code ?

Au minimum, lassembleur est support, la plupart des excutifs sont accompagns de compilateurs permettant de programmer en C, voire en C++ ou encore en Ada.

Microprocesseurs et microcontrleurs supports.

Librairies spcifiques aux cartes de dveloppement sur microcontrleur, aux diffrentes spcificits et optimisations des microprocesseurs, etc.

Un crdit supplmentaire est accord aux excutifs certifis suivant des normes comme la DO-178B.

Les noyaux et excutifs, plus lgers, imposent un dveloppement crois (station de dveloppement et cible
sont distincts), alors quun systme dexploitation permet un dveloppement sur la cible elle-mme.

Le noyau se base-t-il sur un tick (dirig par le temps) ou sur la programmation dhorloges (dirig par les vnements) pour grer le rveil des tches ?

On prfrera souvent un noyau de type noyau et modules ou tches de service une structure monolithique.

Possibilit dtre inform des fautes et de les traiter.

Richesse des bibliothques


de programmation

Langages de programmation
supports

Cibles supportes

BSP (Board Support Package)

Certification

Noyau, excutif ou systme


dexploitation ?

Dirig par le temps


ou les vnements

Architecture du noyau

Tolrance aux fautes

Support des architectures logicielles multitches, multiprocessus, ou les deux.

Dterministe, priorits fixes ou variables, dure dun changement de contexte (relativement larchitecture
matrielle sous-jacente).

Support du protocole priorits plafonds (de prfrence) ou hrites.

Type dobjets actifs

Algorithme dordonnancement

Protocole de gestion de ressources

Support pour architecture


mono ou multiprocesseur

La plupart des excutifs proposent plusieurs interfaces de programmation, compatibles avec telle ou telle norme
temps rel. Ces interfaces ont-elles t certifies ?
Peut-on programmer en POSIX, si oui, sur quel ensemble de normes, sur quel profil ? Peut-on programmer en
OSEK/VDX, si oui, sur quel profil ? Peut-on programmer en ITRON ? Si oui, sur quel profil ?

Interfaces de programmation
normalises

Tableau 5.4 Critres dvaluation dun excutif temps rel.

5 Excutifs temps rel


5.4 Exemples dexcutifs temps rel

Typiquement, cela va de 8 au minimum pour certains noyaux 256 ou plus pour dautres. Comment lordonnanceur gre-t-il les tches de mme niveau de priorit (FIFO, tourniquet) ?

Typiquement, cela va de 8 au minimum pour certains noyaux 256 ou plus pour dautres.

Empreinte mmoire (taille du noyau lui-mme, et des diffrents modules intgrer). Taille maximale de la
mmoire (pile) alloue une tche ou un processus (code, pile et tas). Protection de la mmoire si multiprocessus. Allocation dynamique de mmoire. Mmoire virtuelle.

Interruptions hirarchises ou non, possibilit ou non pour une ISR dtre interrompue, flexibilit de programmation.

Nombre et prcision des horloges, granularit temporelle, possibilit de travailler en dures et en dates.

Support pour TCP/IP, CAN

Facilit dutilisation des interfaces dentres sorties. Existence des pilotes de priphriques utiliss.

Lexcutif gre-t-il les systmes de fichiers, si oui sur quel modle (hirarchie de rpertoires ou plat, systme
compatible Unix, Windows)

La plupart des excutifs permettent la mise en uvre dune console alphanumrique (soit directement sur un
cran, soit via une communication srie RS-232). Certains permettent un affichage graphique (soit directement
sur un cran dans le cas des systmes dexploitation, soit sur un cran spar).

Quels sont les systmes dexploitation partir desquels on peut dvelopper sur lexcutif ? Y a-t-il un environnement de dveloppement intgr (diteur permettant la compilation, le transfert du code et le dbogage
distant dans la mme application) ? Peut-on modifier le code source sans rinitialiser la cible (dveloppement
incrmental) ?

Le systme est disponible sous forme de sources pouvant tre modifis, ou bien sous forme dun fichier
binaire immuable ? Peut-on associer (hook) des traitements spcifiques aux diffrents vnements (changement de contexte, dbut et fin de tche, etc.) ?

Cot de lacquisition du systme et de lenvironnement de dveloppement, cot ventuel du dploiement


dapplications utilisant le systme. Le support technique est un facteur dterminant lors de la mise en uvre
dun excutif, de mme que la largeur de la communaut des utilisateurs. En effet, plus il y a dutilisateurs,
plus on trouvera de forums dchanges dexpriences, de code source, etc.

Nombre de niveaux de priorits

Nombre maximal de tches

Support mmoire

Gestion des interruptions

Gestion des horloges

Support rseau

Entres/Sorties

Systmes de fichiers

Gestion dune console


alphanumrique ou graphique

Facilit de dveloppement

Extensibilit du noyau

Cot, royalties, et support


technique et/ou communautaire

Dunod La photocopie non autorise est un dlit.

5 Excutifs temps rel


5.4 Exemples dexcutifs temps rel

233

5 Excutifs temps rel

5.4 Exemples dexcutifs temps rel

Interface native de programmation : fonctions spcifiques.


Interface POSIX : limite au profil 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 fichiers : 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 propritaire. Linterface POSIX est implmente par les primitives natives de VxWorks.
Il est noter quil est trs difficile dutiliser un temps absolu en utilisant les primitives 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 configurer loisir le BSP utilis. Ainsi, du profil
PE 52 disponible, il est relativement simple dallger la fabrication du noyau pour
se rapprocher dun profil 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
234

5 Excutifs temps rel

5.4 Exemples dexcutifs temps rel

dhorloge priodique. chaque interruption dhorloge correspond un tick (figure 5.37),


VxWorks prend alors la main afin deffectuer lordonnancement du systme, de
grer les rveils ventuels des tches (une tche peut sendormir afin dattendre un
certain nombre de ticks), etc.

temps
tick et excution
de lordonnanceur

Figure 5.37 Gestion du temps par VxWorks.

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 impliquerait un surcot processeur important. Le principal problme d cette implmentation 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 dialoguer 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 support rseau trs tendu, daccder au systme de fichiers 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
afin dafficher ou enregistrer du texte dans un fichier, ce qui facilite le suivi du fonctionnement de lapplication sans appeler directement des fonctions daffichage ou
dcriture dans un fichier (fprintf ), cest--dire sans ajouter dappel suspensif perturbant lordonnancement de lapplication.

Dunod La photocopie non autorise est un dlit.

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 figure 5.38.
La mmoire est partage par lexcutif et toutes les tches, comme cela est prsent sur
la figure 5.39. Chaque tche VxWorks, comme chaque tche utilisateur, est caractrise 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 prdfinie.
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 spcifier explicitement la
taille de la pile allouer une tche, ainsi que des paramtres (10 en tout) passer
la tche. Il est aussi ncessaire de spcifier explicitement si la tche utilise les registres
235

5 Excutifs temps rel

5.4 Exemples dexcutifs temps rel

Excute

Election

Premption

semGive
msgQSend

ta
sk
Re
ta
su
sk
m
Su
e
sp
en
d

taskSuspend

semTake
msgQReceive

taskResume
taskActivate

En attente

taskDelay

Prte

Dlai coul

e
m
su
e
R
nd
sk
pe
s
ta
Su
sk
ta

taskInit

Suspendue

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).

236

Endormie

5 Excutifs temps rel

5.4 Exemples dexcutifs temps rel

de calculs virgule flottante afin de dterminer si le changement de contexte dune


tche ncessite leur sauvegarde. Afin 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 modifier sa priorit ou la priorit dune autre tche laide de linstruction 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 :

Dunod La photocopie non autorise est un dlit.

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 */
}

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
affichs 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 :
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) ;
}

237

5 Excutifs temps rel

5.4 Exemples dexcutifs 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 spcificit 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 file, 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 fonction 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 bloquante 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,
238

5 Excutifs temps rel

5.4 Exemples dexcutifs 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 configurer le BSP choisi son bon vouloir. Enfin,
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 difficult 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 fine. Il est bien sr possible dinstaller soimme une gestion plus fine du temps, en programmant une horloge physique, et
en travaillant sur les interruptions gnres par celle-ci. Enfin, linterface de programmation spcifique est moins intressante que ne le serait une interface normalise.

Dunod La photocopie non autorise est un dlit.

5.4.2 OSEKturbo

OSEKturbo est un excutif temps rel conforme OSEK/VDX, profils ECC1 et communication CCCB (communication interne uniquement) dans la version de base.
Comme la norme, celui-ci, extrmement lger et rapide, est principalement dvelopp 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 fichiers : aucun.
Niveaux de priorit : 62.
Nombre de tches : 64 tches actives au plus.
Type : commercial.
239

5 Excutifs temps rel

5.4 Exemples dexcutifs temps rel

Rsolution dhorloge : dfinie par lhorloge interne du microcontrleur, ou


bien par des horloges matrielles spcifiques. 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 programmes de quelques centaines doctets ou quelques Ko. Il est compltement compatible 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 fichiers par exemple, dfinition 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 impliquent 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 excutifs 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 fil 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 officielle ou non). Il faut
cependant sattendre, lorsque lon utilise un BSP non officiel, tre confront
quelques bogues.
Support multiprocesseur : oui.
Interface native de programmation : interface spcifique.
Interface POSIX : limite au profil 52, implmentation presque complte de
POSIX 1003.1b (limite au fait quil ny a pas de support multiprocessus),
1003.1c et 1003.1h.
240

Dunod La photocopie non autorise est un dlit.

5 Excutifs temps rel

5.4 Exemples dexcutifs 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 fichiers : In Memory File System (IMFS), FAT12, FAT16, FAT32,
NFS et TFTP pour accs distant un systme de fichiers.
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 : dfinie par lhorloge interne du processeur ou microcontrleur, ou bien des horloges matrielles spcifiques. 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 denvironnement 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. Enfin, 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.
241

5 Excutifs temps rel

5.4 Exemples dexcutifs 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 : profil 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 fichiers : non (profil 51) mais laccs aux systmes de fichiers 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 RTLinuxFree.
Rsolution dhorloge : dfinie 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 personnes 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 profil 51 de la norme POSIX) situ entre le matriel et un systme
dexploitation Linux trs lgrement modifi. Le noyau mule alors le matriel et
les horloges (figure 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 flexibilit
dun systme dexploitation (Linux) au dterminisme dun systme dexploitation
temps rel.
242

5 Excutifs temps rel

5.4 Exemples dexcutifs temps rel

Processus non temps rel


tche
tche
Processus non temps rel
Processus non temps rel

RT FIFO

tche
NoyauLinux

Ordonnanceur
Linux

Espace mmoire
non virtuelle
Tche
temps rel

Pilote de priphriques
Gestionnaire
dinterruptions

Noyau
RTCore

Gestionnaire
dinterruptions

Tche
temps rel

Applications

Tche
temps rel

Ordonnanceur
temps rel

Machine virtuelle

Interruption
Matriel

Machine relle

Dunod La photocopie non autorise est un dlit.

Figure 5.40 Architecture RTLinux.

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 modifier les primitives du noyau afin 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 modifi 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 fichiers, aux priphriques non temps rel, au rseau, une interface
graphique, etc.).
Afin 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
243

5 Excutifs temps rel

5.4 Exemples dexcutifs temps rel

un outil de communication par messages : les files temps rel (RT FIFO) et la
mmoire partage (mbuff ) entre processus non temps rel et tches temps rel.
Une file temps rel est vue comme un fichier 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.
Afin de palier le manque de bote aux lettres dans la norme POSIX 1003.1c, RTLinux
propose aussi un mcanisme de bote aux lettres spcifique (rt_mq).
Les avantages de RTLinux sont lis au fait quil est conforme au profil 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.

244

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 contrlecommande.
Nous supposons que le lecteur est familier avec au moins un langage de programmation impratif ou bien flots de donnes. Par consquent, la prsentation des trois
langages de programmation supports est faite en commun, de sorte quavec la connaissance dun des trois langages (ou dun langage proche), le lecteur puisse rapidement se faire une ide des deux autres.

6.1 Programmation C, Ada et LabVIEW

Dunod La photocopie non autorise est un dlit.

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 flots 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 fin des annes 60. Son rle initial tait de permettre
la portabilit de la majeure partie du code dun systme dexploitation dune architecture matrielle une autre. En 1973, il est utilis avec succs pour crire un systme 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.
245

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

Le langage C est un langage de type impratif (en opposition aux langages dclaratifs, fonctionnels, flots 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 programmation bas niveau, comme dans la programmation des entres/sorties spcifiques
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 finalistes
(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 lintroduction 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 flots de donnes.
Cest un langage graphique, typ, modulaire, et en tant que langage flots 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).
246

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

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 Instruments. 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 flots de
donnes, nomme diagramme.
Depuis, le langage LabVIEW a volu et sest largi au fil 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

Dunod La photocopie non autorise est un dlit.

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 suffisante pour contenir une adresse (un pointeur).
Le fait que diffrents types aient une longueur dpendante de larchitecture sousjacente 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 dfinie avant son utilisation et avant toute instruction du
mme bloc (un bloc est dfini entre accolades et correspond un groupe de dfinitions
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 */

247

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

Tableau 6.1 Types de base en langage C.


Type

Taille
(en bits)

Description

Domaine

Exemples de littraux

int

entier

gnralement
16 ou 32

-2n-1..2n-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..2n-1

dcimal : 152U
octal : 0230U
hexadcimal : 0x98U

char

caractre

-128..127

caractre : a
ou code octal \141,
ou caractre non
imprimable \n,\t

unsigned
char

caractre
non sign

0..255

caractre : a
ou code octal \141, ou
caractre non imprimable
\n,\t

short

entier court

16

-216..216-1

dcimal : 152, -15


octal : 0230, -017
hexadcimal : 0x98, -0xF

unsigned
short

entier court
non sign

16

0..216-1

dcimal : 152UL
octal : 0230ul
hexadcimal : 0x98uL

long

entier long

32 (parfois 64)

-231..231-1

dcimal : 152L, -15L


octal : 0230L, -017L
hexadcimal : 0x98L, -0xFL

unsigned
long

entier long
non sign

32 (parfois 64)

0..232-1

dcimal : 152uL
octal : 0230ul
hexadcimal : 0x98UL

long long

entier trs long

64

-263..263-1

dcimal:152LL,-15LL
octal :0230LL,-017LL
hexadcimal :0x98LL, -0xFLL

unsigned
long long

entier trs long


non sign

64

0..264-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

248

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

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 dfini 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 dfinit 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 */

Afin dviter la lourdeur de rptition du mot cl enum, on utilise souvent le nommage 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
plusieurs types.

union

permet de dfinir une superposition (union) de

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 */

Dunod La photocopie non autorise est un dlit.

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 numriques. 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 flottant
trs long, etc.
249

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

Tableau 6.2 Types de base en langage Ada.


Type

Description

Taille (en bits)

Domaine

Exemples de littraux

integer

entier

gnralement
16 ou 32

-2n-1..2n-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..2n-1

comme integer

positive

entier
positif

gnralement
16 ou 32

1..2n

comme integer

character

caractre

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

Le fait que diffrents types aient une longueur dpendante de larchitecture sousjacente proscrit lutilisation de valeurs constantes lorsque lon manipule des tailles de
donnes. Le langage Ada dfinit des attributs permettant dobtenir diverses informations 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 fixe (delta).
Toute variable doit tre dfinie 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 dfinit de la faon suivante :
250

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

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 : Trefle correspond 0, Carreau 1, etc. Cependant, contrairement 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 flexibles de crer des types en contrlant
finement leur reprsentation binaire. La faon de procder est prsente au paragraphe 6.1.2, p. 282.

Dunod La photocopie non autorise est un dlit.

M Langage LabVIEW

LabVIEW tant un langage graphique, cest de faon graphique que lon choisit le
type dune variable. Dans ce langage, tout est flot. Lorigine dun flot a un type, qui
dfinit le type dun flot. Lorigine dun flot peut tre une variable dentre
nomme commande, et la fin dun flot, une variable de sortie du flot nomme
indicateur.
Chaque programme, ou sous-programme LabVIEW sappelle un instrument virtuel
(virtual instrument ou vi ). La philosophie est de dfinir un instrument par son
interface graphique, ou face avant, et son programme ou diagramme. La figure 6.1
montre un vi prenant en paramtre un entier a, lui appliquant un calcul (a + 1)/2
afin dafficher le rsultat b. a en tant que paramtre dentre sappelle une commande
(pour commande utilisateur, modifiable 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
flots (fils) auxquels ils sont connects. Ds quune valeur est disponible sur chacun
des flots 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 flot est disponible en entre dun indicateur, la valeur est affiche sur llment correspondant
de la face avant.
La figure 6.2 montre quun numrique, sil est entier, peut tre sign ou non (prfixe
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 flottant 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 flots des
lments graphiques a une smantique. Ainsi, graphiquement, les flots de donnes
251

6 Programmation
des systmes multitches

Face avant

6.1 Programmation
C, Ada et LabVIEW

Commande

Indicateur

Diagramme

Correspondance entre face avant et diagramme

Figure 6.1 Un programme simple en langage LabVIEW.

Commande numrique

Flottants
Entiers signs
Entiers non signs
Complexes

Figure 6.2 Types numriques en langage LabVIEW.

dentiers (signs ou non, quelle que soit leur taille) sont reprsents en bleu. Les flots
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 figure 6.3 montre une commande de type enregistrement (cluster en langage
LabVIEW), et la faon dont on y accde.
252

6 Programmation
des systmes multitches

Cluster

6.1 Programmation
C, Ada et LabVIEW

Accs aux champs du cluster

Figure 6.3 Type enregistrement en langage LabVIEW.

Les flots 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 figure 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 fil est de couleur rose, et nautorise pas deffectuer
Cration dune numration

Dunod La photocopie non autorise est un dlit.

numration

Choix de la valeur initiale

Figure 6.4 numration en langage LabVIEW.

253

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

des oprations arithmtiques directement sur les clusters. La figure 6.4 montre une
numration.
Comme on le voit sur la figure 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).
Point gris symbole
de coercion implicite

Division euclidienne

Figure 6.5 Coercion implicite en langage LabVIEW.

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 figure 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 figure 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)*/

254

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

sizeof (T) = 20

T[0]

T[1]

T[2]

T[3]

T[4]

0x22FF48

2512

-15

42

56

32

0x22FF48

0x22FF4C

0x22FF50

0x22FF54

0x22FF58

Figure 6.6 Reprsentation mmoire dun tableau en langage C.

sizeof (T) = 20

T[0]

T[1]

T[2]

T[3]

T[4]

0x22FF48

2512

-15

42

56

32

0x22FF48

0x22FF4C

0x22FF50

0x22FF54

0x22FF58

T2
0x22FF48

Figure 6.7 Laffectation de tableau nest quune affectation dadresse en langage C.

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*/

Dunod La photocopie non autorise est un dlit.

De la mme faon, la comparaison de tableau consiste comparer ladresse de base


des tableaux, mais pas leur valeur. Afin 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 dfinit 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 */

255

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

Loprateur & utilis avant une variable est un oprateur de rfrencement (&i
donne ladresse de i). Loprateur * plac avant une expression (ici *pt) est un oprateur 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 fixe. 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, signifie la fin 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 fin 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 figure 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 */

256

6 Programmation
des systmes multitches

0x23FF45

6.1 Programmation
C, Ada et LabVIEW

'u' 'n' 'e' ' ' 'c' 'h' 'a' 'i' 'n' 'e' 0

ch
0x23FF45
Caractre de fin de chane,
nomm aussi '\0'

0x23FF20

'a' 'b' 'c' 0

ch2
0x23FF20
0x23FF20
ch3

Figure 6.8 Exemple de chanes de caractres en langage C.

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 spcifiques aux chanes de caractres parcourent la ou les chanes jusquau caractre de fin de chane. Ainsi, strcpy copie les caractres un un en incluant
le caractre de fin de chane et termine. De mme, la comparaison de chanes, effectue par strcmp, sarrte au premier caractre de fin de chane rencontr.
M Langage Ada

Dunod La photocopie non autorise est un dlit.

Ada gre de faon fondamentalement diffrente pointeurs et tableaux, afin de permettre un suivi sr du droulement des programmes.
Un type tableau se dfinit 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 :


257

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

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 dfinition est :
type String is array (Positive range <>) of Character;

Les pointeurs sont dfinis 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 rfrencement (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 collector) 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 (figure 6.9), mais na
pas la notion explicite de pointeur. En effet, la notion de pointeur nest pas compatible avec la philosophie flot de donne. Les pointeurs sont cependant accessibles
258

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

pour certains objets graphiques via des rfrences, ou des variables locales de faon
simplifier certains types de programmation.
Indice correspondant la 1re case visible

Valeur non dfinie

Figure 6.9 Cration dune commande de type tableau en langage LabVIEW.

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 flots 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.

Dunod La photocopie non autorise est un dlit.

Noter la diffrence
dpaisseur des traits

Figure 6.10 Manipulation de tableaux en langage LabVIEW.

Lallocation mmoire est ralise de faon transparente, et LabVIEW vrifie pendant


les oprations sur les tableaux quil ny a pas dbordement. La lecture dune case
allant au-del de la fin dun tableau donne la valeur par dfaut du type (0 pour les
types numriques).
Les tableaux multidimensionnels sont crs de faon similaire.

259

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

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
int T[10];
int i,j;

T : array(1..10) of integer;
j:integer;

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);

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;

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;
}

260

Ada

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 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

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 fin de chaque alternative dune structure de choix
en langage C.
Notons aussi quen langage Ada, il est plus lgant de parcourir un tableau en utilisant les attributs de tableau : ainsi, lexpression Trange vaut Tfirst..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");
}

Dunod La photocopie non autorise est un dlit.

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
fin 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));

261

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

-- 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 (figures 6.11 et 6.12), la boucle tant que (figure 6.13), la structure
conditionnelle (figure 6.14) qui ne se distingue de la structure de choix (figure 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.
Indicateurs visibles
sur la face avant

Valeur du registre dcalage


litration -1
Registre dcalage :
valeur litration i-1

Registre dcalage :
valeur litration i

Figure 6.11 Boucle pour en langage LabVIEW.

Notons sur la figure 6.11 la prsence dun registre dcalage, outil trs souvent
utilis dans les boucles. En effet, daprs la philosophie du flot de donnes : un nud
ne peut sexcuter que lorsque tous ses flots de donnes en entre sont prsents, il
ne peut pas y avoir de cycle. Par consquent, il ne serait pas possible de prendre un
fil 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 quafin de faciliter lutilisation de boucles pour sur les tableaux,
LabVIEW fournit un mcanisme dindexation/dsindexation automatique de tableau.
Ainsi, sur la figure 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
262

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

ime valeur de tempratures C

Indexation automatique

Indexation automatique

Figure 6.12 Boucle pour avec indexation automatique en langage LabVIEW.

Dunod La photocopie non autorise est un dlit.

de tempratures lindice de boucle i est le contenu de la ime 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 figure 6.12, un tableau est index automatiquement. Ce tableau, de mme
que tout flot sortant dune structure de contrle, nest cr qu la fin de la boucle.
Tout se passe comme si les valeurs taient accumules lintrieur de la boucle, et
ntaient disponibles qu la fin de celle-ci.

Figure 6.13 Boucle tant que en langage LabVIEW.

Une boucle tant que est caractrise par une condition darrt, prenant un paramtre boolen : sur la figure 6.13, ce paramtre est en bas droite, et sort de la boucle
la fin 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 figure 6.14 que toute structure de contrle est considre comme un
nud dans LabVIEW : si un flot sort dans un cas (ici une chane de caractres), alors
il doit sortir dans tous les cas.
263

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

Les deux cas possibles

Figure 6.14 Structure conditionnelle en langage LabVIEW.

Mme principe que la structure conditionnelle,


avec un type discret autre que boolen en entre

Cas par dfaut (inutile ici)

3 cas possibles

Figure 6.15 Structure de choix en langage LabVIEW.

264

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

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 spcifiant un type de retour void. Ainsi, le prototype dune
fonction daffichage dentier peut tre :
void afficher(int a);
/*
Entre: a entier afficher
Entrane: affiche a
*/

Dunod La photocopie non autorise est un dlit.

tant donn que tous les arguments sont passs par valeur (les valeurs des arguments
sont recopies directement sur la pile au moment de lappel), afin de passer un
paramtre en sortie ou en entre sortie, de sorte le modifier 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 difficile 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

265

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

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 particulier, 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 fin
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
266

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

entre/sortie (IN OUT). Le prototype dune fonction en langage C deux arguments 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

Dunod La photocopie non autorise est un dlit.

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 fichier au moins contient
une procdure seule : cest le programme principal (qui ne sappelle pas ncessairement main).
Voici un exemple de sous-programme et son utilisation dans un programme principal. 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;

267

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

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.
Afin dillustrer ce concept, considrons le vi donn sur la figure 6.15 qui transforme
une temprature donne dans une unit quelconque en degrs Celsius. Il peut tre
excut pendant la phase de dveloppement afin de le tester. Ensuite, il est prt tre
utilis en tant que sous-programme. Pour cela, il suffit de se placer sur sa face avant
et de visualiser les connecteurs sur licne du vi (figure 6.16). L, il ne reste plus qu
identifier le fait que le vi possde un paramtre dentre et un paramtre de sortie
pour le transformer en sous-programme.
Icone pass en mode connecteurs

Identification
des connecteurs

Documentation

Figure 6.16 Sous-programme en langage LabVIEW.

Afin 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).
268

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

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 glisserdposer du fichier ou de licne suffit.
Notons une limitation de LabVIEW : le langage ne permet pas la rcursivit (voir
le calcul du plus grand commun diviseur sur la figure 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.
Dans le cas faux,
les fils sont simplement inverss

Valeur absolue

Division euclidienne

Le flot ne sort
qu la fin de la boucle,
donc lorsque B divise A

Si R0, pgcd(A,B)=pgcd(B,R),
de plus, par construction, BR0

Figure 6.17 Pas de rcursivit en langage LabVIEW.

m Modularit et visibilit

Dunod La photocopie non autorise est un dlit.

M Langage C

La figure 6.18 montre une hirarchie typique lie llaboration dun programme C.
Nous distinguons sur cette figure diffrents types dlments :
le fichier excutable (extension .exe sur une plateforme Microsoft, ou sans
extension spcifique sur des plateformes Unix ou Macintosh) ;
les objets (extension .o ou .obj ) permettent de reprsenter en code intermdiaire trs proche du langage machine, les sous-programmes et les variables
globales ou spcifiques un module ;
les modules, entours sur la figure 6.19, reprsentent un arbre de dpendance
lors de la compilation. Un module dfinit un ensemble de sous-programmes et
de variables globales ou spcifiques au module ;
269

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

Librairie prcompile
libm.a
=
math.o
+

En-tte de module

Corps de module
compilation
pgcd.c
cc-c pgcd.c
En-tte de module
math.h

Fichier
excutable

dition de liens
cc-o pgcd.exe main.o-lstd-lm

pgcd.h

compilation
cc-c main.c
En-tte de module
Corps de module
stdio.h
(programme principal)
string.h

main.c

dpend de
produit

Objet
pgcd.o

pgcd.exe

Objet
main.o

libstd.a
=
stdio.o
+string.o
+mem.o
+

Librairie prcompile

Figure 6.18 Hirarchie lors de llaboration dun programme crit en langage C.

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 dfinissant les variables et constantes de module
ou globales), et un fichier den-ttes de module, donnant la spcification de
linterface du module. Typiquement, cette spcification consiste en la dfinition
de signatures des sous-programmes fournis par le module, ainsi que de constantes
et de variables dclares dans le fichier .c ;
des librairies de modules prcompils permettent de regrouper diffrents objets
en un seul fichier. Les fichiers en-ttes dfinissant les interfaces des modules restent
quant eux sous la forme de fichiers .h .
Un programme est donc gnr partir de la compilation des modules, indpendamment les uns des autres. Sur la figure 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 fichier excutable : il est compos dun sous-ensemble
de lunion de tous les sous-programmes, variables et constantes utilises lors de lexcution de la fonction main. Cest au moment de ldition de lien que la cohrence
est vrifie : tous les symboles utiliss (sous-programmes, variables, constantes) sontils implments ? Pour trouver chaque symbole, lditeur de liens puise les dfinitions
et implmentations requises dans les objets et librairies fournis. Pendant llaboration,
il vrifie quil ny a aucun symbole dfini plusieurs fois.
Bien entendu, ces phases sont gres de faon transparente par la plupart des environnements de dveloppement intgrs, mais il est important de connatre le droule270

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

ment prcis du processus afin de comprendre et dviter les erreurs dues une hirarchie de compilation mal construite.
La compilation dun module seffectue en deux phases : un prprocesseur interprte
un langage macro afin de remplacer toutes les macros par leur valeur. Le fichier ainsi
prprocess , est compil en un objet (figure 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
dfinition est utilis pour les constantes de programme et les macros. Ainsi, sur la
figure 6.19, les constantes MAX_TEMP et MIN_TEMP sont substitues par leur
valeur par le prprocesseur.
temperature.h
typedef structef {
int p,t;
}t_pression_temperature;

temperature.c
#include "temperature.h"
#define MAX_TEMP 90
#define MIN_TEMP 13
Prprocesseur

if (t>MAX_TEMP)

typedef structef {
int p,t;
}t_pression_temperature;

if (t>90)

temperature.o

Compilation

Code objet

Compilation (par exemple, gcc -c temperature.c)

Figure 6.19 Prprocesseur C.

Dunod La photocopie non autorise est un dlit.

Cest aussi une instruction prprocesseur qui permet de faire rfrence des
fichiers den-ttes. Le prprocesseur se contente dinsrer leur contenu au fichier
prprocess. Lors de la compilation du fichier ainsi obtenu, le compilateur ne voit
donc aucune diffrence entre corps de module (le fichier .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 */

271

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

/* 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 fichier temperature.c, la variable temperature_courante est dclare. Lors de la compilation du fichier 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 fichier. 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 */

272

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

/* 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 spcification de module, est
un fichier dextension .ads (pour Ada specification). Un corps de module est implment dans un fichier 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 spcifications de paquetages, les corps de paquetage et les procdures ou fonctions 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 figure 6.20 prsente une hirarchie de programme modulaire en langage Ada.

Spcification
de module

Dunod La photocopie non autorise est un dlit.

pgcd.ads

Corps de module
compilation
pgcd.adb

Objet
pgcd.o

Fichier excutable
compilation

dition de liens

pgcd.ali

pgcd.exe

Objet
Test_pgcd.adb

compilation
Corps de module
(programme principal)

Test_pgcd.o

Modules prcompils
Ada.Integer_Text_io
Ada.Text_io

dpend de
produit

Figure 6.20 Hirarchie lors de llaboration dun programme crit en langage Ada.

273

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

Sur cette figure, nous distinguons un module pgcd (paquetage pgcd) dcompos
en un corps (fichier pgcd.adb) et une spcification (fichier 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 dfinir une unit de


compilation de type spcification de module.
Le code source du corps de paquetage, dfini 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 fichier 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;

274

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

Lemploi des mots cls with et use, placs gnralement en dbut dunit de compilation, permet de faire rfrence aux spcifications de paquetage concernes.
Lemploi de la clause with M donne une unit de compilation la visibilit des
types, variables, sous-programmes, etc. dfinis dans la spcification du module M.
Cependant, lemploi de ces lments doit alors tre prfix par le nom du module.
Ainsi, pour utiliser la fonction F dfinie dans le module M, il faut crire son nom
complet, soit M.F. On peut utiliser la clause use M, qui permet dobtenir une visibilit directe, ce qui permet dappeler la fonction F sans prfixer son nom par M.
Ada dfinit en fait des espaces de noms lis aux modules. Ainsi, toute ambigut
peut tre leve si une unit de compilation utilise plusieurs modules dfinissant
des lments ayant le mme nom.
Notons enfin que dans tous les cas, il est fortement recommand dutiliser un nom
de fichier identique au nom du paquetage ou du sous-programme contenu (i.e. si un
paquetage sappelle temperature, alors les fichiers limplmentant sappellent temperature.ads et temperature.adb).
De nombreux concepts permettant de grer finement la visibilit des types et sousprogrammes 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 fichier (par glisser/dposer du fichier sur le diagramme du vi par exemple).
Gnralement, on organise les vi par types dans des dossiers du systme de fichiers,
en les regroupant par thme.
m Traitement des erreurs

Dunod La photocopie non autorise est un dlit.

M Langage C

La gestion des erreurs en langage C est relativement basique : une partie des fonctions
susceptibles de renvoyer une erreur (accs un fichier, 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 luimme nest pas renvoy par la fonction, celle-ci modifie 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 fichier, etc.)
renvoient un pointeur null (valant 0) lorsquune erreur est survenue. L encore,
la variable errno peut tre consulte afin 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 fichier est ouvert, un traitement non dtaill ici a lieu, puis le fichier
est ferm.
275

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

#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 difficile lire.
Notons enfin que le mcanisme utilisant errno nest pas compatible avec le multitche : en effet, rien nempche une autre tche de modifier 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, dfinissent 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 exception 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
276

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

lui-mme que lexception est propage, alors le programme sarrte (un message
derreur est alors affich).
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 difficile 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 figure 6.21 prsente un exemple de gestion derreur en langage LabVIEW.

Dunod La photocopie non autorise est un dlit.

Descripteur de fichier

Cluster derreur

Figure 6.21 Gestion des erreurs en langage LabVIEW.

Un vi pouvant lever une erreur possde une sortie de type cluster derreur (figure 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
277

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

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 vrifiant ltat de la dernire sortie derreur dune chane
de traitement.

Figure 6.22 Reprsentation dune erreur en langage LabVIEW.

Sur la figure 6.21, le traitement derreur consiste afficher une bote de dialogue
dcrivant celle-ci. Notons que depuis la version 7 de LabVIEW, une erreur non traite
entrane laffichage dune bote de dialogue de description de lerreur (ce mode de
fonctionnement peut tre inhib afin 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 facilement 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.
278

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

Lire ou modifier une adresse dentre/sortie correspond lire ou modifier 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 4e octet est le registre
de configuration de la carte (figure 6.23). Afin de simplifier 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 configures dans un sens.
7

ModeA

Flag
Flag :
ModeA :
DirA :
DirCH :
ModeB :
DirB :
DirCL :

DirA DirCH ModeB DirB DirCL

mode de programmation du registre


(0 : configuration du mode, 1 : configuration bits)
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)
direction des 8 lignes du port A (0 : sortie, 1 : entre)
direction des lignes 4 7 du port C (0 : sortie, 1 : entre)
slection du mode du port B et des lignes 0 3 du port C
(0 : mode simple, 1 : mode synchronis)
direction des 8 lignes du port B (0 : sortie, 1 : entre)
direction des lignes 0 3 du port C (0 : sortie, 1 : entre)

Figure 6.23 Registre de configuration dune carte dacquisition.

Il est gnralement possible de configurer ladresse de base lie aux registres dun
dispositif dentres/sorties : ainsi, par exemple, en fonction de la configuration matrielle, 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 correspondant au port C en 0x212 et le registre de configuration en 0x213.

Dunod La photocopie non autorise est un dlit.

M Langage C

La configuration de la carte peut se faire de deux faons : soit en utilisant directement


un octet cr pour correspondre la configuration dsire, soit en dfinissant une
fonction de configuration, rutilisable pour cette carte dacquisition.
Dans le premier cas, si les ports doivent tre configurs 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 configuration : en binaire b00001010, soit en hexadcimal 0x0A. Linitialisation 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 configuration.
La seconde solution, plus lgante, consiste crer un pilote de priphrique (driver)
simplifi. Pour cela, C permet de dfinir assez finement un type facilitant les oprations bit bit sur le registre de configuration :
279

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

#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 dfinissant 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 */

280

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

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 gnralement ncessaire dutiliser une fonction spcifique, comme outByte dans lexemple.
Sur un microcontrleur, linstruction outByte(adresse,valeur) serait gnralement remplace directement par (*adresse)=valeur.
Afin 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 */
}

Dunod La photocopie non autorise est un dlit.

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
(figures 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
simplifier, les erreurs (tentative dcriture sur un port configur en lecture, etc.) ne
sont pas gres.
281

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

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 finement les reprsentations binaires associes
un type. Par exemple, la dfinition 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 reprsentation. Ainsi, le type suivant pourrait permettre daccder champ par champ loctet
de contrle de la carte dacquisition PCI-DIO-24/PNP (figure 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 flexible que celle
du langage C, nen demeure pas moins plus lourde.
Afin de reprsenter un port configur comme cela est effectu en langage C dans la
section prcdente, le type enregistrement suivant peut tre dfini :
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)

282

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

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 configuration 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;

Dunod La photocopie non autorise est un dlit.

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

283

6 Programmation
des systmes multitches

6.1 Programmation
C, Ada et LabVIEW

-- 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.
284

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

6.2 Programmation multitche en langage C


Comme cela a t notifi 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 programmation 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) dfinie 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 spcifier lutilisation 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 :

Dunod La photocopie non autorise est un dlit.

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 lidentificateur 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 configuration 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 filles 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.
285

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

Enfin, 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 fille directe du programme principal. Par consquent, au lancement de la tche, son masque de signaux est le mme que celui du
programme principal. Il pourra ensuite tre modifi.
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 fonction. 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
Tache
Tache
Tache
Tache
Tache
Tache
Tache
Tache

1
1
2
1
2
1
2
1
2

:
:
:
:
:
:
:
:
:

iteration
iteration
iteration
iteration
iteration
iteration
iteration
iteration
iteration

0
1
0
2
1
3
2
4
3

Aprs la terminaison de la tche 1, la tche 2 obtient la main avant le programme


principal et a le temps deffectuer une 4e itration avant la terminaison du programme
principal.
Nous pouvons noter que toutes les fonctions manipulant les tches commencent par
pthread_.
286

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

Si lon souhaite quune tche fonctionne de faon spcifique, il faut lui donner des
attributs spcifiques. 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 modifier. Il est possible de modifier (respectivement interroger) la plupart des attributs dune tche
pendant son excution avec des fonctions dont le prfixe est pthread_set_ (respectivement 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 malheureusement 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 afin dy dceler des erreurs (notamment fonctionnalit non implmente ).

Dunod La photocopie non autorise est un dlit.

M Ordonnancement et priorits

Les attributs de tches permettent de leur affecter une priorit ds leur lancement.
Il est aussi possible de modifier 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() {

287

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

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 figure 6.24
est donne ci-aprs.

T1

MDD1
LIRE
CRIRE

T2

Figure 6.24 Module de donnes DARTS.

#include <pthread.h>
/* Type utilis pour le module de donnes */
typedef struct {
float Temperature;
float Pression;
} t_Temperature_Pression;

288

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

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. */
}
}

Dunod La photocopie non autorise est un dlit.

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 lancement 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, afin de pouvoir effectuer une tude dordonnanabilit, il convient de dfinir des priorits pour les tches, de dfinir une prio289

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

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.
290

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

M Botes aux lettres

POSIX ne dfinit malheureusement aucun outil de communication par message


spcifique aux tches. Lamendement 1003.1b, orient processus, dfinit 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 suffisant
pour implmenter tous les lments de communication par message de la mthode
DARTS. Par consquent, afin dimplmenter une communication par messages au
niveau tches uniquement, nous dfinissons 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 dfinir 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 spcification de ce type abstrait est :

Dunod La photocopie non autorise est un dlit.

/* 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

291

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

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);
}

292

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

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 afin de
rveiller les tches en attente, qui peuvent alors vrifier 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.

T1

T2
B1

Figure 6.25 Communication par bote aux lettres de taille 1 avec crasement.

Limplmentation partielle du schma DARTS donn sur la figure 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;

Dunod La photocopie non autorise est un dlit.

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() {

293

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

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 (figure 6.26), la dmarche adopte est similaire 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). Limplmentation est de type producteur/consommateur.

T1

T2
B1

Figure 6.26 Communication par bote aux lettres de taille 1 sans crasement.

/* 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);

294

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

/* 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;
}

Dunod La photocopie non autorise est un dlit.

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 */

295

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

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 identique 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 afin 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 (figure 6.27). La file 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 file 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 files de messages.

T2

T1
B1

T4

T3
B2

Figure 6.27 Communication par bote aux lettres de taille n.

M Synchronisation

Gnralement, on implmente la synchronisation (figure 6.28) laide de smaphores


compte ( 5.2.2, p. 201). Cependant, nous avons vu au chapitre 6 que les amendements 1003.1c et 1003.1j ne proposent pas cet outil de synchronisation. Les
smaphores compte sont dfinis 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.
296

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

T1

T2
S1

Figure 6.28 Synchronisation.

#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);
}

Dunod La photocopie non autorise est un dlit.

M Tches priodiques

Il nest pas trivial de rendre une tche priodique en POSIX. Certains systmes
proposent des primitives spcifiques non POSIX (suffixe _np au nom de la fonction)
permettant de grer la priodicit stricte des tches. Ainsi, RTLinux fournit une fonction pthread_make_periodic_np permettant de rendre une tche priodique.
Cependant, la non portabilit de cette fonction est gnante. Il existe aussi des solutions 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
297

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

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 figure 6.29 est donne ci-aprs.
HTR (2 ms)

HTR (1,5 ms)

Priodique 1

Priodique 2

Figure 6.29 Deux tches priodiques.

#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 */
}
}

298

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

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 figure 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 */
}

Dunod La photocopie non autorise est un dlit.

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 */
}

299

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

La seconde solution propose prsente lavantage de ncessiter moins doutils (smaphore 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 dfinit pas dinterface normalise
pour la gestion des interruptions. Cela signifie que la programmation dune routine
de traitement dinterruption est lie au systme sous-jacent. Si le traitement de linterruption 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 linterruption traite. Son action consiste signaler par synchronisation ( 6.2.1, p. 324)
la tche de traitement loccurrence de linterruption.
IT
Tche
matrielle

Figure 6.30 Tche matrielle.

Ainsi, le mcanisme de rveil de la tche matrielle prsente sur la figure 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 */
}

300

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

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 figure 3.27. Afin den faciliter
la lecture, le systme de commande est prsent plat, sans utilisation de modules
spcifiques, 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) permettant lutilisation du protocole priorit plafond sont omis.
#include
#include
#include
#include
*/

<pthread.h>
<semaphore.h>
"BaLs.h" /* Module de boites aux lettres */
"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 */

Dunod La photocopie non autorise est un dlit.

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) {

301

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

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
*/
}
}

302

Dunod La photocopie non autorise est un dlit.

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

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:

303

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

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 dfini pour le contrle


de la mine.

304

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

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, afin 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 lidentificateur 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.
Enfin, le paramtre options permet de spcifier diffrentes particularits au systme, comme lutilisation ou non des calculs virgule flottante afin 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 :

Dunod La photocopie non autorise est un dlit.

#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 */

305

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

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 spcifier le temps.
Dautre part, lune des particularits des excutifs embarqus est que le programmeur
ne dfinit 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 figure 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. */
}
}

306

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

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 lancement 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 dfinit 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 figure 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;

Dunod La photocopie non autorise est un dlit.

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 */

307

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

/* 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 figure 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 programme, des smaphores dexclusion mutuelle qu la cration (utilisation de semCCreate pour les premiers, et de semMCreate pour les seconds).

308

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

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 modifi laide de sysClkRateSet. Un intervalle de temps est donc forcment
multiple de 1/sysClkRateGet(). On pourrait donc tre tent daugmenter la frquence des ticks afin 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 microsecondes (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 figure 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 */
}
}

Dunod La photocopie non autorise est un dlit.

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 spcifique aux interruptions et ntant pas autorise appeler des primitives bloquantes
ou suspensives, et de DSR, tche classique de traitement, dclenche par synchronisation par lISR ( 5.2.3, p. 206). Ainsi, le mcanisme de rveil de la tche mat309

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

rielle prsente sur la figure 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 figure 3.27.
Afin den faciliter la lecture, le systme de commande est prsent plat, sans utilisation de modules spcifiques.
#include
#include
#include
#include
*/

<taskLib.h>
<msgQLib.h>
<semLib.h>
"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 */

310

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

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 */

Dunod La photocopie non autorise est un dlit.

/* 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;

311

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

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;

312

6 Programmation
des systmes multitches

6.2 Programmation multitche


en langage C

}
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. */

Dunod La photocopie non autorise est un dlit.

/* 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);

313

6 Programmation
des systmes multitches

6.3 Programmation multitche


en langage Ada

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 gnralement une fonction de destruction des tches et des lments de communication et de
synchronisation. Par consquent, afin 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
dfinir 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 automatiquement 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.
314

6 Programmation
des systmes multitches

6.3 Programmation multitche


en langage Ada

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 final.
La dclaration dun type tche seffectue en deux parties : une spcification de type
(task type), et un corps de type (task body). Ainsi, le code suivant dfinit 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

Dunod La photocopie non autorise est un dlit.

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 programme. Une facilit dcriture consiste alors instancier des tches de type anonyme,
ce qui consiste dfinir un type sans le nommer pour linstancier. Ainsi, le code ciaprs dfinit un type de tche et linstancie : noter la prsence du mot cl type
dans la spcification.
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

315

6 Programmation
des systmes multitches

6.3 Programmation multitche


en langage Ada

Le code ci-aprs est quivalent, et dfinit une tche de type anonyme : noter labsence
du mot cl type dans la spcification.
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
spcification du type. On peut passer des paramtres une tche lors de son instanciation 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

316

6 Programmation
des systmes multitches

6.3 Programmation multitche


en langage Ada

null; -- Le programme principal ne fait rien


end; -- La fin nest atteinte qu la terminaison des tches lances

Le paquetage system dfinit 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) dfinies comme un intervalle dAny_Priority, 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 priorit 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 lintervalle 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 dinterruption ( 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.

Dunod La photocopie non autorise est un dlit.

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 difficult 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 synchronisation 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 (protected type) et il est possible de dfinir des objets protgs anonymes (protected).
La spcification 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 ;
317

6 Programmation
des systmes multitches

6.3 Programmation multitche


en langage Ada

les fonctions (function) sont des primitives en lecture seule sur lobjet protg :
elles ne peuvent pas modifier 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 daffiner les accs aux objets protgs en leur donnant
des primitives de type lecteur/crivain.
Par exemple, le code ci-aprs dfinit 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 protg peut tre muni dune priorit : sa priorit plafond, cest--dire la priorit maximale 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 dfini par limplmentation. Cependant,


la norme Ada prvoit la possibilit de le modifier. Le type dordonnancement choisi
pour une application est le mme pour toute lapplication. La faon de grer les files
318

6 Programmation
des systmes multitches

6.3 Programmation multitche


en langage Ada

dattentes au niveau des objets protgs est elle aussi configurable. Typiquement, une
application est configure 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 file 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_Priorities) ;
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 files de tches en attente daccs un objet protg sont gres dans des files
FIFO par niveaux de priorits grce la directive pragma Queuing_Policy
(Priority_Queuing).
Par consquent, toute application multitche Ada devrait utiliser ces trois pragmas.

Dunod La photocopie non autorise est un dlit.

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 pouvoir valider temporellement son application.
Pour le langage Ada, une norme de dveloppement a t propose, sous le nom de
profil Ravenscar, normalis par lISO en 1999. La norme prconise les principes
suivants :
pas de dclaration de tches dynamiques : tout est dclar au dbut de lapplication ;
les tches ne se terminent pas ou toutes ensemble ;
toutes les tches sont au mme niveau (pas de hirarchie mre/fille 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, afin
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 procdures ou bien des fonctions ;
un et un seul mcanisme de dclenchement pour une tche (attente de synchronisation, de message ou dinterruption, ou bien attente priodique).
6.3.2 Implmentation des lments DARTS

Notons quafin 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 spcifications
319

6 Programmation
des systmes multitches

6.3 Programmation multitche


en langage Ada

des tches et objets protgs sont places dans les spcifications 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 lencapsulation 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 figure 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

320

6 Programmation
des systmes multitches

6.3 Programmation multitche


en langage Ada

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, linitialisation 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 initialisation des capteurs avant de les lire. Il est donc ncessaire de permettre linitialisation 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 modifi comme ci-aprs (noter le changement de la primitive
Lire en procdure garde) :

Dunod La photocopie non autorise est un dlit.

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;

321

6 Programmation
des systmes multitches

6.3 Programmation multitche


en langage Ada

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

Afin 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 limplmentation 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 suffit 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 figure 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

322

6 Programmation
des systmes multitches

6.3 Programmation multitche


en langage Ada

Dunod La photocopie non autorise est un dlit.

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 potentiellement bloquant. La diffrence au niveau implmentation rside uniquement dans
le fait que lenvoi est une procdure garde (entry). Ainsi, par rapport limpl323

6 Programmation
des systmes multitches

6.3 Programmation multitche


en langage Ada

mentation de la bote aux lettres crasement, seule limplmentation de la primitive


recevoir change. Le code modifi 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 (figure 6.27). La file 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 file 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 files de messages.
m Synchronisation

Limplmentation de la synchronisation est identique limplmentation du smaphore 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

324

6 Programmation
des systmes multitches

6.3 Programmation multitche


en langage Ada

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;

Dunod La photocopie non autorise est un dlit.

Lutilisation dune synchronisation sur limplmentation de la figure 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. Afin dviter
325

6 Programmation
des systmes multitches

6.3 Programmation multitche


en langage Ada

une drive des horloges ( 5.3.1, p. 216), il convient dutiliser lattente de date.
Ainsi, limplmentation des tches de la figure 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 dinterruption.
Ainsi, la tche matrielle prsente sur la figure 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

326

6 Programmation
des systmes multitches

6.3 Programmation multitche


en langage Ada

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;

Dunod La photocopie non autorise est un dlit.

-- 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 figure 3.27 est trait en langage Ada.
327

6 Programmation
des systmes multitches

6.3 Programmation multitche


en langage Ada

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 manipules. Il est donc instanci sur les nombres flottants, 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 communication 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

328

6 Programmation
des systmes multitches

6.3 Programmation multitche


en langage Ada

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;

Dunod La photocopie non autorise est un dlit.

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

329

6 Programmation
des systmes multitches

6.3 Programmation multitche


en langage Ada

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

330

6 Programmation
des systmes multitches

6.4 Programmation multitche


en langage LabVIEW

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

Dunod La photocopie non autorise est un dlit.

La nature flots de donnes du langage LabVIEW induit naturellement du paralllisme, ainsi, deux boucles non relies par un fil 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 figure 6.31 montre deux boucles sans fin LabVIEW
sexcutant en parallle.

Figure 6.31 Deux tches sans fin en langage LabVIEW.

La difficult vient du fait que si lon dsire faire communiquer les tches, on ne peut
pas utiliser de flot de donnes (figure 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.
331

6 Programmation
des systmes multitches

6.4 Programmation multitche


en langage LabVIEW

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.

Afin de rgler ce type de problme, LabVIEW propose diffrents outils de communication 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 figure 6.33 montre comment on peut utiliser une bote aux lettres
pour raliser le passage dun entier entre deux tches :

Figure 6.33 Passage de donnes entre deux tches en langage LabVIEW.

Afin daugmenter la lisibilit du programme, et de profiter du support multitche


du systme dexploitation sous-jacent ( 6.4.2), on prfrera encapsuler chaque tche
dans un sous-vi (figure 6.34). Chaque vi contenant une tche peut tre configur
afin de modifier sa priorit (il existe 5 niveaux de priorit) et son systme dexcution.
Un 6e 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.
332

6 Programmation
des systmes multitches

6.4 Programmation multitche


en langage LabVIEW

Les tches sont encapsules

Figure 6.34 Encapsulation de tches en langage LabVIEW.

Dunod La photocopie non autorise est un dlit.

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.).
Afin 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 file 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 fin 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 (affichage, 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 configur (avec le vi threadconfig.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 dexploitation 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 dexcution, 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
333

6 Programmation
des systmes multitches

6.4 Programmation multitche


en langage LabVIEW

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 dfinie au niveau de chaque vi (par dfaut, cest la
priorit du vi appelant), lorsquun vi trs prioritaire appelle un sous-vi moins prioritaire, 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 dexcution standard. Ceci peut tre configur 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 standard.
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).
Afin 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 figure 6.35, soit t1 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 fin de tous les vi et donc la fin 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.

334

6 Programmation
des systmes multitches

6.4 Programmation multitche


en langage LabVIEW

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. Afin 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 (figure 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 excution 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 afin 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 figure 6.36 montre un module de donnes contenant un enregistrement
(cluster) pouvant tre lu et modifi par des tches concurrentes tout en respectant
lexclusion mutuelle. Gnralement, trois primitives de base sont dfinies : initialiser,
lire et crire. La primitive est choisie laide dun type numr pass en paramtre
au vi. La figure 6.37 montre lutilisation de ce module de donnes pour la lecture
par un vi priodique.
Notons quil est assez courant de diversifier les primitives : ainsi, si par exemple on
souhaite pouvoir modifier uniquement la temprature ou uniquement la pression,
il suffit 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.

Dunod La photocopie non autorise est un dlit.

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).

335

6 Programmation
des systmes multitches

6.4 Programmation multitche


en langage LabVIEW

Figure 6.36 Module de donnes en langage LabVIEW.

Figure 6.37 Utilisation dun module de donnes en langage LabVIEW.

336

6 Programmation
des systmes multitches

6.4 Programmation multitche


en langage LabVIEW

M Botes aux lettres sans crasement

Un exemple de bote aux lettres non borne sans crasement a t prsent sur les
figures 6.32 et 6.33. La figure 6.38 montre un exemple de bote aux lettres de taille 1
sans crasement. Par rapport la figure 6.34, sur laquelle la bote tait non borne,
seul un paramtre change la cration de la bote aux lettres.

Figure 6.38 Bote aux lettres de taille 1 sans crasement en langage LabVIEW.

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

Dunod La photocopie non autorise est un dlit.

LabVIEW propose loutil smaphore compte, ce qui devrait rendre triviale limplmentation des synchronisations. Ctait le cas avant la version 7 de LabVIEW Ainsi,
la figure 6.39 propose un exemple de synchronisation fonctionnant sur LabVIEW

Figure 6.39 Synchronisation en langage LabVIEW en version 5 et 6.

337

6 Programmation
des systmes multitches

6.4 Programmation multitche


en langage LabVIEW

5 et 6. Afin de simplifier sa prsentation, les tches ne sont pas encapsules dans des
sous-vis.
Malheureusement, LabVIEW 7 a lgrement modifi la smantique des smaphores
pour nen faire que des smaphores dexclusion mutuelle. Par consquent, la synchronisation pourra tre implmente en LabVIEW 7 par des botes aux lettres non
bornes avec des messages dun octet (par exemple boolens) nayant de signification
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 figure 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 dexpression 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 figure 6.36, except quil contient une donne interne de
type flottant.

Figure 6.40 Implmentation de la tche Acqurir Capteur Eau


en langage LabVIEW.

338

6 Programmation
des systmes multitches

6.4 Programmation multitche


en langage LabVIEW

Figure 6.41 Implmentation de la tche Acqurir Niveau Mthane


en langage LabVIEW.

Dunod La photocopie non autorise est un dlit.

Figure 6.42 Implmentation de la tche Commander Alarme


en langage LabVIEW.

Figure 6.43 Implmentation de la tche Commander Pompe


en langage LabVIEW.

339

6 Programmation
des systmes multitches

6.4 Programmation multitche


en langage LabVIEW

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.

340

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 systme 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.

Dunod La photocopie non autorise est un dlit.

7.1 Cahier des charges


Un changeur de chaleur (figure 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 flux 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 flux 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 flux 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 afficher 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
341

7 Traitement complet
dune application industrielle

Eau froide
industrielle

Thermocouple
Tef1

7.2 Spcification

Flux deau
chauffe par le procd

Flux deau froide


industrielle

Thermocouple
Tef2
Dbitmtre
Dbt_ef

lectrovanne
rglable
deau froide EVef

vacuation
eau froide
Zone dchange thermique

Dbimtre
Dbt_ed

Courbes
dbits et
tempratu
res
Alarme
Procd
refroidir

Console oprateur

Thermocouple
T ed1

Pompe
Thermocouple
Ted2
Bouton oprateur

Figure 7.1 changeur de chaleur.

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 afin, si possible, de prserver lintgrit du procd refroidi.
Notons quil nest pas possible de distinguer si larrt du flux deau industrielle est
d une coupure deau ou une fuite, et quil est impossible de distinguer si larrt
du flux 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 systme de contrle-commande. La premire phase consiste donc spcifier, 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. Enfin,
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.
342

7 Traitement complet
dune application industrielle

7.2 Spcification

Dans le second V, lors de la spcification adapte, nous verrons quil est ncessaire
de prendre en compte les spcificits matrielles (relais lectriques, ncessit dalimenter un dbitmtre avant de lutiliser).
Dans la spcification, nous considrons quil est possible de lire directement les
dbits en litre/heure, quil est possible de piloter directement une lectrovanne, etc.
La figure 7.2 reprsente le diagramme de contexte obtenu.
Console
Thermocouples

Mise
en route
Affichage

Tempratures

Pompe

Dbt_ef
Dbit ef
Dbit ed

Rguler
changeur
0

Cmd pompe
Cmd vanne

EVef

Dbt_ed
Bouton

Bouton poussoir

Alarme

Sirne

Dunod La photocopie non autorise est un dlit.

Figure 7.2 Diagramme de contexte


du systme de contrle de lchangeur de chaleur.

Nous pouvons alors driver le diagramme prliminaire (figure 7.3). Notons que les
alarmes ne sont pas dissocies (Acqurir T, Rguler ef , et Vrifier 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 processus 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 flot de donnes : partir
de lvnement Enable, le processus traite chaque donne Commande dbit reue.
Le processus 8 est un processus cyclique daffichage. Le rle dAfficher alarme est de
modifier ltat de lalarme, qui ne sera alors teinte qu la terminaison du systme.
Enfin, lvnement E/D commandant le processus Commander Pompe a une smantique de type Allumer/teindre.
Le rle du processus de contrle est donn sous la forme dun diagramme tat/
transition sur la figure 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
afin dafficher les courbes de tempratures et dbits, et la pompe est mise en route
par le processus 6.

343

7 Traitement complet
dune application industrielle

7.2 Spcification

Consigne T

Cmd vanne
Commander
vanne
4

Commande dbit
Dbit ef

Dbit
ef lu

Rguler
ef
1

Bouton
Lire
bouton

Dbit
ed lu

E/D

E/D
ACK

Ala

Dbits lus*
rm
e
Dbit ed lu
Vrifier
dbit ed
3

T lues*

E/D
Contrler
changeur
9

E/D

Commander
pompe
6

Cmd
pompe

Alarme

Afficher
alarme
7

Dbit ed

Alarme

E/D

Alarme

E/D
Acqurir
T
2

Afficher
8
Affichage
T lues*

Tempratures

Dbits lus*

Figure 7.3 Diagramme prliminaire


du systme de contrle de lchangeur de chaleur.

Mise en route
<E> 1,2,3,4,6,8
Nominal
Alarme
<D> 1,2,3,8
<T> 5,7
Attente
oprateur
ACK
<D> 4,6
Arrt

Figure 7.4 Diagramme tat/transition du processus de contrle.

344

7 Traitement complet
dune application industrielle

7.2 Spcification

En cas dalarme, les processus dacquisition et daffichage sont arrts, lalarme est
dclenche, et on attend la prise en compte de lalarme par loprateur (dclenchement 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 complexes en DFD), nous pouvons tudier le dictionnaire de donnes du systme et la
spcification 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.

Dunod La photocopie non autorise est un dlit.

Donnes et vnements externes


Tempratures

Tef1 + Tef2 + Ted1 + Ted2

Tef1

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

Tef2

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

Ted1

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

Ted2

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]

345

7 Traitement complet
dune application industrielle

7.2 Spcification

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

Le tableau 7.2 donne la spcification des processus primitifs de la figure 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 suffisamment simples pour tre
primitifs. Le diagramme de dcomposition du processus Rguler ef est donn sur la
figure 7.5. Le processus de contrle 1.1 nest quun relais du processus de contrle 9.
346

7 Traitement complet
dune application industrielle

7.2 Spcification

Dunod La photocopie non autorise est un dlit.

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

347

7 Traitement complet
dune application industrielle

7.2 Spcification

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

348

7 Traitement complet
dune application industrielle

7.2 Spcification

Le tableau 7.3 reprsente la spcification des nouveaux processus crs (la spcification du processus 1 Rguler ef peut alors tre retire de la spcification des processus primitifs). Notons que la prise en compte de lvnement Disable nest place
que dans le processus fonctionnel Calculer consigne, ceci afin dviter un conflit
dmission de commande de dbit vers Commander vanne.
Consigne T

T lues*

E
<E>1.2,1.3

Commande dbit
Calculer
consigne
1.3
Dbits lus

Alarme

Alarme
Alarme

Nominal
E/D

Dbit ef lu
E/D
Dbit ef

Acqurir
ef
1.2

Alarme

D
<D>1.2, 1.3
Contrler
rgulation
1.1

E/D

Panne

Alarme

Figure 7.5 DFD de Rguler ef et diagramme tat/transition du contrle.

Tableau 7.3 Spcification des processus primitifs du DFD de Rguler ef .

Dunod La photocopie non autorise est un dlit.

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

349

7 Traitement complet
dune application industrielle

7.3 Conception

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
Il est maintenant possible de passer la conception DARTS du systme. Il est toujours intressant de regrouper les processus fonctionnels en un minimum de tches :
la validation temporelle du systme est simplifie, 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 efficace (diminution du nombre de
premptions, des communications, de la taille de la file des processus ordonnancer,
etc.).
Initialement, chaque processus est vu comme une tche, les flots de donnes et dvnements 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), enfin, les zones de stockage partages par plusieurs processus sont gnralement implmentes par des modules de donnes. La figure 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 processus 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
fine quelle se base sur des valeurs de dbit juste acquises (le dbit peut en effet varier
relativement vite, contrairement aux tempratures). Le fonctionnement du processus 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 finalement intgrs dans une mme tche.
350

7 Traitement complet
dune application industrielle

7.3 Conception

Commande vanne

Commander
vanne

HTR (500 ms)


Dbit ef
Dbit ed
Bouton

Rguler
dbit

Alarmer
Activer
alarme

Panne

Tempratures

Lire

Lire

crire

crire

Cmd vanne

Commande pompe

Alarme

Commander
pompe

Cmd pompe

Dbits
crire
Lire

HTR (1 000 ms)


Tempratures

Acqurir
tempratures

HTR (1 000 ms)


Afficher

Affichage

Dunod La photocopie non autorise est un dlit.

Figure 7.6 Diagramme DARTS de lchangeur.

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 consquent, nous donnons un schma DARTS simplifi sur la figure 7.7.
Notons quil est possible de passer dune communication synchrone (flot de donnes
ou vnement) SA-RT une communication asynchrone DARTS, ceci afin de
garantir pour chaque tche DARTS un seul vnement dclencheur (conformit
au profil 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.
Afin de pouvoir tester le systme sans mettre en pril le procd, et de tester sa raction 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 figure 7.8.
351

7 Traitement complet
dune application industrielle

7.3 Conception

HTR (500 ms)


Cmd pompe

Dbit ef
Dbit ed
Bouton

Rguler
dbit
Alarme

Panne
Lire
crire

Tempratures

Commande vanne

Lire

Commander
Vanne

Cmd vanne

Dbits

crire

crire
Lire

HTR (1 000 ms)


Tempratures

Acqurir
tempratures

HTR (1 000 ms)


Afficher

Affichage

Figure 7.7 Diagramme DARTS simplifi de lchangeur.

Il reste alors identifier les lments DARTS aux lments dj dfinis dans SA-RT
et dfinir les nouveaux lments. Afin de ne pas noyer les informations importantes, les lments DARTS portant le mme nom que les lments SA-RT correspondants ne sont pas redfinis dans le tableau 7.4.

352

crire

crire

Lire

ln

Tempratures

Simulateur

HTR (1 000 ms)

Cmd pompe

Afficher

Affichage
simulateur

Lire

crire

Dbits

Lire

Commande vanne

out
crire

Affichage

Commander
vanne

Figure 7.8 Diagramme DARTS de lchangeur intgrant un simulateur.

Simulateur
de pannes

HTR (500 ms)

Acqurir
tempratures

crire

Lire

HTR (1 000 ms)

Alarme

Tempratures

Rguler
dbit

Lire

Panne

Dbit ef
Dbit ed
Bouton

HTR (500 ms)

Dunod La photocopie non autorise est un dlit.

7 Traitement complet
dune application industrielle
7.3 Conception

353

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

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


La premire implmentation dun systme de contrle-commande se base gnralement 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 programmation facilitant la simulation (LabVIEW, Matlab/Simulink, etc.). Lune des techniques 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 dfini entre le client (le systme de contrle) et le serveur
(le simulateur) est en gnral relativement simple : aprs ltablissement dune
354

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

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 afin de ne pas avoir de problmes
lis la reprsentation binaire des donnes (ordre des octets big-endian ou littleendian, 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 flottant donn sous forme de chane de caractres. Le simulateur 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

Dunod La photocopie non autorise est un dlit.

La figure 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 dfinies la conception. Ce qui est intressant est que deux paquetages ont une spcification 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_Tempratures en C, Commander_Vanne en litres/heure, etc.). Ainsi, le passage de la simulation au contrle rel sera simplifi, 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 diffrents 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

355

356
Instanciation des lments de communication gnriques

OU

OU

package body Simulateur is


-- types et constantes spcifiques
-- au simulateur
-- objet protg grant laccs au
-- simulateur
-- implmentation des primitives
-- daccs au simulateur
end;

package body Procd is


-- implmentation
end;

with Types_Communs;
package Procd is
procedure Initialiser;
-- initialise le simulateur
-- primitives daccs au procd
-- et types associs
-- (abstraction de lutilisation des E/S)
end;

Figure 7.9 Architecture logicielle typique dun programme de contrle-commande simple en Ada.

with Contrle;
with Simulateur;use Simulateur;
OU
with Procede;use Procede;
procedure Main is
begin
Initialiser;
end;

package body Controle is


-- corps des tches
end;

package Controle is
-- instanciation des lments de
-- communication
-- dclaration des tches
end;

with types_Communs;
package Simulateur is
procedure Initialiser;
-- initialise le simulateur
-- mmes types et primitives
-- que dans procd

with Communication;
with
Communication;
package
CommBoolis new
with
Communication;
package
CommBoolis new
package CommBool is new Communications(element=>boolean);

package body Communications is


-- implmentation de diffrents types
-- de BaLs, MDD, synchros
end;

generic
type element is private;
package Communications is
-- dfinition de diffrents types
-- de BaLs, MDD, synchros
end;

package Types_Communs is
-- types et constantes utiliss par les tches
end;

7 Traitement complet
dune application industrielle
7.4 Implmentation sur simulateur

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

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;

Dunod La photocopie non autorise est un dlit.

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;

357

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

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 crasement. Les botes aux lettres de taille n avec crasement sont assez proche de ce qui
est qualifi de RT FIFO (file 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 file est pleine, mais dans ce cas
le plus ancien message est cras. Le paquetage gnrique de gestion de liste circulaire est donn en annexe D : il sagit tout simplement dun tableau, dans lequel
un lment enfil crase le plus ancien lment si la file est pleine.
358

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

Rappelons enfin 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 priorit 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 spcifiques
sont dfinis 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 :

Dunod La photocopie non autorise est un dlit.

-- 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

359

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

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 dfini dans le chapitre 6. Trois tches sont priodiques, 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

360

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

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;

Dunod La photocopie non autorise est un dlit.

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

361

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

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;

362

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

m Le module de communication avec le simulateur

Dunod La photocopie non autorise est un dlit.

Voyons maintenant comment le programme Ada communique par TCP avec le


simulateur. Pour cet exemple, le paquetage Gnat.Sockets est utilis : cest un paquetage
spcifique fourni avec le compilateur gratuit GNAT. Il implmente les communications 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 communication entre deux programmes crits dans un langage diffrent : Gnat.Sockets
utilise un protocole spcifique, ainsi, lors de lenvoi dune chane de caractre (procdure 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 enfin les caractres de s. La fonction StringInput attend le mme format. Ainsi, la bibliothque Ada.Sockets ajoute
une fine 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 daccder au simulateur. Il est donc ncessaire de protger les accs au simulateur afin de
garantir leur exclusion mutuelle. Cest le rle de lobjet protg Simulateur, qui est le
seul accder rellement au simulateur. Cependant, afin 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). Enfin, 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

363

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

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

364

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

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;

Dunod La photocopie non autorise est un dlit.

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;

365

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

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;

366

Dunod La photocopie non autorise est un dlit.

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

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;

367

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

m Le programme principal

Il ne reste plus alors qu crire le programme principal : celui-ci dfinit les trois
pragmas usuels permettant de dfinir un ordonnancement priorits fixes 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 dfinies 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 figure 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 simplifi
puisque seules quelques directives #include devront tre modifies.
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
afin 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 initialement, 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
368

/* simulateur.c */
/* types et constantes spcifiques
au simulateur, smaphore
protgeant le simulateur,
implmentation des primitives
daccs au simulateur */

/* procede.c */
/* Implmentation des primitives
daccs au procd */

/* procede.h */
#ifndef _PROCEDE_H_
#define _PROCEDE_H_
void Initialiser( );
/* primitives daccs au procd
et types associs
(abstraction de lutilisation des E/S) */
#endif

Figure 7.10 Architecture logicielle typique dune application de contrle-commande simple en C.

/* programme principal */
void main() {
Initialiser( );
Lancer( );
}

/* controle.c */
/* dclaration des fonctions tches
dclaration des lments de communication */

OU

/* simulateur.h */
#ifndef _SIMULATEUR_H_
#define _SIMULATEUR_H_
void Initialiser( );
/* mmes types et primitives
que dans procd */
#endif

#ifndef _TYPES_COMMUNS_
#define _TYPES_COMMUNS_
/* types et constantes utiliss par les tches */
#endif

/* controle.h */
#ifndef _CONTROLE_H_
#define _CONTROLE_H_
void Lancer ();
/* fonction dinstanciation des lments de
communication, cration des tches */
#endif

/* BaLs.c */
/* implmentation de diffrents types
de BaLs */

/* BaLs.h */
#ifndef _BALS_H_
#define _BALS_H_
/* dfinition de diffrents types
de BaLs */
#endif

Dunod La photocopie non autorise est un dlit.

7 Traitement complet
dune application industrielle
7.4 Implmentation sur simulateur

369

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

schma choisi. Cela revient un problme de type producteur/consommateur lorsque les botes aux lettres sont sans crasement, et un problme de type consommateur 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 dfinitions 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 figure 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;

370

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

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;

Dunod La photocopie non autorise est un dlit.

/* 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;

371

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

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);

372

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

/* 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

Dunod La photocopie non autorise est un dlit.

*/
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 */

373

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

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 simulateur. 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 premier 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 daccder au simulateur. Il est donc ncessaire de protger les accs au simulateur afin 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;

374

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

/* 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
#include
#include
#include

<pthread.h>
<sys/socket.h>
<arpa/inet.h>
"simulateur.h"

Dunod La photocopie non autorise est un dlit.

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 */

375

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

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 */

376

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

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 artificielle de caractre a t ajoute
afin 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 comportement 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;
}

Dunod La photocopie non autorise est un dlit.

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 figure 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 Tempratures 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 figure 7.12 prsente la dfinition du type Tempratures.
377

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

Programme principal

Commander
Vanne
Acqurir
temprature

Rguler
dbits

Afficher
MDD
Panne

Vrifier
tempratures

Vrifier
dbits

MDD
Dbits
MDD
Tempratures

Communication
avec simulateur

Adapter une chane au protocole

laborer
consigne vanne

Lecture des tempratures


provenant du simulateur

Lecture dune chane


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.

378

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

m Outils de communication

Dunod La photocopie non autorise est un dlit.

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 identifiant 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 dlments transports par la bote aux lettres est donn la cration. Ainsi, sur la
figure 7.13, la cration de la bote BaL Commande Vanne se voit fournir une constante relle (double prcision). Lidentifiant 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 modifier un module de donnes. Remarquons sur la figure 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 donnes, la figure 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.

379

7.4 Implmentation sur simulateur

Figure 7.13 Programme principal LabVIEW du contrle de lchangeur.

7 Traitement complet
dune application industrielle

380

Dunod La photocopie non autorise est un dlit.

Figure 7.14 Module de donnes Dbits implment par vi non rentrant.

7 Traitement complet
dune application industrielle
7.4 Implmentation sur simulateur

381

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

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 fin. 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 figure 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 paramtre Priode, pass par le programme principal, est un paramtre que nous avons
rendu obligatoire. Enfin, comme tout vi qui doit tre correctement document, il
convient pour les tches de mettre en vidence dans leur documentation quels lments de communication et lments matriels sont utiliss.

Figure 7.15 Diagramme de la tche Acqurir Dbits.

382

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

La tche Afficher est elle aussi trs simple, et est prsente sur la figure 7.16. On
peut remarquer la facilit avec laquelle LabVIEW permet de raliser des affichages
(voir la face avant dAfficher sur la figure 7.17).

Figure 7.16 Diagramme de la tche Afficher.

Dunod La photocopie non autorise est un dlit.

Figure 7.17 Face avant du vi Afficher.

La tche la plus complexe est Rguler Dbits (figure 7.18). Elle intgre le diagramme
tats-transitions du processus de contrle dfini en SA-RT. Cet automate est implment 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 3e tat, Panne, correspond larrt de la tche et nest donc pas reprsent dans le type numr. Lidentificateur de bote aux lettres donn en paramtre
(par le programme principal) permet denvoyer des consignes vers la tche de commande.
Enfin, la tche Commande Vanne est une tche dclenche par bote aux lettres. Elle
prend donc en entre un identificateur de bote aux lettres, se contente dattendre
un message et dappliquer la commande sur le procd ou le simulateur (figure 7.19).
383

7.4 Implmentation sur simulateur

Figure 7.18 Diagramme de la tche Rguler Dbit.

7 Traitement complet
dune application industrielle

384

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

Figure 7.19 Diagramme de la tche Commander Vanne.

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 dfinir des fonctions daccs lmentaires au procd,
de faon ne pas appeler le simulateur directement dans les tches.

Dunod La photocopie non autorise est un dlit.

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 communiquons 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 consquent, 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 figure 7.20 montre linitialisation du vi de communication avec le simulateur :
il sagit simplement dune connexion TCP avec un serveur.
Nous voyons sur la figure 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 dfinir une fonction par action
(acquisition ou commande) et de les protger par smaphore.
Afin dillustrer le fonctionnement des envois et rceptions TCP, la figure 7.21 prsente le cas correspondant la lecture du dbit deau industrielle : la chane de caractre 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
385

7.4 Implmentation sur simulateur

Figure 7.20 Initialisation du vi de communication avec le simulateur.

7 Traitement complet
dune application industrielle

386

7 Traitement complet
dune application industrielle

7.4 Implmentation sur simulateur

Dunod La photocopie non autorise est un dlit.

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.

387

7 Traitement complet
dune application industrielle

7.5 Spcification et conception adaptes

Figure 7.23 Lecture dune chane en provenance du simulateur.

(figure 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 connatre le nombre de caractres lire (figure 7.23).
Remarque

Afin 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 afin 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 fin 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 prfixer 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 spcification, 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 finalement pas directement sur les lments 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,
388

7 Traitement complet
dune application industrielle

7.5 Spcification et conception adaptes

Tableau 7.5 Description des lments matriels choisis.

Dunod La photocopie non autorise est un dlit.

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).

Tef1

Thermocouple de type K situ 30 cm de larrive deau industrielle.

Tef2

Thermocouple de type K situ la sortie de lchangeur.

Ted1

Thermocouple de type K situ lentre de la cuve.

Ted2

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.

389

7 Traitement complet
dune application industrielle

7.5 Spcification et conception adaptes

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.

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 spcification adapte est donn sur la figure 7.24.
Console

Centrale

s
re
tu
ra
p

Dbt_ef

m
Te

Config
centrale

Mise
en route

Sign
al ef

Alim_Dbt_ed
Dbt_ed

Si
gn
al
e

Alim_Dbt_ef

Affichage
Cmd pompe

Rguler
Cmd vanne
changeur
0
Alim vanne

Acknowledge

Pompe
EVef

Alarme
Sirne

Bouton poussoir

Figure 7.24 Diagramme de contexte de la spcification adapte.

Le diagramme prliminaire correspondant est donn sur la figure 7.25. Typiquement,


les modifications portent sur la ncessit dinitialiser-configurer-alimenter-programmer certains lments matriels. Gnralement, des identificateurs dlment configur (port numrique, port srie, etc.) doivent ensuite tre utiliss. Dans la spcification, 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.
Enfin, par rapport la spcification donne sur la figure 7.3, et ce afin dviter de
trop charger le diagramme prliminaire, le processus Vrifier dbit ed a t insr dans
le processus Grer Dbits, dont le diagramme flots de donnes est donn sur la
390

7 Traitement complet
dune application industrielle

Consigne T

7.5 Spcification et conception adaptes

Dbits lus*

Cmd vanne
Commander
vanne
4

Commande dbit
Grer
dbits
1

Signal ef

Infos E/S*

Bouton

Lire
bouton
5

E/D

Signal ed

E/D
Cmd
Commander pompe
pompe
6

ACK
T

Infos E/S* Alarme


Alim
vanne
Init
E/S
3

T lues*

Alim
Dbit ed

Contrler
changeur

T
E/S OK

E/D
T

Config centrale
Alim
Dbit ef
Alarme

Acqurir
T
2

E/D

Afficher
alarme
7

Alarme

E/D
Afficher
8

Dbits lus*
Affichage

Infos E/S*
Tempratures

Infos E/S*

T lues*

Dunod La photocopie non autorise est un dlit.

Figure 7.25 Diagramme prliminaire de la spcification adapte.

figure 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, modifie la consigne douverture de llectrovanne, la cible tant la consigne en litre/heures. Cest pour cette raison
que le diagramme prliminaire donn sur la figure 7.25 doit tre lgrement modifi,
afin que Commander Vanne puisse asservir la vanne. De plus, lors dun asservissement,
des anomalies de fonctionnement peuvent tre dtectes (incohrence entre la commande et le dbit lu, divergence). Il en rsulte que Commander Vanne peut tre
mme de dclencher lalarme. Enfin, il est fort possible que lors de linitialisation du
matriel, une erreur survienne, et ncessite larrt du systme. Le diagramme prliminaire finalement obtenu est donn sur la figure 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 sousprogramme (figure 7.28).
Le dictionnaire de donnes, non report ici, contient quelques modifications triviales
par rapport celui de la spcification du systme sur simulateur. Notons cependant
391

7 Traitement complet
dune application industrielle

7.5 Spcification et conception adaptes

talonnage
Dbitmtres*

Signal ef

Dbits lus*

Dbit
ef lu

Acqurir Signal ef Convertir


signal ef
ef
lu
1.3
1.4
E/D

Vrifier
dbits
1.6

E/D

Dbis
vrifis

E/D
Alarme

Infos E/S

E/D

Contrler
dbits
1.1
E/D

Signal ed

talonnage
Dbitmtres*

E/D

Alarme

Acqurir Signal ed
Convertir
signal ed
lu
ed
1.2
1.5

laborer Commande
consigne dbit
1.6

E/D

Consigne T

T lues

Dbit ed lu
Dbits lus*

Figure 7.26 DFD du processus Grer Dbits.

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 conversions 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 nouveau 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 numrique : 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.
Afin de conserver une cohrence de linitialisation, nous choisirons la seconde solution,
qui prsente lavantage supplmentaire de demander peu ou pas de modification
lintrieur des tches par rapport la programmation sur simulateur.
392

7 Traitement complet
dune application industrielle

Consigne T

7.5 Spcification et conception adaptes

Dbits lus*

Cmd vanne

Dbit ed

Commander
vanne
4

Commande dbit
Grer
dbits
1

Signal ef

Infos E/S*

Bouton
Lire
bouton
5

E/D

Signal ed

Alarme
E/D
ACK

Infos E/S*
Alim vanne
T lues*
Alim
Dbit ed

Acqurir
T
2

Tempratures

Init
E/S
3

E/D

Cmd
Commander pompe
pompe
6

Alarme

T
Afficher
alarme
7

Config
centrale

Alim
Dbit ef
Alarme

Infos E/S*

Contrler
changeur
9

T
E/S OK
Erreur E/S

Alarme

E/D

E/D
Afficher
8

Dbits lus*
Affichage

Infos E/S*

T lues*

Figure 7.27 Prise en compte de lasservissement de llectrovanne


dans le diagramme prliminaire.

Mise en route
<T> 3

Dunod La photocopie non autorise est un dlit.

Nominal

E/S OK
<E> 1,2,4,6,8

Nominal
Alarme
<D> 1,2,8
<T> 5,7
Attente
oprateur

Erreur E/S

OK
<D> 4,6
Arrt

Figure 7.28 Diagramme tat/transition du processus de contrle Contrler Echangeur.

393

7 Traitement complet
dune application industrielle

7.6 Implmentation de la commande relle

Le diagramme DARTS nest donc presque pas modifi par rapport au diagramme
DARTS prsent sur la figure 7.7. Lunique point est lajout dune lecture du module
de donnes Dbits par la tche Commander Vanne, qui pourrait sappeler Asservir
Vanne.
HTR (500 ms)
Dbit ef
Dbit ed
Bouton

Panne

Cmd pompe
Rguler
dbit
Alarme

Tempratures

Lire

Lire

crire

crire

Commande vanne
Commander
Vanne

Cmd vanne

Dbits
crire
Lire

HTR (1 000 ms)


Tempratures

Acqurir
tempratures

HTR (1 000 ms)


Afficher

Affichage

Figure 7.29 Diagramme DARTS du contrle de lchangeur.

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 fichier
den-tte des fonctions permettant de communiquer avec la centrale. Une documentation dcrit le protocole de communication employ (configuration, lecture, etc.)
pour communiquer avec la centrale. Voici un rsum comment du fichier dentte fourni :
394

7 Traitement complet
dune application industrielle

7.6 Implmentation de la commande relle

/*
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 */

Dunod La photocopie non autorise est un dlit.

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
address: adresse MODBUS de la centrale entre 1 et 127
Renvoie: 0 si pas derreur, code derreur diffrent de 0
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
address: adresse MODBUS de la centrale entre 1 et 127
Renvoie: 0 si pas derreur, code derreur diffrent de 0

srie)
sinon */

srie)
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,

395

7 Traitement complet
dune application industrielle

7.6 Implmentation de la commande relle

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 soimme. 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 OpenModbusCom), configure 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 flottants reus ;
Fermer_Centrale, qui arrte la centrale (Stop) et ferme la communication ModBus
(CloseModbuscom).
La spcification 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

396

7 Traitement complet
dune application industrielle

7.6 Implmentation de la commande relle

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 unifis pour toute carte fournie par ce constructeur. Ces drivers, existant sur plusieurs plates-formes, fournissent bien entendu des
librairies binaires, associes des fichiers en-tte (.h) de spcification 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 spcification du module dabstraction orient procd de la carte dacquisition. On peut remarquer la prsence de nombreuses constantes qui permettront,
le cas chant, de modifier certains paramtres matriels :
/* mondaq.h
Abstraction des accs la carte dacquisition pour lchangeur */
#ifndef _MONDAQ_H_
#define _MONDAQ_H_

Dunod La photocopie non autorise est un dlit.

#define CARTE_DAQ_ID
carte */
#define PORT_CARTE_DAQ
numriques */

1 /* Numro de priphrique associ la


0 /* Port dE/S li aux diffrents lments

#define LIGNE_BOUTON
#define LIGNE_ALIM_DBT_EF
#define LIGNE_ALIM_DBT_ED
#define LIGNE_POMPE
#define LIGNE_ALIM_EV_EF
llectrovanne */
#define LIGNE_ALARME

0
1
2
3
4

/*Ligne
/*Ligne
/*Ligne
/*Ligne
/*Ligne

lie
lie
lie
lie
lie

au bouton */
lalimentation de Dbt_ef*/
lalimentation de Dbt_ed*/
la pompe */
lalimentation de

#define PORT_DBT_EF
*/
#define PORT_DBT_ED
*/
#define PORT_EV_EF
*/

0 /*Port dentre analogique reli Dbt_ef

5 /*Ligne lie lalarme */

1 /*Port dentre analogique reli Dbt_ed


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 );

397

7 Traitement complet
dune application industrielle

7.6 Implmentation de la commande relle

/* 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));
}

398

7 Traitement complet
dune application industrielle

7.6 Implmentation de la commande relle

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 videmment diffrents moyens dy remdier :
Le paquetage Controler_Echangeur, contenant les diffrents lments de communication et les tches peut ne dfinir que les types des tches, leur instanciation
tant faite dynamiquement dans un bloc declare du programme principal.
Cependant, cette technique nest pas conforme au profil Ravenscar.
Un objet protg est utilis afin de synchroniser le dpart des tches, qui naura
alors lieu quaprs linitialisation du systme. Cest la solution que nous suivrons.
Limplmentation est alors modifie comme suit : un objet protg Starter est cr
dans le paquetage Controler_Echangeur, cest lui qui servira de dclencheur aux tches :
Sa spcification est :

Dunod La photocopie non autorise est un dlit.

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

399

7 Traitement complet
dune application industrielle

7.6 Implmentation de la commande relle

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 fichiers den-tte C (fichiers 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 dfinies 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 dimplmenter un driver spcifique 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, typiquement 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 bibliothque dexploitation LabVIEW. Ainsi, linitialisation de la centrale est donne sur
la figure 7.30. Noter lutilisation dune variable globale stockant les paramtres
(identificateur) de la centrale, qui seront utiliss ultrieurement pour la lecture de
tempratures (figure 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 modifie quau dbut du programme, et utilise en lecture uniquement dans la suite.
Le langage LabVIEW fournit une bibliothque unifie daccs aux cartes dacquisition, base sur deux drivers de carte NI-DAQ. Notons que ces drivers, NI-DAQ
400

7 Traitement complet
dune application industrielle

7.6 Implmentation de la commande relle

Dunod La photocopie non autorise est un dlit.

Figure 7.30 Initialisation de la centrale en LabVIEW.

Figure 7.31 Lecture des tempratures sur la centrale.

401

7 Traitement complet
dune application industrielle

7.6 Implmentation de la commande relle

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 configurer une fois un port
(notamment en configurant la direction des lignes), ce qui fournit un identificateur
de port configur, puis de lire ou crire sur ce port autant que ncessaire. Les ports
analogiques, quant eux, ne se configurent pas dans un sens ou dans lautre (voir
4.1.4), et ne ncessitent pas de configuration pralable. La figure 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 figure 7.33 donne les cas des 3 autres actions
possibles sur le port numrique.

Figure 7.32 Initialisation du port numrique


et alimentation des dbitmtres et lectrovannes.

Les ports analogiques sont encore plus simples commander ou lire, de plus, la mise
lchelle est simplifie grce lutilitaire Measurement and Automation eXplorer
(figure 7.34). Ce logiciel permet de crer trs simplement un vi de lecture en litre/
heure, comme le montre la figure 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 (figure 7.36) par des appels aux vis nouvellement crs.

402

Dunod La photocopie non autorise est un dlit.

7 Traitement complet
dune application industrielle

7.6 Implmentation de la commande relle

Figure 7.33 Actions possibles sur le port numrique.

403

7 Traitement complet
dune application industrielle

7.6 Implmentation de la commande relle

Figure 7.34 Cration dune chelle lie un talonnage.

Figure 7.35 Utilisation dune voie virtuelle utilisant une chelle personnalise.

404

7 Traitement complet
dune application industrielle

7.7 Conclusion

Figure 7.36 Le programme principal du contrle de lchangeur en LabVIEW.

Dunod La photocopie non autorise est un dlit.

7.7 Conclusion
travers cet exemple, nous pouvons constater que chaque langage a des avantages
et des faiblesses spcifiques.
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 vrifier la cohrence des types), et sa relative
difficult 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 ncessitant 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).

405

8 TUDE AVANCE
DES SYSTMES TEMPS REL

8.1 Introduction

Dunod La photocopie non autorise est un dlit.

8.1.1 Prsentation gnrale de lordonnancement

Les mthodes dordonnancement, qui ont t dcrites dans le chapitre 4, sont indpendantes des caractristiques temporelles intrinsques des tches. En effet, laffectation des priorits un ensemble de tches se fait de faon non formelle.
Les algorithmes bass sur les priorits peuvent tre priorits fixes 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 fixes. 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 fixe au dbut, peut voluer
au cours de la vie de lapplication.
Les algorithmes priorits sont appels algorithmes dordonnancement en ligne
car ils se basent sur ltat instantan du systme pour prendre une dcision. Les algorithmes prsents dans le chapitre 4 appartiennent cette catgorie. Les ordonnancements 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 dordonnancement par priorit affecte par le concepteur, ou par temps partag ne sont pas
toujours les plus intressants et les plus efficaces pour squencer lexcution des tches.
Si on possde suffisamment 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 qualifier lapplication pour
un haut niveau de sret de fonctionnement. Lintgration dans ce cadre dtude
407

8 tude avance
des systmes temps rel

8.1 Introduction

dune application multitche quelconque ncessite de prendre en compte toutes


les contraintes associes aux tches : primitives de synchronisations et de communications, relation de prcdence, partage de ressources, contraintes temporels (priodicit, chance), etc. Les modles permettant la prise en compte de ces diffrents
lments sont prsents au fur et mesure de ce chapitre.
Afin de simplifier la modlisation des tches, mais sans modifier 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 dfinition suivante :
Une tche atomique ou normale est une entit dexcution qui ne possde
aucun appel une primitive bloquante dans son code.

Cette dfinition 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 affectation de cette priorit des tches selon les spcifications 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 analyse dune configuration de tches, nous allons tudier diverses faons de produire
une squence dexcution des tches en respectant les contraintes temporelles des
tches pour diffrentes configurations. La construction de la squence se fait en suivant la rgle de choix dune tche excuter selon un algorithme dordonnancement
dfini, quivalent suivre les priorits affectes aux tches.
8.1.2 Algorithmes dordonnancement

Un algorithme dordonnancement tant dfini 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 fiable pour une configuration de tches sil produit une
squence valide sur une dure infinie quelles que soient les valeurs des premires
dates de dclenchement des diffrentes tches. Une configuration est dite ordonnanable sil existe au moins un algorithme fiable.
Dans un contexte de tches et dalgorithmes dordonnancement (affectation de
priorits), nous allons qualifier lalgorithme dordonnancement tudi selon deux
aspects :
408

8 tude avance
des systmes temps rel

8.2 Modlisation des tches

optimalit : si la configuration de tches est ordonnanable dans cette catgorie


dalgorithmes, alors elle le sera avec lalgorithme tudi ;
ordonnanabilit : la capacit pouvoir prvoir lordonnancement de la configuration de tches en se basant sur des conditions ncessaires et/ou suffisantes
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 daffirmer 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 connaissance 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 configuration 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 affichs 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 affichs dans une application sont en gnral
considrs comme des temps relatifs au lancement de lapplication.

Dunod La photocopie non autorise est un dlit.

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
affins 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. Typiquement, ces contraintes influent 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
409

8 tude avance
des systmes temps rel

8.2 Modlisation des tches

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 modifi.
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 difficult rside alors dans ltude du comportement
temporel du systme et du respect des contraintes dfinies 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

Afin de pouvoir analyser de manire rigoureuse lordonnanabilit dune configuration de tches, loptimalit dun algorithme dordonnancement ou la squence
dexcution dune application multitche, il est ncessaire davoir un modle mathmatique des tches. Ce modle doit permettre de prendre en compte toutes les caractristiques 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 Ci
dune tche ti. La dure de la tche est directement lie au code de la tche. On
value gnralement la dure dexcution pire cas Cmax et une dure minimale Cmin.
Lvaluation de cette dure de la tche peut tre effectue de deux manires diffrentes. 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 difficile pour essentiellement
trois raisons :
une analyse exhaustive de tous les chemins dexcution du code est parfois impossible (jeux de tests complexes, nombre de combinaisons trs lev) ;
les capacits dexcution des processeurs pour amliorer leur efficacit (mmoire
cache plusieurs niveaux, pipeline multiple, etc.) vont conduire une incertitude
sur la dure dexcution qui dpend fortement du contexte prcdent du processeur ;
410

8 tude avance
des systmes temps rel

8.2 Modlisation des tches

loccurrence dinterruptions pendant lexcution dune tche qui oblige le processeur une prise en compte minimale.
Pour cette tude, nous considrerons une valeur de la dure dexcution pire cas
Ci = Cmax et, pour certains cas, nous analyserons leffet de cette variabilit de la dure
dune tche sur lordonnancement dune configuration.
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 :
r0 : date de rveil de la tche, cest--dire la premire date laquelle la tche
demande le processeur ;
C = Cmax : dure dexcution maximale dfinie 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 rk de la kime instance ou occurrence dune tche est donc dfinie
par :

Dunod La photocopie non autorise est un dlit.

r k = r 0 + kT

(8.1)

Afin de limiter au maximum les indterminismes dexcution, nous supposons que


les tches sont non rentrantes, cest--dire que, lors dune nouvelle demande dexcution, 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 fin de sa priode dexcution ; la tche est dite chance
sur requte.
La figure 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 = Cmax. 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.
T
t
r0

C max

r1

r2
C max

Figure 8.1 Reprsentation de lexcution dune tche priodique


chance sur requte.

411

8 tude avance
des systmes temps rel

8.2 Modlisation des tches

Lchance de la tche peut tre plus courte que la fin de sa priode. Dans ce cas,
il est ncessaire de dfinir 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 :
r0 : date de rveil de la tche, cest--dire la premire date laquelle la tche
demande le processeur ;
C = Cmax : dure dexcution maximale dfinie 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 dfinir lchance dk de la kime instance dune
tche par lquation suivante :
d k = r k + D = r 0 + kT + D

(8.2 )

La figure 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
rk et dk, et la zone comprise entre dk et rk+1 ne peut pas tre utilise pour lexcution de la tche.
T
D
t
r0

C max

d1 r2

d0 r1
C max

Figure 8.2 Reprsentation de lexcution dune tche priodique


avec une chance plus petite que la priode.

m Modlisation graphique des tches priodiques

Nous allons nous intresser aux trois paramtres temporels (Ci, Di, Ti ) qui caractrisent une tche ti. Afin davoir un comportement classique en temps rel (pas de
rentrance des tches : Di Ti ), ceux-ci doivent imprativement respecter les conditions de base suivantes :
0 Ci Di Ti

(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
412

8 tude avance
des systmes temps rel

8.2 Modlisation des tches

donner la valeur de rfrence que peut prendre la dure dexcution de la tche


Ci = Cmax. Nous obtenons un tridre ouvert limit par les trois demi-droites concourantes au point de coordonnes (Cmax, Cmax, Cmax) (figure 8.3).
D : Dlai critique

C max

C max

T : priode

C max

C : dure dexcution

Dunod La photocopie non autorise est un dlit.

Figure 8.3 Reprsentation graphique tridimensionnelle des paramtres temporels


dune tche priodique avec une chance plus petite que la priode.

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 figure 8.3 et sur le plan T,C (priode-dure
dexcution) reprsent sur la figure 8.4.
Cette visualisation des paramtres temporels associs une tche est un outil danalyse 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 fixs, soit modifier les paramtres
dune tche existante afin damliorer ses caractristiques temporelles. Cette visualisation graphique propose alors au concepteur toutes les possibilits de choix des paramtres temporels dune tche compatibles avec lordonnanabilit de la configuration
des tches.

413

8 tude avance
des systmes temps rel

8.2 Modlisation des tches

D : Dlai critique
Droite D = T
(tche chance sur requte)

C max

C max

T : priode

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

Droite D = T = C
(tche chance sur requte)
C max

C max

C : Dure dexcution

Figure 8.5 Reprsentation graphique dans le plan C,T des paramtres temporels
dune tche priodique avec une chance plus petite que la priode.

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
414

8 tude avance
des systmes temps rel

8.2 Modlisation des tches

a priori. Nous pouvons donc reprsenter son excution dans le diagramme de Gantt
de la figure 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.
t
r

C max

C max

Figure 8.6 Reprsentation de lexcution dune tche apriodique.

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 sporadiques. Lexcution de ce type de tches sporadiques est reprsente sur la figure 8.7.
Ce dlai critique conduit des dates dchance stricte pour chaque instance dexcution, soit :
d = r +D

ou

d = r + D

(8.4 )

Afin de limiter au maximum les indterminismes dexcution et de pouvoir faire


une analyse de lordonnanabilit de configuration de tches incluant des tches
apriodiques, nous supposons que les tches apriodiques strictes possdent un
dlai minimum Dmin entre deux occurrences ou instances successives ; soient r et r
deux dates de rveil successives dune tche sporadiques, nous avons alors la relation
suivante (figure 8.7) :
r r min

(8.5)

Il est impratif davoir une tche termine avant une nouvelle demande dexcution ;
cela conduit aux ingalits suivantes :

Dunod La photocopie non autorise est un dlit.

0 C D min

(8.6 )

min
D

t
d

C max
C max

Figure 8.7 Reprsentation de lexcution dune tche apriodique


avec une chance stricte ou tche sporadique.

415

8 tude avance
des systmes temps rel

8.2 Modlisation des tches

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 dordonnancement.
m Paramtres statiques des tches

Nous pouvons dfinir 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 fin dexcution de la tche et son
chance (figure 8.8). Lors dune excution de la tche au plus tt, excution
immdiate et sans premption aprs la date de rveil, la laxit maximale Lmax
reprsente tout le temps processeur restant et sexprime par :
L D C

et

L max = D C

(8.7 )

D
t
r
L

Excution au plus tt
D
t
r

Lmax

C max

Figure 8.8 Illustration du paramtre laxit


dans le cas gnral et dans le cas dune excution au plus tt.

le dlai de latence Dl, cest--dire le temps avant le dbut dexcution de la tche


(figure 8.9). Lors dune excution de la tche au plus tard, excution retarde au
maximum et sans premption, le dlai de latence maximum Dlmax est identique
la laxit maximale et sexprime par :
Dl D C

et

Dl max = D C = L max

(8.8)

En complment de ces deux paramtres statiques, il est habituel de dfinir les instants de dbut dexcution et de fin dexcution de la k ime instance dune tche,
soit (figure 8.10) :
dbut dexcution de la kime instance de la tche ti : si,k ;
fin dexcution de la kime instance de la tche ti : ei,k.
416

8 tude avance
des systmes temps rel

8.2 Modlisation des tches

D
t
r

Dl
Excution au plus tard
D

t
r

Dl max

C max

Figure 8.9 Illustration du paramtre dlai de latence


dans le cas gnral et dans le cas dune excution au plus tard.

Di
t
ri , k

ei, k

s i,k

d i,k

Figure 8.10 Illustration des paramtres dbut et fin dexcution dune tche ti.

Nous pouvons remarquer que le paramtre si,k correspond au dlai de latence de la


tche ti. tant donnes les caractristiques dexcution de la tche, nous pouvons
crire les ingalits suivantes :

Dunod La photocopie non autorise est un dlit.

s i,k r i,k ,

e i,k d i,k

et

e i,k s i,k C

(8.9 )

La premire ingalit est une galit dans le cas dune excution au plus tt (si,k = rk),
la deuxime ingalit est une galit dans le cas dune excution au plus tard (ei,k = dk)
et la troisime ingalit est une galit dans le cas dune excution sans premption
de la tche (ei,k-si,k = C).
Deux paramtres supplmentaires permettent de caractriser le comportement de
la tche lors de ses diffrentes instances dexcution et de qualifier cette excution.
Nous avons ainsi :
Temps de rponse de la kime instance de la tche ti dfini par (figure 8.11) :
TR i,k = e i,k r i,k

(8.10)

Temps de rponse maximum de la tche ti : TRi = max k{TRi,k}


Temps de rponse minimum de la tche ti : TRi,min = min k{TRi,k}
Temps de rponse moyen de la tche ti : TRi,moy = Sk{TRi,k}/(k+1)

417

8 tude avance
des systmes temps rel

8.2 Modlisation des tches

Gigue (rgularit dexcution) entre deux instances conscutives de la tche ti


dfinie par la relation :
g i,k = [ ( s i,k+1 s i,k ) T i ] T i

(8.11)

Gigue maximale de la tche ti : Gi = max k{gi,k}


Gigue minimale de la tche ti : Gi,min = min k{gi,k}
Gigue moyenne de la tche ti : Gi,moy = Sk{gi,k}/(k+1)
Di
t
ei, k

s i,k

ri , k

d i,k

TR i , k

Figure 8.11 Temps de rponse de la kime excution dune tche ti.

m Paramtres dynamiques des tches

Au cours de lexcution de linstance dune tche, certains paramtres, qui sont fonction de linstant t, peuvent tre utiles lordonnanceur. tant donne une tche
avec une dure dexcution C, nous pouvons dfinir le temps dexcution restant
C(t) fonction du temps processeur dj allou la tche Cexcut au cours de cette
instance. Ainsi, nous pouvons identifier les trois paramtres suivants (figure 8.12) :
le temps dexcution restant C(t) : C(t) = C Cexcut
le dlai critique dynamique D(t), cest--dire le temps restant avant la prochaine
chance, soit :
D (t ) = d t

(8.12)

la laxit dynamique L(t), cest--dire le temps avant le dbut dexcution de la


tche, soit :
L (t ) = D (t ) C (t ) = d t C (t )

(8.13)

D
C

L(t)
t

C(t)
t
D(t)

Figure 8.12 Paramtres dynamiques de linstance dune tche en cours dexcution.

418

8 tude avance
des systmes temps rel

8.2 Modlisation des tches

Il est intressant danalyser lvolution de ces paramtres dynamiques au cours de


lexcution dune tche. Considrons une tche ti possdant les paramtres initiaux
Ci, Di et Li (par dfinition : Li = Di-Ci). Dans lintervalle dexcution dune instance de la tche [r,d], les paramtres dynamiques D(t) et L(t) vont voluer en fonction 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 :
D ( t + 1 ) = D (t ) 1

et

L ( t + 1 ) = L (t )

(8.14 )

La tche nobtient pas le processeur pendant lintervalle [t, t+1], nous avons :
D ( t + 1 ) = D (t ) 1

L ( t + 1 ) = L (t ) 1

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 :
Ci = 2 ,

Di = 7

Li = 7 2 = 5

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 figure 8.13 reprsente lvolution 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 flche
horizontale reprsente lexcution de la tche (le processeur est allou cette tche)
et la flche en diagonale note lattente de la tche. La dure de la tche tant de
2 units de temps, il suffit de deux flches horizontales pour terminer lexcution
de la tche. La premire trajectoire dexcution, qui commence par une excution
L
1

Li

Dunod La photocopie non autorise est un dlit.

excution de la tche
attente de la tche
Fin tche

2
1

D
Di
Dpassement chance tche

Figure 8.13 Exemple de lvolution des paramtres dynamiques de linstance


dune tche en cours dexcution.

419

8 tude avance
des systmes temps rel

8.2 Modlisation des tches

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 lintersection 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 ti (ri, Ci, Di, Ti),
nous pouvons analyser lorigine de leur dtermination :
ri : 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 .
Ci : La dure de la tche est directement lie au code de la tche. On value
gnralement la dure dexcution pire cas Cmax et une dure minimale Cmin.
Di : 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 .
Ti : Cette priodicit de la tche est fixe par les besoins de la fonction : tche de
scrutation ou acquisition (polling)
Ces choix sont donc soit lis aux besoins de lapplication (dbut dexcution, priodicit, dure du code) soit imposs par le concepteur (chance). Aussi, dans la reprsentation 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 Tmax (Ti = Tmax), correspondant, par exemple, la frquence minimale dchantillonnage ;
une priode minimale Tmin (Ti = Tmin), correspondant par exemple une priode
inutile dacquisition (trop de donnes analyser ou redondance des donnes) ;
une chance maximale Dmax (Di = Dmax), afin dobtenir un meilleur temps de
rponse.
La figure 8.4, reprsentant une tche priodique quelconque, est modifie 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 primitives de synchronisations ou communications intgres dans le code des deux
tches. Prenons un exemple simple et considrons que deux tches t1 et t2 ne sont pas
420

D : Dlai critique

8 tude avance
des systmes temps rel

8.2 Modlisation des tches

Droite D = T
(tche chance sur requte)
Zone de choix
des paramtres temporels
de la tche

D max

C max
T : priode
C max

T min

T max

Figure 8.14 Reprsentation graphique des paramtres (D,T) dune tche


caractrise par des contraintes temporelles manant du cahier des charges.

atomiques, cest--dire que ces primitives sont situes lintrieur du code de chacune
des tches (figure 8.15). La squence dexcution, prsente sur la figure 8.15, montre
lattente de lexcution de la partie t2-1 de la tche t2 par la partie t1-2 de la tche
t1. Nous avons leffet de la synchronisation de la tche t1 par la tche t2.
La premire tape raliser est la transformation des tches en tches atomiques afin
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 : figure 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 :
tche 1

tche 2
1-1

2-1
SIGNAL_EVT(evt1)

Dunod La photocopie non autorise est un dlit.

ATTENDRE_EVT(evt1)
1-2

Squence dexcution

2-2

1-1

1-2

tche 1

t
2-1

tche 2

2-2
t

Figure 8.15 Relation de prcdence dexcution entre deux tches :


codes et squences dexcution.

421

8 tude avance
des systmes temps rel

8.2 Modlisation des tches

tche 1-1

tche 2-1

SIGNAL_EVT(evt1)

tche 1-2

tche 2-2

ATTENDRE_EVT(evt1)

Figure 8.16 Dcoupage des tches en tches atomiques.

Attente de synchronisation ou de communication en dbut de tche.


Envoi dvnement de synchronisation ou de communication en fin de tche.
Lensemble des quatre tches obtenues est rigoureusement quivalent au niveau de
lexcution lensemble prcdent des deux tches. En revanche, afin de signifier
clairement, les relations entre ces quatre tches, il est ncessaire dadjoindre ces tches
un graphe de relation, prsent sur la figure 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.

1 - 1

1 - 2

2 -11

2 - 2

lien de prcdence d au dcoupage


lien de prcdence d la synchronisation

Figure 8.17 Traduction de la relation de prcdence dexcution


entre deux tches par un graphe de prcdence.

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 dysfonctionnements ou anomalies de comportement.
422

8 tude avance
des systmes temps rel

8.2 Modlisation des tches

m Modlisation du partage de ressources critiques entre tches

Une tche ti de dure totale Ci 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 Sci 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 (figure 8.18) :
Ci,a : temps avant la section critique ;
Ci,b : dure de la section critique (ressource utilise) ;
Ci,g : temps aprs la section critique.
Ces trois valeurs doivent satisfaire lgalit suivante :
C i = C i, + C i, + C i,

(8.16 )

C i = Ci, + Ci, + Ci,


C i,

C i,

C i,

Utilisation ressource R
(section critique Sci)

Figure 8.18 Reprsentation temporelle dune tche contenant une section critique.

Si une tche ti de dure totale Ci utilise plusieurs ressources, les sections critiques
doivent tre correctement imbriques. Soit Sci,1 (resp. Sci,2) la section critique de
la tche ti utilisant la ressource R1 (resp. R2), nous devons avoir lune des conditions
suivantes :

Dunod La photocopie non autorise est un dlit.

Sc i,1 Sc i,2

ou

Sc i,2 Sc i,1

Sc i,1 Sc i,2 =

ou

(8.17 )

Considrons lexemple dune tche ti utilisant 3 ressources R1, R2 et R3 ; sa dure


dexcution (Ci = 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 Ci,a

Dure Ci,b

Dure Ci,g

Dure totale Ci

R1

10

R2

10

R3

10

423

8 tude avance
des systmes temps rel

8.2 Modlisation des tches

La figure 8.19 reprsente cette rpartition des diffrentes sections critiques Sci,, Sci,2
et Sci,3 sur la dure totale Ci de la tche. Nous pouvons vrifier que ces sections critiques vrifient deux deux lune des trois conditions 8.17 :
Sc i,3 Sc i,2

et

Sc i,1 Sc i,2 =

et

Sc i,1 Sc i,3 =

Utilisation ressources R2 et R3
Utilisation ressource R1

Utilisation ressource R2

10

Ci

Figure 8.19 Reprsentation temporelle dune tche contenant trois sections critiques.

8.2.4 Analyse dune configuration de tches priodiques


m Charge du processeur

Pour une tche priodique donne ti, dfinie avec les quatre paramtres de base
(ri, Ci, Di, Ti), nous pouvons dfinir les occupations du processeur :
Le facteur dutilisation u comme le pourcentage du processeur ncessaire son
excution sur sa priode Ti, soit :
ui = Ci Ti

(8.18)

Pour une tche priodique donne ti, qui nest pas chance sur requte, on
dfinit le facteur de charge ul,i comme le pourcentage du processeur ncessaire
son excution sur son dlai critique Di :
u i,1 = C i D i

(8.19)

Pour une configuration de n tches priodiques : T = {t1, t2, , tn}, on dfinit le


facteur dutilisation U (resp. le facteur de charge Ul) comme la somme des facteurs
dutilisation ui des tches (resp. des facteurs de charge des tches ul,i) de la configuration de tche T :
n

U =

u i = C i
i =1
n

Ui =

Ti

(8.20)

i =1

ui,1 = Ci Di
i =1

424

i =1

(8.21)

8 tude avance
des systmes temps rel

8.2 Modlisation des tches

Considrons lexemple dune configuration trois tches priodiques dfinies par


les paramtres temporels donns dans le tableau 8.2.
Tableau 8.2 Exemple dune configuration de trois tches priodiques.
Tche

ri

Ci

Di

Ti

ui

ul,i

0,333

0,333

0,125

0,125

10

12

0,166

0,2

Les facteurs dutilisation ui et les facteurs de charge ul,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 Ul de la configuration sont donc les suivants :
n

U =

ui =
i =1
n

Ul =

C i
i =1
n

2 1 2
5
T i = --- + --- + ------ = --- = 0,625
6 8 12
8

ul,i = Ci Di
i =1

i =1

2 1 2
79
= --- + --- + ------ = --------- = 0,625
6 8 10
120

Nous pouvons noter que les deux facteurs U et Ul sont identiques si toutes les tches
sont chance sur requte.
De faon vidente, nous avons une condition ncessaire dordonnanabilit de la
configuration dfinie partir du facteur dutilisation et du facteur de charge dune
configuration de tches priodiques sexcutant sur une plate-forme monoprocesseur.
Cette condition exprime que lutilisation du processeur ne peut pas dpasser les
100 %, soit lingalit vrifier :
n

Dunod La photocopie non autorise est un dlit.

U =

ui = Ci Di
i =1

(8.22)

i =1

m Priode dtude

Pour une configuration de n tches priodiques T = {t1, t2, , tn} dpart simultan (i, ri = 0), la squence dexcution se retrouve rgulirement dans une situation identique au niveau des demandes processeur lorsque toutes les tches sont
nouveau en phase. Ainsi, ltude de la squence dexcution, produite par un algorithme dordonnancement donn, peut se limiter un temps H appel priode
dtude ou mta-priode ou cycle majeur qui est dfini par :
H = PPCM {T i } i [ 1,n ]

(8.23)
425

8 tude avance
des systmes temps rel

8.2 Modlisation des tches

Considrons lexemple de la configuration trois tches priodiques dpart simultan dfinies par les paramtres temporels donns dans le tableau prcdent 8.2.
La priode dtude est donc :
H = PPCM {T i } i [ 1,3 ] = PPCM { 6,8,12 } = 24
Ainsi, la squence dexcution se rpte avec une priode H selon un motif dfini
lors de la premire priode dtude (figure 8.20).
Squence dexcution (dure H = PPCM{Ti})

H
t

Figure 8.20 Squence dexcution dune configuration de tches priodiques


dpart simultan.

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 Htransitoire est donne par :
H transitoire = Max { r i } i [ 1,n ] + PPCM {T i } i [ 1,n ]

(8.24 )

partir dun instant situ dans lintervalle [0,Htransitoire], la squence dexcution


va prendre une forme identique celle prcdemment tudie, cest--dire priodique et de priode gale H. Ainsi, la squence dexcution comporte deux phases :
une phase transitoire de dure infrieure ou gale Htransitoire et une phase stationnaire rpte linfini de dure H (figure 8.21).
Phase transitoire
(dure max max{ri} + PPCM{ri})

Squence dexcution
(H = dure PPCM{Ti})

H
t

Figure 8.21 Squence dexcution dune configuration de tches priodiques


avec au moins une tche possdant une date de rveil diffrente des autres tches.

Considrons lexemple prcdent pour lequel nous avons dcal la date de rveil
de la tche t2 de 2 (tableau 8.3). La dure maximale de la phase transitoire de la
squence dexcution est donc :
H transitoire = Max { r i } i [ 1,3 ] + PPCM {T i } i [ 1,3 ]
= Max { 0,2,0 } + 24 = 2 + 24 = 26
En ralit, lanalyse de la squence dexcution montre que la priodicit H = 24
commence ds le dbut de la squence (figure 8.22). En revanche, la squence dexcution nest pas la mme que celle de la configuration avec les tches dpart simul426

8 tude avance
des systmes temps rel

8.2 Modlisation des tches

Tableau 8.3 Exemple dune configuration de trois tches priodiques


avec une tche dpart diffre.
Tche

ri

Ci

Di

Ti

10

12

Tches dpart simultan

10

15

20

25

30

10

15

20

25

30

10

15

20

25

30

H
Tches dpart diffr

10

15

20

25

30

10

15

20

25

30

10

15

20

25

30

Dunod La photocopie non autorise est un dlit.

Figure 8.22 Comparaisons des squences dexcution dune configuration


de tches priodiques dpart simultan (tableau 8.2) et dpart diffr (tableau 8.3).

tane (tableau 8.2). Il est important de noter quil existe dautres squences dexcution, et que la priodicit de la squence et la dure de la phase transitoire sont
indpendantes de lalgorithme dordonnancement utilis puisquelles sont lies uniquement la charge processeur un instant donn.
Si beaucoup de configuration de tches dpart diffr se comporte dun point de
vue priodicit comme la mme configuration de tche mais dpart simultan,
il existe des configurations de tche prsentant des priodicits dexcution qui
commencent aprs une phase transitoire.
Prenons lexemple de la configuration 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 :
427

8 tude avance
des systmes temps rel

8.2 Modlisation des tches

H transitoire = Max { r i } i [ 1,3 ] + PPCM {T i } i [ 1,3 ]


= Max { 0,1,3 } + 12 = 15
Lanalyse de la squence dexcution de la figure 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.
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

ri

Ci

Di

Ti

10

15

20

25

30

10

15

20

25

30

5
Htransitoire

15

10

20

25

30

Figure 8.23 Squence dexcution dune configuration de tches priodiques


dpart diffr (tableau 8.4) comprenant une phase transitoire.

m Temps libre processeur

Avec les notions de charges processeur et de priode dtude, nous pouvons introduire une caractristique supplmentaire dune squence dexcution : le temps
libre Tlibre, ou temps creux ou temps oisif processeur. Ainsi, pour une configuration
de n tches priodiques dpart simultan : T = {t1, t2, , tn} sexcutant sur un
systme monoprocesseur, le facteur dutilisation du processeur U tant dfinie sur la
priode dtude H, il est possible dvaluer le temps non utilis ou temps libre du
processeur :
n

T libre = ( 1 U ) H = 1 C i T i PPCM {T i } i [ 1,n ]

i =1

428

(8.25)

8 tude avance
des systmes temps rel

8.2 Modlisation des tches

Si nous considrons lexemple de configuration du tableau 8.2, les temps libres


processeur, visualiss sur la figure 8.24, sont :
T libre = ( 1 0,625 ) 24 = 9
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 fin de squence dexcution.
Ce rsultat peut tre tendu pour une configuration de tches dpart non simultan en considrant uniquement la partie de la squence reproduite linfinie (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.
1

t
0

10

15

20

25

30

10

15

20

25

30

10

15

20

25

30

Temps libre processeur


t

Pour H, Tlibre = 9
Figure 8.24 Squence dexcution dune configuration de tches priodiques
dpart diffr (tableau 8.4) comprenant une phase transitoire.

Dunod La photocopie non autorise est un dlit.

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
configuration de n tches priodiques dpart simultan : T = {t1, t2, , tn} sexcutant sur un systme monoprocesseur, cela peut sexprimer en fonction des paramtres temporels des tches sous la forme suivante :
n

Max { d i } i [ 1,n ] Min { r i } i [ 1,n ] =

Ci

(8.26 )

i =1

La figure 8.25 reprsente une squence dexcution sature pour une configuration
deux tches t1 (r1, C1, D1, T1) et t2 (r2, C2, D2, T2) avec r1 < r2 et d1 < d2. Ainsi,
en fonction de la relation 8.26, nous devons vrifier :
d2 r1 = C1 + C2
429

8 tude avance
des systmes temps rel

8.2 Modlisation des tches

T1
D1
1

t
r1

d1

C1

r1 + T1

T2
D2
2

t
r2

C2

d2

r2 + T2

Squence

t
r1

d2

Figure 8.25 Exemple de squence dexcution sature


pour une configuration deux tches priodiques.

m Notion dinstant critique

Dans la suite de ce chapitre, nous allons avoir analyser des configurations 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 configuration 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, lordonnanabilit dune configuration peut tre vrifie lorsque les tches sont toutes dpart
simultan : activation au mme instant appel instant critique (pire cas). Lexemple,
prsent sur la figure 8.26, montre les trois squences dexcution obtenues pour
une configuration de deux tches dont les paramtres sont donns dans le tableau 8.5.
La tche t1 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 t2 gaux 12, 13 et 14. Ainsi, nous pouvons conclure sur cet exemple
que la situation la plus critique pour lexcution de cette configuration se situe
lorsque les deux tches sont en phase.
Ainsi, nous tudierons autant que faire se peut des configurations de tche dpart
simultan (instant critique), sachant que la mme configuration avec un ou plusieurs
dparts diffrs peut conduire une situation ordonnanable. En effet, si une configuration 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
430

8 tude avance
des systmes temps rel

8.3 Ordonnancement
des tches indpendantes priodiques

configuration de tches nest pas ordonnanable avec les tches dpart simultan,
la mme configuration avec des tches dpart diffr peut tre ordonnanable.
Tableau 8.5 Exemple dune configuration de deux tches priodiques
avec une tche dpart variable.
Tche

ri

Ci

Di

Ti

4,2,0

10

14

14

t
temps de rponses = 12

t
temps de rponses = 13

t
temps de rponses = 14

Dunod La photocopie non autorise est un dlit.

Figure 8.26 Exemple de squences dexcution pour une configuration deux tches priodiques
avec trois dates de rveil diffrentes : analyse de linstant critique.

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
431

8 tude avance
des systmes temps rel

8.3 Ordonnancement
des tches indpendantes priodiques

des priorits est appele lalgorithme dordonnancement Rate Monotonic ou RM .


Concernant cet algorithme dordonnancement pour une configuration de n tches
ayant les paramtres (ri, Ci, Di, Ti) avec ri = 0 pour tout i et Di = Ti, nous avons
les rsultats suivants :
lalgorithme dordonnancement RM est optimal dans la classe des algorithmes
priorits fixes, cest--dire que, si une configuration de tches est ordonnanable,
elle le sera en affectant les priorits selon RM ;
une condition suffisante dordonnanabilit dune configuration est obtenue
pour un facteur dutilisation U du processeur suivant lingalit suivante :
n

--n-
U = C i T i n 2 1

i =1

(8.27)

La figure 8.27 reprsente la variation de la valeur de cette condition suffisante en


fonction du nombre de tches. Nous pouvons faire deux remarques concernant cet
algorithme RM :
lasymptote de la courbe visualise sur la figure 8.27 montre quune configuration 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 suffisante, une configuration de tches indpendantes, priodiques, 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.
U : facteur dutilisation
1
0,82
0,78
0,69

n : nombre de tches
1

Figure 8.27 Reprsentation de la condition suffisante dordonnanabilit


dune configuration traite avec lalgorithme RM.

Prenons lexemple de la configuration trois tches dcrite dans le tableau 8.6. Nous
vrifions que nous sommes en prsence dune configuration de tches indpendantes, priodiques, chance sur requte et dpart simultan. Les priorits ont
t affectes selon lalgorithme dordonnancement RM. Le facteur dutilisation U
de cette configuration est donn par :
432

8 tude avance
des systmes temps rel

8.3 Ordonnancement
des tches indpendantes priodiques
1

--3-
20
40 100
U = C i T i = --------- + --------- + --------- 0,75 3 2 1 0,779
100 150 350

i =1
Par consquent, nous pouvons en dduire que cette configuration de tches est
ordonnanable. Nous pouvons construire une partie de la squence qui aura pour
priode H :
H = PPCM {T i } i [ 1, 3 ] = PPCM { 100,150,350 } = 2100
Cette squence, reprsente sur la figure 8.28, montre en particulier les trois premptions de la tche de plus faible priorit t3 alors que la tche de plus forte priorit t1
sexcute ds sa demande (dates de rveil).
Tableau 8.6 Exemple dune configuration de trois tches priodiques
avec une affectation des priorits selon RM.
Tche

ri

Ci

Di

Ti

Priorit
selon RM

20

100

100

40

150

150

100

350

350

t
100

200

300

100

200

300

200

300

Dunod La photocopie non autorise est un dlit.

100

Premption de la tche 3
libre

t
100

200

300

Figure 8.28 Exemple dune partie de la squence dexcution


dune configuration de trois tches traite avec lalgorithme RM.

Nous pouvons noter aussi la prsence de temps libres du processeur qui sur lensemble
de la priode dtude sont :
T libre = ( 1 0,75238 ) 2100 = 520
433

8 tude avance
des systmes temps rel

8.3 Ordonnancement
des tches indpendantes priodiques

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 configuration est ordonnanable quel que soit linstant darrive des tches
dans la suite. Cette condition est ncessaire et suffisante si toutes les tches sont
dpart simultan et suffisante si les tches sont dpart diffr.
Un ensemble de n tches T = {t1, t2, , tn} ordonnes suivant les priorits (t1 la
tche la plus prioritaire et tn la tche la moins prioritaire) dfinies par les paramtres temporels (ri, Ci, Di, Ti) est ordonnanable si et seulement si :
i

i, 1 i n

min

0 t Di

----t-j
j =1

t
-----Tj

(8.28)

Cette condition correspond tester intervalle de temps par intervalle de temps la


possibilit dexcuter les diffrentes tches. La valeur t/Tj correspond au nombre
de rveils de la tche tj dans lintervalle de temps [0,t]. Le terme Cj t/Tj reprsente la demande processeur de la tche tj dans ce mme intervalle. Le temps processeur demand jusqu linstant t par la tche tj et toutes les tches tj de plus
forte priorit (j [0,i-1]) doit tre infrieur lchance di (Di = Tj ) de la tche ti ,
soit :
i 1

Cj
j =1

t
----- + C i D i
Tj

Prenons lexemple de la configuration trois tches dcrite dans le tableau 8.7.


Nous vrifions que nous sommes en prsence dune configuration de tches indpendantes, priodiques, chance sur requte et dpart simultan. Les priorits
ont t affectes selon lalgorithme dordonnancement RM. Le facteur dutilisation
U de cette configuration est donn par :
3

--3-
1 2 2
U = C i T i = --- + --- + --- 0,833 > 3 2 1 0,779
4 6 8

i=1
La condition suffisante vue prcdemment nest pas satisfaite. Pour savoir si cette
configuration 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 Di
chaque nouvelle activation dune tche pour les trois tches de la configuration. Ainsi,
pour la premire tche avec D1 = 4, nous avons :
C t
-----1- -----t T1

434

1 4
1
pour t = 4 --- --- = --- minimum 1
4 4
4

8 tude avance
des systmes temps rel

8.3 Ordonnancement
des tches indpendantes priodiques

Pour la deuxime tche avec D2 = 6, nous avons le minimum infrieur ou gal 1 :


C1 t
C t
------ ------ + -----2- -----t T1
t T2

1 4
2 4
3
pour t = 4 --- --- + --- --- = --- 1
4 4
4 6
4
1 6
2 6
2
pour t = 6 --- --- + --- --- = --- 1
6 4
6 6
3

Pour la deuxime tche avec D3 = 8, nous avons le minimum infrieur ou gal 1 :


C1 t
C t
C t
------ ------ + -----2- ------ + -----3- -----t T1
t T2
t T3

1 4
2 4
2 4
5
pour t = 4 --- --- + --- --- + --- --- = --- > 1
4 4
4 6
4 8
4
1
pour t = 6 --6
1
pour t = 8 --8

6
2 6
2
--- + --- --- + --4
6 6
6
8
2 8
2
--- + --- --- + --4
8 6
8

6
--- = 1 = 1
8
8
--- = 1 = 1
8

Nous pouvons donc conclure que la configuration est ordonnanable sans avoir
construire la squence, reprsente sur la figure 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

ri

Ci

Di

Ti

Priorit
selon RM

Dunod La photocopie non autorise est un dlit.

t
4

12

16

20

24

12

16

20

24

12

16

20

24

12

16

20

24

libre

Figure 8.29 Squence dexcution dune configuration de trois tches


donne dans le tableau 8.7 et traite avec lalgorithme RM.

435

8 tude avance
des systmes temps rel

8.3 Ordonnancement
des tches indpendantes priodiques

m Algorithme dordonnancement Deadline Monotonic

Sil existe au moins une tche qui nest pas chance sur requte dans la configuration des tches, alors nous allons utiliser un algorithme daffectation des priorits
bas sur les dlais critiques des tches au lieu des priodes. Cet algorithme dordonnancement, 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 configuration de n tches
ayant les paramtres (ri, Ci, Di, Ti) avec ri = 0 pour tout i et au moins un dlai critique Di diffrent de la priode Ti , nous avons les rsultats suivants :
lalgorithme dordonnancement DM est optimal dans la classe des algorithmes
priorits fixes, cest--dire que, si une configuration de tches est ordonnanable,
elle le sera en affectant les priorits selon DM ;
une condition suffisante dordonnanabilit dune configuration est obtenue
pour un facteur de charge Ul du processeur suivant lingalit suivante :
n

--n-
U l = C i D i n 2 1

i =1

(8.29)

Prenons lexemple de la configuration deux tches dcrite dans le tableau 8.8.


Nous vrifions que nous sommes en prsence dune configuration de tches indpendantes, priodiques et dpart simultan. Les priorits ont t affectes selon
lalgorithme dordonnancement DM. Le facteur dutilisation U et le facteur de
charge Ul de cette configuration sont donns par :
2

U =

C i
i =1

1 1
T i = --- + --- 0,833 1
2 3
1

--n-
1 1
U l = C i D i = --- + --- = 1,5 > n 2 1 = 0,82
2 1

i =1
Par consquent, nous ne pouvons pas en dduire que cette configuration 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 ncessaire pour toutes configurations de tches sexcutant sur un environnement monoprocesseur). Pour vrifier lordonnanabilit de cette configuration nous devons
construire la partie de la squence sur la priode dtude H = 6.
Cette squence, reprsente sur la figure 8.30, montre en particulier les zones dexcution impossible qui se situent au-del de lchance de la tche t2.

436

8 tude avance
des systmes temps rel

8.3 Ordonnancement
des tches indpendantes priodiques

Tableau 8.8 Exemple dune configuration de deux tches priodiques


avec une affectation des priorits selon DM.
Tche

ri

Ci

Di

Ti

Priorit
selon DM

t
3

t
3

Figure 8.30 Squence dexcution dune configuration de deux tches


donne dans le tableau 8.8 et traite avec lalgorithme DM.

m Comparaison des algorithmes dordonnancement

Dunod La photocopie non autorise est un dlit.

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 file 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 fixe 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 file dattente
et quantum daffectation processeur. La file dattente sera gre selon une file de type
FIFO. De plus nous supposons dans nos exemples que le quantum est fix 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 considrer tant donn la gestion de la file dattente asynchrone des priodes des tches.
Prenons lexemple de la configuration deux tches dcrite dans le tableau 8.9. Nous
vrifions que nous sommes en prsence dune configuration de tches indpendantes, 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 file dattente du tourniquet est ordonne au dpart avec la tche t1
en premier et la tche t2 en second. Dans ces conditions, le trac de la squence
437

8 tude avance
des systmes temps rel

8.3 Ordonnancement
des tches indpendantes priodiques

dexcution montre que la squence dexcution, base sur lordonnancement RM,


ne permet pas de respecter les chances (tche t2 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

ri

Ci

Di

Ti

Priorit
selon RM

Squence dexcution RM
1
t
5

10

15
Dpassement dcheance

t
5

10

15

Squence dexcution RR
1
t
5

10

15

2
t
5

10

15

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 .

De cet exemple, nous pouvons conclure que lalgorithme bas sur le tourniquet permet dordonnancer plus de configurations que lalgorithme RM. Mais, considrons
lexemple de la configuration trois tches dcrite dans le tableau 8.10. Nous vrifions que nous sommes en prsence dune configuration 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
t2 et t3. Le facteur dutilisation est U = 0,88. La file dattente du tourniquet est
compose au dpart des tches t1 en premier, ensuite t2 et enfin t3 en dernier. Dans
ces conditions, le trac de la squence dexcution montre que la squence dexcution, base sur lordonnancement tourniquet , ne permet pas de respecter
les chances (tche t1 choue).
438

8 tude avance
des systmes temps rel

8.3 Ordonnancement
des tches indpendantes priodiques

partir de ce deuxime exemple, nous pouvons donc conclure que lalgorithme RM


permet dordonnancer plus de configurations que lalgorithme bas sur le tourniquet.
En ralit de nombreuses applications peuvent tre ordonnances la fois par lalgorithme 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 dordonnanabilit, priode dtude), peuvent sappliquer lorsque les tches ont une priorit
affecte selon RM et pour une mme priorit (mme priode : cas des tches t2 et t3
de la configuration 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

ri

Ci

Di

Ti

Priorit
selon RM

Squence d'excution RM
1

t
5

10

10

10

Dunod La photocopie non autorise est un dlit.

Squence d'excution RR
Dpassement dchance

t
5

10

10

10

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 .

439

8 tude avance
des systmes temps rel

8.3 Ordonnancement
des tches indpendantes priodiques

8.3.2 Algorithmes dordonnancement priorits variables

Nous avons jusqu prsent considr que la priorit affecte une tche restait constante 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 caractristique 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 ti, la priorit est lie la prochaine chance di,k de
cette tche. un instant t, la priorit peut tre calcule partir du dlai critique
dynamique Di(t) qui sexprime sous la forme :
D i (t ) = d i,k t = r i,k + D i t
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 configuration trois tches dcrite dans le tableau 8.11.
Nous vrifions que nous sommes en prsence dune configuration de tches indpendantes, 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 configuration est U = 0,983 et la priode
dtude est H = 60. Par consquent le temps libre est de 1. Cette configuration nest
pas ordonnanable par lalgorithme priorit fixe RM comme le montre le diagramme de Gantt de la figure 8.33. Par consquent, tant donn la proprit doptimalit de lalgorithme RM, cette configuration nest ordonnanable par aucun algorithme priorit fixe. En revanche, la figure 8.34 prsente la squence dexcution
de cette configuration 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 fixe, nous disposons dune condition dordonnanabilit pour lalgorithme EDF. Pour une configuration de tches indpendantes,
priodiques, chance sur requte et dpart simultan, la condition ncessaire
et suffisante dordonnanabilit est exprime par :
n

U =

C i

Ti 1

(8.30)

i =1

Lexpression 8.30 montre la puissance dordonnanabilit de lalgorithme EDF puisque le processeur peut tre utilis 100 % et la configuration valide formellement.
Lalgorithme EDF est optimal dans la catgorie des algorithmes priorit variable.
440

8 tude avance
des systmes temps rel

8.3 Ordonnancement
des tches indpendantes priodiques

Tableau 8.11 Exemple dune configuration de trois tches priodiques


pour ltude de lordonnancement EDF.
Tche

ri

Ci

Di

Ti

Priorit
selon Di

t
4

t
4

chance dpasse

t
4

Figure 8.33 Squence dexcution dune configuration de trois tches


donne dans le tableau 8.11 et traite avec lalgorithme RM : non ordonnanable.

D 1( t )

t
4

D 2 (t)

8
4

12

16
3

20
4

24
4

t
4

D 3 (t)

8
5

12
2

16
2

20
4

24
5

Dunod La photocopie non autorise est un dlit.

t
4

12

16

20

24

Figure 8.34 Squence dexcution dune configuration de trois tches


donne dans le tableau 8.11 et traite avec lalgorithme EDF : ordonnanable.

Pour tester lordonnanabilit dune configuration 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 suffisante dordonnanabilit 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 :
441

8 tude avance
des systmes temps rel

8.3 Ordonnancement
des tches indpendantes priodiques
n

h H , h


i =1

h D
----------------i + 1 C i

Tj

(8.31)

Il est trs important de noter quune configuration 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 configuration trois tches dcrite dans le tableau 8.12.
Nous vrifions que nous sommes en prsence dune configuration de tches indpendantes, 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 configuration est U = 1 et la priode dtude est H = 12. En
revanche, le facteur de charge est de Ul = 1,233. La figure 8.35 montre que la configuration nest pas ordonnanable par EDF.
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

ri

Ci

Di

Ti

Priorit
selon Di

t
2

10

12

t
2

10

12

chance dpasse

t
2

10

12

Figure 8.35 Squence dexcution dune configuration de trois tches


donne dans le tableau 8.12 et traite avec lalgorithme EDF : non ordonnanable.

Il est aise de sattendre ce que la squence choue puisque le facteur dutilisation


de la configuration 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 h = 11 ,
[ ( 11 2 ) 3 + 1 ] 1 + [ ( 11 3 ) 4 + 1 ] 2 + [ ( 11 5 ) 6 + 1 ] 1 = 12
442

8 tude avance
des systmes temps rel

8.3 Ordonnancement
des tches indpendantes priodiques

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 ti , la priorit est lie la laxit dynamique Li,k(t) de cette tche. un instant t, la priorit peut tre calcule partir de :
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

(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 configuration trois tches dcrite dans le
tableau 8.13. Nous vrifions que nous sommes en prsence dune configuration de
tches indpendantes, priodiques et dpart simultan. Le facteur dutilisation de
la configuration 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.
Tableau 8.13 Exemple dune configuration de trois tches priodiques indpendantes.
Tche

ri

Ci

Di

Ti

Dunod La photocopie non autorise est un dlit.

Tableau 8.14 Affectation des priorits selon les algorithmes RM, DM, EDF et ML.
Tche

RM

DM

EDF

ML

tant donn que les tches ne sont pas chance sur requte, il est inutile dutiliser
lalgorithme RM ; il est ici tudi titre dexemple. La figure 8.36 montre les quatre
squences dexcution obtenues avec les quatre algorithmes. La configuration nest
pas ordonnanable avec les algorithmes priorit fixe RM et DM. En revanche, les
squences traces avec EDF et ML sont valides.
443

8 tude avance
des systmes temps rel

8.3 Ordonnancement
des tches indpendantes priodiques

Squence ML

Squence ED

t
chance non respect pour 3

Squence RM
chance non respect pour 2

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.

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 augmentant ainsi le temps systme. Prenons lexemple de deux tches priodiques, indpendantes, chance sur requte et dpart simultan (tableau 8.15).
Tableau 8.15 Exemple dune configuration de deux tches priodiques indpendantes.
Tche

ri

Ci

Di

Ti

10

10

ED
1

t
4

12

16

20

24

12

16

20

24

12

16

20

24

12

16

20

24

ML
L i( t )

1
L i( t )

t
5

4
3 3

t
4

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.

444

8 tude avance
des systmes temps rel

8.3 Ordonnancement
des tches indpendantes priodiques

Le facteur dutilisation de la configuration est U = 0,94 et la priode dtude est


H = 90. Cette configuration est ordonnanable par les deux algorithmes, mais les
deux squences produites sont trs diffrentes. En effet, comme nous pouvons le voir
sur la figure 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 environnement monoprocesseur. En revanche, dans un environnement multiprocesseur,
nous tudierons lefficacit 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 figure 8.4 et la limitation due aux contraintes temporelles, exprimes
dans le cahier des charges de lapplication, illustre sur la figure 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 configuration ordonnanable. Cette reprsentation graphique dune tche priodique offre alors un domaine de choix plus limit pour le concepteur (figure 8.38).
Il est important de noter que TU 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 t3 la valeur maximale, le facteur dutilisation de la configuration est U = 0,75. En, considrant la condition
ncessaire du facteur dutilisation du processeur 100 %, la priode minimale de
la tche t3 est Tu = 6. Lalgorithme dordonnancement utilis est DM. Dans cette
configuration, le concepteur peut choisir parmi les 11 points possibles au niveau des
deux paramtres D et T de la tche t3.

Dunod La photocopie non autorise est un dlit.

Tableau 8.16 Exemple dune configuration de trois tches priodiques indpendantes,


la troisime tche ayant des paramtres prciser.
Tche

ri

Ci

Di

Ti

12

12

445

D : Dlai critique

8 tude avance
des systmes temps rel

8.3 Ordonnancement
des tches indpendantes priodiques

Zone de choix
des paramtres temporels
correspondant la spcification

Droite D = T
(tche chance sur requte)

Zone de choix
des paramtres temporels
correspondant la modlisation

Dmax

Zone de choix
des paramtres temporels
correspondant lordonnanabilit
Cmax
Cmax

Tmin

Tmax

T : priode

TU

Figure 8.38 Reprsentation graphique du choix des paramtres


conditionne par lordonnanabilit de la configuration.

D
9
8

Dmax = 7
6
5
4

Ci,0 = 3

T
3
Ci,0

6
Tu

9
Tmax

Figure 8.39 Reprsentation graphique dune tche priodique avec la zone de


choix possible des paramtres de la tche t3 en conservant lordonnanabilit
de la configuration dcrite dans le tableau 8.16.

446

8 tude avance
des systmes temps rel

8.4 Ordonnancement
des tches indpendantes apriodiques

Dunod La photocopie non autorise est un dlit.

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 considrer 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 fixe 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 principes gnraux de ces diffrents traitements en choisissant dans chacune des catgories les plus reprsentatifs.
8.4.1 Traitement en arrire plan des tches apriodiques contraintes relatives

Les tches priodiques tant ordonnances par un algorithme priorit fixe comme
RM ou DM (ou ventuellement priorit variable comme EDF), les tches apriodiques sont traites pendant les temps doisivet du processeur, mthode appele
aussi vol de temps creux . Lordonnanabilit de la configuration nest nullement
remise en cause puisque les tches apriodiques sont stockes dans une file dattente
gre en FIFO ou par priorit et traite dans le temps libre processeur (figure 8.40).
447

8 tude avance
des systmes temps rel

8.4 Ordonnancement
des tches indpendantes apriodiques

File dattente de priorit leve


RM

tches priodiques

Processus

tches apriodiques
FIFO ou priorit
File dattente de priorit faible

Figure 8.40 Ordonnancement des tches priodiques et apriodiques


dans un traitement en arrire plan.

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 configuration 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 ri et Ci sont donns
dans le tableau 8.17. Lexcution de ces tches seffectue dans les temps libres laisss par les deux autres tches comme le montre la figure 8.41.
Tableau 8.17 Exemple dune configuration de deux tches priodiques indpendantes
ordonnancer avec larrive de trois tches apriodiques contraintes relatives.
Tche

ri

Ci

Di

Ti

13

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 dfinition les ri des tches apriodiques ntant pas
connus, il est ncessaire de faire cette valuation pour toute la squence dexcution
448

8 tude avance
des systmes temps rel

8.4 Ordonnancement
des tches indpendantes apriodiques

t
4

12

16

20

24

12

16

20

24

12

16

20

24

12

16

20

24

12

16

TR5=11 20

24

libre

Traitement
apriodique
Arrive
apriodique

t
3

t
4
TR3=6

TR4=19

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.

de la configuration (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.

Dunod La photocopie non autorise est un dlit.

8.4.2 Traitement par serveur priodique des tches apriodiques


en environnement priorit fixe

Afin de pouvoir limiter le temps de rponse associ aux requtes apriodiques, une
tche priodique spcifique, appel serveur, va tre ddie aux traitements de ces
requtes apriodiques. Ce serveur ou ces serveurs sajoutent la configuration de base
des tches priodiques ; il est vident que cet ajout ne doit pas remettre en cause
lordonnanabilit de la configuration qui est suppose en absence de tches apriodiques. Ainsi, ces serveurs traitent les tches apriodiques au moment o ils possdent le
processeur. Nous allons considrer quune tche apriodique tap,i contrainte stricte
est caractrise par les trois paramtres suivants :
Ci : dure dexcution maximale ;
Di : 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 apriodique.
Un ou plusieurs serveurs priodiques scrutation sont affects une ou plusieurs
requtes apriodiques. La dfinition 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).

449

8 tude avance
des systmes temps rel

8.4 Ordonnancement
des tches indpendantes apriodiques

m Serveur scrutation

Le premier type de serveur le plus simple est le serveur scrutation. Ce serveur


scrutation est une tche priodique ts possdant les paramtres temporels classiques
(rs, Cs, Ds, Ts ). 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 paramtres 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 apriodique stricte donne ; par consquent il est naturel de fixer la dure dexcution du
serveur gale la dure de la tche apriodique Cs = Cap. Dans le cas o nous avons
requte apriodique stricte, caractrise par une chance Dap et une distance minimum entre deux occurrences successives de min, les caractristiques du serveur
(Ds,Ts) peuvent tre labores dans le cas le plus dfavorable o lactivation du serveur 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 (figure 8.42). Dans ce cas extrme pour satisfaire
les contraintes temporelles attaches cette requte, nous devons rsoudre linquation suivante :
T s + D s D ap min

(8.33)

Si nous considrons le serveur comme une tche priodique chance sur


requte (Ds = Ts), nous avons la relation simplifie de lquation 8.33 :
D ap
T s -------2

(8.34 )

Il est important de noter que cette dfinition 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 :
TR ap T s + D s D ap

ou TR ap 2T s D ap

(8.35 )

Dans ce cadre la dfinition 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 (figure 8.38), nous pouvons reprsenter graphiquement
le domaine des valeurs possibles pour ce serveur en fonction des paramtres de la
tche apriodique (figure 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 ts, serveur scrutation, avec la
valeur maximale de sa priode gale 12, le facteur dutilisation de la configuration
est U = 0,7. Avec un facteur dutilisation du processeur 100%, la priode minimale de la tche ts est T = 6. Nous allons tester les deux algorithmes dordonnancement DM et EDF sur cette configuration compose de deux tches priodiques et
450

8 tude avance
des systmes temps rel

8.4 Ordonnancement
des tches indpendantes apriodiques

Tableau 8.18 Schma dadaptation dun serveur scrutation


pour rpondre une requte apriodique.
Tche
apriodique

Serveur
scrutation

ri

Ci

Cap

Cs=Cap

Di

Dap

Ds

Ti

(Dmin)

Ts+ DsDap

Ts

Serveur
priodique

Ds

Ds

e
Requte
apriodique

min
Dap

Figure 8.42 Analyse temporelle de ladaptation dun serveur scrutation


pour rpondre une requte apriodique.

Zone de choix
des paramtres temporels
correspondant la spcification

Ds
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)

Dunod La photocopie non autorise est un dlit.

Dmax

Zone de choix
des paramtres temporels
correspondant la modlisation
Zone de choix
des paramtres temporels
correspondant lordonnanabilit

Cmax

Cmax Tmin T U

Tmax

min-Cmax

min

Ts

Figure 8.43 Reprsentation graphique du choix des paramtres


pour un serveur scrutation correspondant une requte apriodique.

451

8 tude avance
des systmes temps rel

8.4 Ordonnancement
des tches indpendantes apriodiques

Tableau 8.19 Exemple dune configuration de trois tches priodiques indpendantes,


la troisime tche, serveur scrutation de tches apriodiques, ayant des paramtres prciser.
Tche

ri

Ci

Di

Ti

10

12

D
7
6
5
4
3

Ci,0

T
5

10

TU

11

12

Tmax-Ci,0

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.

D
7
6
5
4
3

Ci,0

T
5

6
TU

10

11

12

Tmax-Ci,0

Figure 8.45 Reprsentation graphique du choix des paramtres pour un serveur scrutation
correspondant une requte apriodique : configuration ordonnance par lalgorithme EDF.

452

8 tude avance
des systmes temps rel

8.4 Ordonnancement
des tches indpendantes apriodiques

dun serveur priodique. Les rsultats au niveau des deux paramtres D et T de la


tche ts, prsents respectivement sur les figures 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 suffisante dordonnanabilit.
Soit un ensemble de n tches priodiques T {1, 2, 3, , i, , n} dfinies par
les paramtres temporels (ri, Ci, Di, Ti) et un ensemble de p serveurs priodiques
{s1, s2, s3, , si, , sn} dfinies par les paramtres temporels (rsi, Csi, Dsi, Tsi),
la configuration est ordonnanable si :
n

U total = U + U s =

C i
i =1

T i + C ap,j T ap,j
j =1

---------------
(n + p)
(n + p ) 2
1 (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 configuration pour traiter les arrives de tches apriodiques. La capacit
de traitement des requtes apriodiques de ce serveur est : une dure dexcution
de 1 (Cs = 1) et un temps de rponse maximum de 10 (2Ts). Le facteur dutilisation
de la configuration complte est U = 1, valeur suprieure la condition dordonnanabilit pour lalgorithme dordonnancement RM (quation 8.27). La priode
dtude tant H = 20, il suffit de tester lordonnanabilit de la configuration sur
cette dure. Il est ais de vrifier que la configuration de ces trois tches priodiques
est ordonnanable avec lalgorithme RM.

Dunod La photocopie non autorise est un dlit.

Tableau 8.20 Exemple dune configuration de trois tches priodiques indpendantes,


la troisime tche, serveur scrutation de tches apriodiques.
Tche

ri

Ci

Di

Ti

10

10

20

20

ap,1

10

ap,2

12

15

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 figure 8.46 reprsente la squence dexcution avec larrive de deux
requtes apriodiques strictes tap,1 (dure Cap,1 = 1) et tap,2 (dure Cap,2 = 2) aux
instants respectifs r1 = 5 et r2 = 12. La premire tche apriodique stricte a une
453

8 tude avance
des systmes temps rel

8.4 Ordonnancement
des tches indpendantes apriodiques

t
5

10

15

20

10

15

20

10

15

20

10

15

20

10

15

20

2
s

Traitement
apriodique

Arrive
apriodique

TRs=1

TRs=9

Figure 8.46 Exemple de lexcution de la configuration de tches


donne dans le tableau 8.20 : ordonnancement avec lalgorithme RM.

chance de 10 par rapport son rveil, ce qui explique les paramtres du serveur
(2Ts = 10 Dap,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
(2Ts+Ts = 15 Dap,2).
Le temps de rponse du traitement de ces deux requtes apriodiques strictes, respectivement 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
figure 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 apriodique stricte. Pour un serveur de caractristiques temporelles (0, Cs = 2, Ds = 4,
Ts = 4), seule la dernire tche apriodique nest pas traite immdiatement. Par rapport 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
454

8 tude avance
des systmes temps rel

8.4 Ordonnancement
des tches indpendantes apriodiques

Capacit s 2
1

10

15

20

10

15

20

Traitement
apriodique

Arrive
apriodique

t
5

10

15

20

Figure 8.47 Reprsentation du principe de fonctionnement du serveur ajournable


avec la visualisation de sa capacit de traitement.

ajoute la configuration 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 (Cs = 2). Le facteur dutilisation de la configuration
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 configuration sur cette
dure. Il est ais de vrifier que la configuration de ces trois tches priodiques est
ordonnanable avec lalgorithme RM. La figure 8.48 prsente une partie seulement
de cette squence dexcution selon un ordonnancement RM. Dans ce test dordonnanabilit, 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.

Dunod La photocopie non autorise est un dlit.

Tableau 8.21 Exemple dune configuration de trois tches priodiques indpendantes,


la troisime tche, serveur ajournable de tches apriodiques.
Tche

ri

Ci

Di

Ti

Pour analyser la rponse de ce serveur ajournable des requtes apriodiques strictes,


nous considrons trois demandes dexcution de tches apriodiques strictes dfinies
par : tap,1 (rap,1 = 1, Cap,1 = 2), tap,2 (rap,2 = 12, Cap,2 = 2) et tap,3 (rap,3 = 18,
Cap,3 = 1). La figure 8.49 montre lacceptation immdiate de ces requtes apriodiques 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 dexcution 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
455

8 tude avance
des systmes temps rel

8.4 Ordonnancement
des tches indpendantes apriodiques

t
5

10

15

20

10

15

20

10

15

20

s
libre

t
5

10

15

20

Figure 8.48 Exemple de lexcution de la configuration de tches


donne dans le tableau 8.21 : ordonnancement avec lalgorithme RM.

t
5

10

15

20

10

15

20

10

15

20

10

15

20

10

15

20

10

15

20

libre

Capacit s 2
1

Traitement
apriodique

Arrive
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.

tches apriodiques strictes dfinies par : tap,1 (rap,1 = 1, Cap,1 = 2), tap,2 (rap,2 = 7,
Cap,2 = 2) et tap,3 (rap,3 = 12, Cap,3 = 2). La figure 8.50 montre lacceptation immdiate de ces requtes apriodiques par le serveur ajournable. Cette acceptation
nimporte quel instant de la squence dexcution conduit la tche priodique t2
dpasser son chance.
De mme que dans le cas des tches priodiques gres selon lalgorithme Rate
Monotonic, il est possible davoir une autre condition suffisante dordonnanabilit dans le cas de lalgorithme RM associ au serveur ajournable. Soit un ensemble de
n tches priodiques {t1, t2, t3, , ti, , tn} dfinies par les paramtres temporels
(ri, Ci, Di, Ti ) et un serveur priodique ts dfinie par les paramtres temporels
(rs, Cs, Ds, Ts ) avec Us = Cs/Ts, la configuration est ordonnanable si :
n

U =

C i
i =1

456

Us + 2
T i ln -----------------2U s + 1

C
avec U s = -----s
Ts

(8.37)

8 tude avance
des systmes temps rel

8.4 Ordonnancement
des tches indpendantes apriodiques

t
5

10

15

10

15

20

10

15

20

10

15

20

Depassement dchance

libre

Capacit s 2
1

Traitement
apriodique

t
5

10

15

20

Arrive
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.

Donc le facteur de charge total est donn par :


n

U total U + U s =

C i
i =1

Us + 2
T i + ln -----------------2U s + 1

C
avec U s = -----s (8.38 )
Ts

Dunod La photocopie non autorise est un dlit.

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 priodiques. Deux mthodes peuvent tre utilises pour cela :
Le serveur change de priorit : le serveur ne conserve pas sa forte priorit pendant 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 figure 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,
Cs = 2, Ds = 4, Ts = 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 figure 8.50 intgrant trois
requtes dexcution de tches apriodiques strictes dfinies par : tap,1 (rap,1 = 1,
Cap,1 = 2), tap,2 (rap,2 = 7, Cap,2 = 2) et tap,3 (rap,3 = 12, Cap,3 = 2). La squence
dexcution, prsente sur la figure 8.52, est valide en comparaison de celle obtenue
457

8 tude avance
des systmes temps rel

+1

8.4 Ordonnancement
des tches indpendantes apriodiques

+1

+1
+1

+1

+1

Capacit s 2
1
Traitement
apriodique

t
5

10

15

20

10

15

20

Arrive
apriodique

t
5

10

15

20

Figure 8.51 Reprsentation du principe de fonctionnement du serveur sporadique


avec la visualisation de sa capacit de traitement.

t
5

10

15

20

10

15

20

libre

t
5

10

10

Capacit s 2
1

15
Dlai du serveur
15

20
t
20

Traitement
apriodique

t
5

10

15

20

10

15

20

Arrive
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.

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 suffisante dordonnanabilit dans le cas de
lalgorithme RM associ au serveur ajournable. Soit un ensemble de n tches priodiques {1, 2, 3, , i, , n} dfinies par les paramtres temporels (ri, Ci, Di, Ti )
et un serveur priodique s dfinie par les paramtres temporels (rs, Cs, Ds, Ts ) avec
Us = Cs/Ts, la configuration est ordonnanable si :
n

U =

C i
i =1

458

2
T i ln --------------Us + 1

C
avec U s = -----s
Ts

(8.39)

8 tude avance
des systmes temps rel

8.4 Ordonnancement
des tches indpendantes apriodiques

Donc, le facteur de charge total est donn par :


n

U total U + U s =

C i
i =1

C
avec U s = -----s
Ts

2
T i + ln --------------Us + 1

(8.40)

Il est intressant de comparer cette limite du serveur sporadique (quation 8.38) et


du serveur ajournable (quation 8.40). La figure 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 fixe (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 lordonnanabilit de la configuration initiale, serveur inclus.

Utotal = U + Us
Limite RM +
serveur sporadique

0,9

Limite RM +
serveur ajournable

0,8
Limite RM
0,7
0,6

0,186
0,2

Us
0,4

0,6

0,8

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.

8.4.3 Traitement par serveur priodique des tches apriodiques


en environnement priorit variable
Dunod La photocopie non autorise est un dlit.

m Serveur sporadique dynamique

Dans un contexte dordonnancement bas sur une priorit variable (EDF), la


mthode du serveur sporadique peut-tre reprise. Contrairement au fonctionnement du serveur sporadique avec des priorits fixes, le contexte dattribution dynamique des priorits conduit affecter au serveur une priorit variable fonction de
la date future de rapprovisionnement de sa capacit. Ce fonctionnement est illustr sur la figure 8.54. Pour un serveur de caractristiques temporelles (0, Cs = 2,
Ds = 4, Ts = 4), nous pouvons remarquer que son chance se place toujours un
dlai temporel de 4 ( = Ts ) 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
459

8 tude avance
des systmes temps rel

8.4 Ordonnancement
des tches indpendantes apriodiques

chance du serveur

priorit

+1

2
Capacit s 1

Traitement
apriodique

10

15

20

10

15

20

10

15

20

Arrive
apriodique

Figure 8.54 Reprsentation du principe de fonctionnement du serveur sporadique


dynamique avec la visualisation de sa capacit de traitement.

ajoute la configuration pour traiter les arrives de tches apriodiques strictes.


La capacit de traitement des requtes apriodiques de ce serveur est une dure
dexcution de 3 (Cs = 3). Le facteur dutilisation de la configuration complte est
U = 1, gale la valeur de la condition dordonnanabilit pour lalgorithme
dordonnancement EDF (quation 8.30). La configuration est donc ordonnanable
avec lalgorithme EDF. Nous ajoutons cette configuration 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.

460

Tche

ri

Ci

Di

Ti

12

12

ap,1

ap,2

ap,3

ap,4

14

ap,5

16

8 tude avance
des systmes temps rel

8.4 Ordonnancement
des tches indpendantes apriodiques

t
5

10

15

20

10

15

20

3
Capacit s 2

d=9

d=15

d=20

d=12

1
Traitement
apriodique

d=9

d=12

10
d=15

15
d=22
d=20
0

20
t

10

15

20

10

15

20

Arrive
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.

La squence obtenue avec le traitement par le serveur de type sporadique dynamique est donne sur la figure 8.55. Lacceptation des tches apriodiques est immdiate 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.

Dunod La photocopie non autorise est un dlit.

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 fin de squence dexcution. Si nous voulons utiliser 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 caractristique est visualise sur la figure 8.56 o une mme configuration de deux tches,
t1 (0,1,3,3) et t2 (0,2,5,5), est ordonnance par EDF et EDL.
Pour tudier ce moyen de traitement des requtes apriodiques, considrons une
configuration deux tches, t1 (0,3,6,6) et t2 (0,2,8,8). Cette configuration 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 (figure 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 dfinie par
tap (rap,3 = 8, Cap,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.
461

8 tude avance
des systmes temps rel

8.4 Ordonnancement
des tches indpendantes apriodiques

EDF

EDL

t
5

10

15

10

15

10

15

10

15

10

15

10

15

libre

Effet
miroir

libre

Figure 8.56 Exemple de lexcution valide dune mme configuration de deux tches
avec les algorithmes EDF et EDL.

1 et 2
EDF
libre

t
5

10

15

20

10

15

20

10

15

20

10

15

20

1 et 2
EDL
(aprs t=8)

libre

t
t

Arrive
apriodique

Excution
relle

10

15

20

1 et 2

t
5

10

15

20

10

15

20

libre

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.4.4 Conclusion sur le traitement des tches apriodiques

Nous avons vu les principales mthodes pour rpondre aux requtes apriodiques.
Lefficacit en termes de temps de rponse ces tches apriodiques et la complexit
du traitement associ la mthode conduisent faire un compromis. Une comparaison entre les diffrentes mthodes est montre sur la figure 8.58. Cette comparaison 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 dordonnancement ;
complexit de limplmentation relative la mise en uvre de cette mthode.
462

8 tude avance
des systmes temps rel

8.5 Ordonnancement
des tches priodiques dpendantes

Dans le cas des environnements priorit fixe (cas industriel classique), le serveur
sporadique semble tre un bon compromis au niveau de ces paramtres.

Technique de traitement

Performance

Complexit
calcul

Performance

Complexit
implmentation

Priorit
fixe

Traitement en arrire plan


Serveur scrutation
Serveur ajournable

Priorit
variable

Serveur sporadique
Serveur sporadique dynamique
Serveur EDL
excellent

moyen

mauvais

Figure 8.58 Comparaison entre les mthodes de prise en compte dune tche apriodique.

8.5 Ordonnancement
des tches priodiques dpendantes
8.5.1 Ordonnancement des tches avec contraintes de prcdence

Dunod La photocopie non autorise est un dlit.

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 fin dexcution de i pour commencer sa propre excution (figure 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 fin 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 figure 8.60.
Ainsi, les six tches de la configuration (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 prcdences 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 ti et la tche tj ou ti prcde tj si tj doit attendre la fin dexcution de ti
pour commencer sa propre excution. Dans ce cas, nous faisons lhypothse
suivante :
463

8 tude avance
des systmes temps rel

8.5 Ordonnancement
des tches priodiques dpendantes

Deux tches priodiques lies par une contrainte de prcdence simple


sont de mme priode.

Figure 8.59 Visualisation de la contrainte de prcdence entre deux tches.

Figure 8.60 Graphe de reprsentation des contraintes de prcdence entre les tches.

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
ti peut sexcuter n fois avant lexcution de tj, ou lorsque ti sexcute une seule
fois avant n excutions de la tche tj (figure 8.61).
i

Figure 8.61 Visualisation de la contrainte de prcdence gnralise entre deux tches.

Des exemples de ces deux cas de prcdence gnralise sont prsents sur la
figure 8.62. Pour le premier exemple, la tche Mesure de temprature doit sexcuter 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 configuration de tches indpendantes. Par consquent,
les caractristiques des tches avec contraintes de prcdence sont transformes
afin de prendre en compte implicitement cette relation entre les tches.
464

8 tude avance
des systmes temps rel

Mesure
de
temprature

8.5 Ordonnancement
des tches priodiques dpendantes

Calcul
de la moyenne
sur 4 points

Mesure
1
de temprature
10
T
Calcul
dune fonction
P/T
Mesure
de pression
P

Figure 8.62 Exemples dapplications faisant intervenir des prcdences gnralises


entre plusieurs tches.

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
modification des paramtres de tches qui permettra une excution dans le respect
des chances ?
Est-il possible de valider a priori lordonnanabilit dune configuration de tches
dpendantes ?
Une rponse la premire question est donne par : si ti tj, 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 : rj ri ;
dans le respect de la politique dordonnancement choisie, la priorit de la premire tche doit tre plus grande que la priorit de la deuxime tche : Prioi >
Prioj.
m Anomalie de comportement en prsence de relations de prcdence

Dunod La photocopie non autorise est un dlit.

et de primitives de synchronisation

Pour mettre en exergue la difficult 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 synchronisation : la tche t1 commence par une attente dun vnement et la tche t3 finit
par lenvoi de ce mme vnement. cette structure de tches visualise sur la
figure 8.63, sajoute une relation de prcdence entre les deux tches t1 et t3 reprsente par un graphe de prcdence (figure 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 t1 et t3 lies par une contrainte de prcdence qui doivent satisfaire :
r1 r3

et

Prio 3 > Prio 1

(8.41 )
465

8 tude avance
des systmes temps rel

8.5 Ordonnancement
des tches priodiques dpendantes

Tableau 8.23 Exemple dune configuration de trois tches ayant des liens de prcdence.
Tche

ri

Ci

Di

Ti

tche 1

tche 2

tche 3

ATTENDRE_EVT(evt1)

ENVOYER_EVT(evt1)

Graphe de prcdence :

Figure 8.63 Description des codes et des relations de prcdence des tches
dcrites dans le tableau 8.23.

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 lalgorithme priorit fixe RM. La figure 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 respecte pas son chance : tche t1 pour la squence 1, tche t1 pour la squence 2
et tche t2 pour la squence 3. Il est important de noter que ces excutions sont
construites en prenant en compte les primitives de synchronisation des tches t1 et t3.
Nous pouvons alors tester les autres affectations de priorits ne respectant pas la
condition de contrainte de prcdence 8.41. La figure 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 t1 pour la squence 4 et tche t2 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 :
Prio 1 Prio 2 Prio 3
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 t1 et t3. Nous pouvons
donc constater une anomalie de comportement. Cette anomalie provient essentiellement du fait de la contradiction entre la relation de prcdence et les primitives
de synchronisation implmentes dans le code des tches.
466

8 tude avance
des systmes temps rel

8.5 Ordonnancement
des tches priodiques dpendantes

Prio(1)=1-Prio(2)=2-Prio(3)=3

Prio(1)=1-Prio(2)=3-Prio(3)=2

Prio(1)=2-Prio(2)=1-Prio(3)=3

2
3

non ordonnanable

non ordonnanable

non ordonnanable

Prio(1)=2-Prio(2)=3-Prio(3)=3

Prio(1)=3-Prio(2)=1-Prio(3)= 2

Prio(1)=3-Prio(2)=2-Prio(3)=1

non ordonnanable

non ordonnanable

t
ordonnanable

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.

Nous pouvons donc conclure par :


Cas du respect de Prio3 > Prio1 : 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 Prio3 > Prio1 : il est possible de trouver un exemple daffectation des priorits qui donne une configuration ordonnanable avec une synchronisation due aux primitives efficientes (la configuration est non ordonnanable
sans cette prcdence).

Dunod La photocopie non autorise est un dlit.

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 synchronisation qui sont, en particulier, en contradiction avec la ou les relations de prcdence souhaites. Dans le cas des algorithmes priorit fixe et pour des tches de
mme priode avec des contraintes de prcdence, on affecte les priorits afin de
satisfaire les relations nonces 8.41. Cette affectation des priorits ne doit pas contredire les ordres de priorit entre des tches de priodes diffrentes.
Considrons lexemple du graphe de prcdence de la figure 8.60 avec les six tches.
En supposant que les tches t1 et t2 ont une priode de 4 et les quatre autres tches
t1, t2, t3 et t4 ont une priode suprieure de 5. Pour respecter la fois lalgorithme
467

8 tude avance
des systmes temps rel

8.5 Ordonnancement
des tches priodiques dpendantes

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 :

Prio ( 1, 2 ) > Prio ( 3, 4, 5, 6 )

rgle prcdence :

Prio ( 1 ) > Prio ( 2 ), Prio ( 3 ) > Prio ( 5 )


Prio ( 4 ) > Prio ( 5 ) et Prio ( 4 ) > Prio ( 6 ) .

Tableau 8.24 Affectations des priorits aux tches


selon lalgorithme RM et les contraintes de prcdence du graphe de la figure 8.60.
Cas

II

III

IV

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 modification de ri et di, en ri* et di* suivant les relations :
Une tche ne sera activable que si tous ses prdcesseurs ont termin leur excution, 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 :
r i* = Max ( r i ,Max ( r j* + C j ; si j avant i pour j { prdcesseurs immdiats } ) )
Pour une instance donne, lchance dune tche doit tre infrieure toutes
les chances de ses successeurs immdiats diminues de leur temps dexcution :
d i* = Max ( d i ,Max ( d j * + C j ; si j avant i pour j { prdcesseurs immdiats } ) )
Comme le montre la figure 8.65, cette transformation doit tre effectue en partant
des tches sans prdcesseur pour le calcul des ri* et en commenant par les tches
sans successeur pour le calcul des di*.
Pour appliquer cette transformation, considrons lexemple dune configuration 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
468

8 tude avance
des systmes temps rel

8.5 Ordonnancement
des tches priodiques dpendantes

Calculs des ri*

Calculs des di*

C1

C3
t

r1

r2

r2*

d2*

d2

d3

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.

Tableau 8.25 Exemple dune configuration de cinq tches ayant des liens de prcdence.
Tche

ri

Ci

Di

Ti

12

12

11

12

12

12

11

12

12

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
figure 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 figure 8.67. Il est donc ncessaire de faire le calcul des paramtres
ri* et di* des cinq tches.
Soit le calcul des ri* :

Dunod La photocopie non autorise est un dlit.

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
Et le calcul des di* :
d 5* = Min ( d 5, Min ( ) ) = 9
d 4* = Min ( d 4, Min (d 5* C 5 ) ) = Min ( 11, Min ( 7 ) ) = 7
469

8 tude avance
des systmes temps rel
5

8.5 Ordonnancement
des tches priodiques dpendantes
3

3
t

10

15

20

Figure 8.66 Squence dexcution des tches du tableau 8.25,


considres comme indpendantes, avec lalgorithme priorit variable EDF.

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
Dans cette nouvelle configuration les tches sont devenues indpendantes et dpart
diffr ; alors nous obtenons la squence donne dans la figure 8.68.
1

t
5

10

10

10

10

10

3
t

10

15

20

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.

470

8 tude avance
des systmes temps rel

8.5 Ordonnancement
des tches priodiques dpendantes

Cette squence (1, 2, 4, 5, 3) respecte les relations de prcdence imposes par


la modification 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 (figure 8.66). Rappelons que pour tester lordonnanabilit de cette nouvelle configuration avec des tches dpart diffr (quation 8.24), il est thoriquement ncessaire de tracer la squence sur une dure maximale de 29 units de
temps correspondant ri,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 configuration modifie T*
avec la configuration initiale T, cest--dire :
Si la configuration initiale tait ordonnanable avec le respect des contraintes de prcdence, cette configuration modifie le sera et rciproquement : 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 configuration. Ainsi, soit un ensemble de n tches partageant un ensemble de
m ressources critiques en exclusion mutuelle, pour une tche ti de la configuration
ayant une pire dure dexcution gale Ci, la question primordiale est :

Dunod La photocopie non autorise est un dlit.

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 dterminer 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 fixe ou variable ;
gestion de la file 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 t0, il faut pouvoir dterminer de faon prcise les autres tches qui peuvent interrompre lexcution
de cette tche t0. Pour une configuration de n tches, la tache t0 peut tre retarde
ou suspendue par deux types de tches :
les tches plus prioritaires que la tche t0 ;
les tches qui partagent au moins une ressource critique avec cette tche t0 et
qui lutilisent avant la demande par la tche t0.
Dans une configuration donne, les deux ensembles de tches peuvent tre parfaitement identifis et il est alors possible deffectuer le calcul du retard maximum dans
471

8 tude avance
des systmes temps rel

8.5 Ordonnancement
des tches priodiques dpendantes

le pire des cas. Soit p tches de priorits suprieures la tche t0, n tches moins
prioritaires accdant une ressource critique utilise par cette tche t0 ou m ressources utilises par cette tche t0 et accdes par des tches moins prioritaires.
Dans ces conditions, nous pouvons exprimer le temps de rponse TR0, dfini selon
lquation 8.10, de la tche t0 de la faon suivante :
p

Ti
TR 0 = C 0 + ------ C i + inf {n , m }Sc max
T0

(8.42)

i =1

avec Scmax la dure maximale des sections critiques.


Pour illustrer ce comportement prenons un exemple simple dune configuration
quatre tches dont la tche t0 que nous dsirons tudier. La tche t1 est une tche
plus prioritaire que la tche t0. La tche t3 partage une ressource critique avec la
tche t0 et la tche t2 est indpendante des autres tches. En appliquant la relation
8.42, nous devons avoir une estimation du temps de rponse :
TR 0 = C 0 + [ T 1 T 0 ]C 1 + Sc max

(8.43)

La figure 8.69 prsente une squence dexcution de cette configuration pour des
dates de rveil particulires qui vont amener une situation o la tche t0 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 t0, engendr par la tche t1, est normal (t1 plus prioritaire que t0), le
retard pour la tche t0, engendr par la tche t3, est aussi normal (t3 partage une
ressource critique avec t0). Mais le retard engendr par la tche t2 est un mauvais
fonctionnement de lordonnancement, car la tche t2 est moins prioritaire que la
tche t0 et ne partage aucune ressource critique avec celle-ci. Nous sommes en prsence 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 prvisible
M Blocage fatal

Un autre inconvnient, dj identifi, du partage de ressources critiques est le blocage fatal de deux ou plusieurs tches lors de lutilisation dau moins deux mmes
ressources critiques par deux tches. La figure 8.70 illustre ce phnomne de blocage fatal (deadlock). La demande des ressources R1 et R2 de la part des deux tches
t1 et t2 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 fix, une
alerte de type interruption peut tre utilise pour lancer une tche de reconfiguration
ou faire une remise zro du systme.
472

8 tude avance
des systmes temps rel

8.5 Ordonnancement
des tches priodiques dpendantes

Tche 1

t
TR0

Tche 0

priorit
des
tches Tche 2

Inversion de priorit
t

Tche 3

date de rveil
utilisation
ressources critiques

fin de tche
demande
ressources critiques

Figure 8.69 Reprsentation du phnomne dinversion de priorit


dans un ordonnancement en prsence de ressources critiques.

R2

R2

Tche 1
priorit
des
tches

R1

R1

Tche 2

Interblocage

Figure 8.70 Reprsentation du phnomne de blocage fatal


dans un ordonnancement en prsence de ressources critiques.

Dunod La photocopie non autorise est un dlit.

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 figure 8.71.
R1

Tche 1
priorit
des
tches

Tche 2

R2

R2
t

R1

R2

R1 et R2
t

Figure 8.71 Reprsentation du procd dvitement du blocage fatal dans un ordonnancement


en prsence de ressources critiques par la mthode des classes ordonnes.

473

8 tude avance
des systmes temps rel

8.5 Ordonnancement
des tches priodiques dpendantes

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 configuration 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 t1 et t2 partagent une ressource critique pendant
toute la dure de leur excution. La dernire tche t3, compltement indpendante
des deux autres, a une dure dexcution qui peut varier entre 5 et 6.
Tableau 8.26 Exemple dune configuration de trois tches partageant une ressource critique.
Tche

ri

Ci,

Ci,

Ci,

Ci

Di

Ti

priorit

16

16

5 ou 6

15

16

Il parat logique de tester la configuration avec la dure pire cas de la tche t3. Cette
squence dexcution, prsente sur la figure 8.72, est valide. Un deuxime test peut
tre effectu pour une dure dexcution plus petite de la tche t3. Si lordonnancement en prsence de ressources critiques avait un comportement normal, le relchement dune contrainte temporelle comme la dure dexcution devrait conduire
une ordonnanabilit plus aise de la configuration. Or la squence dexcution,
obtenue pour une dure dexcution de 5 pour la tche t3, est non valide comme
le montre la figure 8.73. Lors de son rveil au temps 8, la tche t2 trouve la ressource
prise par la tche t1 et doit donc se mettre en attente. Quand la ressource est libre
par la tche t1, la tche t2 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 t3, ce dysfonctionnement


tait prvisible. En effet, la tche t2, la plus prioritaire, partage une ressource critique
avec la tche t1 moins prioritaire. Donc, il est normal que la tche t2 puisse se
retrouver bloque par cette tche moins prioritaire qui partage une ressource critique
avec elle. Donc le temps de rponse maximum TR2 de la tche t1 peut tre calcul
sans tenir compte du phnomne dinversion de priorit :
474

8 tude avance
des systmes temps rel

8.5 Ordonnancement
des tches priodiques dpendantes

t
0

15

10

t
0

15

10

t
0

15

10

utilisation de la ressource
pas dutilisation de ressource

Figure 8.72 Exemple dune squence dexcution avec un ordonnancement


en prsence de ressources critiques : squence valide.

t
0

10

15

10

15

t
0

10

15
utilisation de la ressource
pas dutilisation de ressource

Dunod La photocopie non autorise est un dlit.

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
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 t3, a conduit la tche t1 prendre la ressource
avant la tche t2.
m Protocole hritage de priorit pour le traitement des ressources critiques

Afin 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 fin de section critique dune tche)
475

8 tude avance
des systmes temps rel

8.5 Ordonnancement
des tches priodiques dpendantes

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 (figure 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.

Tche 1

priorit
des
tches

Hritage de priorit
Tche 2

Figure 8.74 Principe du protocole dhritage de priorit permettant dviter le phnomne


dinversion de priorit dans un ordonnancement en prsence de ressources critiques.

Avec ce protocole hritage de priorit, lexemple, dcrit sur la figure 8.69, a un comportement diffrent. La tche t2, qui stait immisce dans lattente de la tche
tudie t0, est maintenant rejete aprs celle-ci, et cela cause de la priorit de la
tche t3 hrite de la tche t0 jusqu la fin de sa section critique (figure 8.75). Les
calculs du temps de rponse donns dans les quations 8.42 et 8.43 pour cet exemple
sont exacts.

Tche 1

t
TR0

Tche 0

priorit
des
tches Tche 2

Tche 3

Hritage de priorit

date de rveil
utilisation
ressources critiques

fin de tche
demande
ressources critiques

Figure 8.75 Reprsentation du protocole dhritage de priorit permettant dviter le phnomne


dinversion de priorit dans un ordonnancement en prsence de ressources critiques.

476

8 tude avance
des systmes temps rel

8.5 Ordonnancement
des tches priodiques dpendantes

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 figure 8.76.

R2

priorit Tche 2
des
tches
Tche 3

R1

R1

Tche 1

R1

R2

R2

R2

Hritage de la priorit de 2

R1

Hritage de la priorit de 1

Priorit initiale

date de rveil
utilisation R1
utilisation R2
utilisation R1 et R2

fin de tche
demande
ressources critiques

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.

Un exemple complet de prise en compte du partage de ressources critique avec un


protocole hritage de priorit est trait avec la configuration de trois tches donne
dans le tableau 8.27.

Dunod La photocopie non autorise est un dlit.

Tableau 8.27 Exemple dune configuration de trois tches partageant une ressource critique.
Tche

ri

Ci,

Ci,

Ci,

Ci

Di

Ti

12

12

Cette configuration 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 t1 et t3 partagent une ressource critique. Lautre tche t2 est compltement 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 figure 8.77. Cette inversion de priorit peut tre
facilement vite par lutilisation du protocole hritage de priorit comme le montre
la figure 8.78.
477

8 tude avance
des systmes temps rel

8.5 Ordonnancement
des tches priodiques dpendantes

t
4

12
16
Inversion de priorit

12

12

20

24

16

20

24

16

20

24

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
4

12

16

20

24

12

16

20

24

12

16

20

24

Hritage de priorit
3

t
4

utilisation ressource
pas dutilisation de ressource

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.

m Protocole priorit plafond pour le traitement des ressources critiques

Le protocole prcdent permet donc dviter linversion de priorit et donc de pouvoir 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 phnomne 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 ;
478

8 tude avance
des systmes temps rel

8.5 Ordonnancement
des tches priodiques dpendantes

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 t1 et t2 qui utilisent les deux ressources critiques R1 et R2. La tche t1
ayant la priorit la plus forte, les deux ressources possdent la mme priorit plafond (PP1 = PP2 = Prio1), cest--dire la priorit de t1. La figure 8.79 montre le
principe de fonctionnement de ce protocole.
Blocage d la priorit plafonne de R1

R2
Tche 1
priorit
des
tches

R1
Tche 2

Hritage de la priorit de 1

Dunod La photocopie non autorise est un dlit.

Figure 8.79 Principe du protocole priorit plafond


dans un ordonnancement en prsence de ressources critiques.

Un exemple plus complet est prsent sur la figure 8.80. Les trois tches partagent
deux ressources. La tche t1, la plus prioritaire, utilise les deux ressources R1 et R2.
La tche t2, de priorit intermdiaire, utilise la ressource R2. Enfin, la tche t3, possdant la priorit la plus faible, utilise la ressource R1. Le protocole donne aux deux
ressources une priorit plafonne identique celle de la tche t1 (PP1 = PP2 = Prio1).
Lors de lexcution, le protocole hritage de priorit permet de limiter le temps de
rponse de la tche t1. En effet, la tche t2 ne peut prendre la ressource R2 alors
quelle est libre, puisque la priorit de la tche t2 possde une priorit infrieure
la priorit plafond de la ressource utilise (R1) : Prio2 < PP1. Avec Scmax la dure
maximale de la plus grande section critique des tches de plus faible priorit, le
temps de rponse TR est donc :
p

Ti
TR 0 = C 0 + ------ C i + Sc max
T0

(8.44 )

i =1

Ainsi, en plus de limiter le temps de rponse des tches, ce protocole priorit plafond 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 (figure 8.81). Ainsi, nous pouvons constater que la tche t1 ne peut pas
prendre la ressource R2 qui aurait bloqu lapplication, car la priorit de la tche t1
479

8 tude avance
des systmes temps rel

8.5 Ordonnancement
des tches priodiques dpendantes

R2

R2

R2

priorit
Tche 1
des
R2
tches
Tche 1
R2

R2

R2

Tche 1
R1 et R2

R2

R1

R2

Hritage de la priorit de 2

Hritage de la priorit de 1

Priorit initiale

date de rveil
utilisation R1
utilisation R2
utilisation R1 et R2

fin de tche
demande
ressources critiques

Figure 8.80 Exemple du comportement du protocole priorit plafond


dans un ordonnancement en prsence de ressources critiques.

R2

Tche 1
priorit
des
tches

Tche 2

R1

R1

R2
t

R1

R2

R2

R1
t

Figure 8.81 vitement du blocage fatal grce au protocole priorit plafond.

a une priorit qui nest pas strictement suprieure la priorit plafond de la ressource
utilise (R1).
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 algorithmes peuvent tre utiliss comme le protocole pile. Plusieurs excutifs (POSIX,
OSEK/VDX, Ada) mettent en uvre une version simplifie 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
480

8 tude avance
des systmes temps rel

8.6 Analyse dordonnanabilit


en environnement monoprocesseur

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 dexcution exprime sous la forme :
Ci * = Ci + Bi
avec Bi : 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 indpendante. Sur la base de ce modle thorique, nous avons tudi des algorithmes dordonnancement, 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 danalyse des applications temps rel consiste donc transformer lapplication initiale pour
la rendre compatible avec lenvironnement thorique de validation. Ainsi, nous avons
les transformations suivantes (figure 8.82) :
tches priodiques indpendantes : les tches restent identiques (modle thorique
initial) ;
tches apriodiques indpendantes : les tches sont transformes en tches priodiques laide dun des modles de serveur ( 8.4) ;

Dunod La photocopie non autorise est un dlit.

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 ressources (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 lapplication initiale ; par consquent, si lapplication temps rel transforme est ordonnanable, lapplication initiale non transforme est aussi ordonnanable. Si, dans
le contexte dun algorithme optimal pour la configuration, 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 fixe ou algorithmes priorit variable).
481

8 tude avance
des systmes temps rel

8.6 Analyse dordonnanabilit


en environnement monoprocesseur

Tches
apriodiques

Cration
de serveurs

Tches
avec prcdence

Modification
paramtres

Tches indpendantes
Algorithmes
dordonnancement
permettant la validation
(RM, DM, ED, ML)

+
Tches partageant des ressources
Protocoles
de gestion
des ressources critiques
(hritage, plafond)

Figure 8.82 Mthodologie danalyse dune application temps rel


afin dutiliser des algorithmes dordonnancement permettant une validation.

8.6.2 Mthode de validation RMA

Cette prise en compte des dures de blocage a permis de mettre en uvre une mthodologie de validation temporelle dapplication temps rel dont lalgorithme dordonnancement 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 synchronisation (utilisation de la modification 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 ti plus prioritaire que la tche tj si i<j : Prioi>Prioj).
Ces tches partagent m ressources critiques Rk. Nous allons de plus dfinir les grandeurs suivantes :
bj,k : la dure de la section critique de la tche tj utilisant la ressource Rk avec
bj,k = 0 si la tche tj nutilise pas la ressource Rk.
PPk : la priorit plafond de la ressource Rk, cest--dire la priorit la plus haute
des tches utilisant la ressource Rk.
Ainsi, nous pouvons crire que le temps de blocage dune tche ti, appel Bi,
sexprime de la faon suivante :
482

8 tude avance
des systmes temps rel

8.6 Analyse dordonnanabilit


en environnement monoprocesseur

Cas du protocole hritage de priorit :


n

B i = Min Max [ b j,k : si PP k Prio i ], Max [ b j,k : si PP k Prio i ] (8.45)


j >i
j =i+1 k

k =1
Cas du protocole priorit plafond :
Bi =

Max

k [ 1,m ] , j >i

[ b j,k : si PP k Prio i ]

(8.46 )

Considrons une configuration 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 R1, R2
et R3. 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 : PP1 = Prio2, PP2 = Prio1 et PP3 = Prio1.
Nous pouvons dterminer la matrice Bsc des dures des sections critiques de cette
application :
b j, k R 1 R 2 R 3
1 0 2 2
2 5 5 5
B sc = 3 10 0 0
4 10 0 0
5 0 10 0
6 0 15 0
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 B1 :

Dunod La photocopie non autorise est un dlit.

B i = Min Max [ b j,2, b j,3 ], Max [ b 2,k , b 3,k , b 4,k , b 5,k , b 6,k ]
j =2

k =2
car 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
Dans le cas du protocole priorit plafond, nous avons lvaluation du terme B1 :
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 ] car PP 1 < Prio 1
= Max [ 5, 0, 0, 10, 15, 5, 0, 0, 0 ] = 15
483

8 tude avance
des systmes temps rel

8.6 Analyse dordonnanabilit


en environnement monoprocesseur

Tableau 8.28 Exemple dune configuration de six tches partageant trois ressources critiques.
Ressource

R1 (PP1=Prio2)

R2 (PP2=Prio1)

R3 (PP3=Prio1)

Tche

ri

Ci,

Ci,

Ci,

Ci,

Ci,

Ci,

Ci,

Ci,

Ci,

Ci

Di

Ti

40

40

10

10

15

50

50

10

10

500

500

10

10

500

500

20

10

20

50

1000

1000

15

15

20

50

5000

5000

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 configuration. Celles-ci permettent de valider de plus en plus
prcisment lapplication, cest--dire que lanalyse devient de moins en moins
pire cas .
Tableau 8.29 Exemple dune configuration de six tches partageant trois ressources critiques :
calcul des dures de blocage.
Tche

ui

Prio

Bi (priorit hrite)

Bi (priorit plafond)

0,1

20

15

0,2

25

15

0,02

25

15

0,02

15

15

0,05

15

15

0,01

U=

0,4

m Technique 1 : analyse RM simple

Considrons une premire technique danalyse qui est une traduction directe de la
condition suffisante de lalgorithme RM (quation 8.27) en intgrant pour chacune
des tches le temps de blocage associ, soit :
484

8 tude avance
des systmes temps rel

8.6 Analyse dordonnanabilit


en environnement monoprocesseur

--n-
U = ( C i + B i ) T i n 2 1

i =1

(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 configuration
est donc satisfaite comme le montre le calcul suivant :
6

U =

Ci

-
---T i
i =1

4 10 10
10
50
50
= ------ + ------ + --------- + --------- + ------------ + -----------40 50 500 500 1000 5000
1

--6-
= 0,4 6 2 1 0,735

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 :
6

U =

Ci + Bi

-
--------------Ti
i =1

( 4 + 20 ) ( 10 + 25 ) ( 10 + 25 ) ( 10 + 15 )
= -------------------- + ----------------------- + ----------------------- + ---------------------- 40
50
500
500
( 50 + 15 )
50
+ ----------------------- + -------------
1 000
5 000
1,43 > 0,735

Cas du protocole priorit plafond :


6

Dunod La photocopie non autorise est un dlit.

U =

Ci + Bi

-
--------------Ti
i =1

( 4 + 15 ) ( 10 + 15 ) ( 10 + 15 ) ( 10 + 15 )
= -------------------- + ----------------------- + ----------------------- + ---------------------- 40
50
500
500
( 50 + 15 )
50
+ ----------------------- + -------------
1 000
5 000
1,14 > 0,735

Nous voyons que, dans les deux cas, la condition nest pas respecte et que nous
devons conclure une non validit de lordonnancement de la configuration avec
une affectation de priorit base sur lalgorithme RM et les protocoles de gestion
de ressources critiques dfinis. Nous pouvons remarquer que ces calculs montrent
des facteurs dutilisation suprieurs 100 % ; cela met en exergue laspect pire cas
trs pessimiste de ce test.
485

8 tude avance
des systmes temps rel

8.6 Analyse dordonnanabilit


en environnement monoprocesseur

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 :
1

--n-
Bi
Ci
U = ----- + Max ----- n 2 1
T i i [ 1, n ] T i

i =1

(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 :
4 10 10
10
50
50
U = ------ + ------ + --------- + --------- + ------------ + -----------40 50 500 500 1000 5000
20 25 25 15 15
+ Max ------, ------, ---------, ---------, ------------
40 50 500 500 1000
= 0,4 + 0,5 = 0,9 < 0,735 NON
Cas du protocole priorit plafond :
4 10 10
10
50
50
U = ------ + ------ + --------- + --------- + ------------ + -----------40 50 500 500 1000 5000
15 15 15 15 15
+ Max ------, ------, ---------, ---------, ------------
40 50 500 500 1000
= 0,4 + 0,375 = 0,775 < 0,735 NON
Cette condition dordonnanabilit est encore trop pessimiste pour permettre de
conclure sur lordonnanabilit de cette configuration. Il est donc ncessaire de mettre
en uvre une mthode plus fine.
m Technique 3 : analyse RM itrative

Considrons une autre technique danalyse qui est une traduction itrative de la
condition suffisante 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 :
j 1

j [ 1, n ] : U =

i =1

486

--j-
Ci Cj + Bj
----- + ---------------- j 2 1
Tj
Ti

(8.49)

8 tude avance
des systmes temps rel

8.6 Analyse dordonnanabilit


en environnement monoprocesseur

Le principe dvelopp dans cette technique est simple. Pour une tche tj, on considre dune part les tches qui peuvent linterrompre (les tches les plus prioritaires) ;
cela correspond au premier terme de lquation 8.49 (sommation du facteur dutilisation de toutes les tches plus prioritaires que de la tche tj). Et dautre part, il faut
prendre en compte la dure de la tche tj et son terme de blocage Bj.
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 :
( 4 + 20 )
Pour j = 1 : -------------------- = 0,6 < 1
40
4 ( 10 + 25 )
Pour j = 2 : ------ + ----------------------- = 0,8 < 0,828
40
50
4 10 ( 10 + 25 )
Pour j = 3 : ------ + ------ + ----------------------- = 0,37 < 0,779
40 50
500
4 10 10 ( 10 + 15 )
Pour j = 4 : ------ + ------ + --------- + ----------------------- = 0,37 < 0,757
40 50 500
500
4 10 10
10 ( 10 + 15 )
Pour j = 5 : ------ + ------ + --------- + --------- + ----------------------- = 0,405 < 0,743
40 50 500 500
500
4 10 10
10
50
50
Pour j = 6 : ------ + ------ + --------- + --------- + ------------ + ------------ = 0,4 < 0,735
40 50 500 500 1000 5000

Dunod La photocopie non autorise est un dlit.

Cas du protocole priorit plafond :


( 4 + 15 )
Pour j = 1 : -------------------- = 0,475 < 1
40
4 ( 10 + 15 )
Pour j = 2 : ------ + ----------------------- = 0,6 < 0,828
40
50
4 10 ( 10 + 15 )
Pour j = 3 : ------ + ------ + ----------------------- = 0,35 < 0,779
40 50
500
4 10 10 ( 10 + 15 )
Pour j = 4 : ------ + ------ + --------- + ----------------------- = 0,37 < 0,757
40 50 500
500
4 10 10
10 ( 10 + 15 )
Pour j = 5 : ------ + ------ + --------- + --------- + ----------------------- = 0,405 < 0,743
40 50 500 500
500
4 10 10
10
50
50
Pour j = 6 : ------ + ------ + --------- + --------- + ------------ + ------------ = 0,4 < 0,735
40 50 500 500 1000 5000
Avec cette technique lordonnanabilit de la configuration est prouve. Nous pouvons ainsi dclarer que la configuration des six tches partageant des ressources critiques est ordonnanable avec laffectation de priorit selon lalgorithme RM.
Nous pouvons remarquer toutefois que lutilisation du protocole de gestion de res487

8 tude avance
des systmes temps rel

8.6 Analyse dordonnanabilit


en environnement monoprocesseur

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 grossire de lquation 8.49 de la technique 3.
1

j 1

j [ 1, n ] : U =

--j-
C
Cj + Bj
-----i + --------------- j 2 1
Ti
Tj

i =1

j 1

j [ 1, n ] : U =

i =1
n

j [ 1, n ] : U =

i =1

(8.49)

--n-
C
Cj + Bj
-----i + --------------- n 2 1
Ti
Tj

--n-
C
B
-----i + -----j n 2 1
Ti Tj

--n-
Bi
C
U = -----i + Max ----- n 2 1
T i i [ 1, n ] T i

i =1
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 dfinir le temps pendant lequel le processeur
est occup excuter des tches de priorit suprieure ou gale Prioi (priode
dactivit ou busy period de niveau i). Cette analyse seffectue en plusieurs tapes :
tape 1 : valuation de la date de fin dexcution a0 de la tche ti dans cette
priode dactivit. Le calcul de a0 prend en compte lexcution dune instance
de toutes les tches plus prioritaires que la tche ti et le temps de blocage de la
tche ti :
i

a0 = Bi + Ci

(8.50)

j =1

tape 2 : en utilisant le calcul de an, lquation 8.51 dtermine la prochaine itration an+1 :
i 1

an
a n + 1 = B i + C i + ----- C j
Tj

(8.51)

j =1

Notons que, dans cette priode dactivit de niveau i, au plus un facteur de blocage
Bi 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.
488

8 tude avance
des systmes temps rel

8.6 Analyse dordonnanabilit


en environnement monoprocesseur

tape 3 : cette tape va dterminer si cette approximation an+1 est le temps de


terminaison de ti. Si la valeur de an+1 est suprieure lchance de la tche :
Di, alors lanalyse et termine et le test a chou. Si an+1 an, alors reprendre
ltape 2.
tape 4 : si an+1 = an, alors nous avons obtenu le temps de terminaison de la
priode dactivit. Nous pouvons alors obtenir le temps de rponse TRi de la
tche ti, soit :
TR i = a n

(8.52)

Nous pouvons alors conclure sur lordonnancement si ce temps de rponse TRi


de la tche ti est infrieur son chance Di.
Illustrons cette technique pour la configuration 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 t2 sachant que cela correspond une tude classique : analyser le temps de rponse maximum dune tche
dune configuration . En suivant les diffrentes tapes donnes, nous obtenons :
tape 1 : valuation de la date de fin dexcution a0 de la tche t2 dans la priode
dactivit du niveau de priorit 3 :
2

a 0 = B 2 + C j = 25 + ( 4 + 10 ) = 39
j =1

tape 2 : en utilisant le calcul de a0, nous obtenons a1 :


1

a0
39
a 1 = B 2 + C 2 + ----- C j = 25 + ( 10 ) + ------ 4 = 39
Tj
40
j =1

Dunod La photocopie non autorise est un dlit.

tape 3 : comme a1 = a0, alors nous allons ltape 4.


tape 4 : nous avons obtenu le temps de terminaison de linstance de la tche
t2. Nous pouvons alors obtenir le temps de rponse TR2 de cette tche t2, soit :
TR 2 = a 2 = 39
tape 5 : La priode dactivit est termine, car TR2 est infrieur ou gal T2 ;
lchance de la tche t2 est donc bien respecte : TR2 = 39<D2 = T2 = 50.
Poursuivons notre analyse par la tche t3. Soit les tapes suivantes :
tape 1 : valuation de la date de fin dexcution a0 de la tche t3 dans la priode
dactivit du niveau de priorit 3 :
3

a 0 = B 3 + C j = 25 + ( 4 + 10 + 10 ) = 49
j =1

489

8 tude avance
des systmes temps rel

8.6 Analyse dordonnanabilit


en environnement monoprocesseur

tape 2.1 : en utilisant le calcul de a0, nous obtenons une valeur de a1 qui fait
apparatre le fait que la tche t1 peut sexcuter deux fois avant la date a0, soit :
1

a0
49
49
a 1 = B 3 + C 3 + ----- C j = 25 + ( 10 ) + ------ 4 + ------ 10 = 53
Tj
40
50
j =1

tape 3.1 : comme a1 a0 (d lexcution de deux instances de la tche t1),


alors nous reprenons ltape 2.
tape 2.2 : en utilisant le calcul de a1, nous obtenons a2 qui fait apparatre le fait
que les tches t1 et t2 peuvent sexcuter deux fois avant la date a1, soit :
2

a1
53
53
a 2 = B 3 + C 3 + ----- C j = 25 + ( 10 ) + ------ 4 + ------ 10 = 63
Tj
50
40
j =1

tape 3.2 : comme a2 a1 (d lexcution des deux instances des tches t1 et


t2), alors nous reprenons ltape 2.
tape 2.3 : en utilisant le calcul de a2, nous obtenons a3 :
2

a2
63
63
a 3 = B 3 + C 3 + ----- C j = 25 + ( 10 ) + ------ 4 + ------ 10 = 63
Tj
40
50
j =1

tape 3.3 : comme a3 = a2 (d la fin litration car, avant la date a2, les tches
t1 et t2 peuvent sexcuter deux fois et la tche t3 une seule fois), alors nous
allons ltape 4 (figure 8.83).
tape 4 : nous avons obtenu le temps de terminaison de la tche t3. Nous pouvons alors obtenir le temps de rponse TR3 de cette instance de la tche t3, soit :
TR 3 = a 3 = 63
Lchance de la tche t3 est donc bien respecte : TR3 = 63 < D3 = T3 = 500.
Cette analyse peut tre effectue pour lensemble des tches de la configuration et
conduire la conclusion de lordonnanabilit de la configuration si tous les tests
sont positifs.
Il est important de noter que toutes ces validations ne sont valables et applicables quen faisant lhypothse de dures de tches fixes, connues et dterministes.

490

8 tude avance
des systmes temps rel

8.7 Ordonnancement
en environnement multiprocesseur

3 (blocage)
t
Nouvelle
demande de 1

3 (blocage)

a0 = 49
1
t

Nouvelle
demande de 2
1

3 (blocage)

a1 = 53
1

2
t
a2= 63

Figure 8.83 Analyse dordonnanabilit selon la technique RMA


base sur lvaluation du temps de rponse.

8.7 Ordonnancement
en environnement multiprocesseur
8.7.1 Introduction gnrale

Dunod La photocopie non autorise est un dlit.

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 (aronautique) ;
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 dfinition gnrale dun systme informatique multiprocesseur ou rparti pourrait 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) ;
491

8 tude avance
des systmes temps rel

8.7 Ordonnancement
en environnement multiprocesseur

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 faiblement 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 difficults
dans les systmes informatiques rpartis :
Lordonnancement : les algorithmes optimaux classiques dordonnancement
dans les systmes monoprocesseurs ne sappliquent plus dans un contexte multiprocesseur ou rparti o il existe des algorithmes dordonnancement spcifiques
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 efficacement sa fonction.
Fiabilit (tolrance aux fautes) : les systmes rpartis conduisent tout naturellement une fiabilit 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 difficult supplmentaire dans
la ralisation dapplications haut degr de sret de fonctionnement dont la
fiabilit et la scurit sont deux des lments essentiels.
Autres difficults 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 difficults 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 afin 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 dfinir le nombre de messages envoyer par chaque site afin dobtenir une horloge
avec une prcision donne sur lensemble des sites.
492

8 tude avance
des systmes temps rel

8.7 Ordonnancement
en environnement multiprocesseur

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 propagation, 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 concerne un changement de site dexcution car le code est install sur plusieurs sites
(figure 8.84).

Dunod La photocopie non autorise est un dlit.

Tche
E
Tche
F

Tche
A

Tche
C

Tche
C

Tche
G

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.

493

8 tude avance
des systmes temps rel

8.7 Ordonnancement
en environnement multiprocesseur

8.7.2 Ordonnancement dans les systmes multiprocesseurs


m Anomalie de fonctionnement

Dans le cadre de lordonnancement en environnement multiprocesseur, nous pouvons avoir un comportement semblable aux excutions en environnement monoprocesseur en prsence de ressources critiques, cest--dire une anomalie de fonctionnement.
Prenons lexemple dune configuration 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 fin de tche. Les caractristiques temporelles sont donnes dans le tableau 8.30.
Tableau 8.30 Configuration de six tches excutes
sur deux processeurs identiques.
Tche

ri

Ci

Di

10

[2,6]

10

15

10

20

100

200

22

Il est important de noter que, dune part, les tches sont dpart diffr et, dautre
part, que la tche t2 a une dure dexcution qui peut varier de 2 6. Nous allons
tudier lexcution de cette configuration avec diffrentes valeurs de la dure de la
tche t2. Dans ce type de test, il est naturel de considrer les valeurs extrmes du
domaine de variation de la dure de la tche t2. Ainsi, nous avons les squences
suivantes (figure 8.85) :
cas I : dure dexcution de la tche t2 de 2. La squence est valide ; mais nous
pouvons constater que le phnomne dinversion de priorit se produit lors de
lexcution de la tche t5 qui sexcute avant la tche t4 ;
cas II : dure dexcution de la tche t2 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 t2 de 5. La squence est valide ; et nous
pouvons constater que nous obtenons les meilleurs temps de rponse pour les
tches t4 et t6.
Ces trois tests dexcution semblent dmontrer lordonnanabilit de la configuration. Les tests correspondent aux deux valeurs extrmes et une autre valeur inter494

8 tude avance
des systmes temps rel

8.7 Ordonnancement
en environnement multiprocesseur

mdiaire de la dure dexcution de la tche t2 [2,6]. Un autre test est effectu avec
une valeur de la dure dexcution de la tche t2 de 3, valeur faible dans lintervalle
de variation de la dure. La figure 8.86 montre que cette excution conduit une
inversion de priorit et surtout aux dpassements des chances pour les tches t4
et t6. Nous pouvons ainsi constater que le comportement de lexcution nest pas
logiquement li aux paramtres temporels des tches, comme leur dure.
Inversion
de priorit

P r1
0

10

15

10

15

P r2
0

20

20

Pr 1
0

II

10

15

20

Pr 2
0

10

15

20

Pr 1
0

III

Pr 2
0

10
4

15

10

15

20

t
20

Meilleurs
temps de rponse

Figure 8.85 Squences dexcution de la configuration, dcrite dans le tableau 8.30,


traces pour trois dures diffrentes de la tche t2 : 2 (cas I), 6 (cas II) et 5 (cas III).

Inversion
de priorit
Dunod La photocopie non autorise est un dlit.

Pr 1
0
Pr 2
0

10

15

10

15

20

20
Dpassement
dchance

Figure 8.86 Squence dexcution de la configuration, dcrite dans le tableau 8.30,


trace pour une dure de la tche t2 de 3.

495

8 tude avance
des systmes temps rel

8.7 Ordonnancement
en environnement multiprocesseur

m Les algorithmes dordonnancement monoprocesseur

en environnement multiprocesseur
Remarque

Il ne peut exister dalgorithme quasi en ligne qui construise une squence valide sur une configuration
matrielle comportant m 2 processeurs pour une configuration 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 problme doptimisation de systme linaire) pourra traiter certaines configurations
non rsolues par un algorithme quasi en ligne ou en ligne.
Nous allons nous placer dans un environnement constitu de m processeurs avec une
configuration de n tches priodiques excuter, dfinies par les quatre paramtres
temporels classiques : (ri,Ci,Di,Ti). Une premire condition ncessaire dordonnanabilit de la configuration concerne le facteur dutilisation, soit :
n

U =

C i

Ti m

(8.54 )

i =1

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 :
H = PPCM {T i } i [ 1, n ]
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 configuration peut donc sexcuter sur un environnement deux processeurs en considrant
la relation 8.54.
Nous allons supposer possible la migration en cours dexcution. La figure 8.87
montre lexcution de cette configuration avec lalgorithme dordonnancement de
type EDF. La squence nest pas valide cause du dpassement dchance de la
tche t1. La figure 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.

496

Tche

ri

Ci

Di

Ti

8 tude avance
des systmes temps rel

8.7 Ordonnancement
en environnement multiprocesseur

chance
non respecte

Pr1

t
3

10

20

10

20

Pr2

Figure 8.87 Squence dexcution de la configuration dcrite dans le tableau 8.31


avec lalgorithme EDF.

Dunod La photocopie non autorise est un dlit.

Pr1

t
20

10
2

3
t

Pr2
10

20

Figure 8.88 Squence dexcution de la configuration dcrite dans le tableau 8.31


avec lalgorithme ML.

497

8 tude avance
des systmes temps rel

8.7 Ordonnancement
en environnement multiprocesseur

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 environnement multiprocesseur ; ils taient identiques en environnement monoprocesseur.
m Techniques dordonnancement en environnement multiprocesseur

De nombreuses techniques dordonnancement existent en environnement multiprocesseur. Ces techniques sont gnralement utilises pour des configurations possdant des proprits particulires.
Nous allons seulement donner un exemple de ce type de technique base sur le dcoupage temporel du temps processeur au prorata du facteur dutilisation du processeur
par chacune des tches. Considrons une configuration de n tches chance sur
requte et dpart simultan excuter sur un environnement compos de m processeurs. Les tches sont classes selon leur facteur dutilisation du temps processeur,
cest--dire :
u i u i +1

pour i [ 1, n 1 ]

(8.55 )

Dans ce contexte, nous avons une condition ncessaire et suffisante dordonnanabilit qui est donne par la relation suivante :
j

1
1

Max Max --- u i pour j [ 1, m ] ; ---- u i 1

j i =1
m i =1

(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 configuration de trois tches dcrite dans le tableau 8.32.
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

ri

Ci

Di

Ti

ui

0,66

0,5

0,5

Nous vrifions que cette configuration 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
498

8 tude avance
des systmes temps rel

8.7 Ordonnancement
en environnement multiprocesseur

satisfaire la condition ncessaire 8.54. La priode dtude est H = 12. Enfin, nous
pouvons tester que la condition ncessaire et suffisante 8.56 est bien satisfaite, soit :

2
Max Max --- ;

1 2 1
7
--- --- + --- = ------ ;

2 3 2
12

5 5
--- = --- 1
6 6

Pour raliser la construction de la squence, il suffit de noter sur le diagramme temporel 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 ui 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 suffit ensuite daffecter cette dure processeur sur chaque processeur
comme le montre la figure 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

ui

Temps processeur
dans lintervalle [0,3]

0,66

3*0,66=2

0,5

3*0,5=1,5

0,5

3*0,5=1,5

1
Pr1

Dunod La photocopie non autorise est un dlit.

10

11

12

2
Pr2
0

10

11

12

10

11

12

dates
dactivation

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.

499

8 tude avance
des systmes temps rel

8.7 Ordonnancement
en environnement multiprocesseur

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 efficace 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, fiabilit du rseau, pannes partielles ou
totales (processeur ou rseau).
Pour rpondre au problme de la coopration dynamique entre les sites, il est ncessaire 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 ordonnanceurs rpartis des autres sites (figure 8.90).
Afin 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 ;
500

8 tude avance
des systmes temps rel

8.7 Ordonnancement
en environnement multiprocesseur

Ordonnanceur
rparti
solution
Ordonnanceur
rparti

demande
de migration
surcharge
local

tche
excuter
Allocateur

demande ou offre
de service
rseau

Figure 8.90 Architecture des sites au niveau de lagencement de lordonnancement.

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 (figure 8.91).
site B

site A
demandeur

site C

demande
de migration

demande
de migration

offre
en retour
(enchre)

offre
en retour
(enchre)

migration
dexcution

Dunod La photocopie non autorise est un dlit.

Figure 8.91 Stratgie dchanges de messages pour la migration des tches


linitiative du demandeur : algorithme aux enchres.

linitiative du site offreur :


algorithme brouillon : lobjectif de cette stratgie est de diminuer le nombre

de phase de lalgorithme prcdent aux enchres (politique trois communications) 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
501

8 tude avance
des systmes temps rel

8.7 Ordonnancement
en environnement multiprocesseur

du site demandeur. La demande de migration est donc envoye prfrentiellement ce site (figure 8.92).
site A
demandeur

site B

site C

diffusion des surplus


offre
offre
dacceptation
dacceptation

migration
dexcution
site foyer

Figure 8.92 Stratgie dchanges de messages pour la migration des tches


linitiative du demandeur : algorithme du site hte.

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 (figure 8.93).
site B

site C
diffusion des surplus
offre
dacceptation

offre
dacceptation

demande
de migration

migration
dexcution

offre
en retour
(enchre)

site foyer

Figure 8.93 Stratgie dchanges de messages pour la migration des tches


linitiative du demandeur : algorithme souple.

Nous allons illustrer la mise en uvre du dernier algorithme tudi (algorithme


souple) avec un exemple simple. Considrons une application constitue de trois
502

8 tude avance
des systmes temps rel

8.7 Ordonnancement
en environnement multiprocesseur

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 fixe 2 quel que soit le message chang.
Tableau 8.34 Configuration de trois tches priodiques et de deux tches apriodiques
excuter sur trois processeurs.
Tche

ri

Ci

Di

Ti

Processeur

2 ou 7

Nous allons tester trois cas avec cette configuration, soit :


Cas I : la tche t2 a une dure de 2 et la tche t5 nest prise en compte. La
figure 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 t4.
1

4
t

Pr1
0

Pr2
0

Dunod La photocopie non autorise est un dlit.

Pr3
0

Figure 8.94 Illustration du fonctionnement de lalgorithme souple


pour la configuration dcrite dans le tableau 8.34, cas I.

Cas II : la tche t2 a une dure de 7 et la tche t5 nest prise en compte. La


figure 8.95 montre les squences obtenues sur les trois processeurs. Le processeur 1
ne peut prendre en charge la tche t4 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.
503

8 tude avance
des systmes temps rel

8.7 Ordonnancement
en environnement multiprocesseur

Pr1
demande
pour 4

Pr2

demande
pour 4

offre
pour 4

Pr3
0

Figure 8.95 Illustration du fonctionnement de lalgorithme souple


pour la configuration dcrite dans le tableau 8.34, cas II.

Cas III : la tche t2 a une dure de 7 et la tche t5 est prise en compte. La


figure 8.96 montre les squences obtenues sur les trois processeurs. Le processeur 1
ne peut prendre en charge la tche t4 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 t4 cause
de la tche t5. Loffre, arrive au processeur 2 par le processeur 3, est accepte et
renvoye vers le processeur 3 qui excute la tche t4.
1

Pr1
demande
pour 4
Pr2

demande
pour 4

demande
pour 4

offre
pour 4

Pr3
0

Figure 8.96 Illustration du fonctionnement de lalgorithme souple


pour la configuration dcrite dans le tableau 8.34, cas III.

8.7.4 Validation des systmes distribus

Dans la section prcdente nous avons analys des configurations dont les seuls
paramtres dfinis 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 afin de la valider temporellement.
504

8 tude avance
des systmes temps rel

8.7 Ordonnancement
en environnement multiprocesseur

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 phnomne 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 environnement monoprocesseur avec ressources critiques, considrons le cas de deux sites
intgrant chacun deux tches : site 1 (tches t1 et t4) et site 2 (tches t2 et t3). La
communication entre les deux sites est compose de deux messages : m1 de t1 vers
t3, et m2 de t2 vers t4 (figure 8.97). Lordonnancement des deux sites est conduit
par les chances di des tches ; ainsi nous avons un ordre de priorit dordonnancement sur le site 1 (t1 et ensuite t4) et sur le site 2 (t2 et ensuite t3).

Site 1

m1
3

m2
Site 2

Dunod La photocopie non autorise est un dlit.

Figure 8.97 Modlisation dune application distribue dfinie par deux sites,
deux tches sur chacun des sites et deux messages changs.

La figure 8.98 montre deux excutions possibles de cette configuration selon la


dure de la tche t2 du site 2. Ainsi, nous avons :
Cas I (la dure de la tche t2 est suprieure celle de la tche t1). La tche t1 se
termine donc la premire et par consquent envoie le message m1 sur le rseau.
Ensuite, la tche t2 se termine, envoie le message m2 lors de la libration du
rseau par le message m1. Cela oblige la tche t4 attendre ; mais son chance
tant lointaine, les squences dordonnancement sur les deux sites sont valides.
Cas II (la dure de la tche t2 est infrieure celle de la tche t1). La tche t2 se
termine donc la premire et par consquent envoie le message m2 sur le rseau.
Ensuite, la tche t1 se termine, envoie le message m1 lors de la libration du
rseau par le message m2. Cela conduit la tche t3 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 fixs a priori, et,
avec ces hypothses, faire une analyse du pire cas.
505

8 tude avance
des systmes temps rel

8.7 Ordonnancement
en environnement multiprocesseur

d1

d4
t

Site 1
m2

m1
Cas l

Rseau
d2

d3

Site 2

Site 1

d1

m2
Cas ll

Rseau
2

d4

m1

d2

Site 2

d2

Dpassement dchance
t

Figure 8.98 Illustration dune anomalie de fonctionnement


dans le cas des applications distribues.

m Analyse holistique des systmes distribus

Les principales hypothses que ncessite cette analyse temporelle des systmes distribus sont les suivantes :
horloge globale (utilisation dun moyen externe ou par envoi de messages) ;
rseau fiable (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 fin 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 m1-2 et la tche
rceptrice t2 sont obligatoirement dcals des gigues respectives Jm et J2 par rapport au dbut de lexcution de la tche mettrice t1 (figure 8.99).
Soit un ensemble de tches tri par ordre de priorit sur chacun des sites (la tche
ti plus prioritaire que la tche tj si i<j : Prioi>Prioj). Nous supposons que lalgorithme choisi est bas sur une affectation de priorit fixe. La technique de calcul du
506

8 tude avance
des systmes temps rel

8.7 Ordonnancement
en environnement multiprocesseur

d1
1
m1-2
2

t
m1-2

Jm

t
d2

J2

Figure 8.99 Illustration du dcalage temporel ou gigue dun message


et de la tche rceptrice.

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 dfinir le temps pendant lequel le processeur est occup excuter des tches de
priorit suprieure ou gale Prioi (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 :
i 1

Jj
( q + 1 )C i + B i + ----- C j
Tj
j =1
t 0 = ---------------------------------------------------------i 1
Cj
1 ----Tj

(8.57)

j =1

et
i 1

Jj + tn
t n +1 = B i + ( q + 1 )C i + ------------- C j
Tj

(8.58)

Dunod La photocopie non autorise est un dlit.

j =1

Le point fixe tn+1 = tn est recherch par une mthode itrative. Dans une priode
dactivit, la charge minimale est dfinie 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 ti, appartenant la priode dactivit de niveau i. Le principe de lalgorithme va consister incrmenter q tant que
le test darrt nest pas vrifi : 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 :
TR i = Max ( t + J i kT i )

(8.59)

Un exemple dexploration de cette zone dactivit de niveau i est prsent sur la


figure 8.100 en ne prenant pas en compte la gigue et le temps de blocage. La tche ti
est excute selon quatre instances dans cette zone dactivit. Remarquons que, dans
507

8 tude avance
des systmes temps rel

8.7 Ordonnancement
en environnement multiprocesseur

Tches
plus prioritaires
que i

temps

i
1

Ti

Ti

Ci

Ci

temps

Ti

Periode dactivit de niveau i de longueur t

TRi = t-q Ti

Figure 8.100 Exemple du calcul de la longueur dune zone dactivit de niveau i.

cette figure, la tche ti nest pas chance sur requte ; en revanche, la fin de la
priode dactivit se situe avant la fin de la quatrime priode de la tche ti.
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 fixe. La
diffrence essentielle rside dans le fait que la premption nest plus autorise puisquun message envoy occupe le rseau jusqu sa fin. Ainsi, en considrant que les
messages sont classs par ordre de priorit comme les tches (le message mi de dure
Ci plus prioritaire que la tche mj de dure Cj si i<j), nous avons pour m messages
la relation suivante :
i 1

Jj + tn
t n +1 = ( q + 1 )C i + ------------- + 1 C j + max (C k )
Tj

ikm

(8.60)

j =1

Et le pire temps de rponse du message mi :


TR i = Max ( t + J i kT i )

(8.61)

La dure Ci dun message mi est calcule selon le type de protocole avec les informations 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 application distribue constitue de trois tches priodiques indpendantes rparties sur
deux processeurs avec un seul message chang (figure 8.101 et tableau 8.35).
Le site 1 est ordonnanc avec une politique RM, cest--dire que la tche t1 est plus
prioritaire que la tche t2 . Remarquons que la tche t3 , lie la tche t2 par le
message m1, possde une priode identique la tche t2 . Nous allons calculer la
gigue du message m1 et ensuite la gigue de la tche t3 . Pour un calcul aussi simple,
il nest pas ncessaire dutiliser les quations prcdentes. Ainsi, nous commenons
par le site 1 ; la figure 8.102 montre que la tche t2 est prempte par la deuxime
instance de la tche t1 . Par consquent, la gigue du message m1 est donne par :
508

8 tude avance
des systmes temps rel

8.7 Ordonnancement
en environnement multiprocesseur

J m1 = C 2 + 2 C 1 = 80 + 60 = 140
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 t3 du deuxime site est :
J 3 = J m1 + C m1 = C 2 + 2 C 1 + C m1
= 80 + 60 + 20 = 160
Le pire temps de rponse de la tche t3 sera donc infrieur son chance qui est
gale la priode :
TR 3 = J 3 + C 3 = 160 + 10 = 170 < d 3 = T 3 = 200
2

Site 1

m1
3

Site 2

Figure 8.101 Exemple dune application distribue


dfinie sur deux sites avec trois tches et un message chang.

Dunod La photocopie non autorise est un dlit.

Tableau 8.35 Configuration de trois tches priodiques indpendantes


excuter sur deux processeurs.
Tche

ri

Ci

Di

Ti

Processeur

30

100

100

80

200

200

10

200

200

m1

20

d1

d1 et d2

Site 1
m1

Jm1

t
t

J3
Site 2

d3
t

Figure 8.102 Squence dexcution de lune application dcrite dans le tableau 8.35.

509

Annexes

A REPRSENTATION DE LINFORMATION

Cette annexe prsente les mthodes utilises pour la reprsentation des nombres
entiers signs et des nombres fractionnaires virgule fixe et virgule flottante.

Dunod La photocopie non autorise est un dlit.

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 arithmtiques 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 additionnons 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, afin dviter le problme 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 9e 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.
513

A Reprsentation
de linformation

A.1 Reprsentation binaire des entiers signs

Le tableau A.1 montre les diffrentes reprsentations possibles des entiers signs
sur 8 bits.
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

00000001

00000001

00000001

00000000

00000000

00000000

10000000

11111111

10000001

11111110

11111111

126

11111110

10000001

10000010

127

11111111

10000000

10000001

128

10000000

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) :
[ 2n1..2n1 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 reprsentation pour une variable, il est primordial de savoir si lon choisit une reprsen514

A Reprsentation
de linformation

A.2 Reprsentation des nombres fractionnaires

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].
Afin dillustrer la technique du complment, la figure A.1 prsente son application
dcimale sur 8 chiffres : le complment 10 (complment 9+1). Notons cependant que dans ce cas, le chiffre de poids fort ne peut prendre que les valeurs 0 et 9
pour + et .
Complment 9 de -352 sur 4 chiffres = 9647
Complment 10 (9+1) de -352
= 9648
1 1 1

0456
+9648
0104

La dernire retenue (celle provoque par le signe) est ignore

Figure A.1 Addition des nombres dcimaux 456 et 352 en complment 10.

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 afin 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 microcontrleurs 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 fixe, et la reprsentation en virgule flottante.

Dunod La photocopie non autorise est un dlit.

A.2.1 Nombres virgule fixe

Lorsque lon connat le domaine de variations des nombres manipuls, et la prcision dsire, il est possible de dfinir un type point fixe, caractris par le plus petit
nombre reprsentable appel delta (gnralement il sagit dune puissance ngative
de 2, comme 23 par exemple). Ce sera la puissance de 2 associe au bit de poids
faible. Ensuite, comme illustr sur la figure A.2, les puissances vont croissantes
comme pour les nombres binaires classiques. Gnralement, les nombres en point
fixe sont reprsents sous la forme signe et valeur absolue. Lintervalle de reprsentation dun nombre point fixe sign reprsent sur n bits va de 2n-1*delta+delta
+ 2n-1*delta-delta (le n1 est d au fait que lon perd le bit de signe pour la reprsentation 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 fixe en signe et valeur absolue souffre dune double reprsentation du 0.
515

A Reprsentation
de linformation

A.2 Reprsentation des nombres fractionnaires

delta.2n-2

delta.22 delta.21 delta.20

signe

Sur 8 bits, pour un delta valant 2-3, reprsentation de 10,375


sgn

23

22

21

20

2-1

2-2

2-3

Nombres reprsentables : 15,875 15,875 avec un pas de 0,125

Figure A.2 Reprsentation dun nombre fractionnaire en point fixe.

En fait, la reprsentation point fixe correspond fixer la virgule dans le nombre


rationnel. En effet, le chiffre correspondant 20 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 fixe utilisent le complment
2 pour reprsenter les nombres signs. Par consquent, lutilisation du type point
fixe est relativement efficace, puisque lon peut utiliser tels quels les circuits arithmtiques du processeur : deux nombres donns en point fixe (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 flottante. La reprsentation communment utilise a t normalise sous la norme IEEE 754. Lide de base est dutiliser
des points fixes 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 (figure A.3) : un nombre est (sauf exceptions prsentes
aprs) reprsent en forme normalise, cest--dire sous la forme signe*1,mantisse*
2exposant. Or en binaire, il est inutile de reprsenter le bit toujours 1 avant la virgule. Ce bit nest donc pas reprsent pour un flottant 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 2n valeurs possibles de n bits en dcalant du biais lintervalle [0..2n 1]. Cela revient donc considrer que les valeurs possibles de lexposant sont comprises dans [ biais..2n 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]).
Afin daffiner la prcision autour du 0, la norme IEEE 754 propose certains amnagements rcapituls dans le tableau A.2. On pourra noter une reprsentation
516

A Reprsentation
de linformation

A.2 Reprsentation des nombres fractionnaires

2-2+exp
2-1+exp
2-3+exp

sgn

2-22+exp
2-21+exp 2-23+exp

Exposant biais

Mantisse

8 bits biaiss de 127 :


En normalis
exp = exposant biais 127

23 bits+1 bit cach


En normalis, le bit cach se lit 2exp

Figure A.3 Reprsentation dun nombre virgule flottante au format IEEE 754 sur 32 bits.

dnormalise lorsque lexposant est gal biais (reprsentation 0 de la partie


exposant biais du flottant).
Tableau A.2 Smantiques spcifiques du format IEEE 754.
Nombre

Caractrisation

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)

Dunod La photocopie non autorise est un dlit.

La figure A.4 montre que les flottants correspondent des points fixes par partie,
avec autant de parties que dexposants possibles.
Flottants dnormaliss
2-149
e=0
m=0
0

2-149

e=0
m=1
2-149

2-149

Flottants normaliss
2-149

2-149

e=0 e=0
e=1
e=1 e=1
m=2 m=3 m=2231 m=0 m=1
2*2-149 3*2-149 2-1262-149 2-126 2-126+2-149

2-149

2-148

2-148

e=1
e=2
m=2231 m=0
2-1252-149 2-125

e=2
m=1
2-1252-148

2104
e=254
m=2231
21282104

e : exposant biais
m : valeur binaire prsente dans la mantisse

Figure A.4 Domaines et prcisions des flottants IEEE 754 sur 32 bits.

517

A Reprsentation
de linformation

A.2 Reprsentation des nombres fractionnaires

Afin dillustrer la complexit des oprations arithmtiques sur les flottants, citons
la prise en compte des smantiques diffrentes suivant la reprsentation (infini,
Not a Number , normalis ou dnormalis), citons aussi la complexit, relativement
aux oprations entires, dune opration basique, telle laddition de deux flottants.
Afin dadditionner deux nombres flottants, il faut :
mettre les deux nombres au mme exposant, ce qui peut faire apparatre le bit
cach dans le flottant de plus petit exposant, au dtriment des bits de poids faible
qui peuvent tre perdus (le flottant peut tre arrondi).
Laddition des mantisses peut alors tre ralise.
Le flottant obtenu est alors renormalis (si lexposant le permet).
Afin doptimiser ces oprations, les microprocesseurs sadjoignent souvent un coprocesseur spcialis dans les calculs virgule flottante. Pour les microcontrleurs, cela
est moins frquent. Un concepteur souhaitant raliser une rgulation, par PID (Proportionnelle, Intgrale, Drive) par exemple, devra donc tre conscient du fait que
sil manipule des nombres flottants, et quil ne possde pas de coprocesseur spcialis, chaque opration arithmtique flottante ncessite de nombreuses instructions
et est donc coteuse en nombre de cycles processeur.
Enfin, il est indispensable davoir conscience que larithmtique en nombres flottants 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 flottants 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 significativement diffrentes de celles que lon aurait obtenues laide dun calcul symbolique.

518

B STANDARDS POSIX

Dunod La photocopie non autorise est un dlit.

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.

519

Nom IEEE

Nom

Notes

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.

520

Dunod La photocopie non autorise est un dlit.

Nom IEEE

Nom

Notes

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.

521

Nom IEEE

Nom

Notes

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.

522

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


/*

Dunod La photocopie non autorise est un dlit.

BaLs.h
Taille
Taille
Taille
Taille

: dfinitions de diffrents types de BaL


1, sans ecrasement: bal
1, avec crasement: bal_ecr
n, sans ecrasement: bal_n
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

523

C Module
de botes aux lettres POSIX

C.1 En-tte de module

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 */

524

C Module
de botes aux lettres POSIX

C.1 En-tte de module

Dunod La photocopie non autorise est un dlit.

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 */

525

C Module
de botes aux lettres POSIX

C.2 Corps de module

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
Taille
Taille
Taille
Taille

: dfinitions de diffrents types de BaL


1, sans ecrasement: bal
1, avec crasement: bal_ecr
n, sans ecrasement: bal_n
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;

526

C Module
de botes aux lettres POSIX
pthread_cond_init
conditionnelle qui sera
pthread_cond_init
conditionnelle qui sera
return b;
}

C.2 Corps de module

(&((*b).pas_vide), 0); /* Variable


dclenche lorsquun message est ajout */
(&((*b).pas_plein), 0); /* Variable
dclenche lorsque la bal est vide */

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;
}

Dunod La photocopie non autorise est un dlit.

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 */

527

C Module
de botes aux lettres POSIX

C.2 Corps de module

(*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;

528

C Module
de botes aux lettres POSIX

C.2 Corps de module

/* 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;
}

Dunod La photocopie non autorise est un dlit.

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) {

529

C Module
de botes aux lettres POSIX

C.2 Corps de module

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);

530

C Module
de botes aux lettres POSIX

C.2 Corps de module

/* 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;
}

Dunod La photocopie non autorise est un dlit.

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);
}

531

D MODULE DE COMMUNICATION ADA

Cette annexe prsente le code source comment dun module Ada gnrique dfinissant 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 dfinies ci-aprs ncessitent lemploi de files de messages bornes.
Le module prsent dans cette section dfinit des files bornes implmentes sous
la forme de tableaux circulaires.

Dunod La photocopie non autorise est un dlit.

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]

533

D Module
de communication Ada

D.1 Spcification de module

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;

534

D Module
de communication Ada

D.1 Spcification de module

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;

Dunod La photocopie non autorise est un dlit.

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

535

D Module
de communication Ada

D.1 Spcification de module

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;

536

D Module
de communication Ada

D.2 Corps de module

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

Dunod La photocopie non autorise est un dlit.

-- 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;

537

D Module
de communication Ada

D.2 Corps de module

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;

538

BIBLIOGRAPHIE

G. ASCH, et coll., Les capteurs en instrumentation industrielle, Dunod (1991).


J.G.P. BARNES, Programmer en Ada 95, Addison-Wesley (2000).
A. BURNS, A. WELLINGS, Concurrency in Ada, Cambridge University Press (1998).
G. BOOCH, Ingnierie du logiciel ADA, InterEditions (1988).
L. BRIAND, Systmes temps rel en ADA, Masson (1991).
F. COTTET, LabVIEW : Programmation et applications, Dunod (2001).
F. COTTET, Traitement des signaux et Acquisition de donnes, Dunod (2002).
F. COTTET, J. DELACROIX, C. KAISER, Z. MAMMERI, Ordonnancement temps rel,
Hermes (2000).
A. DORSEUIL, P. PILLOT, Le temps rel en milieu industriel, Dunod (1991).
P. FICHEUX, Linux embarqu, Eyrolles (2002).
S. GOLDSMITH, Real-time Systems Developments, Prentice Hall (1993).
H. GOMAA, Software Design Methods for Concurrents and Real-Time Systems, Addison-Wesley (1993).
D. HATLEY, I. PIRBHAI, Stategies for Real-Time System Specification, Hermes (1988).
B.W. KERNIGHAN, D.M. RITCHIE, Le langage C, norme ANSI, Dunod (1997).
M.H. KLEIN, T. RALYA, B. POLLAK, R. OBENZA, M.G. HARBOUR, A Practitioners
Handbook for Real-Time Analysis, Kluwer Academic Publishers (1993).
Dunod La photocopie non autorise est un dlit.

H. KOPETZ, Real-Time Systems, Kluwer Academic Publishers (1997).


A.M. LISTER, Principes fondamentaux des systmes dexploitation, Eyrolles (1983).
M. MALAGARDIS, Projet Sceptre : proposition de standard de noyau dexcutif temps
rel, Bureau dOrientation de la Normalisation en Informatique (Rapp. BNI 26/2).
N. NISSANKE, Realtime Systems, Prentice Hall, series in Computer Science (1997).
H. NUSSBAUMER, Informatique industrielle, Presses Polytechniques Romandes (1986).
P. RICHARD, M. RICHARD, F. COTTET, Analyse holistique des systmes temps rel
distribus : principes et algorithmes , chapitre 7 de Ordonnancement pour linformatique parallle , Hermes (2003).
A. TANENBAUM, Architecture de lordinateur, cours et exercices, Dunod (2001).
539

A. TANENBAUM, Rseaux, cours et exercices, Dunod (1997).


J. TOUX, Capteurs, Techniques de lIngnieur, trait Mesure et Contrle.
D. TSCHIRHART, 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 profil Ravenscar (en anglais) : http://polaris.dit.upm.es/~str/proyectos/ork/

540

LEXIQUE ANGLAIS FRANAIS

Dunod La photocopie non autorise est un dlit.

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

541

Anglais

Franais

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 vnement 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)

542

Dunod La photocopie non autorise est un dlit.

Anglais

Franais

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

543

Anglais

Franais

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

544

Anglais

Franais
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

Dunod La photocopie non autorise est un dlit.

Stack

545

SIGLES

Dsignation complte

Sigle
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

546

Dunod La photocopie non autorise est un dlit.

Sigle

Dsignation complte

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

547

Sigle

Dsignation complte

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

548

Dunod La photocopie non autorise est un dlit.

Sigle

Dsignation complte

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

549

Sigle

Dsignation complte

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

550

Index

INDEX

Gnralits
.dll 394

Dunod La photocopie non autorise est un dlit.

A
Access Point 169
accumulateur 111
accus de rception 173
actionneur 2
Ada body 273
Ada specification 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 Attachment) 129
dentres/sorties 128
externe 128
FireWire 129
IDE (Integrated Drive Electronics) 129
ISA (Industry Standard Architecture)
129

551

Index

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

552

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

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

Dunod La photocopie non autorise est un dlit.

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
fichier
dchange 158
excutable 269
temps rel 214
FIFO (First In First Out) 141
file temps rel 244
FIP 166, 180
flot de donnes 30, 251, 331
flottant dnormalis 517
fonction 265
frquence dhorloge 110
front montant ou descendant 134
FTP 176

G
gain 135
gamme 135
garde 186

553

Index

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

554

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
flots 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

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

Dunod La photocopie non autorise est un dlit.

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
fixe 515
pointeur 255, 258
polling 126
port 176
numrique 132
srie 388
portage 396

555

Index

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
profils
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

556

registre 111
dcalage 262
dtat (flags) 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

Dunod La photocopie non autorise est un dlit.

Index

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
spcification 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

557

Index

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 flottante 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
#define 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

558

CLOCK_CPU_TIME 217
clock_getres 218
CLOCK_MONOTONIC 217
clock_nanosleep 218
CLOCK_REALTIME 216
CLOCK_THREAD_CPUTIME_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

F
float 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

Dunod La photocopie non autorise est un dlit.

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

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

nanosleep 218
natural 250

O
or else 262
others 257

raise 213
record 250
ReleaseResource 225
ResumeAllInterrupts 227
rwlocks 219

559

Index

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

560

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

TECHNIQUE ET INGNIERIE

GESTION INDUSTRIELLE

Srie EEA
CONCEPTION

FROID ET GNIE CLIMATIQUE

MCANIQUE ET MATRIAUX

Francis Cottet Emmanuel Grolleau


CHIMIE

SYSTMES TEMPS REL DE


CONTRLE-COMMANDE

ENVIRONNEMENT ET SCURIT

EEA

Conception et implmentation
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.

ISBN 2 10 007893 3

www.dunod.com

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.

Vous aimerez peut-être aussi