wiki:SujetTP9

ALMO TP n°9 - Fonctionnement Multi-Tâches

Préambule

Ce TP porte sur la commutation de tâches. Les mécanismes mis en œuvre dans ce TP ont été présentés dans le TD associé sur le fonctionnement multi-tâches.

La plateforme matérielle est très semblable à l'architecture du TP précédent. La seule différence est que cette plateforme utilise 4 terminaux TTY (en plus du terminal graphique), car chaque tâche logicielle dispose de son propre terminal alphanumérique.

Dans cette plateforme, le contrôleur ICU supporte donc 7 lignes d'interruption :

  • IRQ[0] : IOC
  • IRQ[1] : TIMER
  • IRQ[2] : DMA
  • IRQ[3] : TTY0
  • IRQ[4] : TTY1
  • IRQ[5] : TTY2
  • IRQ[6] : TTY3

Le simulateur pour cette plateforme est toujours simul_almo_generic. Il faut cependant préciser au lancement du simulateur que la plateforme contient 4 applications logicielles (afin de créer 4 terminaux TTY). Vous utiliserez donc la commande suivante tout au long du TP :

$ simul_almo_generic -SYS sys.bin -APP app.bin -FBFSIZE 128 -IOCFILE images.raw -NTASKS 4

Comme d'habitude, commencez par recopier dans votre répertoire de travail, les fichiers sources spécifiques à ce TP :

$ cp -r /Infos/lmd/2019/licence/ue/LU3IN004-2019oct/sesi-almo/soft/tp09/sujet ./tp09
$ cd tp09

Fonctionnement multi-tâches

Les fichier main0.c, main1.c, main2.c et main3.c présents dans votre répertoire de travail contiennent le code des quatre fonctions main0(), main1(), main2(), main3() correspondant à quatre applications logicielles indépendantes que l'on souhaite exécuter en pseudo-parallélisme.

  • Ouvrez ces fichiers, pour déterminer ce que fait chacune des quatre applications qui vont s'exécuter en parallèle.

Le fichier reset.s contient le code de démarrage, chargé de la création des quatre applications et du lancement de la tâche T0. Les autres tâches T1, T2 et T3 seront lancées, chacune à leur tour par la fonction de commutation de contexte.

  • Complétez le fichier reset.s pour qu'il réalise les opérations suivantes :
  1. Installation des sept ISR dans le vecteur d'interruption,
  2. Initialisation des registres pour la tâche T0,
  3. Initialisation des tableaux de contexte pour les tâches T1, T2 et T3,
  4. Configuration des composants TIMER et ICU.

On choisira pour commencer une période de 10 000 cycles entre deux interruptions du TIMER déclenchant la commutation de tâches.

  • Comment est-on sûr qu'il n'y aura pas d'interruptions pendant toute la phase d'initialisation du système (c'est-à-dire pendant qu'on exécute le code de démarrage) ? Quand et comment le processeur redevient-il interruptible ?
  • Compilez l'application logicielle multi-tâches en exécutant le Makefile fourni, puis lancez la simulation.

Si vous n'avez pas commis d'erreurs dans le code du reset, vous devez constater que les quatre applications s'exécutent en parallèle.

  • En analysant le contenu du fichier sys.bin.txt, évaluer le nombre d'instructions exécutées lors d'un changement de contexte (entre le branchement au GIET déclenchée par l'interruption, et la reprise de l'exécution de la tâche entrante).
    • Il faut lister les fonctions appelées pendant le changement de contexte, et compter les instructions exécutées dans chacune de ces fonctions.
    • En déduire une estimation du coût d'un changement de contexte, mesuré en nombre de cycles.

On va maintenant analyser ce qui se passe quand on fait varier la période du TIMER.

  • Modifiez le code de reset, pour avoir une période de 1 000 000 cycles. Recompilez l'application logicielle et relancez la simulation. Que se passe-t-il ? Comment expliquez-vous ce comportement ?
  • Modifiez maintenant le code de reset pour avoir une période de 1000 cycles. Recompilez l'application logicielle et relancez la simulation. Que se passe-t-il ? Comment expliquez-vous ce comportement ? Que se passe-t-il si on réduit encore plus la période entre deux commutations de contexte (100 cycles) ?
Last modified 5 years ago Last modified on Aug 26, 2019, 11:32:58 AM