Changes between Version 91 and Version 92 of SoclibCourseTp4


Ignore:
Timestamp:
Dec 19, 2011, 7:43:34 PM (13 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp4

    v91 v92  
    1313et analyser les mécanismes de communication entre un programme utilisateur et un périphérique.
    1414
    15 D'un autre côté, on souhaite modéliser des architectures comportant plusieurs processeurs programmables.
     15D'un autre côté, on souhaite commencer à modéliser des architectures comportant plusieurs processeurs programmables.
    1616
    1717= 2. Interruptions =
     
    190190Chaque processeur aura son propre concentrateur d'interruption (un composant ICU par processeur).
    191191Comme chaque processeur peut - en principe - exécuter plusieurs tâches en pseudo-parallélisme, et que chaque tâche possède un terminal privé, on peut avoir un grand nombre de terminaux. On aura donc un contrôleur TTY indépendant pour chaque processeur.
    192 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.
     192Pour 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.
     193On aura également un seul contrôleur de disque et un seul contrôleur DMA.
     194
     195Pour écrire ce modèle générique, vous suivrez les recommandations suivantes:
    193196
    194197 * Le GIET ne pouvant supporter que 8 processeurs, on vérifiera dans le code de la top-cell que le paramètre NPROCS est inférieur ou égal à 8.
    195198
    196  * Pour les composants répliqués PROC[i], TTY[i] et ICU[i] ainsi que pour les signaux connectés à ces composants, il   faut définir des tableaux de pointeurs indexés par l'index du processeurs (proc_id).
     199 * Pour les composants répliqués PROC[i], TTY[i] et ICU[i] ainsi que pour les signaux connectés à ces composants, vous définirez des tableaux de pointeurs indexés par l'index du processeurs (proc_id).
    197200
    198201 * 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.
    199202
    200  * Il faut utiliser une boucle indexée par l'index du processeur pour les constructteurs des composants PROC[i], ICU[i], et TTY[i].
    201 
    202  * 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.
    203 
    204  * Pour l'index des cibles (TGTID), on utilisera les valeurs (0) à (6) pour les composants matériels non répliqués (ROM, RAM GCD, TIMER, IOC, DMA, FBF). On utilisera les valeurs (7) à ( 7 + NPROCS -1) pour les composants TTY[i]. On utilisera les valeurs (7 + NPROCS) à (7 + 2*NPROCS -1) pour les composants ICU[i].
    205 
    206  * il faut définir NPROCS segments pour les composants ICU[i]. L'adresse de base du segment associé au composant ICU[i] est définie comme : seg_icu_base + icu_segment_increment * proc_id. La valeur de cette variable ''icu_segment_increment'' devra donc  être définie dans le fichier '''tp4_top_multi.cpp pour le matériel,
    207 et dans le fichier '''ldscript''' pour le logiciel. On prendra par exemple la valeur 0x00100000.
    208 
    209  * 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 + tty_segment_increment * proc_id. On prendra  également la valeur 0x00100000 pour la variable ''tty_segment_increment''.
    210 
    211  * Pour la net-list, il faut utiliser des boucles indexées par l'index du processeur pour connecter les composants répliqués et signaux répliqués.
     203 * Vous utiliserez une boucle indexée par l'index du processeur pour les constructteurs des composants PROC[i], ICU[i], et TTY[i].
     204
     205 * 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.
     206
     207 * Pour l'index des cibles (TGTID), vous utiliserez les valeurs (0) à (6) pour les composants matériels non répliqués (ROM, RAM GCD, TIMER, IOC, DMA, FBF). On utilisera les valeurs (7) à ( 7 + NPROCS -1) pour les composants TTY[i]. On utilisera les valeurs (7 + NPROCS) à (7 + 2*NPROCS -1) pour les composants ICU[i].
     208
     209 * il faut définir NPROCS segments pour les composants ICU[i]. L'adresse de base du segment associé au composant ICU[i] est définie dans le GIET comme : seg_icu_base + icu_segment_increment * proc_id. La valeur de cette variable ''icu_segment_increment'' devra donc  être définie dans le fichier '''tp4_top_multi.cpp''' pour le matériel, et dans le fichier '''ldscript''' pour le logiciel. On prendra par exemple la valeur 0x00100000.
     210
     211 * Il faut définir NPROCS segments pour les NPROCS TTY[i]. L'adresse de base du segment associé au composant TTY[i] est définie dans le GIET comme : seg_tty_base + tty_segment_increment * proc_id. On prendra  également la valeur 0x00100000 pour la variable ''tty_segment_increment''.
     212
     213 * Pour la net-list, vous utiliserez des boucles indexées par l'index du processeur pour connecter les composants répliqués et signaux répliqués.
    212214 
    213215 * 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].
     
    217219'''Question''' : Modifiez le fichier '''tp4_top.desc''' pour créer un fichier '''tp4_top_multi.desc''', et modifiez le fichier '''Makefile''' en conséquence pour  générer un simulateur générique '''simulator_multi.x'''.
    218220
    219 == 5.2 Code de boot ==
     221== 5.2 Code de boot multi-processeurs ==
    220222
    221223Un 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.