
L’algorithme d’ordonnancement/planification des tâches doit tenir compte des contraintes 
temps-réel pour un RTOS. Les tâches exécutées en premier seront les tâches temps-réel, c’est-
à-dire celles que l’on doit exécuter à l’intérieur d’un temps limité afin d’éviter un échec du 
système.  
 
L’algorithme d’allocation de mémoire dans un RTOS doit être plus rapide et plus simple que 
celui d’un OS afin d’éviter de retarder l’exécution des tâches temps-réel. Le OS aura un 
algorithme plus lent qui fera un meilleur usage de la mémoire.  
 
Q11.6 Que fait-on dans une application utilisant une super-boucle pour réduire la 
consommation de puissance du microprocesseur? 
Il arrive régulièrement que la super-boucle, c’est-à-dire le programme principal, ne soit 
exécutée qu’à tous les intervalles de temps prédéfinis lorsque le système est inactif. On met 
une function sleep exécute à chaque boucle de main qui réduit ou coupe l’horloge du 
processeur. 
 
Q11.7 Comment fait un système d’exploitation préemptif pour s’assurer de ne pas allouer 
de temps à une tâche qui attend ou à une tâche bloquée, c’est-à-dire en attente d’une 
réponse d’un périphérique? 
Le système d’exploitation garde en mémoire l’état de chaque tâche. Quand une tâche appelle 
une fonction du système d’exploitation pour attendre ou pour accéder à un périphérique, l’état 
de la tâche change. Ainsi, le système d’exploitation sait qu’il ne doit pas exécuter la tâche tant 
que le délai n’est pas expiré ou que le périphérique n’a pas répondu.  
 
Q11.8 Lorsqu’un processus ou une tâche accède à un périphérique lent, l’état de la tâche 
devrait devenir bloqué. Comment le programmeur doit-il indiquer au système d’exploitation 
que la tâche qu’il a programmée est maintenant en attente d’un périphérique? 
Dans la mesure du possible, le programmeur n’a pas à indiquer au système d’exploitation que 
sa tâche est bloquée : le programmeur appelle une fonction du système d’exploitation pour 
accéder au périphérique et cette fonction met la tâche dans l’état bloqué.  
 
Q11.9 Lorsqu’une tâche appelle une fonction du système d’exploitation pour attendre 
(exemple : void OS_Wait(int Xms)), le système d’exploitation met la tâche dans l’état “en 
attente”. Habituellement, quel évènement permet de sortir de cet état? 
Le système d’exploitation gère le temps dans l’interruption du système d’exploitation. À 
toutes les interruptions du système d.exploitation, il regarde si une tâche a fini d’attendre et 
ajuste l’état de la tâche en conséquence.  
 
Q11.10 Qu'est-ce qu'une section critique dans un programme? 
Une section critique est une portion de code qui doit s’exécuter de façon atomique parce 
qu’elle accède à une section de mémoire ou à un périphérique partagée entre plusieurs 
threads. Il ne doit absolument pas y avoir plus d'un thread simultanément. Dans le cas d'un 
SMI, lagestion des sections critiques est particulièrement importante entre le main et les 
interruptions.  
 
Q11.11 Un programmeur crée une fonction F() traitant une variable globale MaVar. La 
fonction F() est appelée à chaque exécution de la boucle du main. De plus, la fonction F() 
est appelée lors de l'interruption du timer0. Est-ce que ces opérations sont valides? Si elles 
sont valides, pourquoi? Si elles ne sont pas valides, comment régler le problème?