Vous êtes sur la page 1sur 87

Le systme embarqu temps rel

VxWorks
Frank Singhoff
Bureau C-203
Universit de Brest, France
LISyC/EA 3883
singhoff@univ-brest.fr

UE systmes temps rel, Universit de Brest Page 1/87


Sommaire
1. Gnralits sur les systmes embarqus temps rel.
2. Le systme VxWorks.
3. Rsum.
4. Rfrences.

UE systmes temps rel, Universit de Brest Page 2/87


Prsentation
Caractristiques des systmes embarqus temps
rel et objectifs :

1. Comme tous systmes temps rel : dterminisme


logique, temporel et fiabilit.
2. Mais en plus :
Ressources limites (mmoire a , vitesse
processeur, nergie).
Accessibilit rduite.
Autonomie leve.
Interaction avec son environnement (capteurs).

= Environnements dexcution spcifiques.

a
footprint ou empreinte mmoire.
UE systmes temps rel, Universit de Brest Page 3/87
Excutif : architecture et services (1)
Caractrisques de lexcutif :

Modulaire et de petite taille. Flexible vis--vis de


lapplication.

Accs ais aux ressources physiques.

Abstractions adaptes (paralllisme, exception,


interruption, tches, ...)

Support de langages pour le temps rel (ex : C, Ada).

Livr avec ses performances temporelles.

UE systmes temps rel, Universit de Brest Page 4/87


Excutif : architecture et services (2)
Services offerts par un systme base dexcutif :

Environnement
de dveloppement
Utilitaires

Agence Agence
tches temps
Noyau

Agence Agence
mmoire E/S

Excutif temps rel

Notion de noyau et dagence = modularit.


Deux niveaux principaux : excutif et environnement de dveloppement/mise au point.
Outils : "cross-compilateur", chargeur de code, outils de mise au point, simulateur, etc.
Deux phases : Phase de dveloppement/test, phase de mise en exploitation.
UE systmes temps rel, Universit de Brest Page 5/87
Excutif : architecture et services (3)
Logiciel indpendant du matriel

Application
Excutif (ex : VxWorks)

Autres bibliothques Systme de fichiers

Systme dE/S Tches systme Rseau (TCP/IP)

Noyau de lexcutif

Logiciel dpendant du matriel

Pilotes BSP (Board Support Package)

Couche matrielle
Carte
Contrleur srie Processeur

Contrleur disque/Ethernet ... Circuit dhorloge

Structuration en couches = notion de BSP.


Portabilit du systme et de lapplicatif.
UE systmes temps rel, Universit de Brest Page 6/87
Excutif : architecture et services (4)
Performance connue et dterministe:
Doit permettre lvaluation de la capacit des tches par exemple.
Utilisation de benchmarks (ex : Rhealstone, Hartstone, etc).

Critres de performances :
Latence sur interruption.
Latence sur commutation de contexte/tche.
Latence sur premption.
Smaphore "shuffle" (temps coul entre la libration dun
smaphore et la ractivation dune tche bloque sur celui-ci).
Temps de rponse pour chaque service (appel systme, fonctions de
bibliothque).
etc.
UE systmes temps rel, Universit de Brest Page 7/87
Excutif : architecture et services (5)
. TCP/IP sur
Ethernet , liens
sries, etc
. TFTP, NFS
Environnement de
dveloppement Machine cible

GDB RGDB

rsh

Hte (ex : SUN)

OS temps rel

Disque NFS

Phase de dveloppement : dition du source, compilation croise,


tlchargement, excution et tests.
Phase dexploitation : construction dune image minimale (excutif +
application) sans les services de dveloppement. Stockage en EEPROM,
Flash.
UE systmes temps rel, Universit de Brest Page 8/87
Etat du march (1)
30
Nombre dentreprises utilisant le systme

25
21.42
19.7
20

Pourcentage
15
12.84
10.19
10
6.64 5.96
5
4.69
3.89
2.86 2.41 2.3 1.95
1.83 1.72 1.61

uc E
X

III
S

S
-L X
S9

+
T
S

Ch ux

s
ire

X
ks

sC
O

re
us
RT
O

sN

RT T
N

X
O
or

in
ta

nx

us
pS

ut
R
le
Q

w
ri

V
W

A
or
Ly

do
iR
do
vx

op

N
in
in
pr

W
W
n
tio
lu
So

Systmes temps rel embarqus

Caractristiques du march [TIM 00] :

Diversit des produits prsents = produits gnralistes ou


spcifiques des applications types.
Prsence importante de produits "maisons".
UE systmes temps rel, Universit de Brest Page 9/87
Etat du march (2)
Quelques exemples de produits industriels :

VxWorks : produit gnraliste et largement rpandu (PABX, terminal


X de HP, Pathfinder, satellite CNES, etc).
pSOS dit par ISI (appli militaire, tl. portable).
VRTX dit par Microtec (appli militaire, tl. portable).
LynxOs (Unix temps rel).
Windows CE/Microsoft (systmes embarqus peu temps rel).

Produits "open-source" :

OSEK-VDX (appli. automobile).


RTEMS de Oar (appli. militaire).
eCos de cygnus.
RT-Linux.
UE systmes temps rel, Universit de Brest Page 10/87
La norme POSIX (1)
Objectif : dfinir une interface standard des services offerts par
UNIX[VAH 96, J. 93] afin doffrir une certaine portabilit des applications.

Norme tudie/publie conjointement par lISO et lANSI.

Problmes :
Portabilit difficile car il existe beaucoup de diffrences entre les
UNIX.
Tout nest pas (et ne peut pas) tre normalis.
Divergence dans limplantation des services POSIX (ex : threads sur
Linux).
Architecture de la norme.
Exemple de systmes POSIX : Lynx/OS, VxWorks, Solaris, Linux,
QNX, etc .. (presque tous les systmes temps rel).

UE systmes temps rel, Universit de Brest Page 11/87


La norme POSIX (2)
Architecture de la norme : dcoupe en chapitres
optionnels et obligatoires. Chaque chapitre contient des
parties obligatoirement prsentes, et dautres optionnelles.

Exemple de chapitres de la norme POSIX :


Chapitres Signification
POSIX 1003.1 Services de base (ex : f ork ,
exec, ect)
POSIX 1003.2 Commandes shell (ex : sh)
POSIX 1003.1b [GAL 95] Temps rel
POSIX 1003.1c [RIF 95] Threads
POSIX 1003.5 POSIX et Ada
etc

UE systmes temps rel, Universit de Brest Page 12/87


La norme POSIX (3)
Cas du chapitre POSIX 1003.1b : presque tout les composants sont
optionnels !!

Nom Signification
_POSIX_PRIORITY_SCHEDULING Ordonnancement
priorit fixe
_POSIX_REALTIME_SIGNALS Signaux temps rel
_POSIX_ASYNCHRONOUS_IO E/S asynchrones
_POSIX_TIMERS Chien de garde
_POSIX_SEMAPHORES Smaphores
etc ...

Consquence : que veut dire "tre conforme POSIX 1003.1b" ... pas
grand chose puisque la partie obligatoire nest pas suffisante pour
construire des applications temps rel.

UE systmes temps rel, Universit de Brest Page 13/87


La norme POSIX (4)
Les threads POSIX.
Services dordonnancement.
Outils de synchronisation.
Les signaux temps rel.
La manipulation du temps.
Les entres/sorties asynchrones.
Les files de messages.
La gestion mmoire.

UE systmes temps rel, Universit de Brest Page 14/87


Sommaire
1. Gnralits sur les systmes embarqus temps rel.
2. Le systme VxWorks.
3. Rsum.
4. Rfrences.

UE systmes temps rel, Universit de Brest Page 15/87


Sommaire
1. Prsentation.
2. Environnement de compilation croise et
environnement dexcution.
3. Services offerts par lexcutif VxWorks.

UE systmes temps rel, Universit de Brest Page 16/87


Prsentation
Edit par la socit Wind River System[RIV 97]. Leader
du march.
Excutif multi-programm = abstraction de tches.
Adressage virtuel mais pas de protection mmoire. Pas
de swap. Il nexiste quun seul espace dadressage
dans le systme.
Excutif modulaire.
Lexcutif possde deux interfaces : POSIX
1003[GAL 95] et propritaire.
Disponible pour de trs nombreuses architectures
matrielles (BSP).

UE systmes temps rel, Universit de Brest Page 17/87


Abstractions de VxWorks (1)
Rappel : un processus UNIX = contexte dexcution + code partag
ou non + espace dadressage priv = autant despace dadressage que
de processus.
#include <stdio.h>

int a=100;

int main(int argc, char* argv[]) {


if(fork()==0)
a+=100;
else {
sleep(1);
printf("a = %d\n",a);
}
}

Quelle est la valeur affiche aprs le fork() ?


Idem sur VxWorks ?
UE systmes temps rel, Universit de Brest Page 18/87
Abstractions de VxWorks (2)
#include <stdio.h>

int a=100;

int main(int argc, char* argv[])


{
if(fork()==0)
a+=100;
else a+=200;

sleep(1);
printf("a = %d\n",a);
}

Quelle est la valeur affiche aprs le fork() ?


Idem sur VxWorks ?

UE systmes temps rel, Universit de Brest Page 19/87


Abstractions de VxWorks (3)
Un seul espace dadressage unique implique :

Corruption possible des donnes de lexcutif par les applications


= tout le monde voit tout. Pas de protection mmoire.
Cohrence des donnes partages entre les tches = ncessite
donc des outils de synchronisation.

Do les abstractions suivantes de lexcutif :


Tches.
Smaphores.
File de messages et pipes.

UE systmes temps rel, Universit de Brest Page 20/87


Abstractions de VxWorks (4)
Pourquoi un seul espace dadressage :

Contexte de tche plus petit.


Pas dappel systme : les services sont invoqus par
un simple appel de fonction = toutes les tches
applicatives sont des tches "superviseurs/privilgies".
Communication entre tches sans traverser le systme
dexploitation.

= gain de temps
= gain de "place" mmoire, de ressources
= gain de prdictiblit (cf. contraintes systmes embarqus
temps rel).

UE systmes temps rel, Universit de Brest Page 21/87


Architecture de lexcutif (1)
Constitu de tches et de bibliothques/agences :

Exemple de bibliothques :
taskLib. Gestion des tches.
sockLib. Sockets BSD.
f tpLib. Client FTP.

Exemple de tches systmes :


tShell. Shell " la UNIX" pour la cible.
tLogT ask. Prise de journal.
tRlogind. Connexion par la commande rlogin sur la cible.

UE systmes temps rel, Universit de Brest Page 22/87


Architecture de lexcutif (2)
Excutif modulaire = composition selon lapplication cible ou
lutilisation de lexcutif :

Exemple de composition pendant la :


Phase de dveloppement/test : bibliothques dentres sorties,
bibliothques et pilotes rseaux. Tches pour le dveloppement (ex :
tShell, tRlogind).
Phase dexploitation : le noyau, taskLib, pas de pilote Ethernet, pas
de pile TCP/IP, pas de tche tShell, etc.

Le contenu de lexcutif est choisi lors de la construction dune


image par le biais :
1. De bibliothques ajoutes lors de ldition des liens
2. Des tches dmarrer au "boot".

UE systmes temps rel, Universit de Brest Page 23/87


Sommaire
1. Prsentation.
2. Environnement de compilation croise et
environnement dexcution.
3. Services offerts par lexcutif VxWorks.

UE systmes temps rel, Universit de Brest Page 24/87


Environnement
Le chargeur.
La chane de compilation croise.
Le shell VxWorks.
La mise au point distance.

UE systmes temps rel, Universit de Brest Page 25/87


Le chargeur (1)
Cible
/opt/wind/vxworks/vxWorks/config/mve162/vxWorks
68000+VME
/home/ens/singhoff
VxWorks
Disque Lien srie
NFS 00
11
000
111
00
11

Hte (Sun) kermorvan vxkermorvan


178.18.6.9 178.18.6.19

Ethernet

Lancement excutif et/ou application :

1. Lancement du chargeur la mise sous tension (EEPROM).


2. Modification ventuelle des paramtres de "boot".
3. Configuration interface Ethernet + chargement ftp/rsh de limage.
4. Dmarrage de lexcutif et des tches VxWorks.
5. Montage NFS du rpertoire utilisateur.

UE systmes temps rel, Universit de Brest Page 26/87


Le chargeur (2)
Paramtres de "boot" :

Adresses IP de lhte et de la cible.


Localisation de limage constituant lexcutif.
Nom de lutilisateur.
Protocole utiliser pour le chargement.

Commandes du chargeur :

CTRL+X : redmarrage de la carte.


@ : chargement et lancement de lexcutif.
c : modification des paramtres de chargement.
p : affichage des paramtres de chargement.
? : aide en ligne.
UE systmes temps rel, Universit de Brest Page 27/87
Le chargeur (3)
Exemple :

1. A partir de lhte, on se connecte la cible par la voie srie :


connect A

2. Affichage et modification ventuelle des paramtres :


[VxWorks Boot]: p
boot device : ei
host name : kermorvan
file name : /opt/..../config/mv162/vxWorks
inet on ethernet (e) : 172.18.6.19
host inet (h) : 172.18.6.9
user (u) : singhoff
ftp password (pw) (blank = use rsh):
target name (tn) : vxkermorvan

3. Chargement de lexcutif :
[VxWorks Boot]: @
->
UE systmes temps rel, Universit de Brest Page 28/87
Compilation croise (1)
La chane de compilation sur lhte (ex : Sun) est constitue de :

cpp68k. Prprocesseur.
cc68k. Compilateur C.
ld68k. Editeur de liens (dition incrmentale uniquement).
nm68k. Liste les symboles dun objet.
as68k. Assembleur 68000.
ar68k et ranlib68k. Outils de construction de bibliothques.

Les binaires produits par ces commandes ne sont pas excutables sur
Sun mais sur la cible (Motorola 68000 + VME).

Il ny a pas ddition de liens "finale". Le binaire obtenu reste un module


objet (collection de donnes et de fonctions).
Il ny a pas de fonction "main".
UE systmes temps rel, Universit de Brest Page 29/87
Compilation croise (2)
Exemple de programme (fichier hello.c) :
#include <vxWorks.h>
#include <stdio.h>
#include <taskLib.h>

helloWorld() {
int id=taskIdSelf();
printf("Nom = %s ; Id = %x\n",taskName(id),id);
}
Compilation sur lhte (pas ddition de liens) :
kermorvan$cc68k -g -c hello.c -DCPU=MC68030

Table de symboles gnre :


kermorvan$nm68k hello.o
0000002e T _helloWorld
U _printf
U _taskIdSelf
U _taskName
00000000 t gcc2_compiled.
UE systmes temps rel, Universit de Brest Page 30/87
Compilation croise (3)
Un programme VxWorks se compose :
1. Dune collection de variables et de fonctions.
2. Dune tche dinitialisation, de priorit maximale, qui
alloue les ressources ncessaires lapplication
(oprations coteuses et non prdictibles).
3. Dun ensemble de tches actives par la tche
dinitialisation.

Objectif : permettre une prallocation des ressources et


un dmarrage synchronis de toutes les tches.

= Patron de conception utilis dans de nombreuses


plates-formes => ARINC 653

UE systmes temps rel, Universit de Brest Page 31/87


Le shell VxWorks (1)
Sexcute sur la cible (tche VxWorks tShell). Constitue
linterface entre lexcutif et lutilisateur.

Services offerts :
Chargement de code et de donnes. Edition des liens.
Mise au point (niveau assembleur).
Consultation et modification des ressources VxWorks
(ex : tches).
Gestion de symbole des modules.
Services classiques offerts par un shell : variables,
redirection E/S, appel de fonction, historique, etc.

UE systmes temps rel, Universit de Brest Page 32/87


Le shell VxWorks (2)
Chargement et excution dun module sur la cible :

1. On se place dans le rpertoire o se trouve le module :


->cd "mon_repertoire"
2. Chargement du module :
->ld < hello.o
3. Excution par appel de fonction :
->helloWorld()
Hello world : nom tache = tShell ; tache id = 3a8460
4. Excution par la cration dune tche :
->sp helloWorld
task spawned: id = 0x3a5bc0, name = t1
Hello world : nom tache = t1 ; tache id = 3a5bc0

UE systmes temps rel, Universit de Brest Page 33/87


Le shell VxWorks (3)
Consultation dinformations sur les symboles et modules :

-> lkup "hell"


_helloWorld 0x003fe5de text (hello.o)
_shellTaskId 0x0007b188 bss (vxWorks.sym)
_shellInit 0x0004355e text (vxWorks.sym)
_shell 0x0004372c text (vxWorks.sym)
_shellOrigStdSet 0x00043de8 text (vxWorks.sym)
_shellPromptSet 0x00043dcc text (vxWorks.sym)
...
-> moduleShow
MODULE NAME MODULE ID GROUP TEXT START DATA START BSS START
------------- ---------- ---------- ---------- ---------- ----------
hello.o 0x3fef78 2 0x3fef1c 0x3fef70 0x3fef70

UE systmes temps rel, Universit de Brest Page 34/87


Le shell VxWorks (4)
Consultation dinformations sur les tches du systme :
-> i
NAME ENTRY TID PRI STATUS PC SP ERRNO DELAY
--------- ----------- ------ --- ------- ------- ------ ----- -----
tShell _shell 3a8460 1 READY 2ff38 3a813c 0 0
t1 _helloWorld 3a5bc0 100 READY 3fef68 3a5b90 0 0
...
-> ti tShell
NAME ENTRY TID PRI STATUS PC SP ERRNO DELAY
---------- --------- ------ --- ------- ------- ------- ------ -----
tShell _shell 3a8460 1 READY 2ff38 3a813c 0 0

stack: base 0x3a8460 end 0x3a5d50 size 9000 high 4092 margin 4908

VX_SUPERVISOR_MODE VX_DEALLOC_STACK VX_FP_TASK VX_STDIO


d0 = 30 d1 = 3004 d2 = 0 d3 = 0
d4 = 0 d5 = 0 d6 = 0 d7 = 0
a0 = 7708e a1 = 3a5bc0 a2 = 0 a3 = 0

UE systmes temps rel, Universit de Brest Page 35/87


Le shell VxWorks (5)
Fonctions de type "shell" (utiles pour la mise au point) :
#include <vxWorks.h>

int var = 100;


affiche()
{
printf("var = %d\n",var);
}

Scnario dexcution :
-> ld < var.o
-> affiche()
var = 100

-> ma_var = 200


new symbol "ma_var" added to symbol table.
-> var = var + ma_var

-> affiche()
var = 300
UE systmes temps rel, Universit de Brest Page 36/87
Le shell VxWorks (6)
Principales commandes du shell VxWorks :

ls, ll, cd, pwd. Commandes de parcours du rpertoire utilisateur.

ld. Chargement dun module et dition des liens.

moduleShow. Affiche la liste des modules.

lkup, lkAddr. Consultation de la table des symboles.

sp, td, ts, tr, repeat. Oprations sur les tches : cration,
suppression, etc.

i, ti, checkStack, pc, printErrno. Information sur les tches.

Aide en ligne : help.

UE systmes temps rel, Universit de Brest Page 37/87


La mise au point distance (1)
Hte (Sun) Cible
hello.o
vxgdb tRdbTask
tShell
Noyau vxWorks

Ethernet

Principe : permettre la mise au point au niveau


source dune application sexcutant sur une cible.

gdb pour VxWorks : vxgdb. Commandes (presque)


identiques.
vxgdb est lanc sur lhte. Lapplication est excute sur
la cible = coopration entre vxgdb et la cible.

UE systmes temps rel, Universit de Brest Page 38/87


La mise au point distance (2)
Sur la cible :
1. Chargement du module :
->ld < hello.o

Sur lhte :
1. Lancement de gdb :
kermorvan$vxgdb&
2. Connexion la cible :
(vxgdb)target vxworks vxkermorvan
3. Lancement dune tche :
run helloWorld
4. Commandes vxgdb : break, list, step, next, display, printf, etc.

UE systmes temps rel, Universit de Brest Page 39/87


Sommaire
1. Prsentation.
2. Environnement de compilation croise et
environnement dexcution.
3. Services offerts par lexcutif VxWorks.

UE systmes temps rel, Universit de Brest Page 40/87


Services de lexcutif VxWorks
Services classiquement offerts par un excutif temps
rel :

Ordonnancement et tches.
Synchronisation : les smaphores.
Communication : pipe et file de messages.
Manipulation du temps.
Gestion des interruptions.
Drivers et vxWorks.

UE systmes temps rel, Universit de Brest Page 41/87


Ordonnancement (1)
Caractristiques principales :

Ordonnancement priorits fixes, premptif, HPF a .


Niveaux de priorit allant de 0 (la plus forte) 255 (la
plus faible).

Quantum identique pour toutes les tches. Modifiable


par lutilisateur.

Politique de round-robin pour les tches de mme


priorit : quivalent SCHED_F IF O si le quantum est
nul, quivalent SCHED_RR sinon (cf. POSIX
1003[GAL 95]).

a
Highest Priority First.
UE systmes temps rel, Universit de Brest Page 42/87
Ordonnancement (2)
pended ready delayed

suspended

La tche dans VxWorks :

Tche = pile + TCB a . Le TCB stocke le contexte dune tche (ex :


errno, PC, SP, tat, etc). La pile est de taille fixe.
Pas despace dadressage priv.
Pas de relation de parent entre les tches.
Identifiant unique numrique et alphanumrique.

a
Task Control Block

UE systmes temps rel, Universit de Brest Page 43/87


Ordonnancement (3)
Services principaux :

taskSpawn Cration et dmarrage


dune tche.
taskDelay(t) Suspend durant t tics
une tche.
taskP riorityGet(), Lecture et changement de
taskP rioritySet() la priorit dune tche.
kernelT imeSlice(t) Positionne le quantum de
lordonnanceur.
taskN ame, taskIdT cb, Renvoient le nom, lidenti-
taskIdSelf fiant et le TCB dune tche.
exit Termine une tche.
UE systmes temps rel, Universit de Brest Page 44/87
Ordonnancement (4)
Exemple de cration dune tche (fichier pere.c) :
coucou() {
printf("Tache %s\n", taskName(taskIdSelf()));
}

init() {
tid=taskSpawn("fils1",101,0,5000,
(FUNCPTR)coucou,0,0,0,0,0,0,0,0,0,0);
tid=taskSpawn("fils2",101,0,5000,
(FUNCPTR)coucou,0,0,0,0,0,0,0,0,0,0);
}

Excution :
-> ld < pere.o
-> sp init
task spawned: id = 0x3a59a0, name = fils1
task spawned: id = 0x3a59a1, name = fils2
Tache fils1
Tache fils2

UE systmes temps rel, Universit de Brest Page 45/87


Ordonnancement (5)
Autres services importants :

taskLock()/U nLock() Dsactive le caractre


premptif de lordonnanceur.
taskSuspend(tid) Suspend une tche
= mise au point seulement.
taskResume(tid) Rveille une tche.
taskDelete(tid) Destruction dune tche.
taskInit/taskActivate Cration et activation
spares dune tche.
etc.

UE systmes temps rel, Universit de Brest Page 46/87


Synchronisation : les smaphores (1)
Types de smaphores offerts :
1. Les mutex.
2. Les smaphores compteur.

Proprits : absence dinterblocage (cf. mthode dallocation), famine


(accepte dans un systme temps rel), garantie sur la synchronisation
attendue.
Utilisation :
Exclusion mutuelle, producteurs/consommateurs, lecteurs/rdacteurs
...
Gestion de ressources (moniteur) :
Mthodes dallocation : classe ordonne, allocation globale.
Patrons de conception : compteurs de ressources, smaphores
privs, collectifs.
UE systmes temps rel, Universit de Brest Page 47/87
Synchronisation : les smaphores (2)
Interface pour la manipulation des smaphores :

semGive(sem) Libration du smaphore.


semT ake(sem, timer) Acquisition du smaphore.
Primitive ventuellement
bloquante. timer = timeout
sur le temps dattente.
W AIT _F OREV ER

permet dutiliser un
timeout infini.
semDelete(sem) Destruction du smaphore.

UE systmes temps rel, Universit de Brest Page 48/87


Synchronisation : les smaphores (3)
Les mutex :
Uniquement utilisable pour la mise en uvre de section critique : la
libration du smaphore doit obligatoirement tre effectue par la
tche qui la prcdemment acquise.

Prise de section critique rcursive non bloquante.

Cration par la primitives semM Create(opt). Options :


1. Gestion FIFO ou par priorit de la file dattente (options
SEM _Q_F IF O et SEM _Q_P RIORIT Y ).

2. Utilisation dun protocole dhritage de priorit (option


SEM _IN V ERSION _SAF E , protocole PCP).

UE systmes temps rel, Universit de Brest Page 49/87


Synchronisation : les smaphores (4)
Exemple : section critique
#include <semLib.h>
#include <taskLib.h>

SEM_ID msm; int tid;

void tache() {
while(1) {
semTake(msm,WAIT_FOREVER);
/* utiliser la section critique */
semGive(msm);
}
}
void init() {
msm = semMCreate(SEM_INVERSION_SAFE | SEM_Q_PRIORITY);
tid = taskSpawn("mut1",101,0,5000,(FUNCPTR)tache,
0,0,0,0,0,0,0,0,0,0);
tid = taskSpawn("mut2",101,0,5000,(FUNCPTR)tache,
0,0,0,0,0,0,0,0,0,0);
}
UE systmes temps rel, Universit de Brest Page 50/87
Synchronisation : les smaphores (5)
Les smaphores compteur : smaphore
mmorisant le nombre doprations effectues.

Smaphores pour la mise en uvre de section critique,


la synchronisation entre tches, la gestion des
ressources (allocation, libration), la communication
entre tches.

semCCreate(opt, val). Cration du smaphore. opt


correspond aux mmes options que pour les mutex. val
est la valeur initiale du smaphore.

UE systmes temps rel, Universit de Brest Page 51/87


Synchronisation : les smaphores (6)
Exemple 1 : synchronisation entre tches
SEM_ID msm;
void tache() {
printf("tache %d en attente\n",taskIdSelf());
semTake(msm,WAIT_FOREVER);
printf("tache %d debloquee\n",taskIdSelf());
}
void init() {
msm = semCCreate(SEM_Q_FIFO ,0);
tid = taskSpawn("sem",101,0,5000,(FUNCPTR)tache,
0,0,0,0,0,0,0,0,0,0);
taskDelay(800);
printf("init : liberation de la tache\n");
semGive(msm);
}
Scnario dexcution :
-> sp init
tache 3772500 en attente
init: liberation de la tache
tache 3772500 debloquee
UE systmes temps rel, Universit de Brest Page 52/87
Synchronisation : les smaphores (7)
Exemple 2 : moniteur (compteur de ressources)
/* Smaphores compteur dimprimante */
SEM_ID imprimantes;

/* Nombre dimprimantes disponibles initialement */


#define NB_IMPRIMANTES 5

init() {
imprimantes=semCCreate(0,NB_IMPRIMANTES);
}

/* Allouer une imprimante */


void allouer(void) {
semTake(imprimantes,WAIT_FOREVER);
}

/* Liberer une imprimante */


void liberer(void) {
semGive(imprimantes);
}
UE systmes temps rel, Universit de Brest Page 53/87
Synchronisation : les smaphores (8)
Exemple 3 : moniteur (paradigme des smaphores privs)
SEM_ID sempriv[NB_TACHES]; /* Smaphores privs, un par tache */

#define ATTENDRE 1 /* Etat du systeme */


#define FAIT_QQ_CHOSE 2
#define UTILISER 3
int taches[NB_TACHES];
int ressources=5;

SEM_ID section_critique; /* Mutex */

init() {
int i;
section_critique=semMCreate(0);
for(i=0;i<NB_TACHES;i++) {
sempriv[i]=semCCreate(0,0);
taches[i]=FAIT_QQ_CHOSE;
taskSpawn(...);
}
}
UE systmes temps rel, Universit de Brest Page 54/87
Synchronisation : les smaphores (9)
/* Allouer les ressources pour la tache "id" */
void allouer(int id)
{
semTake(section_critique,WAIT_FOREVER);

if(ressources<0)
{
taches[id]=ATTENDRE;
}
else {
taches[id]=UTILISER;
ressources--;
semGive(sempriv[id]);
}

semGive(section_critique);

semTake(sempriv[id],WAIT_FOREVER);
}

UE systmes temps rel, Universit de Brest Page 55/87


Synchronisation : les smaphores (10)
/* Liberer les ressources de la tache "id" */
void liberer(int id)
{
int i;

semTake(section_critique,WAIT_FOREVER);

taches[id]=FAIRE_QQ_CHOSE;
ressources++;

for(i=0;i<NB_TACHES;i++)
if( (ressources>0) && (taches[i]==ATTENDRE) )
{
ressources--;
taches[i]=UTILISER;
semGive(sempriv[i]);
}

semGive(section_critique);
}
UE systmes temps rel, Universit de Brest Page 56/87
Communication (1)
Outils de communication offerts :

1. Mmoire partage + smaphores.


2. Files de messages : efficace, utilisation de priorits
pour la gestion de la file, timeout possible.
3. Pipes nomms : utilisation des fonctions E/S standard
(read/read/select) , descripteur de fichiers.

UE systmes temps rel, Universit de Brest Page 57/87


Communication (2)

Tche A Tche B

Les files de messages :

Dterminisme temporel = pr-allocation mmoire.


Message de taille variable.
Producteurs et consommateurs multiples.
File mono-directionnelle.
Gestion des files dattente : FIFO ou par priorit.
Utilisation de timeout.

Primitives : msgQCreate(), msgQSend(), msgQReceive().

UE systmes temps rel, Universit de Brest Page 58/87


Communication (3)
msgQCreate(nb, taille, opt). Cration dune file contenant au plus nb
messages de maximal taille octets. Options : M SG_Q_P RIORIT Y
(tches servies selon leur priorit), M SG_Q_F IF O (tches servies
de faon FIFO).

msgQSend(id, buf f, taille, timeout, prio). Emission dun message


sur la file id de maximal taille octets et stock ladresse buf f . prio
dsigne la mode dinsertion dans la file (M SG_P RI_N ORM AL =
en queue ; M SG_P RI_U RGEN T = en tte ). A expiration de
timeout tics, une erreur est leve.

msgQReceive(id, buf f, taille, timeout). Primitive bloquante jusqu


rception dun message sur la file id de taille maximal taille et stock
ladresse buf f .

UE systmes temps rel, Universit de Brest Page 59/87


Communication (4)
Exemple : producteur/consommateur
MSG_Q_ID msg;

void init() {
msg = msgQCreate(20,500,MSG_Q_FIFO);
tid=taskSpawn("cons",101,0,10000,
(FUNCPTR)consommateur, 0,0,0,0,0,0,0,0,0,0);
tid=taskSpawn("prod",101,0,10000,
(FUNCPTR)producteur, 0,0,0,0,0,0,0,0,0,0);
}

void producteur() {
char buff [100];

while(1) {
sprintf(buff,"Il est %d tics\n",tickGet());
msgQSend(msg,buff,sizeof(buff),
WAIT_FOREVER,MSG_PRI_NORMAL);
}
}
UE systmes temps rel, Universit de Brest Page 60/87
Communication (5)
void consommateur()
{
char buff [100];

while(1)
{
strcpy(buff,"");
msgQReceive(msg,(char *) buff,sizeof(buff),
WAIT_FOREVER);
printf("message = %s\n",buff);
}
}

Scnario dexcution :
-> sp init
message = Il est 32262 tics
message = Il est 33002 tics
...

UE systmes temps rel, Universit de Brest Page 61/87


Manipulation du temps (1)
Services lis au temps :
1. Quelle heure est il ?
2. Bloquer un processus/tche pendant une dure donne.
3. Rveiller un processus/tche rgulirement (timer ou chien de
garde) = tches priodiques.
Prcision de ces services :
1. Lie au matriel prsent (circuit dhorloge), ses caractristiques
(priode de linterruption) et au logiciel qui lutilise (handler
dinterruption).
2. Ex : Linux intel : circuit activ priodiquement (10 ms) + registre
RDTSC du Pentium. Rsultat = mesure en micro-seconde
(gettimeof day) mais temps de rveil autour de 10/12 ms.

UE systmes temps rel, Universit de Brest Page 62/87


Manipulation du temps (2)
Services disponibles utilisant des "tics" (portabilit):
Chiens de garde VxWorks.
taskDelay(nb) : bloque une tche pendant nb tics.
tickSet()/tickGet(). Positionne ou consulte le nombre de top
dhorloge depuis la mise sous tension.
sysClkRateSet()/sysClkRateGet(). Modification ou consultation de
la frquence de lhorloge systme.
Outils de profiling (timexLib).

UE systmes temps rel, Universit de Brest Page 63/87


Manipulation du temps (3)
Chien de garde : gnration dune interruption sur expiration dun
timeout.

Interface pour la gestion des chiens de garde :

wdCreate(). Initialisation dun chien de garde.


wdStart(wd, delai, f unc, parm). Activation du chien de garde : aprs
delai tics, la fonction f unc est excute avec le paramtre parm.
wdCancel(wd). Annulation dun chien de garde en cours de
dcrmentation.
wdDelete(wd). Destruction dun chien de garde.

UE systmes temps rel, Universit de Brest Page 64/87


Manipulation du temps (4)
Exemple : contrle dune chance :
WDOG_ID wd;
int go=1;

trop_tard() {
go=-1;
}
...
wd=wdCreate();
wdStart(wd,echeance,(FUNCPTR)trop_tard,0);
while(go>0) {
printf("Je Bosse .....\n");
taskDelay(10);
}
printf("Debloquee par interruption : echeance ratee\n");
Scnario dexcution :
-> sp echeance
Je Bosse .....
Je Bosse .....
Debloquee par interruption : echeance ratee
UE systmes temps rel, Universit de Brest Page 65/87
Gestion des interruptions (1)
Prise en compte
interruption

Traitement
interruption
Tche x Tche x

Sauvegarde Restauration
contexte
contexte

Prise en compte dvnements matriels ou logiciels.

Caractristiques :
Modification possible du vecteur dinterruption.
Une seule pile pour toutes les interruptions (attention aux interruptions imbriques).
Pas de co-gestion tches/interruptions : contexte interruption diffrent = services
de lexcutif pas tous disponibles dans une interruption (ex : oprations bloquantes,
E/S, etc).
Partie dpendante du BSP.

UE systmes temps rel, Universit de Brest Page 66/87


Gestion des interruptions (2)
Principales primitives :

intConnect() Connection dun handler une


interruption donne (ex : horloge).
intLock() Autorise les interruptions.
intU nLock() Interdit les interruptions.
intCount() Consultation du niveau dimbrication
de traitement des interruptions.
intContext() Dtermine si le contexte dexcution
est celui dune interruption ou non.

UE systmes temps rel, Universit de Brest Page 67/87


Drivers et vxWorks (1)
Les drivers dans UNIX :
Processus

Appels systmes

Sous systme E/S


Systme de fichiers

Noyau

Drivers caractres Drivers blocs


Interruptions
Priphriques

Pilotes/drivers orients caractres et orients blocs. Accs en mode


"raw".
Notion de pseudo-driver (drivers caractres).
UE systmes temps rel, Universit de Brest Page 68/87
Drivers et vxWorks (2)
Un driver est un composant indpendant du reste du systme dexploitation.

Interface dun driver (caractres) :


close Fermeture du priphrique.
creat Cration du priphrique.
open Ouverture du priphrique.
remove Destruction du priphrique.
read Lecture sur le priphrique.
write Ecriture sur le priphrique.
ioctl Interface de contrle : consultation ou
modification dattributs.

Selon la catgorie du priphrique, lintgralit des oprations nest pas forcment


implante.
Les interfaces "blocs" sont gnralement plus complexes.

UE systmes temps rel, Universit de Brest Page 69/87


Drivers et vxWorks (3)
Caractre ou bloc ?
Mineur Nom symbolique
Majeur

31040 brw-rw---- 1 singhoff floppy 2, 0 mai 5 1998 /dev/fd0


31041 brw-rw---- 1 singhoff floppy 2, 12 mai 5 1998 /dev/fd0D360
31042 brw-rw---- 1 singhoff floppy 2, 16 mai 5 1998 /dev/fd0D720
31043 brw-rw---- 1 singhoff floppy 2, 28 mai 5 1998 /dev/fd0H1440
31050 brw-rw---- 1 singhoff floppy 2, 1 mai 5 1998 /dev/fd1
31051 brw-rw---- 1 singhoff floppy 2, 13 mai 5 1998 /dev/fd1D360
31420 crw-rw---- 1 root daemon 6, 0 mai 5 1998 /dev/lp0
31421 crw-rw---- 1 root daemon 6, 1 mai 5 1998 /dev/lp1
31422 crw-rw---- 1 root daemon 6, 2 mai 5 1998 /dev/lp2

Infos. fichiers UNIX

Dsignation dun priphrique :


Nom de fichier (/dev/xxx). Nom symbolique destin aux utilisateurs permettant :
1. Cration/utilisation de programmes manipulant indiffremment fichiers et
priphriques.
2. Droits UNIX.
Type, majeur et mineur = dsignation destine au systme. Le majeur dsigne un
driver donn (table de drivers). Le mineur est local un driver.
UE systmes temps rel, Universit de Brest Page 70/87
Drivers et vxWorks (4)
Spcificits dun driver sur VxWorks :

Drivers et applications partagent le mme espace


dadressage (excutif).
Comme les tches, le code du driver est premptible.
Concurrence possible lors de lexcution du code du
driver.
Pas de notion de mineur.
Chargement et retrait dynamique des drivers.
Stucture simplifie du systme dE/S.

UE systmes temps rel, Universit de Brest Page 71/87


Drivers et vxWorks (5)
Table de descripteurs de fichiers
Majeur valeur
0
1
2
3
4
5

Liste des descripteur des priphriques


/dev/lp1 /dev/toto /dev/a1
donnes donnes donnes
priphrique priphrique priphrique

Table de drivers
create remove open close read write ioctl
1
2
3
4

Structure du systme dE/S :


Une liste de priphriques.
Une table de descripteurs de fichiers commune toutes les tches.
Une table de drivers indexe par le majeur.

UE systmes temps rel, Universit de Brest Page 72/87


Drivers et vxWorks (6)
Composants logiciels dun driver sur vxWorks :
1. Un descripteur de priphrique : structure C mmorise les donnes associes
chaque priphrique.
2. Une fonction C permettant dinstancier la structure 1) pour chaque priphrique
physique.
3. Une fonction C pour chaque opration sur le priphrique (read, write, open, creat,
remove, ioctl et close).
4. Une fonction C pour enregistrer le driver dans le systme E/S ; enregistrement des
fonctions 3).

Installation dun driver :


1. Chargement en mmoire des modules objets constituant le driver.
2. Pour chaque priphrique physique, allocation dun descripteur de priphrique.
3. Enregistrement des fonctions read, write, open, creat, remove, ioctl et close dans le
systme E/S et rcupration du majeur associ au driver.

UE systmes temps rel, Universit de Brest Page 73/87


Drivers et vxWorks (7)

Installation du driver :

int demoDrvMajor=-1;

STATUS demoDrv () {
demoDrvMajor = iosDrvInstall (demoOpen, (FUNCPTR)NULL, demoOpen,
demoClose, demoRead, demoWrite, demoIoctl);
}

UE systmes temps rel, Universit de Brest Page 74/87


Drivers et vxWorks (8)

Descripteur de priphrique :

typedef struct {
DEV_HDR devHdr;
char data[MAX_SIZE];
} demo_dev;

Allocation dun descripteur de priphrique :

STATUS demoDevCreate (char* name) {


demo_dev *pDev;

if ((pDev = (demo_dev *) malloc (sizeof (demo_dev))) == NULL)


return (ERROR);
strcpy(pDev->data,"");
return (iosDevAdd ((DEV_HDR *) pDev, name, demoDrvMajor));
}

UE systmes temps rel, Universit de Brest Page 75/87


Drivers et vxWorks (9)
Fonction C pour chaque opration sur un priphrique :

int demoOpen (demo_dev* pDev, char* name, int mode) {


pDev->mode=mode;
return ((int) pDev);
}

int demoRead (demo_dev* pDev, char* buffer, int maxbytes) {


strncpy(buffer,pDev->data,maxbytes);
return (strlen(buffer)+1);
}

int demoWrite (demo_dev* pDev, char* buffer, int maxbytes) {


strncpy(pDev->data,buffer,maxbytes);
return (strlen(pDev->data)+1);
}
...

UE systmes temps rel, Universit de Brest Page 76/87


Drivers et vxWorks (10)
Exemple dapplication :
int fd=-1;

void open_file(char* name, int mode) {


fd=open(name,mode,0);
}

void read_file() {
char buff [100];
int nb=read(fd,&buff,20);
printf(" read ; size = %d ; text = %s\n",nb,buff);
}

void write_file(char* buff) {


int nb=write(fd,buff,20);
printf(" write ; size = %d\n",nb);
}

UE systmes temps rel, Universit de Brest Page 77/87


Drivers et vxWorks (11)
Exemple dutilisation :
-> ld < demoDrv.o
-> demoDrv()
-> demoDevCreate("/dev/toto")
-> devs
drv name
0 /null
1 /tyCo/0
4 kermorvan:
6 /pty/rlogin.M
8 /dev/toto
-> open_file("/dev/toto",2)
-> read_file
read ; size = 1 ; text =
-> write_file("coucou")
write ; size = 7
-> read_file
read ; size = 7 ; text = coucou

UE systmes temps rel, Universit de Brest Page 78/87


Drivers et vxWorks (12)
Code dune tche Code du driver

fd = open("/dev/toto",O_RDONLY) xxdev=demoOpen(xxdev, ... )

(5) (4)
(1)
Majeur valeur
0
1
Table de descripteurs de fichiers 2
3 2 xxdev
4
5

Liste des descripteur des priphriques

/dev/lp1 /dev/toto /dev/a1


donnes donnes donnes
priphrique priphrique priphrique
2

(2) (3)
Table de drivers

create remove open close read write ioctl


1
2 demoOpen
3
4

UE systmes temps rel, Universit de Brest Page 79/87


Drivers et vxWorks (13)
1. Recherche du priphrique dans la liste des
priphriques.
2. Accs la table de drivers par le majeur (majeur = 2).
3. Appel de demoOpen (code du driver).
4. En retour, allocation dune entre dans la table de
descripteurs de fichiers puis mmorisation du majeur et
de linformation donne par demoOpen.
5. Renvoyer le descripteur de fichier (f d = 3).

UE systmes temps rel, Universit de Brest Page 80/87


Drivers et vxWorks (14)
Code dune tche Code du driver

nb = read(fd, buff, len) nb=demoRead(xxdev, buff, len)

(1)

Majeur valeur
0
1
2
Table des descripteurs de fichiers 3 2 xxdev
4
5

(2)

(3)
Table de drivers

create remove open close read write ioctl


1
2 demoRead
3
4

UE systmes temps rel, Universit de Brest Page 81/87


Drivers et vxWorks (15)
1. Grce au descripteur de fichier, rcupration du majeur.
2. Accs la table de drivers par le majeur.
3. Appel de demoRead (code du driver).

UE systmes temps rel, Universit de Brest Page 82/87


Sommaire
1. Gnralits sur les systmes embarqus temps rel.
2. Le systme VxWorks.
3. Rsum.
4. Rfrences.

UE systmes temps rel, Universit de Brest Page 83/87


Rsum

Gnralits :
Notion de systmes embarqus temps rel.
Diffrences entre un excutif et un systme dexploitation.
Modularit, architecture hte/cible, portabilit, BSP.
Etat du march.

VxWorks :
Abtractions : tches, adressage virtuel unique, outils de
communication et de synchronisation.
Utilisation de lenvironnement de compilation et dexcution.
API de lexcutif (ordonnancement, outils de communication et de
synchronisation).
UE systmes temps rel, Universit de Brest Page 84/87
Sommaire
1. Gnralits sur les systmes embarqus temps rel.
2. Le systme VxWorks.
3. Rsum.
4. Rfrences.

UE systmes temps rel, Universit de Brest Page 85/87


Rfrences (1)

[DEM 94] I. Demeure and J. Farhat. Systmes de processus lgers : concepts et exemples
. Technique et Science Informatiques, 13(6):765795, dcembre 1994.

[DEN 66] B. Dennis and E. C. Van Horn. Programming Semantics for Multiprogrammed
Computations . Communications of the ACM, 9(3):143155, March 1966.

[GAL 95] B. O. Gallmeister. POSIX 4 : Programming for the Real World . OReilly and
Associates, January 1995.

[GHO 94] K. Ghosh, B. Mukherjee, and K. Schwan. A survey of Real Time Operating
Systems . Technical Report, College of Computig. Georgia Institute of Technology.
Report GIT-CC-93/18, February 1994.

UE systmes temps rel, Universit de Brest Page 86/87


Rfrences (2)

[J. 93] J. M. Rifflet. La programmation sous UNIX. Addison-Wesley, 3rd edition, 1993.

[RIF 95] J. M. Rifflet. La communication sous UNIX : applications rparties. Ediscience


International, 2rd edition, 1995.

[RIV 97] Wind River. VxWorks : programmers guide. Wind River System, March 1997.

[TIM 00] M. Timmerman. RTOS Market survey : preliminary result . Dedicated System
Magazine, (1):68, January 2000.

[VAH 96] U. Vahalia. UNIX Internals : the new frontiers. Prentice Hall, 1996.

UE systmes temps rel, Universit de Brest Page 87/87

Vous aimerez peut-être aussi