Changes between Version 21 and Version 22 of SoclibCourseTp5


Ignore:
Timestamp:
Oct 26, 2009, 6:17:51 PM (16 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp5

    v21 v22  
    206206
    207207On souhaite maintenant modéliser une architecture quadri-processeurs structurée en quatre clusters presque identiques,
    208 Chaque cluster contiendra un processeur MIPS32, un composant ICU, un timer, et une mémoire. On se dispensera d'instancier le coprocesseur GCD dans cette architecture. On instanciera un seul contrôleur de TTY (contrôlant 4 terminaux numérotés de 0 à3),
    209 et une seule ROM de boot qu'on placera respectivement dans le cluster 0 et dans le cluster 3. On utilisera un composant '''vci_local_crossbar''' comme interconnect local ( voir documentation [https://www.soclib.fr/trac/dev/wiki/Component/VciXcacheWrapper ici]) , et on utilisera le composant '''vci_vgmn''' comme interconnect global ( voir documentation [https://www.soclib.fr/trac/dev/wiki/Component/VciXcacheWrapper ici]) .
     208Chaque cluster contiendra un processeur MIPS32, un composant ICU, et une mémoire. On se dispensera d'instancier le coprocesseur GCD dans cette architecture. On instanciera un seul contrôleur de TTY (contrôlant 4 terminaux numérotés de 0 à 3), un seul composant TIMER
     209contenant 4 timers indépendants numérotés de 1 à 3), et une seule ROM de boot.
     210On placera la ROM dans le cluster 0, le TIMER dans le cluster 1, et le TTY dans le cluster 3.
     211On utilisera un composant '''vci_local_crossbar''' comme interconnect local ( voir documentation [https://www.soclib.fr/trac/dev/wiki/Component/VciXcacheWrapper ici]) , et on utilisera le composant '''vci_vgmn''' comme interconnect global ( voir documentation [https://www.soclib.fr/trac/dev/wiki/Component/VciXcacheWrapper ici]) .
     212
     213Les composants TTY et TIMER générent chacun 4 lignes d'interruption: La ligne d'interruption IRQ_TIMER[i] doit être connectée à l'entrée IRQ[0] de l'ICU du cluster (i), et la ligne d'interruption IRQ_TTY[i] doit être connectée à l'entrée IRQ[1] de l'ICU du cluster (i).
    210214
    211215Il faut donc écrire les deux fichiers '''tp5_top.cpp''' et '''tp5.desc''' correspondant à cette architecture,
    212216en veillant à donner des valeurs croissantes (de 0 à 3) à l'argument ''processor-id'' des 4 processeurs.
    213217
    214 Il faut définir de nouveaux segments pour les nouveaux périphériques. Il faut également définir 4 segments distincts
    215 pour les piles d'exécution des 4 processeurs. En revanche, les segment seg_reset, seg_kernel et seg_code qui ne contiennent que des instructions peuvent être partagés par les 4 processeurs.
    216 
    217 Le code de boot doit également être modifié. Lors du démarrage, les quatre processeurs vont  exécuter le même code (puisqu'ils se branchent à la même adresse 0xBFC00000), mais les actions réalisées peuvvent dépendre du processor_id : En particulier, les pointeur de pile des quatre processeurs
    218 doivent être initialisés à des valeurs différentes puisque chaque processeur travaille dans son propre segment de pile.
    219 
    220 En sortie de la séquence de boot, les quatre processeurs peuvent se brancher au même programme main().
    221 
    222 Si tout se passe normalement, les quatre processeurs doivent exécuter le même programme interactif ''Hello World'', chacun
    223 sur son propre terminal.
     218Il faut définir 4 segments pour les 4 composants ICU, et il faut également définir 4 segments distincts pour les 4 piles d'exécution des 4 processeurs. En revanche, les segment seg_reset, seg_kernel et seg_code qui ne contiennent que des instructions peuvent être partagés par les 4 processeurs.
     219
     220Le logiciel doit être assez profondément modifié :
     221 * '''code de boot''' (fichier '''reset.s''') : Lors du démarrage, les quatre processeurs vont  exécuter le même code (puisqu'ils se branchent à la même adresse 0xBFC00000), mais les actions réalisées peuvent dépendre du processor_id : En particulier, les pointeur de pile des quatre processeurs doivent être initialisés à des valeurs différentes puisque chaque processeur travaille dans son propre segment de pile.
     222 * '''code des ISR''' (fichier '''isr.s''') : Les deux ISR ''_isr_timer'' et ''_isr_tty_get'' doivent être modifiées
     223pour tenir compte du processor_id : chaque processeur doit adresser le TIMER et le terminal TTY qui lui appartient.
     224 * '''code du GIET''' (fichier '''giet.s''') : Le gestionnaire d'interrutions lui aussi doit être modifié, puisqu'il doit maintenant utiliser le processor_id pour interroger le bon contrôleur ICU.
     225 * '''code des appels systèmes''' (fichier '''syscalls.c''') : Les deux fonctions système _icu_write() et _icu_read() doivent être modifiées pour tenir compte du processor_id lors des accès aux registres du composant ICU.
     226
     227En sortie de la séquence de boot, les quatre processeurs se branchent à la même fonction '''main()''', qui doit elle aussi être modifiée pour tenir compte du processor_id, puisque le numéro du timer
     228est un argument des fonctions ''timer_set_period()'' et ''timer_set_mode()''.
     229
     230Si tout se passe normalement, les quatre processeurs doivent exécuter le même programme interactif ''Hello World'' (avec affichage des interruptions générées par les timers), chacun
     231sur son propre terminal TTY.
    224232
    225233Si ce n'est pas le cas, il vous reste le '''GDB Server'''...