Cours 11, Partage du temps de microprocesseur et RTOS
Q11.1 Qu'est-ce qu’un système d’exploitation?
Q11.2 Quelle est la différence entre un système d’exploitation préemptif et un système
d’exploitation non-préemptif?
Q11.3 Comparez ensemble une super-boucle, un système d’exploitation non-préemptif et
un système d’exploitation préemptif. Quels sont les avantages et les désavantages de
chacune de ces approches pour attribuer le temps de CPU aux tâches?
Q11.4 Dans un système microprocesseur, quelles sont les responsabilités du système
d’exploitation?
Q11.5 Un RTOS n’a pas les mêmes critères de performance qu’un système d’exploitation
qui n’est pas temps réel. Cela a plusieurs impacts sur le design du système d’exploitation.
Quelle est la principale différence entre un RTOS et un OS lorsque le système
d’exploitation détermine la prochaine tâche à exécuter? Lorsque le système d’exploitation
alloue 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?
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?
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?
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?
Q11.10 Qu'est-ce qu'une section critique dans un programme?
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?
Q11.12 Un programmeur doit coder une machine à états appelant différentes fonctions
possédant le même type de retour et les mêmes paramètres pour chaque état. Exemple :
switch(FunctionAExecuter)
{
case ExecuteFunction1 :
Function1();
Break;
case ExecuteFunction2 :