Chap2-FreeRtos Gestion Des Taches Et Ordonnencement
Chap2-FreeRtos Gestion Des Taches Et Ordonnencement
Chap2-FreeRtos Gestion Des Taches Et Ordonnencement
Cours OS Embarqué
2ème Ingénieur GSI
Chapitre II :
Gestion des taches et
ordonnancement
1
Caractéristiques de FreeRTOS
OpenSource
2
Les objets d’un RTOS
3
LOGO
Les tâches
Mono tâche / Multitâche
Mono tâche
Multitâche
5
Une tache ?
● prête
– mémoire allouées
● bloquée
– en attente d'une ressource ou
d'un événement
● suspendue
– en mémoire mais ne sera pas
ordonnancée
● en-cours
– Choisie par
l'ordonnanceur pour
s'exécuter
● Morte
– Plus de mémoire allouée
7
État d'une tâche :
● prête
– mémoire allouées
● bloquée
– en attente d'une ressource ou
d'un événement
● suspendue
– en mémoire mais ne sera pas
ordonnancée
● en-cours
– Choisie par
l'ordonnanceur pour
s'exécuter
● Morte
– Plus de mémoire allouée
8
État d'une tâche :
● prête
– mémoire allouées
● bloquée
– en attente d'une ressource ou
d'un événement
● suspendue
– en mémoire mais ne sera pas
ordonnancée
● en-cours
– Choisie par
l'ordonnanceur pour
s'exécuter
● Morte
– Plus de mémoire allouée
9
État d'une tâche :
● prête
– mémoire allouées
● bloquée
– en attente d'une ressource ou
d'un événement
● suspendue
– en mémoire mais ne sera pas
ordonnancée
● en-cours
– Choisie par
l'ordonnanceur pour
s'exécuter
● Morte
– Plus de mémoire allouée
10
État d'une tâche :
● prête
– mémoire allouées
● bloquée
– en attente d'une ressource ou
d'un événement
● suspendue
– en mémoire mais ne sera pas
ordonnancée
● en-cours
– Choisie par
l'ordonnanceur pour
s'exécuter
● Morte
– Plus de mémoire allouée
11
État d'une tâche :
● prête
– mémoire allouées
● bloquée
– en attente d'une ressource ou
d'un événement
● suspendue
– en mémoire mais ne sera pas
ordonnancée
● en-cours
– Choisie par
l'ordonnanceur pour
s'exécuter
● Morte
– Plus de mémoire allouée
Morte
12
FreeRTOS : Tâches
13
FreeRTOS : Tâches
14
FreeRTOS : Tâches
15
FreeRTOS : Création de Tâches
portBASE_TYPE xTaskCreate(
pdTASK_CODE pvTaskCode,
const signed portCHAR * const pcName,
unsigned portSHORT usStackDepth,
void *pvParameters,
unsigned portBASE_TYPE uxPriority,
xTaskHandle *pxCreatedTask
);
16
FreeRTOS : Création de Tâches
18
TP N°0 avec FreeRTOS: Création de Tâches
TP1 : Faisons clignoter des LEDs, mais cette fois avec FreeRTOS
1. Compiler et exécuter le projet
2. Ajouter une seconde Led (Rouge) qui clignote avec la même
fréquence que la LED Bleu
3. Modifier la Fréquence de clignotement de la LED Rouge : 250ms
4. Modifier la Fréquence de clignotement de la LED Rouge : 300ms
5. Modifier la Fréquence de clignotement de la LED Rouge : 258ms
19
LOGO
L’ordonnancement
Tâches de l’ordonnanceur
21
L’ordonnancement
22
Ordonnancement (quelques définitions)
24
Ordonnancement: 2 catégories d’algorithme
Non préemptif:
Sélectionne un processus, puis le laisse s’exécuter jusqu’à ce qu’il
bloque (soit sur une E/S, soit en attente d’un autre processus) où qu’il
libère volontairement le processeur.
Même s’il s’exécute pendant des heures, il ne sera pas suspendu de
force.
Aucune décision d’ordonnancement n’intervient pendant les
interruptions de l’horloge.
Préemptif:
Sélectionne un processus et le laisse s’exécuter pendant un délai
déterminé.
Si le processus est toujours en cours à l’issue de ce délai, il est
suspendu et le « schedular » sélectionne un autre processus à exécuter.
25
Algorithme d’ordonnancement :
27
Algorithme d’ordonnancement :
Tourniquet/FIFO/Round Robin
File d’attente FIFO stocke les processus prêts.
Exécution indépendante de la charge de travail et de
l’interactivité.
Quantum de temps égal pour tous
Durée maximale durant laquelle il peut s’exécuter
S’il atteint son quantum, il est préempté
S’il est bloqué avant, un autre processus est lancé
Famine: impossible
Quantum de temps:
Trop grand: trop d’attente par processus
Trop petit: temps de changement de contexte relativement important (en
pourcentage).
En général, entre 10 et 50ms 28
Ordonnancement sous FreeRTOS
Revenons au TP1 :
On a vu dans le TP1 deux tâches de même priorité qui s’exécutent
en même temps (pas vraiment en même temps)
30
FreeRTOS : TP0 suite
31
FreeRTOS : la famine
32
FreeRTOS : Revenons aux états des tâches
33
FreeRTOS : revenons au état des tâches
Etat « Blocked »
Une tache en attente d’un évènement est dans état « Blocked » qui est un
sous état de l’état « Not Running ».
Une tâche entre dans l’état Blocked pour attendre deux types d’évènement :
1. Evènement Temporel (time related) : exemple délais
2. Evènement de Synchronisation : cet évènement peut être déclenché par une
autre tache ou une interruption
Par exemple, une tâche peut attende l’arrive d’une donnée à travers une queue
(file de communication), ou le déblocage d’une sémaphore ou mutexe
Etat « Suspended »
« Suspended » est aussi un sous état de « Not Running ». Une tâche
dans l’état Suspended n’est pas disponible pour l’ordonnanceur.
Le seul moyen pour qu’une tache entre dans cet état est l’appel
explicite de la fonction de l’API vTaskSuspend()
Le seule moyen pour qu’une tache sorte de cet état est l’appel
explicite de la fonction de l’API vTaskResume() ou
xTaskResumeFromISR()
Etat « Ready »
Les Tâches qui sont dans l’état « Not Running » mais qui sont ni
dans l’état Blocked ni Suspended sont dans l’état Ready.
Elles sont éligibles à être en exécution , mais ne sont pas actuellement
dans l’état « Running ».
35
FreeRTOS : Fonctions de délais
36
FreeRTOS : Fonctions de délais
Paramètre Description
xTicksToDelay
C’est le nombre de tick pendant lequel la tâche appelante doit rester dans
l’état Blocked avant de passer à l’état Ready.
Par exemple, si une tâche appelle vTaskDelay( 100 ) alors que le
compteur de tick est à 10 000, alors elle reste dans l’état Blocked jusqu’à
ce que le compteur de tick arrive à 10,100.
La constante portTICK_RATE_MS peut être utilisée pour convertir les
vTaskDelay( millisecondes
250 / portTICK_RATE_MS
en ticks. ); //Délai de 250 ms
37
FreeRTOS : Fonctions de délais
portTickType xTimeIncrement)
vTaskDelayUntil() est similaire à la fonction vTaskDelay().
Dans le cas vTaskDelay() le seul paramètre est le nombre de
tick pendant lequel la tâche reste dans l’état bloked depuis
l’appel de cette dernière.
Dans le cas de vTaskDelayUntil() le nombre de tick est
décompté depuis la date passée dans le paramètre
pxPreviousWakeTime
Elle est utilisée essentiellement pour implémenter une tâche
périodique
38
FreeRTOS : Fonctions de délais
Par exemple,
si une tâche appele vTaskDelayUntil (&pxPreviousWakeTime, 100 ) alors que le
compteur de tick est à 10 000, et “date” contient 5 000 alors elle reste dans
l’état Blocked jusqu’à ce que le compteur de tick arrive à 5,100.
pxPreviousWakeTime prendra alors la valeur 10 000
39
FreeRTOS : Fonctions de délais
40
FreeRTOS
41
FreeRTOS : TP0
42
FreeRTOS : TP1 &TP2
43