Site affiché en Français Voir le site en English (USA) Voir le site en English (GB)
Vous êtes ici: ac6 > ac6-formation > Temps réel > Les bonnes pratiques du temps réel Linux
Télécharger le catalogue
Télécharger le catalogue
Télécharger la page
Télécharger la page
Ecrivez nous
Ecrivez nous
Version imprimable
Version imprimable
 

RT1 Les bonnes pratiques du temps réel Linux

Comment éviter les pièges de la programmation temps réel


formateur
Objectifs
bullet_jaune_1 Découvrez les notions de multitâche temps réel
bullet_jaune_1 Maîtriser la programmation concurrente
bullet_jaune_2 Sur le même processeur
bullet_jaune_2 Sur un système multiprocesseur
bullet_jaune_1 Comprendre les contraintes temps réel
bullet_jaune_2 Déterminisme
bullet_jaune_2 Préemption
bullet_jaune_2 Interruptions
bullet_jaune_1 Interactions avec l'architecture du processeur
bullet_jaune_2 Cache
bullet_jaune_2 Pipeline
bullet_jaune_2 Optimisations
bullet_jaune_1 Débogage d'applications temps réel
bullet_jaune_1 Comprendre la structure d'un noyau temps réel
Ce cours apprend à maîtriser la programmation temps réel et multi-tâches en comprenant comment résoudre efficacement les problèmes rencontrés en fonction des primitives disponibles sur l'OS utilisé.
Matériel
bullet_jaune_2 Un PC Linux par binôme
bullet_jaune_2 Une carte cible sous Linux
bullet_jaune_2 Compilateur et débogueur croisés
bullet_jaune_2 Support de cours imprimé
bullet_jaune_2 Présentation et solutions des exercices
Pré-requis
bullet_jaune_2 Bonne connaissance de la programmation C, si possible en environnement embarqué
bullet_jaune_2 Compréhension de base de l'architecture des processeurs
Démarche pédagogique
bullet_jaune_2 Les exercices s'attachent à mettre en œuvre les mécanismes disponibles pour résoudre des problèmes classiques: Readers-writers, producteurs-consommateurs, le repas des philosophes...
bullet_jaune_2 Chaque exercice comprend une explication détaillée et un schéma, ce qui aide à comprendre le fonctionnement des algorithmes.
bullet_jaune_2 Pour chaque exercice il est fourni un code quasiment complet avec des parties à compléter, ce qui permet, après une phase de compréhension du code fourni, de maîtriser des fonctionnalités qui habituellement prennent des heures à concevoir.
bullet_jaune_2 Le cours comprend des exercices facultatifs destinés à approfondir la compréhension des sujets traités.

Plan
Premier jour
Introduction au temps réel
bullet_jaune_2 Les concepts de base du temps réel
bullet_jaune_2 Les contraintes du temps réel et de l'embarqué
bullet_jaune_2 Multi-tâches et temps-réel
Exercice : Installation de l'environnement de développement sur le système hôte (si nécessaire)
Exercice : Installation de l'environnement d'exécution sur la cible
Exercice : Création d'une routine de changement de contexte
Structures de données et parallélisme
bullet_jaune_2 Nécessité des structures de données
bullet_jaune_2 Structures de données et multi-tâches
bullet_jaune_3 Les listes (simple ou double liens)
bullet_jaune_3 Listes circulaires
bullet_jaune_3 FIFOs
bullet_jaune_3 Piles
bullet_jaune_2 Preuves d'intégrité des structures de données
bullet_jaune_3 Assertions
bullet_jaune_3 Pré et post-conditions
Exercice : Construction d'un gestionnaire de listes chaînées génériques utilisable en environnement parallèle
Second jour
Gestion mémoire
bullet_jaune_2 Les algorithmes de gestion mémoire
bullet_jaune_3 Buddy system
Exercice : Écriture d'un gestionnaire de mémoire système simple utilisant l'algorithme "buddy"
bullet_jaune_3 Best fit
bullet_jaune_3 First fit
bullet_jaune_3 Gestion de pools
Exercice : Écriture d'un gestionnaire de mémoire générique, multi-niveau
bullet_jaune_2 Les erreurs mémoire
bullet_jaune_3 Fuites mémoire
bullet_jaune_3 Accès à de la mémoire non allouée ou déjà libérée
Exercice : Amélioration du gestionnaire de mémoire pour la détection d'erreurs mémoire
bullet_jaune_3 Surveillance des piles
Exercice : Amélioration de la commutation de contexte pour surveiller l'utilisation de la pile
Les composants d'un système temps réel
bullet_jaune_2 Les tâches et les descripteurs de tâches
bullet_jaune_3 Contenu du descripteur de tâche
bullet_jaune_3 Listes de descripteurs de tâches
bullet_jaune_2 Changement de contexte
bullet_jaune_2 Mécanismes d'ordonnancement et de préemption
bullet_jaune_3 Ordonnancement avec ou sans tic d'horloge
bullet_jaune_2 Modes d'ordonnancement et preuves d'ordonnançabilité
bullet_jaune_3 Ordonnancement à priorités fixes
bullet_jaune_3 Ordonnancement RMA et EDF
bullet_jaune_3 Ordonnancements adaptatifs
Exercice : Écriture d'un ordonnanceur simple, à priorités fixes
Troisième jour
Gestion d'interruptions dans les systèmes temps-réel
bullet_jaune_2 Besoin d'interruptions dans un système temps réel
bullet_jaune_3 Interruptions de timer
bullet_jaune_3 Interruptions de périphériques
bullet_jaune_2 Notion d'interruption sur niveau ou sur front
bullet_jaune_2 Acquittement matériel et logiciel
bullet_jaune_2 Vectorisation des interruptions
Exercice : Écriture d'un gestionnaire d'interruption simple
bullet_jaune_2 Interruption et ordonnancement
Exercice : Extension de l'ordonnanceur pour supporter un ordonnancement en ronde (round-robin)
Les primitives de synchronisation
bullet_jaune_2 Mise en attente et réveil des tâches
bullet_jaune_2 Sémaphores
Exercice : Mise en œuvre des sémaphores par interaction directe avec l'ordonnanceur
bullet_jaune_2 Exclusion mutuelle
bullet_jaune_3 Spinlocks et masquage d'interruptions
bullet_jaune_3 Mutex ou sémaphores
Exercice : Mise en œuvre du mécanisme de mutex
bullet_jaune_3 Mutex récursifs et non récursifs
Exercice : Vérifier la bonne imbrication des mutex récursifs et l'utilisation de mutex non récursifs
bullet_jaune_3 Le problème de l'inversion de priorité
bullet_jaune_3 L'héritage de priorité (le mécanisme automagique)
bullet_jaune_3 Le plafond de priorité (la réponse centrée sur la conception)
Exercice : Mise en place du mécanisme de plafond de priorité
bullet_jaune_2 Mutexes et variables condition
Exercice : Ajout du support des variables condition aux mutex
bullet_jaune_2 Les boites aux lettres
Quatrième jour
Solutions aux problèmes de parallélisme
bullet_jaune_2 Les divers problèmes de la programmation parallèle
bullet_jaune_3 Accès concurrent non maîtrisé
Exercice : Le problème "producteur-consommateur", ou une illustration d'accès concurrents et sa solution
bullet_jaune_3 Deadlocks (étreinte fatale)
bullet_jaune_3 Livelocks (blocage vivant)
bullet_jaune_3 Starvation (famine)
Exercice : Le problème du "dîner des philosophes", illustration des risques de deadlocks, livelocks et de famine
Les Pthreads sous Linux
bullet_jaune_2 Le standard pthread
bullet_jaune_3 threads
bullet_jaune_3 mutexes et variables condition
Exercice : Résolution du problèmes des lecteurs et des écrivains avec des threads POSIX
bullet_jaune_3 Variables spécifiques à un thread
Exercice : Maintient de statistiques par thread pour le problème des lecteurs et écrivains
bullet_jaune_2 Sémaphores POSIX
bullet_jaune_2 Ordonnancement sous Linux
bullet_jaune_3 changements de contexte
bullet_jaune_3 politiques d'ordonnancement (temps réel, classique)
bullet_jaune_3 préemption
Cinquième jour
Multi-tâches dans le noyau Linux
bullet_jaune_2 La gestion de mémoire du noyau
bullet_jaune_3 Les algorithmes d'allocation de mémoire "buddy" et "slab"
bullet_jaune_2 Gestion des tâches sous Linux
bullet_jaune_2 Threads noyau Linux
bullet_jaune_3 Création
bullet_jaune_3 Terminaison
bullet_jaune_2 Programmation concurrente dans le noyau
bullet_jaune_3 Opérations atomiques
bullet_jaune_3 Spinlocks
bullet_jaune_3 Spinlocks en lecture/écriture
bullet_jaune_3 Sémaphores et sémaphores en lecture/écriture
bullet_jaune_3 Mutexes
bullet_jaune_3 Verrous séquentiels
bullet_jaune_3 Le mécanisme "Lecture/Copie/Mise-à-jour" (RCU)
Exercice : Création d'un mécanisme de barrière d'exécution à partir des primitives de synchronisation du noyau Linux
bullet_jaune_2 Les mécanismes de base de synchronisation de threads
bullet_jaune_3 Les files d'attente
bullet_jaune_3 Les événements de complétion
bullet_jaune_2 Les timers matériels
bullet_jaune_3 Clockevents
bullet_jaune_2 Les timers logiciels
bullet_jaune_3 Délais d'exécution
bullet_jaune_3 Timers noyau
bullet_jaune_3 Timers haute résolution
Exercice : Création d'un évènement de synchronisation, à partir des mécanismes de synchronisation de base