wiki:SujetTD9

ALMO TD n°9 - Fonctionnement Multi-Tâches & Commutation de Tâches

Préambule

Ce TD porte sur les mécanismes permettant à un ordinateur mono-processeur de fonctionner en mode multi-tâches, c'est-à-dire d'exécuter plusieurs applications logicielles utilisateur simultanément. L'objectif du TD est d'analyser les problèmes liés à la création, à la sauvegarde et à la restauration de tâches logicielles, et également d'analyser en détail le mécanisme de commutation de tâches.

1. Contexte d'exécution d'une tâche

  • Rappelez le principe du pseudo-parallélisme par multiplexage temporel sur un seul processeur. Quel est l'événement qui provoque la commutation de tâches ?
  • Pourquoi n'est-il pas nécessaire de sauvegarder les valeurs stockées dans la pile lorsqu'on effectue un changement de contexte ?
  • D'un point de vue général, parmi les 32 registres généraux du processeur MIPS32, quels sont ceux qu'il n'est pas nécessaire de sauvegarder ?
  • Parmi les registres de contrôle, justifiez pourquoi il est indispensable de sauvegarder SR et EPC.
  • Parmi tous ces registres à sauvegarder, lesquels sont-ils déjà sauvegardés par le traitant d'interruption _int_handler ? Quels registres est-il donc nécessaire de sauvegarder dans le tableau de sauvegarde des contextes ?
  • Commentez le chronogramme ci-dessous, pour décrire les différentes étapes du mécanisme de commutation de tâches.

2. Fonction de commutation de contexte

Il faut analyser le code des fonctions _ctx_switch (fichier ctx_handler.c) et _task_switch (fichier giet.s), pour répondre aux questions suivantes.

  • Pourquoi la fonction _task_switch (que l'on trouve dans tous les systèmes d'exploitation) est-elle toujours écrite en assembleur ?
  • Quels registres cette fonction a-t-elle le droit d'utiliser dans la phase de sauvegarde ?
  • À quelle adresse se branche cette fonction quand elle retourne à la fonction appelante ?
  • Dans la fonction _ctx_switch, comment est calculé l'index de la tâche entrante ? En déduire le type de mécanisme de priorité utilisé.
  • Quels sont les arguments de cette fonction ? Quelle est sa valeur de retour ?

3. Création des tâches

Le GIET, que nous utilisons dans l'U.E. ALMO, n'est pas un vrai système d'exploitation. Il ne fournit pas de service de création dynamique des tâches, en réponse aux demandes de l'utilisateur, pendant que la machine est en fonctionnement. Par conséquent, on se contente d'un mécanisme de création statique des tâches, dans la phase d'initialisation de la machine : les tâches sont créées une fois pour toutes par le code de démarrage. Cette technique statique  est souvent utilisée dans les systèmes logiciels embarqués où le nombre de tâches ne varie pas au cours du temps.

On s'intéresse à un système logiciel comportant 4 tâches (ou application utilisateur). On décide que la première tâche qui commence à s'exécuter est la tâche nommée T0. On définit une taille de 64 kibi octets pour la pile de chacune des 4 tâches.

  • Quels registres doivent être initialisés avant de lancer l'exécution de la tâche T0 ?
  • Quelles cases des tableaux de contexte doivent être initialisés pour les tâches T1, T2 et T3 ?
  • Quels périphériques doivent être configurés par le code de démarrage ? Comment doivent-ils l'être, c'est-à-dire quelles valeurs faut-il écrire dans les registres adressables ?
Last modified 7 years ago Last modified on Nov 16, 2016, 1:40:46 PM