Académique Documents
Professionnel Documents
Culture Documents
3) Il est préférable de faire un PEND sur un mutex plutôt que sur un sémaphore
pour accéder à une ressource dans une ISR.
Faux. Une ISR n’a pas le droit d’être en attente ni d’un sémaphore ni d’un
mutex.
Le temps de retour est plus long car le noyau doit vérifier si une tâche plus
prioritaire est prête à être exécutée.
À une fréquence trop élevée, le système passera son temps à traiter le tick
d’horloge. L’application se déroulera presque uniquement au niveau
interruption.
3) Expliquez pourquoi les appels malloc() et free() sont à proscrire pour gérer
dynamiquement la mémoire dans un RTOS (2 raisons).
4)
a)
b)
7 6 5 4 3 2 1 0
[0]
0 0 0 0 0 0 0 0
[1]
0 0 0 0 0 0 0 0
[2]
0 0 0 1 0 0 0 0
[3]
0 1 0 0 0 1 0 0
[4]
0 0 0 0 0 0 0 0
[5]
0 0 0 0 1 0 0 0
[6]
0 1 0 0 0 0 0 0
[7]
0 0 0 0 0 0 0 0
OSRdyTbl[8]
0 1 1 0 1 1 0 0
b) À l'aide de la table OSUnMapTbl[] (en annexe), expliquez comment
µCOS-II détermine la tâche la plus prioritaire à être exécutée.
Y = OSUnMapTbl[0x6C] = 2
X = OSUnMapTbl[0x10] = 4
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
[0] [0]
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
[1] [1]
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[2] [2]
0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0
[3] [3]
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
[4] [4]
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[5] [5]
0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0
[6] [6]
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[7] [7]
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
OSRdyTbl[8] OSEventTbl[8]
a) Quelle tâche occupe le CPU actuellement?
La tâche de priorité 3
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
[0] [0]
0 1
[1] [1]
[2] [2]
[3] [3]
[4] [4]
[5] [5]
[6] [6]
[7] [7]
OSRdyTbl[8] OSEventTbl[8]
La tâche de priorité 17
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
[0] [0]
1 0
[1] [1]
[2] [2]
0
[3] [3]
[4] [4]
[5] [5]
[6] [6]
[7] [7]
OSRdyTbl[8] OSEventTbl[8]
e) Quelle tâche occupera le CPU?
La tâche de priorité 3
Inversion de priorité
QUESTION #3
Le code suivant implante une pile partagée. Les fonctions push() et pop() peuvent être
appelées simultanément par plusieurs threads. La fonction push() bloque jusqu’à ce qu’un
espace soit libre dans la pile. De son côté, la fonction pop() bloque jusqu’à temps qu’une
donnée soit disponible sur la pile. Finalement, les threads doivent s’exclure entre eux.
Utilisez les mécanismes de synchronisation µCOS-II pour implanter ce comportement
int stackPointer;
int stack [ Size ];
OS_EVENT *full, *empty; 1
OS_EVENT *mutex;
stack[ stackPointer ] = a;
stackPointer++;
OSMutexPost(mutex);
3
OSSemPost(full);
}
int pop()
{
OSSemPend(full); 4
OSMutexPend(mutex);
stackPointer--;
int tmp = stack[ stackPointer ];
OSMutexPost(mutex); 5
OSSemPost(empty);
return tmp;
}
main()
{
empty = OSSemCreate(Size);
full = OSSemCreate(0); 6
mutex = OSMutexCreate(4) ;
}
QUESTION #4 Ordonnancement
T1 Æ 3 T2 Æ 1 T3 Æ 2
2) (1 pt) Que peut-on conclure à partir des résultats du test de Liu and Layland ?
T3
T2
deadline manqué
T1