Académique Documents
Professionnel Documents
Culture Documents
| EEA
Francis Cottet
Emmanuel Grolleau
SYSTMES
TEMPS REL
CONTRLECOMMANDE
DE
Conception
et implmentation
Francis Cottet
Emmanuel Grolleau
Avant-Propos
1.1 Introduction
1.2 Architecture des applications de contrle-commande
1.3 Dveloppement des applications de contrle-commande
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
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
245
245
285
314
331
341
341
7.2 Spcification
342
7.3 Conception
350
354
388
394
7.7 Conclusion
405
407
8.1 Introduction
407
409
431
447
463
481
491
Annexes
A Reprsentation de linformation
513
B Standards POSIX
519
523
533
Bibliographie
539
541
Sigles
546
Index
551
IV
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
VII
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) :
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
Systme informatique
de contrle-commande
actionneur
Commandes
Affichages
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)
Synchronisations
ou communications
Donnes produites par lenvironnement
Pas de contraintes de temps
Algorithmique
Donnes linitialisation
Pas de contraintes de temps
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
Commande de r-injection
gaz chappement
Capteur
Calculateur
pression collecteur
Bus CAN
Communications
avec les autres
calculateurs
Capteur
pdale acclrateur
Capteur
pollution en amont
Capteur
temprature air
Capteur
pollution en aval
Commande
injecteur essence
air
Commande
allumage
1 Dveloppement des
systmes de contrle-commande
1.1 Introduction
1 heure
Contrle
fabrication
1 minute
Contrle
stockage
1 seconde
10 ms
1 ms
1 s
100 ns
Robotique
Systmes
vocaux
Systmes
radar
Systmes
mesures
scientifiques
Application
1 Dveloppement des
systmes de contrle-commande
1.1 Introduction
1 Dveloppement des
systmes de contrle-commande
1 Dveloppement des
systmes de contrle-commande
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
1 Dveloppement des
systmes de contrle-commande
Tches de communications : ces tches sont destines grer les messages envoys
ou reus travers un ou plusieurs rseaux ou bus de terrain. Si ce type de tches
existe, lapplication est dite distribue ou rpartie.
Tches de sauvegarde : ces tches permettent de stocker ltat du systme des
instants 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
Ressource
critique
Tche 2
Tche 3
R
Tche 4
Tche 5
Tche 6
1 Dveloppement des
systmes de contrle-commande
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
10
1 Dveloppement des
systmes de contrle-commande
Application
Lecture_consigne
Lecture_consigne
Occurrences
observes
par le systme
Suspension d'un traitement en cours
Occurrences
mises
par le procd
temps
Clavier
Alerte
11
1 Dveloppement des
systmes 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
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
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
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
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
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
1
Langages
ractifs
3
Langages
standards
(Langage C)
Langages
multitches
(Langage Ada)
Autre
langage
15
1 Dveloppement des
systmes de contrle-commande
langages ractifs (langages Lustre, Esterel, Signal) : ces langages donnent non
seulement la possibilit de dcrire les fonctionnalits du programme, mais aussi
lenchanement des diffrentes parties. Le noyau est donc limit une couche
proche du matriel li notamment la gestion des interruptions. En revanche,
tant donn la possibilit trs limite dexpression de laspect fonctionnel, ils
sont souvent associs un langage standard pour palier ce manque.
1.2.2 Architecture matrielle des applications de contrle-commande
Comme nous lavons vu en introduction, laspect matriel a une trs grande 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
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.
1 Dveloppement des
systmes de contrle-commande
1.2 Architecture des applications
de contrle-commande
17
1 Dveloppement des
systmes de contrle-commande
1 Dveloppement des
systmes 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
Analyse
des
besoins
Cahier
des
charges
Conception
Spcification
globale
Validation externe
Programmation
Conceptions
prliminaire
et dtaille
Logiciel
Validations internes
19
1 Dveloppement des
systmes 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
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
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
Architecture
logicielle
Architecture
matrielle
CONCEPTION
P R LIMINAIRE
CONCEPTION
DTAILLE
CONCEPTION
DTAILLE
CODAGE
RALISATION
TEST
TEST
I N T GRATION
VALIDATION
21
1 Dveloppement des
systmes 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
22
1 Dveloppement des
systmes de contrle-commande
VALIDATION
SIMULATION
INTGRATION
avec noyau
INTGRATION
CONCEPTION
ADAPTE
CONCEPTION
TESTS
CODAGE
Dveloppement
en environnement hte
TESTS
CODAGE - Crois
Dveloppement
en environnement cible
23
1 Dveloppement des
systmes 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
VALIDATION
SPCIFICATION
SA-RT
MSMC
StateCharts
UML
SA-RT
DARTS
MSMC
StateCharts
UM
HOOD
CONCEPTION
PRLIMINAIRE
INTGRATION
CONCEPTION
DTAILLE
DARTS
StateCharts
GRAFCET
HOOD
TESTS UNITAIRES
CODAGE
1 Dveloppement des
systmes de contrle-commande
26
2 SPCIFICATION
SELON LA MTHODE SA-RT
2 Spcification
selon la mthode SA-RT
SADT
Spcification
statique
dun logiciel
SA
Structured Analysis
(E. Yourdon, T. Demarco, 1979)
Spcification
dynamique
dun logiciel
SA-RT
ESML
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.
2 Spcification
selon la mthode SA-RT
Signification
Traitement ou process
Cercle ou bulle
Action dcrite par :
verbe + nom
Flot de donnes
Unit de stockage
ou rservoir
Entit ou zone de
rangement de donnes
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
2 Spcification
selon 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.
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
Lecture
de donnes
criture
de donnes
tiquette
Processus
N
Transformation
de donnes
Exemples
Mesurer
temprature
1
Commander
vanne
2
Calculer
moyenne
3
Signal
temprature
Signal
interrupteur
Mesurer
temprature
1
Commander
lampe
2
Temprature
mesure
Allumage
lampe
Distance
parcourue
Calculer
vitesse
3
Affichage
vitesse
Top horloge
e
nn
Do
Donn e
nn
Do
_1
nn
_1
Do
nn
Donn e
_2
Donn e
nn
nn
_1
_1
Donn e
Do
Donn e
Donn e
Do
Do
Regroupement
Dcomposition
_2
2 Spcification
selon 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
Pression
Temprature
Paramtres_moteur
Paramtres_moteur
2 Spcification
selon la mthode SA-RT
Temprature_consigne*
Signal_temprature
Mesurer
temprature
1
Rguler
temprature
2
Chauffage
Afficher
temprature
3
Affichage
Temprature_mesure
Temprature_consigne*
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 * .
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
Signal
Production
de donnes
Consommation
de donnes
Actionneur
vnement
Pilotage de lexcution
Donne_1
Donne_2
Donne_1
Processus
1
Donne_3
Donne_2
(a)
Processus
1
Donne_3
(b)
2 Spcification
selon la mthode SA-RT
Contrler
temprature
1
Piloter
vanne
2
Grer
moteur
3
Trop_chaud
Contrler
chauffage
2
Temprature_consigne
35
2 Spcification
selon la mthode SA-RT
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
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
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
Capteur glissement
Contrler
systme
freinage
0
Affichage_ABS
Systme de freinage
Voyant ABS
Glissement_roue
37
2 Spcification
selon la mthode SA-RT
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
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
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
2 Spcification
selon la mthode SA-RT
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
40
2 Spcification
selon la mthode SA-RT
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
(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
Demande_freinage
Mise_en_marche
Commande_freinage
Capteur glissement
Contrler
systme
freinage
0
Affichage_ABS
Systme de freinage
Voyant ABS
Glissement_roue
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
2 Spcification
selon 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
2 Spcification
selon la mthode SA-RT
Demande_freinage
Acqurir
demande
freinage
1
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
2 Spcification
selon la mthode SA-RT
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
tat repos
Mise_en_marche
<E> 3
<T> 1
Phase dacquisition
Acquisition_termine
<T> 3
Phase de traitement
Traitement_termin
<T> 1
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)
46
2 Spcification
selon 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.
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
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
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)
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
48
2 Spcification
selon la mthode SA-RT
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
2 Spcification
selon la mthode SA-RT
2 Spcification
selon la mthode SA-RT
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 (/)
2 Spcification
selon la mthode SA-RT
2 Spcification
selon la mthode SA-RT
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
Itration
Pression
Pression
7
air
Itration
avec bornes
Pression
1-5 Pression
air
53
2 Spcification
selon la mthode SA-RT
2 Spcification
selon 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 = ..
...
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
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
MS
LS
Pompe
HLS
Puisard
LLS
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
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
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.
60
tat alerte
(consignes dpasses)
et pompe en marche
Consigne respecte
<D> 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.
Consigne respecte
<D> Afficher alarme
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
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
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
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
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
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
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
Ac
Bus CAN
c
r
T_
ge
ma
Piloter
moteur
0
Vite
Capteur vitesse
Po
llu
n_
tio
l
Po
n_
io
ut
Commande allumage
u
All
sse
T_eau
om
om
air
_E
_S
ai
P_
ur
te
ra
Injecteur
En
Commande injecteur
tr
e_a
ir
En
tr
e_
ga
z_
b
Commande admission gaz brls
67
2 Spcification
selon la mthode SA-RT
2.8 Exemples
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
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
laboration
contrle
moteur
Commande_prte
<T> 6
<T> 7
<T> 8
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
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
70
2 Spcification
selon la mthode SA-RT
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
Consigne_dpasse
Jetons disponibles
71
2 Spcification
selon la mthode SA-RT
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
Langage graphique
de haut niveau
pour la spcification
Langage machine
pour l'analyse
Mthode SA-RT
Rseaux de Petri
72
2 Spcification
selon la mthode SA-RT
m Principes gnraux
crire_donne_vide
Processus
A
1
Donne
Processus
B
2
Vide
Valeur
crire_donne
Lire_donne
73
2 Spcification
selon la mthode SA-RT
crire_donne_vide
Processus
A
1
Donne
Processus
B
2
Vide
Valeur
Lire_donne
crire_donne
(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
Initialement
Aprs crire_donne
Aprs Lire_donne
74
Donne
tat
Non dfinie
Dfinie
Dfinie
Ancien
Nouveau
Ancien
2 Spcification
selon la mthode SA-RT
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
75
2 Spcification
selon la mthode SA-RT
Donne_a
Processus
A
1
Processus Donne_c
B
2
Donne_s
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
2 Spcification
selon la mthode SA-RT
2.9 Extensions de la mthode SA-RT
77
2 Spcification
selon la mthode SA-RT
sus B. Lunit de stockage est modlise par une seule place Donne_s comme
le montre le modle initial de la 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
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
79
3 CONCEPTION
SELON LA MTHODE DARTS
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
3 Conception
selon la mthode DARTS
3.1 Introduction
SD Structured Design
(E. YOURDON, L.L. CONSTANTINE, G. MEYERS, 1979)
Ada
C
labVIEW
Ada
C++
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
82
3 Conception
selon la mthode DARTS
3.1 Introduction
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
3 Conception
selon la mthode DARTS
3.1 Introduction
Systme de contrle
Procd contrler
Horloge
temps rel
1
2
Logiciel
Noyau
temps rel
Tches
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
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
3 Conception
selon 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
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
Rendez-vous
Synchronisation multiple
de type OU
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
BAL priorit
88
3 Conception
selon la mthode DARTS
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
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
89
3 Conception
selon la mthode DARTS
Comme nous lavons dj explicit, les tches logicielles sont dclenches par dautres
tches (matrielles ou logicielles) avec les mcanismes de synchronisation ou de
communication de type bloquant. Ainsi, le signal dactivation de ces tches peut
tre laction des lments suivants (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
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
90
3 Conception
selon la mthode DARTS
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
Module_de_donnes
LIRE
CRIRE
CRIRE
INITIALISER
91
3 Conception
selon la mthode DARTS
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
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
Tester
tat
Moteur
3
HTR (2 ms)
Commande_moteur
Temprature_moteur
Vitesse_moteur
Contrle
moteur
Commande_moteur
Vitesse_moteur
93
3 Conception
selon la mthode DARTS
Nous pouvons noter les noms des diffrents lments qui sont conservs autant
que possible. Cette tche matrielle est donc une tche dacquisition de donnes
dite scrutation. La transmission de la donne Commande_moteur est traduite
par une bote aux lettres n places conformment la prconisation de la rgle 3.1.
Dans lexemple de la 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
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
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.
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
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
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
Acqurir
Demande freinage
Commander
freinage
Commande_freinage
tat_glissement
Evt _freinage
LIRE
Freinage
CRIRE
Contrler
application
Dtecter
glissement roue
tat_demande_ABS
LIRE
CRIRE
Lire
bouton ABS
Afficher
tat bouton ABS
ABS_activ
Affichage_ABS
3 Conception
selon la mthode DARTS
tat_demande_ABS
LIRE
CRIRE
Cas l
Activation_ABS
Afficher
tat bouton ABS
Lire
bouton ABS
ABS_activ
Affichage_ABS
tat_demande_ABS
LIRE
CRIRE
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
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
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.
Distance
Dterminer
distance
2
Vitesse
Dterminer
vitesse
Vitesse
Taille_roue
Temps
Figure 3.23 Exemple dun regroupement de tches dun diagramme multitche DARTS
bas sur une cohsion squentielle.
99
3 Conception
selon la mthode DARTS
Afficher
nouvelle
valeur
2
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.
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
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
LIRE
LIRE
CRIRE
CRIRE
Commande_freinage
Dtecter
glissement roue
Lire et afficher
demande ABS
Affichage_ABS
101
3 Conception
selon la mthode DARTS
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
102
3 Conception
selon la mthode DARTS
dynamique des grandeurs physiques associes : 500 ms pour la mesure dun taux
de gaz (variation du mthane dans lair : volution rapide) et 5 s pour la mesure dun
niveau (eau dans un puisard : volution lente). Cette diffrence de vitesse dexcution
ncessite lemploi dun module de donnes Niveau_eau pour le passage de 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.
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
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.
3 Conception
selon la mthode DARTS
Nous pouvons noter la relation entre les deux tches Acqurir temprature , et
Rguler temprature qui correspond aux modles du cas I de la 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
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
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
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.
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
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
T_air
T_eau
P_air
vitesse
HTR (5 ms)
acclrateur
3 Conception
selon la mthode DARTS
3.3 Exemples de conception
avec la mthode DARTS
107
3 Conception
selon la mthode DARTS
pouvons noter que la tche matrielle Communiquer bus CAN est la fois une
tche dentres et de sorties. Cette synchronisation forte est implmente laide
de deux botes aux lettres une place Vitesse_moteur et Mlange , et dune
synchronisation Synchro_allumage .
Cette diffrence de vitesse dexcution entre ces tches dacquisitions ncessite
lemploi de quatre modules de donnes pour le passage de paramtres 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.
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
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
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
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
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
4 Architectures systmes
Sens
Adresse
de linstruction
en notation
hexadcimale
Code machine
en notation
hexadcimale
Instruction
en assembleur
0040101E
A1 E4 A6 40 00
00401023
8B 0D E0 A6 40 00
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
00401036
A3 E4 A6 40 00
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 Architectures systmes
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
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
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).
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
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)
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
(a b) a b
(a b) a b
(ab) = a + b
(a + b) = ab
a + ab = a
a(a + b) = a
a + (ab) = a + b
a(a + b) = a + b
a b = a + b
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
119
4 Architectures systmes
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
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
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
1425 =b 10110010001
2
1425 =o2621
1425 =b 10110010001
5
1425 =0x591
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
121
4 Architectures systmes
57
+24
81
b111001
+b011000
b1010001
122
4 Architectures systmes
Encapsulation du additionneur
(correspond au additionneur gauche)
a
Ri+1
R
Add
Si
Ri (Retenue prcdente)
Ri+1
Add
ai
R
Add
bi
Si
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
C : unsigned long
LabVIEW : U32
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)
Exemples
Utilisations type
16 = 24
Proprit algbrique
4 Architectures systmes
4.1 Architecture matrielle
4 Architectures systmes
tester certains bits (celui-ci est-il 1, celui-l est-il 0 ?). Pour cela, on utilise les
oprateurs binaires qui sont directement issus de lalgbre boolenne. Il est donc bon
davoir quelques repres binaires et boolens (voir tableau 4.5). Rappelons (voir
4.1.2) que le 0 est absorbant pour le et , et neutre pour le ou , et que le 1 est
absorbant pour le ou et neutre pour le et . Rappelons de plus que la 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.
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
ASCII
BCD
EBCDIC
ANSI
Unicode
Donnes
non numriques
Donnes 0
Binaire positif
Donnes 0 et 0
Donnes
entires
Donnes
numriques
Donnes
fractionnaires
Virgule fixe
Virgule flottante (IEEE)
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
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).
Interruption
Processeur utilis
par un programme
Processeur utilis
par lISR
127
4 Architectures systmes
Il peut tre possible dignorer compltement une interruption : cela sappelle dsarmer
une interruption. Linterruption pourra nouveau tre prise en compte lorsquelle
sera arme.
Pour retarder le traitement dune interruption (par exemple lors du traitement dune
autre interruption), on peut masquer une interruption. Dans ce cas, les requtes
dinterruptions sont si possible mmorises : ces requtes seront traites lorsque
linterruption sera dmasque.
m Bus dentres/sorties
Au niveau logiciel, la possibilit dutiliser les interruptions pour viter lattente active
se traduit par la possibilit deffectuer des lectures bloquantes. De plus, la plupart
du temps, les envois sur les bus dentres/sorties sont bufferiss et suspensifs pour
le programme les mettant. Cela 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
4 Architectures systmes
des lments varis qui peuvent tre relativement gourmands en dbits de donnes
(souris, clavier, webcams, imprimantes, scanners, modems, capteur GPS). Il a
lavantage de pouvoir transporter lalimentation vers le matriel lorsque celui-ci
consomme peu dnergie. Cependant, bien quil soit possible quil simpose dans
quelques annes sur le march des lments temps rel, il na pas encore fait de relle
apparition dans ce domaine, et peu de microcontrleurs intgrent un bus USB ;
bus FireWire (norme IEEE 1394) : ce bus srie externe concurrence lUSB 2.0
dans sa version a, offrant des dbits de lordre de 50 Mo/s. Ce bus est trs utilis
pour lacquisition vido numrique (le format de compression vido utilis, le 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
Norme
Largeur
en bits
Frquence
Dbit maximal
thorique
Applications
typiques
bus externes
Srie
RS 232
Parallle
240 Ko/s
3 Mo/s
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
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
MHz
106 cycles/s
GHz
109 cycles/s
THz
1012 cycles/s
PHz
1015 cycles/s
Mesures de capacit
k
kilo
103
ko
210
1024
mga
106
Mo
220
1048576
giga
109
Go
230
1073741824
tra
1012
To
240
1099511627776
pta
1015
Po
250
1125899906842624
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
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
Ligne 0
Ligne 1
Ligne 2
Relais
lectrique
Ligne 3
Port 0
lectrovanne TOR
220 V ~
Ligne 5
Ligne 6
Relais
lectrique
Ligne 7
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
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
Ligne 0
Ligne 1
Ligne 2
Ligne 4
Ligne 5
Ligne 6
Ligne 7
Port 0
Ligne 3
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
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
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
136
Horloge
Horloges
Slection
des registres
Dcodeur
dadresses
Donnes
Interface bus
16 1
Multiplexeur
Convertisseur 12 bits
numrique - analogique
Amplificateur
gain
programmable
Compteur
(24 bits)
Circuits compteurs/temporisateurs
Compteur
(24 bits)
Interface dentres/sorties
numriques programmable
Convertisseur 12 bits
numrique-analogique
Convertisseur 12 bits
numrique-analogique
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
4 Architectures systmes
Applications
Systme dexploitation
Matriel
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
4 Architectures systmes
Terminaison
Attente dune dure
Excut
Endormi
Premption
Rveil
Suppression
Attente bloquante
lection
Prt
Cration et initialisation
Suppression
Bloqu
Existant
Suppression
Inexistant
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
Droulement du processus P1
Droulement du processus P2
Droulement du processus P1
Temps
Autre vue : le diagramme de Gantt
SE
Temps
P1
P1
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
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
P1
P2
P3
P4
Symbolise linstant de cration
141
4 Architectures systmes
Les critres dvaluation des algorithmes dordonnancement utiliss dans les systmes
dexploitation classiques sont les suivants :
lquit caractrise le fait que le processeur est rparti de faon quitable entre
les processus. Ainsi, lalgorithme dordonnancement FIFO nest pas quitable,
car si un processus a une dure trs longue, les processus lancs aprs devront
attendre longtemps avant de pouvoir sexcuter. Si lon se place dans le contexte
dun systme dexploitation classique, cela 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
Temps
P4
SE
Dure du surcot
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 Architectures systmes
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
Incrmenter le registre R
Incrmenter le registre R
Transfrer le registre R dans X
144
4 Architectures systmes
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.
m Exclusion mutuelle
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
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
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
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
4 Architectures systmes
Tampon
Libre taille_tampon
Plein 0
Consommateur
Dbut
Prendre(Plein)
Prendre dans tampon
Consommer
Vendre(Vide)
Fin
Smaphores
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
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
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
Incrmenter
Dcrmenter
Lire
Attendre_valeur_positive
Moniteur
Pi
Pj
151
4 Architectures systmes
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
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.
4 Architectures systmes
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
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
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)
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
Adresse de retour 3
fin
Adresse de retour 2
f3(i,4)
Excution f1(3)
i, j:entier
.
f2(i)
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
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 Architectures systmes
Seule ladresse physique du dbut de la page doit tre retrouve. Il faut alors une
sorte dannuaire par processus, appele table des pages, qui fait la correspondance
entre numro de page logique, sur 20 bits, et adresse physique du cadre contenant
la page. Si la page nest pas en mmoire centrale, la MMU se charge de ly placer
avant de trouver ladresse physique du cadre correspondant. Donc la MMU se charge
deffectuer la correspondance entre les 20 bits de ladresse logique dune page dun
processus et les 20 bits de ladresse physique du cadre contenant la page (en 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
x2
Adresse
physique
y
Table des pages
Un niveau de table
x1
Adresse
logique
0
1
...
x1
Adresse
physique
y
0
1
...
x2
z
Table des pages
situe dans la page y
159
4 Architectures systmes
lement 5 10 cycles machine, et il peut falloir 3 accs pour accder une variable
(accs la table des pages de premier niveau, accs la table de second niveau, pour
obtenir ladresse physique du cadre contenant la variable), avec, suivant lutilisation
de la mmoire physique, possibilit davoir swapper pour utiliser ces 3 pages.
Dans le pire des cas, laccs une variable peut donc se compter en dizaines de 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.
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
Arbre
Maillage
Anneau
toile
BUS
Anneau ( diffusion)
ou boucle
Radio ou satellite
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
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
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
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
Donnes
Donnes
Donnes
Signal
1011101100110011001010010111
Bits
Datagramme
En-tte En-tte
IP
TCP
Segment
En-tte
TCP
Donnes
Mdium de communication :
paire torsade, cble coaxial, fibre optique, support immatriel
Recherche adresse IP de la
prochaine machine atteindre
pour transmettre les donnes
destination (routage),
fragmentation ventuelle
Donnes
Queue
MAC
4 Architectures systmes
4.3 Rseaux et bus de terrain
163
4 Architectures systmes
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
164
Gestion
de la transmission
protocole
4 Architectures systmes
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)
4 Architectures systmes
Alatoire
Contrl
Rsolution de collision
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
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
1500 o Taille 46 o
Taille 64 o
Switch
Extrieur
Serveur
important
Routeur
Switch
Hub
Hub
Figure 4.33 Un bus Ethernet ressemble davantage une toile ramifie qu un bus.
4 Architectures systmes
certain que tous les nuds concerns saperoivent aussi de la collision (il y a une
taille minimale de trame de 64 octets 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.
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
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.
169
4 Architectures systmes
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
Rseau
Machine
Adresses IP de B : 128 prfixe 191
1 0
Rseau
Machine
Rseau
Machine
Groupe
Adresses IP de classe E : 240 prfixe
1 1 1 1 0
Rserv
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
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
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
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
Correspondance
avec le modle OSI
UDP
5, 6, 7
Physique
4 Architectures systmes
4 Architectures systmes
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
4 Architectures systmes
les volumes de donnes transfrs sont moins importants (donns sur ltat du
procd, informations provenant de capteurs ou commandes vers des actionneurs,
commande de supervision) ;
les contraintes de temps dues aux aspects temps rel du contrle ncessitent des
modes daccs dterministes au mdium ;
certains messages tant plus importants que dautres, des mcanismes de priorit
doivent tre introduits ;
face un environnement de terrain, le matriel utilis doit tre robuste ;
tant donne la criticit des donnes transmises, le contrle derreur doit tre
important ;
les nuds connects par un rseau de terrain sont souvent des calculateurs ayant
moins de puissance de calcul quun ordinateur, il faut donc des protocoles 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.
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
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.
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
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
Donnes
0 8 octets
CRC
15 bits
ACK
2 bits
End of Frame
7 bits
Identifier (ID)
11 bits
Donnes
0 8 octets
CRC
15 bits
ACK
2 bits
End of Frame
7 bits
179
4 Architectures systmes
M Le protocole FIP
WorldFIP est une autre illustration de rseau de terrain trs utilis dans lindustrie.
Comme CAN, il permet de faire communiquer diffrents nuds, certains nuds
tant spcialiss dans des acquisitions de capteurs ou dans des commandes 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
Un excutif temps rel peut tre employ la place dun systme dexploitation
gnraliste par un systme de contrle-commande lorsquil est soumis des contraintes
de temps, ou bien lorsquil doit tre embarqu sur un microcontrleur.
5.1 Introduction
5.1 Introduction
Processus utilisateur
Modules
Tche
utilisateur
Noyau
Matriel
Tche
de services
Tche
de services
Noyau
Matriel
182
5.1 Introduction
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
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.
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
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
m lments de base
M Smaphores
Nous avons prsent au chapitre 4 loutil smaphore : un smaphore est une variable
soit binaire (deux tats sont possibles : libre et pris), soit n-aire. Dans le cas des 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
Smaphore binaire
tat
(1=libre, 0=pris)
File(s)
de tches
en attente
File(s)
de tches
en attente
Priorit
plafond
(b)
(a)
File(s) dattente
{tches, nombre
dinstances requises}
(a)
File(s) dattente
{tches, nombre
dinstances requises}
Priorit
plafond
(b)
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
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
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
Procdure vendre_tout
Dbut
rseau_libre := vrai
rs232_libre := vrai
Fin
Moniteur la Ada
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.
M Variables conditionnelles
File dattente
de tches
189
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
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
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.
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
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
192
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
193
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
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
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
oriente message (figure 5.11) : le message est muni dune priorit influenant
lordre dans lequel il va tre lu ;
Message
2
Message
1
mettrice
Message
3
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
Message
1
mettrice
de priorit moyenne
mettrice
de priorit faible
Message
2
Message
3
Rceptrice
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
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
196
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
Cet outil de communication tant mme dutiliser des fichiers physiques, il noffre
aucune garantie de dlai de communication.
M Le socket
Flot doctets
Client
Serveur
Flot doctets
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
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
Tche appelante
a
b
Fin rendez-vous(a, b)
Demander rendez-vous(a, b)
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
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)
Rendez-vous
Tche
acceptante
File(s) dattente
dappelants
199
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.
Mcanisme(s)
dexclusion
mutuelle
La figure 5.23 (page suivante) prsente un panorama des concepts -outils utiliss
pour la communication par message.
m Synchronisation
Files(s)
dattente
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
202
Tableau noir
Unidirectionnelle
Non bloquante
(crasement, lecture
non destructive)
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
Tube
Unidirectionnelle
Bloquante en lecture
Non bloquante en criture
avec pertes lorsque
le tampon est plein
Rendez-vous
Bidirectionnelle
Synchrone
Gestion
des priorits tches
Sans crasement
Tampon born
Locale
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)
un dclenchement
en attente ? (boolen)
File dattente
(b)
Figure 5.25 Caractrisation dune synchronisation n/1 (a) compte, (b) binaire.
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
M Synchronisation diffusion
vendre(synchro)
-- dclenchement du rpartiteur
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
Rendez-vous synchronis
Nombre de tches
attendues
File dattente
de tches
arrives
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
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
Interruption
ISR
(Routine de traitement
dinterruption)
Vendre(synchro)
DSR
(Tche de traitement
de linterruption)
Faire toujours
Prendre(synchro)
Fait
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
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
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.
m Introduction
Nom
Notes
1003.1
1003.1b
1003.1c
Tches (Threads)
1003.1d
1003.1h
1003.1i
1003.1j
1003.5
1003.5a
Abandonn en 1996.
1003.5b
1003.13
1003.25
2003.1
2003.1b
210
ordonnancement ;
horloges haute prcision ;
mmoire non virtuelle.
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.
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.
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
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
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
Processus i
Tche j,n
Processus j
Processus k
Tche j,r
Ordonnanceur
Processus i
Tche l,q
Tche j,p
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
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
timer_create
timer_settime
nanosleep
clock_nanosleep
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
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
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
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)
PSE 53
Profil de systme
temps rel ddi
(Dedicated Realtime
System Profile)
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.
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
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
Fichiers
de configuration
(langage OIL)
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
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
Excute
terminer
premption
lection
Endormie
activer
Prte
Excute
attendre
terminer
lection
Bloque
Endormie
premption
relcher
activer
Prte
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
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.
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
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
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
M Horloges
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
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.
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.
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
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
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 en valuation
Figure 5.35 Utilisation des excutifs temps rel par les internautes
inscrits sur le site Open Group, sondage effectu en 2001.
230
Sources
utilisateur
Sources
Sources
ou binaire
et configuration
noyau et excutif
du BSP
Cible
Application utilisateur
Gestion de
configurations
Compilateur
crois
diteur
de liens
diteur
Outils de traage,
valuation
Dbogueur
de performances
Agent
de dbogage
Noyau
BSP
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.
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.
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.
Langages de programmation
supports
Cibles supportes
Certification
Architecture du noyau
Dterministe, priorits fixes ou variables, dure dun changement de contexte (relativement larchitecture
matrielle sous-jacente).
Algorithme dordonnancement
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
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.
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.) ?
Support mmoire
Support rseau
Entres/Sorties
Systmes de fichiers
Facilit de dveloppement
Extensibilit du noyau
233
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
temps
tick et excution
de lordonnanceur
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.
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
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
Donnes
Pile tche 3
Pile tche 2
Pile tche 1
Pile tExcTask
Code
236
Endormie
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
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
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
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
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
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
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
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.
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
247
6 Programmation
des systmes multitches
6.1 Programmation
C, Ada et LabVIEW
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
unsigned
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
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
unsigned
long
entier long
non sign
32 (parfois 64)
0..232-1
dcimal : 152uL
octal : 0230ul
hexadcimal : 0x98UL
long long
64
-263..263-1
dcimal:152LL,-15LL
octal :0230LL,-017LL
hexadcimal :0x98LL, -0xFLL
unsigned
long long
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 */
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
typedef union {
char c;
short s;
} mon_union; /* les champs c et s sont superposs */
/* la taille de lunion est max(sizeof(char),sizeof(short))=2 octets
*/
mon_union m;
m.s = 0x8054; /* m.s vaut 0x8054, du mme coup, m.c vaut 0x54 */
m.c = 0; /* m.c vaut 0, du mme coup m.s vaut 0x8000 */
Rappelons que C a un typage faible. Ainsi, lexemple suivant passe parfaitement sur
la plupart des compilateurs.
m.c = a+3+vert; /* en introduction sur C, nous parlons de typage
faible : on affecte un caractre la somme dun caractre, dun
entier et dune couleur, soit le code ASCII de e */
M Langage Ada
6 Programmation
des systmes multitches
6.1 Programmation
C, Ada et LabVIEW
Description
Domaine
Exemples de littraux
integer
entier
gnralement
16 ou 32
-2n-1..2n-1-1
avec n taille des
registres de calcul
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
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)
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
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
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
Commande numrique
Flottants
Entiers signs
Entiers non signs
Complexes
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
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
numration
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
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 */
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
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
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
ch2
0x23FF20
0x23FF20
ch3
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
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
6 Programmation
des systmes multitches
6.1 Programmation
C, Ada et LabVIEW
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;
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;
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
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.
Noter la diffrence
dpaisseur des traits
259
6 Programmation
des systmes multitches
6.1 Programmation
C, Ada et LabVIEW
m Structures de contrle
M Langages C et Ada
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);
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");
}
261
6 Programmation
des systmes multitches
6.1 Programmation
C, Ada et LabVIEW
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
Registre dcalage :
valeur litration i
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
Indexation automatique
Indexation automatique
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
3 cas possibles
264
6 Programmation
des systmes multitches
6.1 Programmation
C, Ada et LabVIEW
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
*/
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
*/
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;
267
6 Programmation
des systmes multitches
6.1 Programmation
C, Ada et LabVIEW
Identification
des connecteurs
Documentation
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
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
m Modularit et visibilit
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
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
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
Spcification
de module
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;
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
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
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;
Descripteur de fichier
Cluster derreur
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.
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
6 Programmation
des systmes multitches
6.1 Programmation
C, Ada et LabVIEW
ModeA
Flag
Flag :
ModeA :
DirA :
DirCH :
ModeB :
DirB :
DirCL :
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.
M Langage C
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;
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 */
}
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
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
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
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
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 :
6 Programmation
des systmes multitches
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
6 Programmation
des systmes multitches
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 ).
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
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
#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
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
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);
}
6 Programmation
des systmes multitches
291
6 Programmation
des systmes multitches
Renvoie: taille_element */
void bal_ecr_delete(bal_ecr bal);
/* Supprime la BaL b
Ncessite: b initialise par bal_ecr_init
Entraine: b est supprime */
Limplmentation des primitives manipulant les botes aux lettres crasement est
donne ci-aprs :
bal_ecr bal_ecr_init(const unsigned taille_element) {
bal_ecr bal;
if (!(bal=(bal_ecr)malloc(sizeof(struct s_bal_ecr)))) return
0;/* Allocation de la structure */
if (!((*bal).buf=(char *)malloc(taille_element))) return 0;/*
Allocation du buffer contenant un message */
(*bal).vide=1;/* Initialement la bal est vide */
pthread_mutex_init(&((*bal).mutex),0);/* Cration du smaphore
garantissant lexclusion mutuelle des accs la structure */
(*bal).taille_element=taille_element;
pthread_cond_init(&((*bal).pas_vide), 0);/* Variable conditionnelle
qui sera dclenche lorsquun message est ajout */
return bal;
}
int bal_ecr_recevoir(bal_ecr bal, char *buf) {
pthread_mutex_lock (&(*bal).mutex);
/* Exclusion mutuelle */
while ((*bal).vide) {
/* Tant que la bote aux lettres est vide */
pthread_cond_wait (&(*bal).pas_vide, &(*bal).mutex);/* On
attend que la bal contienne un message */
}
memcpy(buf,(*bal).buf,(*bal).taille_element);/* Copie du
message dans buf */
(*bal).vide=1;/* La bote est maintenant vide */
pthread_mutex_unlock (&(*bal).mutex);/* Fin de lexclusion
mutuelle */
return (*bal).taille_element;
}
int bal_ecr_envoyer(bal_ecr bal, const char *buf) {
pthread_mutex_lock (&(*bal).mutex);
/* Exclusion mutuelle */
memcpy((*bal).buf,buf,(*bal).taille_element);/* Le message
crase un ventuel message prsent dans la bal */
(*bal).vide=0;/* La bote contient un message */
pthread_mutex_unlock (&(*bal).mutex);/* Fin de lexclusion
mutuelle */
pthread_cond_signal (&(*bal).pas_vide);/* On rveille
lventuel thread en attente dun message */
return (*bal).taille_element;
}
void bal_ecr_delete(bal_ecr bal) {
pthread_cond_destroy(&(*bal).pas_vide);
pthread_mutex_lock(&(*bal).mutex);
free((*bal).buf);
pthread_mutex_unlock(&(*bal).mutex);
free(bal);
}
292
6 Programmation
des systmes multitches
Notons la faon dont on utilise la variable conditionnelle : une tche se met en attente
en appelant pthread_cond_wait(&(*bal).pas_vide, &(*bal).mutex) . Cela a
pour effet de librer le mutex, et dattendre un signal sur la variable conditionnelle
&(*bal).pas_vide. La tche dposant un message signale cette variable 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;
293
6 Programmation
des systmes multitches
T1
T2
B1
Figure 6.26 Communication par bote aux lettres de taille 1 sans crasement.
294
6 Programmation
des systmes multitches
295
6 Programmation
des systmes multitches
return (*b).taille_element;
}
void bal_delete(bal b) {
pthread_cond_destroy(&(*b).pas_vide);
pthread_cond_destroy(&(*b).pas_plein);
pthread_mutex_lock(&(*b).mutex);
free((*b).buf);
pthread_mutex_unlock(&(*b).mutex);
free(b);
}
Limplmentation de tches communiquant par botes aux lettres est presque 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.
T2
T1
B1
T4
T3
B2
M Synchronisation
6 Programmation
des systmes multitches
T1
T2
S1
#include <pthread.h>
#include <semaphore.h>
sem_t S1; /* Smaphore de synchronisation */
void T1() {
/* Tche dclenchant une synchronisation S1 */
while (1) { /* Faire toujours */
/*etc. */
sem_post(&S1); /* Dclenchement de la synchronisation */
/* etc. */
}
}
void T2() {
/* Tche en attente sur la synchronisation S1 */
while (1) { /* Faire toujours */
sem_wait(&S1); /* Attente de synchronisation */
/* etc. */
}
}
void main() {
pthread_t t1,t2; /* Identificateurs de tches */
sem_init(&S1,0,0); /* Smaphore non partag par des processus
initialiss 0 */
/* Lancement des tches */
pthread_create(&t1, NULL,T1,NULL);
pthread_create(&t2, NULL,T2,NULL);
/* Attente de terminaison */
pthread_join(t1,NULL);
pthread_join(t2,NULL);
}
M Tches priodiques
Il nest pas trivial de rendre une tche priodique en POSIX. Certains systmes
proposent des primitives 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
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)
Priodique 1
Priodique 2
#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
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 */
}
299
6 Programmation
des systmes multitches
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
300
6 Programmation
des systmes multitches
m Exemple
<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 */
301
6 Programmation
des systmes multitches
302
6 Programmation
des systmes multitches
void Controler_Mine() {
float niveau_methane;
float vitesse_pompe;
float niveau_eau;
typedef enum {nominal, pompe, alerte_et_pompe, alerte}
t_etat_controle;
t_etat_controle etat=nominal;
while (1) {
bal_ecr_recevoir(Niveau_Methane,(char *)&niveau_methane); /*
Attente sur bote aux lettres */
/* Lecture du module de donnes */
pthread_mutex_lock(&sNiveau_Eau);
niveau_eau=Niveau_Eau;
pthread_mutex_unlock(&sNiveau_Eau);
/* Implmentation du diagramme Etats/Transitions donn sur la
figure 2.33 */
switch (etat) {
case nominal:
if (niveau_methane >= MS_L1) {
/* Seuil dalerte */
sem_post(&Evt_Alarme); /* Alarme */
etat = alerte;
} else if (niveau_eau >= HLS) {
/* Allumage de la pompe, pour simplifier, nous supposons
que nous la pilotons de faon proportionnelle */
vitesse_pompe = niveau_eau-LLS;
bal_ecr_envoyer(Vitesse_Pompe,(char*)&vitesse_pompe);
etat = pompe;
}
break;
case pompe:
if (niveau_methane >= MS_L1) {
/* Seuil dalerte */
sem_post(&Evt_Alarme); /* Alarme */
etat = alerte_et_pompe;
} else if (niveau_eau <= LLS) {
vitesse_pompe = 0;
bal_ecr_envoyer(Vitesse_Pompe,(char*)&vitesse_pompe);
etat = nominal;
} else {
/* Pilotage proportionnel */
vitesse_pompe = niveau_eau-LLS;
bal_ecr_envoyer(Vitesse_Pompe,(char*)&vitesse_pompe);
}
break;
case alerte:
if (niveau_methane < MS_L1) {
/* Seuil dalerte */
sem_post(&Evt_Alarme); /* Extinction de lalarme */
etat = nominal;
} else if (niveau_methane < MS_L2 && niveau_eau > HLS) {
/* Allumage de la pompe, pour simplifier, nous supposons
que nous la pilotons de faon proportionnelle */
vitesse_pompe = niveau_eau-LLS;
bal_ecr_envoyer(Vitesse_Pompe,(char*)&vitesse_pompe);
etat = alerte_et_pompe;
}
break;
case alerte_et_pompe:
303
6 Programmation
des systmes multitches
304
6 Programmation
des systmes multitches
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 :
305
6 Programmation
des systmes multitches
taskSpawn("tache2",80,0,10000,f,2,0,0,0,0,0,0,0,0,0); /* Lancement de
la tche 2, de priorit 80, avec 10000 octets de pile, implmente par
la fonction f, avec le 1er paramtre valant 1 */
}
Nous pouvons noter que le systme se base sur les ticks pour 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
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;
307
6 Programmation
des systmes multitches
/* etc. */
}
}
void LancerTaches() {
B1=msgQCreate(1,sizeof(t_Temperature_Pression),MSG_Q_PRIORITY);
/*Initialisation de la bote aux lettres B1 : tampon de 1 message. Les
tches en attente sont gres par niveau priorit */
/* Lancement des tches */
taskSpawn("T1",90,0,20000,T1,0,0,0,0,0,0,0,0,0,0);
taskSpawn("T2",100,0,20000,T2,0,0,0,0,0,0,0,0,0,0);
}
M Synchronisation
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
M Tches priodiques
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
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
<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
311
6 Programmation
des systmes multitches
float niveau_eau;
typedef enum {nominal, pompe, alerte_et_pompe, alerte}
t_etat_controle;
t_etat_controle etat=nominal;
while (1) {
msgQReceive(Niveau_Methane,(char
*)&niveau_methane,sizeof(niveau_methane),WAIT_FOREVER); /* Attente
sur bote aux lettres */
/* Lecture du module de donnes */
semTake(sNiveau_Eau);
niveau_eau=Niveau_Eau;
semGive(sNiveau_Eau);
/* Implmentation du diagramme Etats/Transitions donn sur la
figure 2.33 */
switch (etat) {
case nominal:
if (niveau_methane >= MS_L1) {
/* Seuil dalerte */
semGive(Evt_Alarme); /* Alarme */
etat = alerte;
} else if (niveau_eau >= HLS) {
/* Allumage de la pompe, pour simplifier, nous supposons
que nous la pilotons de faon proportionnelle */
vitesse_pompe = niveau_eau-LLS;
msgQSend(Vitesse_Pompe,(char*)&vitesse_pompe,sizeof(vitesse_pompe),WA
IT_FOREVER, MSG_PRI_NORMAL);
etat = pompe;
}
break;
case pompe:
if (niveau_methane >= MS_L1) {
/* Seuil dalerte */
semGive(Evt_Alarme); /* Alarme */
etat = alerte_et_pompe;
} else if (niveau_eau <= LLS) {
vitesse_pompe = 0;
msgQSend(Vitesse_Pompe,(char*)&vitesse_pompe,
sizeof(vitesse_pompe), WAIT_FOREVER, MSG_PRI_NORMAL);
etat = nominal;
} else {
/* Pilotage proportionnel de la pompe */
vitesse_pompe = niveau_eau-LLS;
msgQSend(Vitesse_Pompe,(char*)&vitesse_pompe,
sizeof(vitesse_pompe), WAIT_FOREVER, MSG_PRI_NORMAL);
}
break;
case alerte:
if (niveau_methane < MS_L1) {
/* Seuil dalerte */
semGive(Evt_Alarme); /* Extinction de lalarme */
etat = nominal;
} else if (niveau_methane < MS_L2 && niveau_eau > HLS) {
/* Allumage de la pompe, pour simplifier, nous supposons
que nous la pilotons de faon proportionnelle */
vitesse_pompe = niveau_eau-LLS;
msgQSend(Vitesse_Pompe,(char*)&vitesse_pompe,
sizeof(vitesse_pompe),WAIT_FOREVER, MSG_PRI_NORMAL);
etat = alerte_et_pompe;
312
6 Programmation
des systmes multitches
}
break;
case alerte_et_pompe:
if (niveau_methane >= MS_L2 || niveau_eau <= LLS) {
/* Alerte MS_L2 ou niveau bas => extinction de la pompe */
vitesse_pompe = 0;
msgQSend(Vitesse_Pompe,(char*)&vitesse_pompe,
sizeof(vitesse_pompe),WAIT_FOREVER, MSG_PRI_NORMAL);
etat = alerte;
} else if (niveau_methane < MS_L1) {
/* Niveau de mthane sous le seuil dalerte */
semGive(Evt_Alarme); /* Extinction de lalarme */
etat = pompe;
} else {
/* Pilotage proportionnel */
vitesse_pompe = niveau_eau-LLS;
msgQSend(Vitesse_Pompe,(char*)&vitesse_pompe,
sizeof(vitesse_pompe),WAIT_FOREVER, MSG_PRI_NORMAL);
}
break;
};
}
}
TASK_ID acquerir_niveau_methane, afficher_alarme,
acquerir_capteur_eau, commander_pompe, controler_mine;
/* Afin de conserver la valeur des identificateurs de tches, ceux-ci
sont dclars de faon globale */
void LancerTaches() {
/* Initialisation matrielle du systme (capteurs, actionneurs) */
/* etc. */
313
6 Programmation
des systmes multitches
controler_mine=taskSpawn("CtrlMine",48,0,20000,
Controler_Mine,0,0,0,0,0,0,0,0,0,0);
}
void StopperTaches() {
/* Stoppe toutes les tches et dtruit les outils de communication/
synchronisation, ce qui permet pendant la phase de mise au point, sans
redmarrer la cible, de stopper les tches, modifier leur code source,
le recharger sur la cible, et de lancer nouveau les tches.
Lventualit dun arrt des tches explique le fait que les
smaphores dexclusion mutuelle soient crs avec loption
SEM_DELETE_SAFE */
taskDelete(acquerir_niveau_methane);
taskDelete(acquerir_capteur_eau);
taskDelete(afficher_alarme);
taskDelete(commander_pompe);
taskDelete(controler_mine);
semDelete(sNiveau_Eau);
semDelete(Evt_Alarme);
msgQDelete(Niveau_Methane);
msgQDelete(Vitesse_Pompe);
}
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
6 Programmation
des systmes multitches
315
6 Programmation
des systmes multitches
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
m Communication et synchronisation
6 Programmation
des systmes multitches
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
6 Programmation
des systmes multitches
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.
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
6 Programmation
des systmes multitches
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
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) :
321
6 Programmation
des systmes multitches
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
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
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
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
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
-- 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
6 Programmation
des systmes multitches
Commenons par le plus simple, savoir le programme principal, qui est de la forme :
-- pragmas ncessaires ds lors que lordonnancement a une importance
pragma Task_Dispatching_Policy(Fifo_Within_Priorities);
-- Ordonnancement FIFO par niveaux de priorit
pragma Locking_Policy(Ceiling_Locking); -- Protocole priorit
-- plafond immdiat
pragma Queuing_Policy(Priority_Queuing); -- Gestion des attentes
-- dobjet protg par priorit des tches
with Controle; -- Paquetage o les tches sont dclares
procedure Controle_Mine is
begin -- lancement des tches (dclares dans le paquetage Controle)
null; -- ne fait rien
end; -- Attente de terminaison
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
329
6 Programmation
des systmes multitches
330
6 Programmation
des systmes multitches
Bal_Vitesse.Envoyer(Niveau_Eau-LLS);
Etat := Alerte_Et_Pompe;
end if;
when Alerte_Et_Pompe =>
if Niveau_Methane >= MS_L2 or niveau_eau <= LLS then
-- Alerte MS_L2 ou niveau bas => extinction de la pompe
Bal_Vitesse.Envoyer(0.0);
Etat := Alerte;
elsif Niveau_Methane < MS_L1 then
-- Niveau de mthane sous le seuil dalerte
Sync_Alarme.Signal; -- Extinction de lalarme
Etat := Pompe;
else Bal_Vitesse.Envoyer(Niveau_Eau-LLS); -- pilotage proportionnel
end if;
end case;
end loop;
end Controler_Mine;
end Controle;
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.
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
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 :
6 Programmation
des systmes multitches
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
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
334
6 Programmation
des systmes multitches
suivant est repousse : si litration i se termine aprs la date 50(n + i), alors
litration i + 1 ne peut commencer qu la date 50(n + i 1) au lieu de 50(n + i ).
m Modules de donnes
Les modules de donnes DARTS peuvent tre implments en se basant sur la non
rentrance des vi : par dfaut, un vi est non rentrant. 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.
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
336
6 Programmation
des systmes multitches
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.
Si cela est ncessaire, il est possible de crer des botes aux lettres crasement en
utilisant les smaphores et une variable globale en utilisant un algorithme de type
producteur crasement/consommateur. Cependant, limplmentation de ce type
de bote aux lettres reste laborieuse en langage LabVIEW.
m Synchronisation
LabVIEW propose loutil smaphore compte, ce qui devrait rendre triviale 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
337
6 Programmation
des systmes multitches
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
338
6 Programmation
des systmes multitches
339
6 Programmation
des systmes multitches
340
7 TRAITEMENT COMPLET
DUNE APPLICATION INDUSTRIELLE
7 Traitement complet
dune application industrielle
Eau froide
industrielle
Thermocouple
Tef1
7.2 Spcification
Flux deau
chauffe par le procd
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
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
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*
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
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.
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
Signal en entre
Rle : tat du bouton poussoir
Type : boolen (vrai : appuy et faux : relch)
Mise en route
vnement en entre
Rle : Reprsente la mise sous tension du systme de contrle
Affichage
Tempratures + Dbits
Dbits
Dbit ef + Dbit ed
Cmd pompe
Signal en sortie
Rle : Commande dalimentation de la pompe deau distille
Type : boolen (vrai : allume et faux : teinte)
Cmd vanne
Signal en sortie
Rle : Commande de llectrovanne dentre deau industrielle
Type : flottant sur 32 bits
Domaine : [0..200 l/h]
Alarme
Signal en sortie
Rle : Commande du systme dalarme
Type : boolen (vrai : allume et faux : teinte)
Zones de stockage du diagramme prliminaire
Dbit ed lu
Dbit ed
T lues
Tempratures
Flots de donnes du diagramme prliminaire
Commande dbit
Dbit ed
7 Traitement complet
dune application industrielle
7.2 Spcification
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
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
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
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
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
Rguler
dbit
Alarmer
Activer
alarme
Panne
Tempratures
Lire
Lire
crire
crire
Cmd vanne
Commande pompe
Alarme
Commander
pompe
Cmd pompe
Dbits
crire
Lire
Acqurir
tempratures
Affichage
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
Dbit ef
Dbit ed
Bouton
Rguler
dbit
Alarme
Panne
Lire
crire
Tempratures
Commande vanne
Lire
Commander
Vanne
Cmd vanne
Dbits
crire
crire
Lire
Acqurir
tempratures
Affichage
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
Cmd pompe
Afficher
Affichage
simulateur
Lire
crire
Dbits
Lire
Commande vanne
out
crire
Affichage
Commander
vanne
Simulateur
de pannes
Acqurir
tempratures
crire
Lire
Alarme
Tempratures
Rguler
dbit
Lire
Panne
Dbit ef
Dbit ed
Bouton
7 Traitement complet
dune application industrielle
7.3 Conception
353
7 Traitement complet
dune application industrielle
Module de donne
Rle : tat de panne du systme
Type : boolen (vrai : panne et faux : nominal)
Commande Vanne
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
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)
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
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
355
356
Instanciation des lments de communication gnriques
OU
OU
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 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);
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
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
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
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;
-- 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
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
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;
361
7 Traitement complet
dune application industrielle
Commander_Vanne(Cmd);
end loop;
end Piloter_Vanne;
task body Reguler_Debit is
Periode: constant Time_Span:= To_Time_Span(0.5);
-- Tche priodique de priode 500 millisecondes
Prochaine: Time := T0+Periode;
-- Prochaine date dactivation
D: Debits;
Consigne_Ed: Float;
type T_Etat is (Normal, Alarme);
Etat: T_Etat:=Normal;
begin
Commander_Pompe(True);
-- Allumage de la pompe deau distille
loop
case Etat is
when Normal=>
if Mdd_Panne.Lire then
Etat:=Alarme;
Commander_Alarme(True);
--Mise en route de lalarme
Bal_Commande_Vanne.Envoyer(Max_Ouverture_Vanne);
--Ouverture de la vanne deau industrielle au maximum
else
D.Ed:=Lire_Debit_Ed;
D.Ef:=Lire_Debit_Ef;
-- Acquisition des dbits
Mdd_Debits.Ecrire(D);
-- Stockage dans le MDD
Consigne_Ed:=Elaborer_Consigne(D,Mdd_Temperatures.Lire);
-- Elaboration de la consigne
Bal_Commande_Vanne.Envoyer(Consigne_Ed);
-- Envoie la tche de commande
end if;
when Alarme =>
if Lire_Bouton then
Commander_Alarme(False);
--Extinction de lalarme
Bal_Commande_Vanne.Envoyer(0.0);
--Fermeture de la vanne deau industrielle
Commander_Pompe(False);
-- Extinction de la pompe deau distille
exit; --Terminaison de la tche
end if;
end case;
delay until Prochaine;
Prochaine := Prochaine + Periode;
end loop;
end Reguler_Debit;
end Controler_Echangeur;
362
7 Traitement complet
dune application industrielle
363
7 Traitement complet
dune application industrielle
364
7 Traitement complet
dune application industrielle
Socket: Socket_Type;
-- Identifiant de connexion au simulateur
Channel: Stream_Access;
-- Flux de caractres changs sur la connexion
end;
end;
365
7 Traitement complet
dune application industrielle
366
7 Traitement complet
dune application industrielle
367
7 Traitement complet
dune application industrielle
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;
/* 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
/* 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
7 Traitement complet
dune application industrielle
7.4 Implmentation sur simulateur
369
7 Traitement complet
dune application industrielle
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
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
370
7 Traitement complet
dune application industrielle
Temperatures_t MDD_Temperatures={0.0,0.0,0.0,0.0};
/* Module de donnes Dbits */
pthread_mutex_t s_Debits;
Debits_t MDD_Debits={0.0,0.0};
/* Module de donnes Panne */
pthread_mutex_t s_Panne;
BYTE MDD_Panne=0;
371
7 Traitement complet
dune application industrielle
pthread_mutex_t sReveil;
pthread_mutex_init(&sReveil,NULL);
pthread_cond_init(&Reveil,NULL);
clock_gettime(CLOCK_REALTIME, &horloge);
while (1) {
pthread_mutex_lock(&s_Temperatures);
/* Lecture des tempratures */
T=MDD_Temperatures;
pthread_mutex_unlock(&s_Temperatures);
pthread_mutex_lock(&s_Debits);
/* Lecture des dbits */
D=MDD_Debits;
pthread_mutex_unlock(&s_Debits);
/* Affichage */
afficher_courbes(T,D);
/* Attente de la prochaine priode */
ajouter_microsecondes(&horloge,1000000);
pthread_mutex_lock(&sReveil);
pthread_cond_timedwait(&Reveil, &sReveil, &horloge);
}
}
void Piloter_Vanne() {
/* Applique une commande arrivant dans la BaL Commande_Vanne sur la
vanne */
float com;
while (1) {
/* Attente dun message */
bal_ecr_recevoir(Commande_Vanne,(char*)&com);
/* Commande de la vanne */
Commander_Vanne(com);
}
}
void Reguler_Debit () {
/* Acquiert priodiquement et vrifie les dbits, labore une consigne
de commande de vanne,
quelle envoie dans la BaL Commande_Vanne, gre les pannes */
Debits_t D;
Temperatures_t T;
float Consigne_Ed;
BYTE panne;
/* Modes de fonctionnement */
#define MODE_NORMAL 0
#define MODE_ALARME 1
/* Mode courant de fonctionnement */
BYTE Etat=MODE_NORMAL;
/* Gestion de la priodicit */
struct timespec horloge ;
pthread_cond_t Reveil;
pthread_mutex_t sReveil;
pthread_mutex_init(&sReveil,NULL);
pthread_cond_init(&Reveil,NULL);
clock_gettime(CLOCK_REALTIME, &horloge);
while (1) {
switch (Etat) {
case MODE_NORMAL:
pthread_mutex_lock(&s_Panne);
372
7 Traitement complet
dune application industrielle
*/
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
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
<pthread.h>
<sys/socket.h>
<arpa/inet.h>
"simulateur.h"
375
7 Traitement complet
dune application industrielle
pthread_mutex_init(&s_Simulateur,0);
/* Initialisation du smaphore */
if ((sock_sim = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
return 1;
/* Initialisation de la connexion TCP */
memset(&addr_sim, 0, sizeof(addr_sim));
addr_sim.sin_family
= AF_INET;
addr_sim.sin_addr.s_addr = inet_addr(Adresse_Simulateur);
addr_sim.sin_port
= htons(Port_Simulateur);
if (connect(sock_sim, (struct sockaddr *) &addr_sim,
sizeof(addr_sim)) < 0)
return 1;
/* Connexion TCP */
}
static int Simu_Read(char *buf) {
/* Lit une chane de caractres provenant du simulateur
Ncessite: buf a au moins la taille de TAILLE_BUFFER
Entraine: buf contient la chane lue (au plus TAILLE_BUFFER
caractres) termine par \0
Retourne: taille de la chane lue, ou -1 si erreur
*/
int entier1,longueur;
/* Le premier entier dune chane reue vaut toujours 1, et le
second vaut la longueur en octet de la chane */
int nb_octets;
if ((nb_octets = recv(sock_sim, &entier1, 4, 0)) <= 0) return -1;
if ((nb_octets = recv(sock_sim, &longueur, 4, 0)) <= 0) return -1;
if (longueur<0||longueur>TAILLE_BUFFER-1) return -1;
if ((nb_octets = recv(sock_sim, buf, longueur, 0)) != longueur)
return -1;
buf[longueur]=0;
return longueur;
}
static int Simu_Read_Float(float *f) {
static char buf[TAILLE_BUFFER];
int result=Simu_Read(buf);
sscanf(buf,"%f",f);
return result;
}
static int Simu_Write(const char *buf) {
/* Envoie une chane de caractres au simulateur
Ncessite: buf est une chane termine par \0, de taille maximale
TAILLE_BUFFER
Entraine: buf est envoy vers le simulateur
Retourne: taille de la chane envoye, ou -1 si erreur
*/
static char tampon[TAILLE_BUFFER+8];
/* Taille maximale de la chane + 2 entiers */
int un=1;
int longueur=strlen(buf);
int nb_octets;
memcpy(tampon,(char *)&un,4);
memcpy(&tampon[4],(char *)&longueur,4);
memcpy(&tampon[8],buf,longueur);
/* Le premier entier dune chane envoye vaut toujours 1, et le
second vaut la longueur en octet de la chane */
376
7 Traitement complet
dune application industrielle
7 Traitement complet
dune application industrielle
Programme principal
Commander
Vanne
Acqurir
temprature
Rguler
dbits
Afficher
MDD
Panne
Vrifier
tempratures
Vrifier
dbits
MDD
Dbits
MDD
Tempratures
Communication
avec simulateur
laborer
consigne vanne
378
7 Traitement complet
dune application industrielle
m Outils de communication
La bote aux lettres peut tre simplement implmente par un lment message queue
LabVIEW : cette bote est cre au plus haut niveau, dans le programme principal,
et son 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 Traitement complet
dune application industrielle
380
7 Traitement complet
dune application industrielle
7.4 Implmentation sur simulateur
381
7 Traitement complet
dune application industrielle
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.
382
7 Traitement complet
dune application industrielle
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).
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 Traitement complet
dune application industrielle
384
7 Traitement complet
dune application industrielle
Le choix effectu dans cet exemple est dutiliser lappel au simulateur dans chaque
tche communiquant avec le procd. Cest exactement comme si en Ada (voir
7.4.2), nous avions directement utilis lobjet protg Simulateur dans les tches.
Nous aurions pu ici aussi dfinir des fonctions daccs lmentaires au procd,
de faon ne pas appeler le simulateur directement dans les tches.
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 Traitement complet
dune application industrielle
386
7 Traitement complet
dune application industrielle
Figure 7.22 Mise en forme dune chane envoyer suivant le protocole du simulateur.
387
7 Traitement complet
dune application industrielle
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 Traitement complet
dune application industrielle
lments matriels
Console
PC industriel.
Carte
dacquisition
Tef1
Tef2
Ted1
Ted2
Thermocouple
de type K
Centrale
dacquisition
Bouton poussoir
Dbt_ef
Dbt_ed
Dbitmtre
de type vortex
Pompe
EVef
389
7 Traitement complet
dune application industrielle
capable de scruter une temprature par seconde (pour les procds thermiques,
lvolution de temprature est gnralement lente) et de la fournir sur le port srie
sous forme dune chane de caractres.
Le diagramme de contexte de la 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
7 Traitement complet
dune application industrielle
Consigne T
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
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*
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
talonnage
Dbitmtres*
Signal ef
Dbits lus*
Dbit
ef lu
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*
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
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*
Mise en route
<T> 3
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
393
7 Traitement complet
dune application industrielle
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
Acqurir
tempratures
Affichage
7 Traitement complet
dune application industrielle
/*
ComCentrale.h
Fichier den-tte de libraire de communication avec la centrale
*/
/* Diffrentes constantes de dbit du port srie */
#define BAUDS_600
0
#define BAUDS_1200 1
#define BAUDS_2400 2
#define BAUDS_4800 3
#define BAUDS_9600 4
#define BAUDS_19200 5
/* Diffrentes constantes de noms de port srie */
#define COM1 0
#define COM2 1
#define COM3 2
#define COM4 3
int OpenModbusComm(const int port, const unsigned char bauds_rate);
/* Ouvre la communication MODBUS, appeler avant toute autre fonction
ENTREES:
port: nom du port srie utilis (voir constantes de port srie)
bauds_rate: dbit du port srie (voir constantes de dbit)
Renvoie: 0 si pas derreur, code derreur diffrent de 0 sinon */
int CloseModbusComm(const int port);
/* Met fin la communication MODBUS
ENTREES:
port: nom du port srie utilis (voir constantes de port srie)
Renvoie: 0 si pas derreur, code derreur diffrent de 0 sinon */
srie)
sinon */
srie)
sinon */
395
7 Traitement complet
dune application industrielle
396
7 Traitement complet
dune application industrielle
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_
#define CARTE_DAQ_ID
carte */
#define PORT_CARTE_DAQ
numriques */
#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
*/
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
398
7 Traitement complet
dune application industrielle
Il ne reste plus alors qu implmenter le corps du module procede, ce qui est trivial
tant donn que tous les accs au matriel sont faits de faon haut niveau.
7.6.2 Accs au matriel en Ada
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
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
7 Traitement complet
dune application industrielle
401
7 Traitement complet
dune application industrielle
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
7 Traitement complet
dune application industrielle
403
7 Traitement complet
dune application industrielle
Figure 7.35 Utilisation dune voie virtuelle utilisant une chelle personnalise.
404
7 Traitement complet
dune application industrielle
7.7 Conclusion
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
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
8 tude avance
des systmes temps rel
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.
8 tude avance
des systmes temps rel
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
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 :
r k = r 0 + kT
(8.1)
C max
r1
r2
C max
411
8 tude avance
des systmes temps rel
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
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)
8 tude avance
des systmes temps rel
C max
C max
T : priode
C max
C : dure dexcution
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
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.
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
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
ou
d = r + D
(8.4 )
(8.5)
Il est impratif davoir une tche termine avant une nouvelle demande dexcution ;
cela conduit aux ingalits suivantes :
0 C D min
(8.6 )
min
D
t
d
C max
C max
415
8 tude avance
des systmes temps rel
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
et
L max = D C
(8.7 )
D
t
r
L
Excution au plus tt
D
t
r
Lmax
C max
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
D
t
r
Dl
Excution au plus tard
D
t
r
Dl max
C max
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.
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)
417
8 tude avance
des systmes temps rel
(8.11)
s i,k
ri , k
d i,k
TR i , k
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)
(8.13)
D
C
L(t)
t
C(t)
t
D(t)
418
8 tude avance
des systmes temps rel
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
excution de la tche
attente de la tche
Fin tche
2
1
D
Di
Dpassement chance tche
419
8 tude avance
des systmes temps rel
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
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
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)
ATTENDRE_EVT(evt1)
1-2
Squence dexcution
2-2
1-1
1-2
tche 1
t
2-1
tche 2
2-2
t
421
8 tude avance
des systmes temps rel
tche 1-1
tche 2-1
SIGNAL_EVT(evt1)
tche 1-2
tche 2-2
ATTENDRE_EVT(evt1)
1 - 1
1 - 2
2 -11
2 - 2
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
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,
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 :
Sc i,1 Sc i,2
ou
Sc i,2 Sc i,1
Sc i,1 Sc i,2 =
ou
(8.17 )
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
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.
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)
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
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
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
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
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 )
Squence dexcution
(H = dure PPCM{Ti})
H
t
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
ri
Ci
Di
Ti
10
12
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
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
ri
Ci
Di
Ti
10
15
20
25
30
10
15
20
25
30
5
Htransitoire
15
10
20
25
30
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
i =1
428
(8.25)
8 tude avance
des systmes temps rel
t
0
10
15
20
25
30
10
15
20
25
30
10
15
20
25
30
Pour H, Tlibre = 9
Figure 8.24 Squence dexcution dune configuration de tches priodiques
dpart diffr (tableau 8.4) comprenant une phase transitoire.
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
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
T1
D1
1
t
r1
d1
C1
r1 + T1
T2
D2
2
t
r2
C2
d2
r2 + T2
Squence
t
r1
d2
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
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
8 tude avance
des systmes temps rel
8.3 Ordonnancement
des tches indpendantes priodiques
--n-
U = C i T i n 2 1
i =1
(8.27)
n : nombre de tches
1
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
100
Premption de la tche 3
libre
t
100
200
300
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)
Cj
j =1
t
----- + C i D i
Tj
--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
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
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
t
4
12
16
20
24
12
16
20
24
12
16
20
24
12
16
20
24
libre
435
8 tude avance
des systmes temps rel
8.3 Ordonnancement
des tches indpendantes priodiques
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)
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
ri
Ci
Di
Ti
Priorit
selon DM
t
3
t
3
8 tude avance
des systmes temps rel
8.3 Ordonnancement
des tches indpendantes priodiques
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
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
ri
Ci
Di
Ti
Priorit
selon RM
Squence d'excution RM
1
t
5
10
10
10
Squence d'excution RR
Dpassement dchance
t
5
10
10
10
439
8 tude avance
des systmes temps rel
8.3 Ordonnancement
des tches indpendantes priodiques
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
ri
Ci
Di
Ti
Priorit
selon Di
t
4
t
4
chance dpasse
t
4
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
t
4
12
16
20
24
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)
ri
Ci
Di
Ti
Priorit
selon Di
t
2
10
12
t
2
10
12
chance dpasse
t
2
10
12
8 tude avance
des systmes temps rel
8.3 Ordonnancement
des tches indpendantes priodiques
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
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
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
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
D
9
8
Dmax = 7
6
5
4
Ci,0 = 3
T
3
Ci,0
6
Tu
9
Tmax
446
8 tude avance
des systmes temps rel
8.4 Ordonnancement
des tches indpendantes apriodiques
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
tches priodiques
Processus
tches apriodiques
FIFO ou priorit
File dattente de priorit faible
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
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.
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
(8.33)
(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 )
8 tude avance
des systmes temps rel
8.4 Ordonnancement
des tches indpendantes apriodiques
Serveur
scrutation
ri
Ci
Cap
Cs=Cap
Di
Dap
Ds
Ti
(Dmin)
Ts+ DsDap
Ts
Serveur
priodique
Ds
Ds
e
Requte
apriodique
min
Dap
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)
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
451
8 tude avance
des systmes temps rel
8.4 Ordonnancement
des tches indpendantes apriodiques
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
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 )
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
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
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
ri
Ci
Di
Ti
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
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
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
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
m Serveur sporadique
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
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
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
U total U + U s =
C i
i =1
C
avec U s = -----s
Ts
2
T i + ln --------------Us + 1
(8.40)
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
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
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
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.
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.
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
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
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
Figure 8.60 Graphe de reprsentation des contraintes de prcdence entre les 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
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
et de primitives de synchronisation
et
(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.
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
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
rgle prcdence :
II
III
IV
8 tude avance
des systmes temps rel
8.5 Ordonnancement
des tches priodiques dpendantes
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* :
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
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
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
(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
R2
R2
Tche 1
priorit
des
tches
R1
R1
Tche 2
Interblocage
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
473
8 tude avance
des systmes temps rel
8.5 Ordonnancement
des tches priodiques dpendantes
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.
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
t
0
10
15
10
15
t
0
10
15
utilisation de la ressource
pas dutilisation de ressource
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
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
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
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
Tableau 8.27 Exemple dune configuration de trois tches partageant une ressource critique.
Tche
ri
Ci,
Ci,
Ci,
Ci
Di
Ti
12
12
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.
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
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
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
R2
Tche 1
priorit
des
tches
Tche 2
R1
R1
R2
t
R1
R2
R2
R1
t
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
8 tude avance
des systmes temps rel
critiques ; il faut intgrer aux dures des tches les dures de blocage maximum dues
aux attentes des ressources critiques (cette dure de blocage dpend du protocole
de gestion des ressources). Donc chaque tche de lapplication aura une dure 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.
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) ;
8 tude avance
des systmes temps rel
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)
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
k =1
Cas du protocole priorit plafond :
Bi =
Max
k [ 1,m ] , j >i
[ b j,k : si PP k Prio i ]
(8.46 )
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
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
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
--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
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
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
--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
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
8 tude avance
des systmes temps rel
sources critiques de type hritage de priorit donne une validation trs proche de
la limite (cas j = 2).
Il est intressant de remarquer que cette technique permet dexpliquer la technique
prcdente. En effet, lquation 8.48 de la technique 2 est une majoration 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.52)
a 0 = B 2 + C j = 25 + ( 4 + 10 ) = 39
j =1
a0
39
a 1 = B 2 + C 2 + ----- C j = 25 + ( 10 ) + ------ 4 = 39
Tj
40
j =1
a 0 = B 3 + C j = 25 + ( 4 + 10 + 10 ) = 49
j =1
489
8 tude avance
des systmes temps rel
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
a1
53
53
a 2 = B 3 + C 3 + ----- C j = 25 + ( 10 ) + ------ 4 + ------ 10 = 63
Tj
50
40
j =1
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
8.7 Ordonnancement
en environnement multiprocesseur
8.7.1 Introduction gnrale
m Dfinitions
8 tude avance
des systmes temps rel
8.7 Ordonnancement
en environnement multiprocesseur
8 tude avance
des systmes temps rel
8.7 Ordonnancement
en environnement multiprocesseur
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).
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
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
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
495
8 tude avance
des systmes temps rel
8.7 Ordonnancement
en environnement multiprocesseur
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.
U =
C i
Ti m
(8.54 )
i =1
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
Pr1
t
20
10
2
3
t
Pr2
10
20
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
j i =1
m i =1
(8.56 )
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
10
11
12
2
Pr2
0
10
11
12
10
11
12
dates
dactivation
499
8 tude avance
des systmes temps rel
8.7 Ordonnancement
en environnement multiprocesseur
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
site A
demandeur
site C
demande
de migration
demande
de migration
offre
en retour
(enchre)
offre
en retour
(enchre)
migration
dexcution
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
migration
dexcution
site foyer
site C
diffusion des surplus
offre
dacceptation
offre
dacceptation
demande
de migration
migration
dexcution
offre
en retour
(enchre)
site foyer
8 tude avance
des systmes temps rel
8.7 Ordonnancement
en environnement multiprocesseur
ri
Ci
Di
Ti
Processeur
2 ou 7
4
t
Pr1
0
Pr2
0
Pr3
0
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
Pr1
demande
pour 4
Pr2
demande
pour 4
demande
pour 4
offre
pour 4
Pr3
0
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
Site 1
m1
3
m2
Site 2
Figure 8.97 Modlisation dune application distribue dfinie par deux sites,
deux tches sur chacun des sites et deux messages changs.
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
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
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)
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)
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
TRi = t-q Ti
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
(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
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.
A Reprsentation
de linformation
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
A Reprsentation
de linformation
tation signe ou non signe. Par exemple, si en langage C on utilise un type caractre
sign (char) il faut avoir conscience que son domaine de variation est [ 128..127]
et non [0..255].
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
Figure A.1 Addition des nombres dcimaux 456 et 352 en complment 10.
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
delta.2n-2
signe
23
22
21
20
2-1
2-2
2-3
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
2-2+exp
2-1+exp
2-3+exp
sgn
2-22+exp
2-21+exp 2-23+exp
Exposant biais
Mantisse
Figure A.3 Reprsentation dun nombre virgule flottante au format IEEE 754 sur 32 bits.
Caractrisation
exposant biais = 0
mantisse = 0
NaN
(Not a Number)
Nombre
dnormalis
exposant biais = 0
mantisse 0
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
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
Nom IEEE
Nom
Notes
1003.0
Abandonn en 2002.
1003.1
1003.1a
1003.1b
1003.1c
Tches (Threads)
1003.1d
1003.1e
Scurit (Security)
Abandonn en 1998.
1003.1f
Abandonn en 1997.
1003.1g
1003.1h
1003.1i
519
Nom IEEE
Nom
Notes
1003.1j
1003.1k
Interface de programmation
des supports amovibles
(Removable Media API)
Abandonn en 1997.
1003.1L
1003.1m
Point de contrle/Redmarrage
(Checkpoint/Restart)
Abandonn en 2000.
1003.1n
Abandonn en 2001.
1003.1o
1003.1p
1003.1q
Trace (Tracing)
1003.1r
Abandonn en 1997.
1003.1s
1003.2&2a
1003.2b
Utilitaires supplmentaires
(Additional Utilities)
1003.2c
Scurit (Security)
1003.2d
Batch (Batch)
1003.2e
Abandonn en 1997.
1003.3
1003.5
1003.5a
Abandonn en 1996.
520
Nom IEEE
Nom
Notes
1003.5b
1003.5c
1003.5d
Abandonn en 1996.
1003.5f
1003.5g
1003.5h
1003.9
1003.10
1003.11
Abandonn en 1993.
1003.13
1003.13a
Abandonn en 2002.
1003.13b
Abandonn en 2002.
1003.14
Abandonn en 1998.
1003.16
Abandonn en 1993.
1003.17
1003.18
Abandonn en 1998.
1003.19
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))
1003.22
1003.23
1003.24
Abandonn en 2001.
1003.25
1003.26
2003.1
2003.1b
2003.2
522
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).
BaLs.h
Taille
Taille
Taille
Taille
*/
#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
524
C Module
de botes aux lettres POSIX
525
C Module
de botes aux lettres POSIX
*/
#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;
}
527
C Module
de botes aux lettres POSIX
(*bal).taille_element=taille_element;
pthread_cond_init(&((*bal).pas_vide), 0);/* Variable
conditionnelle qui sera dclenche lorsquun message est ajout */
return bal;
}
int bal_ecr_recevoir(bal_ecr bal, char *buf) {
pthread_mutex_lock (&(*bal).mutex);
/* Exclusion mutuelle */
while ((*bal).vide) {
/* Tant que la bote aux lettres est vide */
pthread_cond_wait (&(*bal).pas_vide, &(*bal).mutex);/* On
attend que la bal contienne un message */
}
memcpy(buf,(*bal).buf,(*bal).taille_element);/* Copie du
message dans buf */
(*bal).vide=1;/* La bote est maintenant vide */
pthread_mutex_unlock (&(*bal).mutex);/* Fin de lexclusion
mutuelle */
return (*bal).taille_element;
}
int bal_ecr_envoyer(bal_ecr bal, const char *buf) {
pthread_mutex_lock (&(*bal).mutex);
/* Exclusion mutuelle */
memcpy((*bal).buf,buf,(*bal).taille_element);/* Le message
crase un ventuel message prsent dans la bal */
(*bal).vide=0;/* La bote contient un message */
pthread_mutex_unlock (&(*bal).mutex);/* Fin de lexclusion
mutuelle */
pthread_cond_signal (&(*bal).pas_vide);/* On rveille
lventuel thread en attente dun message */
return (*bal).taille_element;
}
void bal_ecr_delete(bal_ecr bal) {
pthread_cond_destroy(&(*bal).pas_vide);
pthread_mutex_lock(&(*bal).mutex);
free((*bal).buf);
pthread_mutex_unlock(&(*bal).mutex);
pthread_mutex_destroy(&(*bal).mutex);
free(bal);
}
bal_n bal_n_init(const unsigned taille, const unsigned taille_element)
{
bal_n bal;
if (!(bal=(bal_n)malloc(sizeof(struct s_bal_n)))) return 0;/*
Allocation de la structure */
if (!((*bal).buf=(char **)calloc(taille,taille_element)))
return 0; /* Allocation du buffer contenant taille messages */
(*bal).vide=1; /* La bal est initialement vide */
pthread_mutex_init(&((*bal).mutex),0); /* Cration du smaphore
garantissant lexclusion mutuelle des accs la structure */
(*bal).debut=0; /* indice de dbut de la file dans le tableau
circulaire */
/* Invariant: non vide => debut est lindice du plus vieux
message non lu
vide => debut=fin*/
(*bal).fin=0;
528
C Module
de botes aux lettres POSIX
529
C Module
de botes aux lettres POSIX
pthread_cond_destroy(&(*bal).pas_plein);
pthread_cond_destroy(&(*bal).pas_vide);
pthread_mutex_lock(&(*bal).mutex);
free((*bal).buf);
pthread_mutex_unlock(&(*bal).mutex);
pthread_mutex_destroy(&(*bal).mutex);
free(bal);
}
bal_n_ecr bal_n_ecr_init(const unsigned taille, const unsigned
taille_element) {
bal_n_ecr bal;
if (!(bal=(bal_n_ecr)malloc(sizeof(struct s_bal_n_ecr))))
return 0; /* Allocation de la structure */
if (!((*bal).buf=(char **)calloc(taille,taille_element)))
return 0;/* Allocation du buffer contenant taille messages */
(*bal).vide=1; /* La bal est initialement vide */
pthread_mutex_init(&((*bal).mutex),0); /* Cration du smaphore
garantissant lexclusion mutuelle des accs la structure */
(*bal).debut=0;
/* Invariant: non vide => debut est lindice du plus vieux
message non lu
vide => debut=fin*/
(*bal).fin=0;
/* Invariant: vide ou debut!=fin => fin est lindice de la
premire case disponible du tableau
non vide et debut=fin => fin est lindice du message le
plus ancien */
(*bal).taille_element=taille_element;
(*bal).taille=taille;
pthread_cond_init (&((*bal).pas_vide), 0);
/* Variable conditionnelle qui sera dclenche lorsquun message
est ajout (i.e.
quand il y a au moins un message lire */
return bal;
}
int bal_n_ecr_recevoir(bal_n_ecr bal, char *buf) {
pthread_mutex_lock (&(*bal).mutex);
/* Exclusion mutuelle */
while ((*bal).vide) {
pthread_cond_wait (&(*bal).pas_vide, &(*bal).mutex);
/* On attend que la bal contienne un message */
}
/* Il existe au moins un message, le plus ancien a lindice
debut */
memcpy(buf,&(*bal).buf[(*bal).debut],(*bal).taille_element); /*
Copie du message le plus ancien dans buf */
(*bal).debut=((*bal).debut+1)%(*bal).taille;
if ((*bal).debut==(*bal).fin) (*bal).vide=1; /* Respect de
linvariant */
pthread_mutex_unlock (&(*bal).mutex);
/* Fin de lexclusion mutuelle */
return (*bal).taille_element;
}
int bal_n_ecr_envoyer(bal_n_ecr bal, const char *buf) {
pthread_mutex_lock (&(*bal).mutex);
/* Exclusion mutuelle */
memcpy(&(*bal).buf[(*bal).fin],buf,(*bal).taille_element);
530
C Module
de botes aux lettres POSIX
531
Cette annexe prsente le code source comment dun module Ada gnrique dfinissant les modules de donnes, synchronisations et botes aux lettres.
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.
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
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
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
535
D Module
de communication Ada
private
val: element := initial.all;
end;
------------------------- Synchronisation
-----------------------protected type Synchro_C(priorit: natural := prioritylast) is
-- Synchronisation compte (les dclenchements successifs
-- non pris en compte sont accumuls)
pragma Priority(priorit);
procedure Signal;
entry Wait; -- when Nombre_Signals > 0
private
Nombre_Signals: natural := 0;
end;
protected type Synchro_B(priorit: natural := prioritylast) is
-- Synchronisation binaire (les dclenchements successifs
-- non pris en compte ne sont pas accumuls)
pragma Priority(priorit);
procedure Signal;
entry Wait; -- when Signal
private
Signal: boolean := false;
end;
------------------------- Botes aux lettres
-----------------------protected type BaL_1_Ecrasement(priorit: natural := prioritylast)
is
-- Bote aux lettres de taille 1 avec crasement
pragma Priority(priorit);
procedure Envoyer(e: element);
entry Recevoir(e: out element); -- when Pleine
private
Pleine: boolean := false;
val: element;
end;
protected type BaL_1(priorit: natural := prioritylast) is
-- Bote aux lettres de taille 1 sans crasement
pragma Priority(priorit);
entry Envoyer(e: element); -- when not Pleine
-- lenvoi peut tre bloquant
entry Recevoir(e: out element); -- when Pleine
private
Pleine: boolean := false;
val: element;
end;
protected type BaL_n_Ecrasement(n:positive:=1; priorit: natural :=
prioritylast) is
-- Bote aux lettres de taille n avec crasement
pragma Priority(priorit);
procedure Envoyer(e: element);
entry Recevoir(e: out element); -- when not Vide(F)
private
F: File_Bornee_N_Elements.File_Bornee(n); -- File borne de
taille n
end;
536
D Module
de communication Ada
-- 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
538
BIBLIOGRAPHIE
540
Anglais
Franais
Absolute deadline
chance
Access Point
Point dAccs
Actuator
Actionneur
Date de rveil
Availability
Binding
Broadcast communication
Broadcast communication
Buffer
Busy period
Priode dactivit
Byte
Octet
Coding (Implementation)
Codage (implmentation)
Context switching
Changement de contexte
Ressources critiques
Critical resource
Ressource critique
Deadline
Deadlock
Interblocage
541
Anglais
Franais
Deferrable server
Serveur ajournable
Dependability
Sret de fonctionnement
Design
Conception
Dispatcher
Squenceur
Distributed applications
Applications distribues
Failure
Dfaillance
Feasible schedule
Squence valide
Firmware
Flags
Registre dtat
Full-Duplex
Garbage collector
Ramasse miettes
Heap
Hook
Hub
Rpteur
Interoperability
Interoprabilit
Interrupt latency
Interrupt Request
Requte dinterruption
Rseau local
Log
Trace dexcution
Mailbox
Message queue
542
Anglais
Franais
Multi-Level Feedback
Multi-user resource
Ressource partageable
Mutex
Mutual exclusion
Exclusion mutuelle
Offset
Dcalage
One shot
Open source
Logiciel libre
Operating system
Systme dexploitation
Overhead
Overload
Surcharge
Patch
Modification
Pattern matching
Recherche de motif
Pipe
Tube
Polled Loop
Boucle de scrutation
Polling
Polling server
Serveur scrutation
Polling task
Tche de scrutation
Precedence constraints
Contraintes de prcdence
Preemptive latency
Priority inheritance
Hritage de priorit
Probing
Test
Process Control
Contrle de procd
Processor laxity
Laxit du processeur
543
Anglais
Franais
Pthread
Tche POSIX
Qualit de service
Real-time
Temps rel
Real-time kernel
Real-time languages
Real-time network
Real-time system
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
Priode dtude
Security
Scurit (confidentialit)
Sensor
Capteur
Shared memory
Mmoire partage
Socket
Connexion rseau
Specification languages
Langages de spcification
Spinlock
Verrou
544
Anglais
Franais
Pile
Timeout
Swap
change
Switch
Commutateur
Task
Tche
Importance de la tche
Task period
Priode de la tche
Task priority
Priorit de la tche
Task set
Ensemble de tches
Thread
Time sharing
Timer
Horloge
Timing failure
Faute temporelle
Token
Jeton
Trigger
Rveil
Watchdog
Chien de garde
War-Driving
Stack
545
SIGLES
Dsignation complte
Sigle
ADARTS
AFNOR
AGP
ANSI
ARP
ASCII
ASIC
ASR
ATA
BaL
BCC
BCP
B.N.F.
Backus-Naur Form
BSP
CAN
CCC
CCITT
CIN
CNA
CODARTS
CODOP
Code Opration
546
Sigle
Dsignation complte
CRC
CSMA/CA
CSMA/CD
CSMA/DCR
DARTS
DFD
DHCP
DM
Deadline Monotonic
DSR
E/S
Entres/Sorties
ECC
EDF
EDL
FAT
FDDI
FIFO
FIP
FPGA
FPLA
FTP
GCC
GNAT
GNU
GPL
GRAFCET
HTR
HOOD
HTTP
I-PDU
IBSS
547
Sigle
Dsignation complte
ICANN
IDE
IEC
IEEE
IMAP
IMFS
IP
Internet Protocol
IPC
InterProcess Communication
IPTES
IRQ
Interrupt ReQuest
ISA
ISO
ISR
ITU
JSD
LL
Least Laxity
LLC
MAC
MDD
Module De Donnes
ML
Minimum Laxity
MLF
Multi-Level Feedback
MMU
MSMC
MTU
MUX
Multiplexeur
NFS
NTFS
OIL
OMG
OMT
548
Sigle
Dsignation complte
OS
Operating System
OSEK
OSI
PC
Personal Computer
PCF
PCI
PCMCIA
PDU
POP
POSIX
PSE
PXI
RAM
RIPE
Rseaux IP Europens
RM
Rate Monotonic
RMA
RR
Round Robin
RT FIFO
RTEMS
SA
Structured Analysis
SA_DT
SA_RT
SCSI
SD
SDL
SE
Systme dExploitation
SMTP
SRPT
TDMA
TCP
549
Sigle
Dsignation complte
TFTP
TOR
Tout Ou Rien
UAL
UDP
UML
USB
VAN
VDX
VHDL
VHSIC
VI
Virtual Instrument
VME
VXI
Wi-Fi
Wireless Fidelity
XSI
550
Index
INDEX
Gnralits
.dll 394
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
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
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
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
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
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
MCANIQUE ET MATRIAUX
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.