Changes between Version 101 and Version 102 of SoclibCourseTp4


Ignore:
Timestamp:
Dec 12, 2013, 11:51:42 AM (11 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp4

    v101 v102  
    197197== 5.1 architecture matérielle ==
    198198
    199 Vous devez modifier le fichier '''tp4_top.cpp''' pour créer un nouveau fichier '''tp4_top_multi.cpp''' .
    200 
    201 Pour écrire ce modèle générique, vous suivrez les recommandations suivantes:
     199Vous devez modifier le fichier '''tp4_top.cpp''' pour créer un nouveau fichier '''tp4_top_multi.cpp''', en suivant les recommandations suivantes:
    202200
    203201 * On vérifiera dans le code de la top-cell que le paramètre NPROCS est plus grand que 0 et inférieur ou égal à 4.
     
    207205 * Pour les tableaux de signaux, il est recommandé d'utiliser le constructeur générique de tableaux '''alloc_elems<type>(name, size)'''. Ce constructeur est défini dans le fichier '''alloc_elems.h''', qu'il ne faut pas oublier d'inclure dans la top-cell.
    208206
    209  * Vous utiliserez une boucle indexée par l'index du processeur pour les constructteurs des composants PROC[i].
     207 * Vous utiliserez une boucle indexée par l'index du processeur pour les constructeurs des composants PROC[i].
    210208
    211209 * Chaque processeur a besoin de son propre concentrateur d'interruption. Le composant matériel !VciIcu est un composant mono-canal, qui ne peut servir qu'un seul processeur. Il faut donc utiliser le composant matériel multi-canaux !VciMultiIcu, qui peut servir jusqu'à 8 processeurs. Vous pouvez consulter la documentation [https://www.soclib.fr/trac/dev/wiki/Component/VciMultiIcu ici].
     
    213211 * Pour ce qui concerne les timers, on souhaite avoir un timer indépendant pour chaque processeur, mais puisque le composant !VciTimer peut contenir jusque 256 timers indépendants, on utilisera un seul composant !VciTimer.
    214212
    215  * Pour ce qui concerne le contrôleur DMA, on souhaite également avoir un canal DMA indépendant pour chaque
    216 processeur. Il faut donc utiliser le composant matériel !VciMultiDma dont vous pouvez consulter la documentation
    217 [https://www.soclib.fr/trac/dev/wiki/Component/VciMultiDma ici].
    218 
    219  * Puisque chaque processeur peut exécuter 4 tâches en parallèle, et que chaque tâche doit disposer de son propre
    220 terminal écran/clavier, le nombre de terminaux controlés par le composant !VciMultiTty est égal à 4*NPROCS.
    221 
    222  * Pour ce qui concerne l'accès au disque, on aura un seul contrôleur de disque !VciBlockDevice pour toutes les applications.
     213 * Pour ce qui concerne le contrôleur DMA, on souhaite également avoir un canal DMA indépendant pour chaque processeur. Il faut donc utiliser le composant matériel !VciMultiDma dont vous pouvez consulter la documentation [https://www.soclib.fr/trac/dev/wiki/Component/VciMultiDma ici].
     214
     215 * Puisque chaque processeur peut exécuter 4 tâches en parallèle, et que chaque tâche doit disposer de son propre terminal écran/clavier, le nombre de terminaux controlés par le composant !VciMultiTty est égal à 4*NPROCS.
     216
     217 * Pour ce qui concerne l'accès au disque, on aura un seul contrôleur de disque !VciBlockDevice partagé par toutes les applications.
    223218
    224219 * Pour l'index des initiateurs (SRCID), vous utiliserez 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.
     
    228223 * Puisque l'architecture contient maintenant plusieurs périphériques multi-canaux (ICU, TTY, TIMER, DMA) les longueurs des segments alloués à ces périphériques doivent être ajustées en conséquence.
    229224
    230  * L'interruption IRQ_IOC sera connectée à l'entrée p_irq_in[0] du composant ICU. Les 4 interruptions répliquées IRQ_DMA[0:3] seront connectée aux entrées p_irq_in[4:7]. Les 4 interruptions IRQ_TIM[0:3] seront connectées aux entrées p_irq_in[8:11] Les 16 interruptions IRQ_TTY[0:15] seront connectées aux entrées p_irq_in[16:31].
     225 * Pour ce qui concerne le cablage des interruptions, l'interruption IRQ_IOC sera connectée à l'entrée p_irq_in[0] du composant ICU. Les 4 interruptions répliquées IRQ_DMA[0:3] seront connectée aux entrées p_irq_in[4:7]. Les 4 interruptions IRQ_TIM[0:3] seront connectées aux entrées p_irq_in[8:11] Les 16 interruptions IRQ_TTY[0:15] seront connectées aux entrées p_irq_in[16:31].
    231226
    232227'''Question''' : Pour quelle raison les valeurs stockées dans les 4 registres de masque ICU_MASK[k] associés aux 4 canaux du composant !VciMultiIcu doivent-elles être non-recouvrantes?
     
    254249 
    255250On commence par générer le code binaire pour une architecture comportant seulement 2 processeurs,
    256 de façon à exécuter en parallèle des deux programmes ''main'' et ''main_display'' utilisés au début de ce TP.
     251de façon à exécuter en parallèle des deux programmes ''main'' et ''main_display'' utilisés au début de ce TP sur deux processeurs P0 et P1.
    257252On s'efforcera cependant que ce code de boot soit facilement extensible pour s'adapter à des architectures contenant plus de 2 processeurs
    258253
    259254Créez un nouveau répertoire '''soft_multi''', et recopiez dans ce répertoire les fichiers contenus dans le répertoire '''soft''', car tous les fichiers doivent être modifiés.
    260255
    261 '''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 longueur du segment de pile défini dans la table des segments de la top-cell pour 2 processeurs? Pour 8 processeurs?
    262 
    263 '''Question''' : Modifiez le fichier '''reset.s''' pour que chaque processor PROC[i] initialize le registre de masque du composant ICU[i] qui lui est associé. Attention: les adresses de base des segment associés aux différents composants ICU[i] ont des valeurs différentes...
    264 
    265 '''Question''' : Modifiez le fichier '''reset.s''' pour initialiser le registre EPC dans le cas du MIPS32 à une valeur dépendant du ''proc_id''. On définira une table de sauts à 8 entrées indexée par le ''proc_id''. Les deux premières cases contiendront  les adresses des deux programmes ''main_0'' et ''main_1''. Les autres entrées ne seront pas utilisées, mais pourront être initialisées avec l'adresse de la fonction système ''_exit''.
    266 
    267 '''Question''' : Modifiez le fichier '''Makefile''' du répertoire '''soft''' pour que soient compilés (en plus du code système et du fichier '''reset.s''') les deux programmes '''main_0.c''' et '''main_1.c'''.
    268 
    269 '''Question''' : Modifiez dans le fichier '''ldscript''' la valeur de la variable qui informe le système d'exploitation du nombre de processeurs présents dans l'architecture matérielle.
    270 
    271 '''Question''' : Compilez le logiciel embarqué, puis lancez l'exécution sur le simulateur  '''simulator_multi.x''', avec 2 processeurs. 
     256'''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 longueur du segment de pile défini dans la table des segments de la top-cell pour 2 processeurs? Pour 4 processeurs?
     257
     258'''Question''' : Modifiez le fichier '''reset.s''' pour que chaque processor PROC[i] initialize le registre de masque du composant ICU[i] qui lui est associé. Attention: les adresses des registres dépendent du canaL...
     259
     260
     261'''Question''' : Modifiez le fichier '''reset.s''' pour initialiser le registre EPC à une valeur dépendant du ''proc_id''.
     262 
     263'''Question''' : Modifiez le fichier '''Makefile''' du répertoire '''soft''' pour que soient compilés (en plus du code système et du code de boot '''reset.s''') les deux programmes '''main.c''' et '''main_display.c'''.
     264
     265'''Question''' : Modifiez dans le fichier '''config.h''' la valeur de la variable qui informe le système d'exploitation du nombre de processeurs présents dans l'architecture matérielle.
     266
     267'''Question''' : Compilez le logiciel embarqué, puis lancez l'exécution sur le simulateur  '''simulator_multi.x''', avec NPROCS = 2 processeurs. 
    272268
    273269== 5.4 Exécution parallèle sur architecture octo-processeurs ==
    274270
    275 On souhaite maintenant exécuter huit programmes en parallèle sur huit processeurs.
    276 
    277 '''Question''' : Ecrivez six autres petits programmes ''main_2'' à ''main_7''. Si vous manquez d'imagination, vous pouvez vous contenter de répliquer le code du programme ''main_0''. Si ces programmes utilisent les interruptions générées par le timer, n'oubliez pas que chaque processeur ne doit configurer que le timer qui lui appartient.
     271On souhaite maintenant exécuter 4 programmes en parallèle sur 4 processeurs.
     272
     273'''Question''' : Ecrivez deux autres petits programmes qui s'exécuteront sur les deux autres processeurs. Si vous manquez d'imagination, vous pouvez vous contenter de répliquer le code du programme ''main.c''. Si ces programmes utilisent les interruptions générées par le timer, n'oubliez pas que chaque processeur ne doit configurer que le timer qui lui appartient.
    278274
    279275'''Question''' : Modifiez les fichiers '''reset.s''', '''ldscript''', et '''Makefile''' du répertoire '''soft''' pour les adapter au cas de 8 processeurs, compilez le logiciel embarqué puis lancez l'exécution sur le simulateur  '''simulator_multi.x''', avec 8 processeurs. 
    280276
    281 '''Question''' : Le GIET supporte des architectures contenant jusque 8 processeurs, et chaque processeur peut exécuter jusque 4 tâches en multiplexage temporel. Nous avons cependant limité l'architecture générique à 4 processeurs.
    282 Quel est le facteur qui justifie cette limitation?
     277'''Question''' : Le GIET supporte des architectures contenant jusque 8 processeurs, et chaque processeur peut exécuter jusque 4 tâches en multiplexage temporel. Nous avons cependant limité l'architecture générique à 4 processeurs. Quel est le facteur qui justifie cette limitation?
    283278
    284279= 6 Compte-rendu =