Premier jour
Tâches et ordonnancement des systèmes embarqués
- Tâche et descripteurs de tâches
- Changement de contexte
Exercise : |
Écriture d'une routine de changement de contexte |
- Mécanismes d'ordonnancement et de préemption
- Ordonnancement avec ou sans tic d'horloge
- Modes d'ordonnancement et preuves d'ordonnançabilité
- Ordonnancement à priorités fixes
- Ordonnancement RMA et EDF
- Ordonnancements adaptatifs
Exercise : |
Écriture d'un ordonnanceur simple, à priorités fixes |
Gestion d'interruptions dans les systèmes temps-réel
- Besoin d'interruptions dans un système temps réel
- Interruptions de timer
- Interruptions de périphériques
- Notion d'interruption sur niveau ou sur front
- Acquittement matériel et logiciel
- Vectorisation des interruptions
Exercise : |
Écriture d'un gestionnaire d'interruption simple |
- Interruption et ordonnancement
Exercise : |
Extension de l'ordonnanceur pour supporter un ordonnancement en ronde (round-robin) |
Interactions entre coeurs en multicoeurs
- Cohérence de cache
- Snooping
- Snoop Control Unit: transferts cache à cache
- Machine d'état MOESI
- Ordonnancement et cohérence mémoire
- Ordre des accès
- Ordonnancement mémoire
- Barrières mémoire
- Cohérence de données et DMA
- Accès aux données et multicoeurs
- Instructions Read-Modify-Write
- Linked-Read/Conditional-Write
- Synchronisation en multicoeurs
- Spinlocks
- Interruptions inter processeurs
Exercise : |
Écriture d'un spinlock |
Second day
Ordonnancement multicoeurs
- Ordonnancement multicoeurs
- Affectation d'interruptions à un coeur
- Ordonnanceur multicoeurs
- Optimisations multicoeurs
- Optimisation de l'utilisation des caches
- Éviter les "faux" partages
- Éviter la saturation des caches
Exercise : |
Étude d'un ordonnanceur multicoeurs |
Les primitives de synchronisation
- Mise en attente et réveil des tâches
- Sémaphores
Exercise : |
Mise en œuvre des sémaphores par interaction directe avec l'ordonnanceur |
- Exclusion mutuelle
- Spinlocks et masquage d'interruptions
- Mutex ou sémaphores
Exercise : |
Mise en œuvre du mécanisme de mutex |
- Mutex récursifs et non récursifs
Exercise : |
Vérifier la bonne imbrication des mutex récursifs et l'utilisation de mutex non récursifs |
- Le problème de l'inversion de priorité
- L'héritage de priorité (le mécanisme automagique)
- Le plafond de priorité (la réponse centrée sur la conception)
Exercise : |
Mise en place du mécanisme de plafond de priorité |
- Mutexes et variables condition
Exercise : |
Ajout du support des variables condition aux mutex |
Third day
Solutions aux problèmes de parallélisme
- Les divers problèmes de la programmation parallèle
- Accès concurrent non maîtrisé
Exercise : |
Le problème "producteur-consommateur", ou une illustration d'accès concurrents et sa solution |
- Deadlocks (étreinte fatale)
- Livelocks (blocage vivant)
- Starvation (famine)
Exercise : |
Le problème du "dîner des philosophes", illustration des risques de deadlocks, livelocks et de famine |
Architecture multi-tâches de Osek/VDX
- Gestion des tâches
- Tâches de base
- Tâches étendues
- Politiques d'ordonnancement
- Activation et terminaison des tâches
- Gestion des interruptions
- Evènements de synchronisation
- Resources
Autosar et la programmation Multicoeur
- L'architecture multicoeur d'Autosar
- Notion d'entités localisables
- Améliorations de l'ordonnancement OSEK/VDX
- Spinlocks Autosar
- Le communicateur inter OS-Application
- Migrer une applications Autosar vers une plateforme multicoeur