Un exemple de noyau temps réel « Open Sources »

Transcription

Un exemple de noyau temps réel « Open Sources »
1
GEI 455 Systèmes en temps réel
RTEMS
Un exemple de noyau temps réel
« Open Sources »
Philippe Mabilleau Ing.
2
GEI 455 Systèmes en temps réel
RTEMS
• RTEMS Real Time Executive for Military
Systems
• Développé pour l'"US Army Missile
Command"
par On-Line Applications Research
Corporation
• « Open Source »
– Disponible sur l'Internet
Philippe Mabilleau Ing.
3
GEI 455 Systèmes en temps réel
Environnement
• Supporte les langages C et Ada
• Fonctionne avec les outils de
développement croisé de GNU (pour la
version C)
• Portable
• Disponible pour différentes platesformes
– AMD 29K, Hitachi SH, Intel i386, i960,
MIPS64, MC68xxx, PowerPC, Sparc
Philippe Mabilleau Ing.
4
GEI 455 Systèmes en temps réel
Propriétés
• Système multi-tâches
– préemptif avec priorités et distribution
circulaire
– ISR
•
•
•
•
•
Synchronisation et communication
Gestion temporelle
Gestion de la mémoire
Entrées-sorties
Systèmes multiprocesseurs
Philippe Mabilleau Ing.
5
GEI 455 Systèmes en temps réel
Objets
• Éléments manipulés par RTEMS
– orienté objet dans des langages
conventionnels (C, ADA)
• Types d ’objets
–
–
–
–
–
–
–
–
Philippe Mabilleau Ing.
tâches
files de messages
sémaphores
régions de mémoire
partitions de mémoire
temporisateurs (timers)
activations périodiques (rate monotonic periods)
ports d ’entrée-sortie
6
GEI 455 Systèmes en temps réel
Tâches
– état
• en exécution, prête, bloquée, dormante et non
existante
– priorité
• de 1 à 255 (1 la plus prioritaire)
– mode
•
•
•
•
préemption
quantum temporel (Timeslicing)
traitement des signaux (ASR)
niveau d ’interruption
Philippe Mabilleau Ing.
7
GEI 455 Systèmes en temps réel
États d'une tâche
Non-existent
Deleting
Deleting
Dormant
Creating
Starting
Ready
Dispatching
Blocking
Deleting
Yielding
Readying
Deleting
Executing
Philippe Mabilleau Ing.
Blocking
Blocked
8
GEI 455 Systèmes en temps réel
Distribution du CPU
– contrôlable pur chaque tâche
– préemption
• permet la redistribution du CPU si une tâche
plus prioritaire devient éligible
– Timeslicing or round-robin scheduling
• pour des tâches de même priorité
• quantum de temps associé à chaque tâche
– Manual Round-Robin
• redistribution volontaire du CPU
Philippe Mabilleau Ing.
9
GEI 455 Systèmes en temps réel
Interruptions
– ISR (Interrupt Service Routine)
• utilisation obligatoire si des directives RTEMS
sont appelées
– reconnaissance de plusieurs niveaux de
priorité face aux interruptions
• jusqu ’à 255
• associés à ceux du CPU
– limitation au niveau des directives qui
peuvent être utilisées dans les ISR
Philippe Mabilleau Ing.
10
GEI 455 Systèmes en temps réel
Temporisateurs
– Activation d ’une fonction de service
• après un délai
• à une date fixe
Philippe Mabilleau Ing.
11
GEI 455 Systèmes en temps réel
Activation périodique
– Rate Monotonic Period
– activation de tâches périodiques
– application directe du RMS
– directive de synchronisation de la tâche
avec une activation périodique
Philippe Mabilleau Ing.
12
GEI 455 Systèmes en temps réel
Exemple
rtems_task Periodic_task()
{
rtems_name name;
rtems_id period;
rtems_status_code status;
name = rtems_build_name( 'P', 'E', 'R', 'D' );
status = rate_monotonic_create( name, &period );
if ( status != RTEMS_STATUS_SUCCESSFUL ) {
printf( "rtems_monotonic_create failed with status of %d.\n", rc );
exit( 1 );
}
while ( 1 ) {
if ( rate_monotonic_period( period, 100 ) == RTEMS_TIMEOUT )
break;
/* Perform some periodic actions */
}
/* missed period so delete period and SELF */
status = rate_monotonic_delete( period );
if ( status != RTEMS_STATUS_SUCCESSFUL ) {
printf( "rate_monotonic_delete failed with status of %d.\n", status );
exit( 1 );
}
status = rtems_task_delete( SELF ); /* should not return */
printf( "rtems_task_delete returned with status of %d.\n", status );
exit( 1 );
}
Philippe Mabilleau Ing.
13
GEI 455 Systèmes en temps réel
Synchronisation
•
•
•
•
Sémaphores
Files de messages
Événements (Event Flags)
Signaux
Philippe Mabilleau Ing.
14
GEI 455 Systèmes en temps réel
Sémaphores
– binaires ou généralisés
– obtentions multiples permises et
reconnues
– héritage de priorité (Priority Inheritance)
• élévation à la priorité de la tâche la plus
prioritaire en attente du sémaphore
• sémaphore binaire local uniquement
– plafonnement de priorité (Priority Ceiling)
• élévation à une priorité fixe prédéfinie (Ceiling
Priority)
• sémaphore binaire local uniquement
Philippe Mabilleau Ing.
15
GEI 455 Systèmes en temps réel
Files de messages
– messages de longueur variables
• longueur maximum définie pour chaque file de
messages
– file FIFO ou LIFO
– distributions des messages aux tâches
• FIFO
• par priorité
– réception par scrutation, attente ou attente
avec expiration
– diffusion de messages possible à toutes
les tâches en attente
Philippe Mabilleau Ing.
16
GEI 455 Systèmes en temps réel
Événements
– 32 drapeaux (Event Flags) associés à
chaque tâche
• indépendants
– manipulés par groupe (Event Sets)
• signalisation d ’un groupe
• attente sur un OU ou un ET des événements
du groupe
– signalisations multiples d ’un même
drapeaux ignorées
Philippe Mabilleau Ing.
17
GEI 455 Systèmes en temps réel
Signaux
– fonction asynchrone au sein d ’une tâche
• asynchronous signal routine (ASR)
– 32 signaux par tâche
– manipulables par groupes (Signal Sets)
– exécutés au niveau de la tâche
• mais propriétés d ’exécution pouvant être
différentes de celle de la tâche
Philippe Mabilleau Ing.
18
GEI 455 Systèmes en temps réel
Gestion de la mémoire
• Partitions
• Régions
• Mémoire à double accès
Philippe Mabilleau Ing.
19
GEI 455 Systèmes en temps réel
Partitions
– zone de mémoire contiguë
– allocation de blocs de taille fixe
– pas de blocage des tâches en attente d ’un
bloc de mémoire
Philippe Mabilleau Ing.
20
GEI 455 Systèmes en temps réel
Régions
– allocations de segments de tailles
variables
– utilisation de pages de taille fixe
• déterminée à la création de la région
• la taille des segments est arrondie à un multiple
de la taille des pages
– algorithme de la première allocation
possible (First-Fit)
Philippe Mabilleau Ing.
21
GEI 455 Systèmes en temps réel
Mémoire à double accès
– Dual-Ported Memory
– zone de mémoire accessible par plusieurs
CPU exécutant RTEMS
• visible à des adresses différentes selon les
CPU
– directive de conversion des adresses
• adresses internes et adresses externes
Philippe Mabilleau Ing.
22
GEI 455 Systèmes en temps réel
Systèmes multiprocesseurs
• Support de systèmes multiprocesseurs
– fortement couplés
• mémoire à double accès
– faiblement couplés
• réseau
• lien de communication
• Objets locaux et globaux
– manipulation distante possible des objets
globaux
Philippe Mabilleau Ing.
23
GEI 455 Systèmes en temps réel
RTEMS
Initialization Manager
Task Manager
Interrupt Manager
Clock Manager
Timer Manager
Semaphore Manager
Message Manager
Event Manager
Philippe Mabilleau Ing.
Signal Manager
Partition Manager
Region Manager
DP Memory Manager
I/O Manager
Fatal Error Manager
Rate Monotonic Manager
Multiprocessing Manager
24
GEI 455 Systèmes en temps réel
RTEMS : adaptabilité
Application
Noyau RTEMS
Fonctions
dépendantes du CPU
Fonctions dépendantes
de l'environnement matériel
Environnement matériel
Philippe Mabilleau Ing.
25
GEI 455 Systèmes en temps réel
RTEMS : exemple
/*
*
*
*
*
*
*
*
*
*
*
*
*
*/
Init
This routine is the initialization task for this test program.
It is called from init_exec and has the responsibility for creating
and starting the tasks that make up the test. If the time of day
clock is required for the application, the current time might be
set by this task.
Input parameters:
Output parameters:
NONE
NONE
init.c,v 1.2 1995/05/31 17:05:36 joel Exp
#include "system.h"
#undef EXTERN
#define EXTERN
#include "conftbl.h"
#include "gvar.h"
Philippe Mabilleau Ing.
26
GEI 455 Systèmes en temps réel
Exemple (suite)
#define ARGUMENT 0
rtems_task Init(
rtems_task_argument argument
)
{
rtems_name
task_name;
rtems_id
tid;
rtems_status_code status;
printf( "\n\n*** SAMPLE SINGLE PROCESSOR APPLICATION ***\n" );
printf( "Creating and starting an application task\n" );
task_name = rtems_build_name( 'T', 'A', '1', ' ' );
status = rtems_task_create( task_name, 1, 1024,
RTEMS_INTERRUPT_LEVEL(0), RTEMS_DEFAULT_ATTRIBUTES, &tid );
status = rtems_task_start( tid, Application_task, ARGUMENT );
status = rtems_task_delete( RTEMS_SELF );
}
Philippe Mabilleau Ing.
27
GEI 455 Systèmes en temps réel
Exemple (fin)
/* Application_task
*
* This routine is as an example of an application task which
* prints a message including its RTEMS task id. This task
* then invokes exit to return to the monitor.
*
#include "system.h"
#include "libcsupport.h"
rtems_task Application_task(
rtems_task_argument argument
)
{
rtems_id
tid;
rtems_status_code status;
status = rtems_task_ident( RTEMS_SELF, RTEMS_SEARCH_ALL_NODES, &tid );
printf( "Application task was invoked with argument (%d) "
"and has id of 0x%x\n", argument, tid );
printf( "*** END OF SAMPLE SINGLE PROCESSOR APPLICATION ***\n" );
exit( 0 );
}
Philippe Mabilleau Ing.