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?