Le systme RTEMS
ENST - 2005 158
Le systme RTEMS
Bertrand Dupouy
Le systme RTEMS
ENST - 2005 159
Plan
Prsentation
Matriel supports
Gestion des tches
Gestion de la mmoire
Communications entre threads
Timers
Implantation de pilotes de priphriques
Rseau
outils de mise au point
Divers
Le systme RTEMS
ENST - 2005 160
Prsentation
http://www.oarcorp.com
Caractristiques :
- open-source : on a accs tous les sources, on peut les modifier, les distribuer
- cest un excutif, pas un systme : lexcutif est link avec lapplication et donne un excutable qui doit tre charg sur la cible,
- avantage dun excutif : plus petit quun sysme (on ne charge que les primitives dont on a besoin), RTEMS peut tourner sur une dizaine de K octets
- RTEMS est arriv maturit
- Il utilise lenvironnement de dveloppement GNU/gcc :
o Nombreux compilateurs croiss, pratiquement pour toutes les architectures 32 bits
o Nombreux formats de fichiers excutables, o remote gdb o Dveloppements sur RTEMS en C, C++, Ada
Le systme RTEMS
ENST - 2005 161
Prsentation
- Conception modulaire par sparation des :
o API (RTEMS ou POSIX), o Bibliothques (managers), o CPU (Types de processeurs), o boards (notion de board support package ou BSP)
Application
RTEMS avec les seuls managers ncessaires
Fonctions dpendantes du processeur
Fonctions dpendantes du BSP
Matriel
Matriels supports :
- Famille Motorola MC68xxx et PowerPC, Intel i386 et i960, MIPS, HP PA-RISC, sur toutes sortes de boards
- Ces cibles peuvent tre utilises en multiprocesseur, sans migration
Le systme RTEMS
ENST - 2005 162
Prsentation
Caractristiques :
- RTEMS propose plusieurs API, dont POSIX 1003.1b
- Les primitives systmes sont regroupes par type dans des managers
- On cr un excutable en linkant le code de lapplication avec le noyau, on indique, pour chaque application, quels managers sont utiliss
- La mise au point peut se faire distance via une ligne srie ou un cble Ethernet
- Le noyau fonctionne sur des architectures multiprocesseurs, mais les tche ne peuvent pas migrer
- Il existe une version Unix qui permet de simuler
Espace disque pour lenvironnement de dveloppement :
- gcc et bibliothques : 250 M octets
- source de RTEMS = environ 95 M octets
Le systme RTEMS
ENST - 2005 163
Gestion des Tches
Pas despaces dadressage spars, les tches sont donc des threads
API spcifique et API POSIX.
Politique dordonnancement :
- event driven, base sur les priorits (255 niveaux, 1 est maximum, linverse avec POSIX), premptive
- RMS,
- tches sporadiques avec lAPI POSIX
Attention : il faut dfinir le nombre maximal de threads pour chaque application, ce nombre dpend de la mmoire disponible
Les tches peuvent tre cres et dtruites dynamiquement
Le systme RTEMS
ENST - 2005 164
Gestion Des tches (suites)
Pas de protection des espaces dadressage,
Gestion mmoire dynamique par blocs allocation de blocs de taille variable (memory chunks), (malloc et free),
Gestion par le Region Manager,
Communications entre tches : lAPI POSIX 1003.1b IPC est implante
Le systme RTEMS
ENST - 2005 165
Synchronisation : Smaphores
Verrous, smaphores, avec ou sans timeout, nomms ou non, gr par le Semaphore Manager
- locaux, globaux
- oprations P et V (Dijkstra) : rtems_semaphore_obtain et rtems_semaphore_release, option NOWAIT
- oprations Init (Dijkstra) : rtems_semaphore_create options : LOCAL/GLOBAL, PRIO : PCP/PIP/STANDARD, FA : FIFO/PRIORITY
- API POSIX implante pour les verrous (pthread_mutex_lock, ),
Gestion des priorits :
- pour les verrous locaux seulement
- PIP (Priority Inheritance Protocol), hritage de priorit :
- PCP (Priority Ceiling Protocol), priorit plafonne,
Le systme RTEMS
ENST - 2005 166
Synchronisation : Variables conditionnelles
servent mettre un thread en attente de vrification d'une condition,
implantation de lAPI POSIX : association d'un mutex et d'une variable dite conditionnelle
fonctions de gestion :
pthread_cond_init(&VarCond,NULL),
pthread_cond_destroy(&VarCond),
pthread_cond_wait(&VarCond, &Verrou),
pthread_cond_timedwait(&VarCond, &Verrou, &Tempo),
pthread_cond_signal(&VarCond),
pthread_cond_broadcast(&VarCond)
le wait est toujours bloquant, la diffrence d'une opration P sur un smaphore .Il fait passer le thread l'tat bloqu ET rend le verrou de faon atomique. Quand le thread sort de l'tat bloqu sur un signal ou broadcast, il essaie de reprendre le verrou
l'vnement de rveil (signal, broadcast) n'est pas mmoris : si aucun thread ne l'attend, il est perdu (diffrent de V sur un smaphore)
Le systme RTEMS
ENST - 2005 167
Les Messages
Grs par le Message Manager :
Primitives bloquantes on non bloquantes
API POSIX disponible :
Fonction Description mq_close
Fermer une file de messages
mq_getattr Renvoie les caractristiques dune file de messages
mq_open Ouvrir une file de message mq_receive Extraire un message dune file mq_send Dposer un message dans une file mq_setattr Changer les attributs dune file mq_unlink Dtruire une file de messages
Le systme RTEMS
ENST - 2005 168
Les signaux, timers, Events, interrupts
Signal Manager .
- gestion par ASR dfinie par le thread courant qui est excute quand le signal est dlivr au thread
API POSIX :
Fonction Description Sigqueue Queue a signal to a process Sigwaitinfo Attendre un signal et une info. Sigtimedwait Attendre un signal avec une
chance
La rsolution du timer (dure du tic) peut tre dfinie au niveau du
BSP
Les interruptions ne sont pas converties en signaux ou autres vnements, elles sont gres par des fonctions C associes au vecteur dinterruption:
Les fonctions qui grent les IT sappellent des ISR et sont attaches aux vecteurs dinterruption par la primitive
rtems_interrupt_catch()
Le systme RTEMS
ENST - 2005 169
0rdonnancement RMS
On va crer une priode lintrieur dune tche :
- appel rate_monotonoc_create,
- elle est implant sous forme dun Period Control Block,
- chaque PCB est associ un identificateur unique,
- le PCB contient ltat de la priode, initialis inactive
Changements dtats pour une priode par appel rate_monotonoc_create :
- ni active, ni expire, alors initialise : period ticks et retour tche courante,
- si active, alors la tche est bloque pendant le reste de la priode courante, lexpiration de celle-ci, la priode est rinitialise et la tche redmarre,
- si la priode a expir avant lappel rate_monotonoc_period,alors la tche sort en time-out,
Pour dmarrer la priode:
- la faire passer ltat active (appel rate_monotonoc_period
Le systme RTEMS
ENST - 2005 170
Implantation
Une interruption est gnre chaque clock_tick :
- elle est gre par un ISR qui appelle une fonction RMS lorsque le nombre de clock_ticks atteint la priode
- cette fonction rinitialise le compteur de lISR et change ltat de la priode pour dbloquer la tche associe
Il y a un timer par priode
Le systme RTEMS
ENST - 2005 171
Exemple : Gestion RMS
Mise en uvre dune gestion RMS :
#define T 10
rtems_rate_monotonic_create (nom, &Periode) ;
while () {
Etat = rtems_rate_monotonic_period(Periode, T) ;
if (Etat == RTEMS_TIMEOUT) break ;
/***** Code excuter (C1, C2, C3) *****/
}
/***** Echance dpasse *****/
Le systme RTEMS
ENST - 2005 172
Exemple : Gestion RMS
rtems_rate_monotonic_period : initialise un PCB pour grer la
priode
Les appels rtems_rate_monotonic_period :
- Appel 1 (comportement spcifique dinitialisation) : priode initialise T (ici 10), la tche ressort immdiatement de la fonction,
- Appel 2 : la tche est bloque pendant T- C1
- Appel 3 : la tche est bloque pendant T- C2
- Appel 4 : C3 > T, lchance est dpasse, la tche ressort immdiatement avec un message derreur,
Tche critique et gestion RMS :
- si certaines tches sont critiques (strict respect des chances) et dautres, non :
o affecter des priorits telles que celle de la tche critique la moins prioritaire soit plus prioritaire que la tche non-critique la plus prioritaire
o en cas de surcharge, seules les tches critiques respecteront leurs chances,
Le systme RTEMS
ENST - 2005 173
Exemple : Fichier system.h
Un extrait du fichier system.h illustre ce qui est fait pour ne charger que les managers utiliss :
/* configuration information */ #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER #define CONFIGURE_MAXIMUM_POSIX_THREADS 1 #define CONFIGURE_MAXIMUM_POSIX_KEYS 10 #define CONFIGURE_MAXIMUM_POSIX_MUTEXES 10 #define CONFIGURE_POSIX_INIT_THREAD_TABLE #include