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.