Changes between Version 72 and Version 73 of SoclibCourseTp4


Ignore:
Timestamp:
Dec 10, 2010, 7:46:31 AM (14 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp4

    v72 v73  
    190190 * Il faut définir des tableaux de pointeurs pour les composants répliqués PROC[i], TTY[i] et ICU[i], ainsi que pour les différents signaux connectés à ces composants.
    191191
    192  * Il faut utiliser une boucle indexée par l'index du processeur pour chaque fois que ces composants sont concernés.
     192 * Il faut utiliser une boucle indexée par l'index du processeur pour les constructteurs des composants PROC[i], ICU[i], et TTY[i].
    193193
    194194 * Pour l'index des initiateurs (SRCID), on utilisera les valeurs 0 à (NPROCS-1) pour les processeurs, et les valeurs NPROCS et (NPROCS+1) pour le composant IOC et pour le composant DMA respectivement.
     
    200200 * Il faut définir NPROCS segments pour les NPROCS TTY[i]. L'adresse de base du segment associé au composant ICU[i] est définie comme : seg_tty_base + 0x00100000 * proc_id (cette contrainte est imposée par le GIET).
    201201
    202  * Pour ce qui concerne les interruptions, les interruptions non-répliquées (IRQ_TIMER, IRQ_IOC, IRQ_DMA)
     202 * Il faut utiliser des boucles indexées par l'index du processeur pour connecter les composants répliqués.
     203 
     204 * Les interruptions non-répliquées (IRQ_IOC, IRQ_DMA) seront connectées au contrôleur d'interruptions ICU[0]. Les interruptions répliquées IRQ_TTY[i] et IRQ_TIMER[i] seront connectées au concentrateur d'interruptions ICU[i].
    203205
    204206'''Question''' : Modifiez le fichier '''tp4_top.cpp''' pour rendre l'architecture générique, conformément aux recommandations ci-dessus.
     
    208210== 5.2 Code de boot ==
    209211
    210 Un vrai système d'exploitation tel que LINUX ou MutekH permet de créer dynamiquement de nouvelles tâches (i.e. de nouveaux programmes utilisateurs) alors que la machine est déjà démarrée (mécanisme ''pthread_create()'' pour les threads POSIX, ou mécanisme fork/exec pour les processus UNIX). Le GIET n'étant pas un vrai système d'exploitation, ne supporte pas la création ou la destruction dynamique de tâches : Les tâches doivent être créées une fois pour toute au démarrage de la machine, c'est à dire dans le code de boot.
    211 
    212 Bien que le GIET supporte le fonctionnement multi-tâches (un seul processeur exécute plusieurs tâches par multiplexage temporel), on va utiliser ici un mécanisme plus simple où chaque processeur n'exécute qu'une seule tâche. Le mot tâche désigne ici un programme utilisateur particulier.
     212Un vrai système d'exploitation tel que LINUX (ou MutekH) permet de créer dynamiquement de nouvelles tâches (i.e. de nouveaux programmes utilisateurs) alors que la machine est déjà démarrée (mécanisme ''pthread_create()'' pour les threads POSIX, ou mécanisme fork/exec pour les processus UNIX). Le GIET n'est pas un vrai système d'exploitation, car il ne supporte pas la création ou la destruction dynamique de tâches : Les tâches doivent être créées une fois pour toute au démarrage de la machine, c'est à dire dans le code de boot.
     213
     214Bien que le GIET supporte le fonctionnement multi-tâches (un seul processeur exécute plusieurs tâches en pseudo-parallélisme par multiplexage temporel), on va utiliser ici un mécanisme plus simple où chaque processeur n'exécute qu'une seule tâche, qui lui est assignée dans le code de boot.
    213215
    214216Le mécanisme est le suivant :
     
    219221'''Question''' : Modifiez le fichier '''reset.s''' pour initialiser le pointeur de pile ($29 dans le cas du MIPS32) à une valeur dépendant du ''proc_id''. Chaque tâche disposera d'une pile de 64 Koctets. Quelle doit être la taille minimale du segment de pile défini dans la table des segments de la top-cell?
    220222
    221 '''Question''' : Modifiez le fichier '''reset.s''' pour initialiser le point d'entrée (registre EPC dans le cas du MIPS32) à une valeur dépendant du ''proc_id''. On pourra définir une table de sauts indexé par le proc_id et contenant les adresses ''main_0'' à ''main_7''.
     223'''Question''' : Modifiez le fichier '''reset.s''' pour initialiser le point d'entrée (registre EPC dans le cas du MIPS32) à une valeur dépendant du ''proc_id''. On définira une table de sauts indexé par le proc_id et contenant les adresses ''main_0'' à ''main_7''. Ces adresses correspondent aux 8 point d'entrée de 8 programmes utilisateurs susceptibles de s'exécuter sur l'architecture multi-processeurs.
    222224
    223225'''Question''' : Modifiez le fichier '''Makefile''' du répertoire '''soft''' pour que soient compilés le fichier '''teset.s''' ainsi modifié, et les deux programmes '''main_1.c''' et '''main_1.c''' de la section 4.
     
    226228
    227229== 5.3 Exécution paralléle de programmes non-coopératifs ==
     230
     231On souhaite pour commencer lancer l'exécution parallèle des deux programmes main_0 et main_1 définis précédemment sur une architecture à deux processeurs.
     232
     233'''Question''' : Modifiez le fichier '''Makefile''' du répertoire '''soft''' pour générer le logiciel embarqué, puis lancez la simulation sur une architecture à 2 processeurs.
    228234
    229235== 5.4 Programme coopératif multi-tâches ==