Changes between Version 61 and Version 62 of SoclibCourseTp4


Ignore:
Timestamp:
Dec 5, 2010, 2:39:30 PM (15 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp4

    v61 v62  
    1515D'un autre côté, on souhaite modéliser des architectures comportant plusieurs processeurs programmables.
    1616
    17 Il existe deux types de périphériques:
     17= 2. Interruptions vectorisées =
     18
     19Nous allons introduire deux types de périphériques utilisant des interruptions pour communiquer avec le système d'exploitation:
    1820
    1921 * Un contrôleur TTY est un périphérique ''caractère'' car il supporte des requêtes de lecture ou d'écriture d'un seul caractère. Ce type de périphérique se comporte comme une cible sur le bus, puisqu'il ne peut que recevoir des commandes provenant d'un processeur, et qu'il n'a pas la possibilité de lire ou d'écrire lui-même  en mémoire.
    2022
    2123 * Par opposition un périphérique ''bloc'', tel qu'un contrôleur de disque, doit tranférer de grosses quantités de données entre la mémoire et le disque. Les transferts se font par blocs (un bloc contenant généralement 512 octets), et ces périphériques ont généralement une capacité DMA : Ils sont à la fois maître et cible sur le bus, cat ils peuvent directement lire ou écrire en mémoire.
    22 
    23 = 2. Interruptions vectorisées =
    2424
    2525== 2.1 composants matériels ==
     
    2929connecté au processeur.
    3030
    31 Ceci nécessite d'introduire un nouveau composant matériel dans l'architecture : Le composant '''vci_icu''' est
    32 un contrôleur d'interruptions vectorisées. C'est une cible VCI dont vous trouverez  la spécification fonctionnelle [https://www.soclib.fr/trac/dev/wiki/Component/VciIcu ici].
     31Le composant '''vci_icu''' est un contrôleur d'interruptions vectorisées. C'est une cible VCI dont vous trouverez  la spécification fonctionnelle [https://www.soclib.fr/trac/dev/wiki/Component/VciIcu ici].  Prenez le temps de la lire.
    3332
    3433Le composant '''vci_multi_timer''' est également une cible VCI
     
    3635[https://www.soclib.fr/trac/dev/wiki/Component/VciMultiTimer ici].
    3736
    38 Le composant '''vci_block_device''' est un contrôleur de périphérique de stockage externe (disque ou mémoire flash). Ce composant IOC est à la fois un initiateur VCI, capable de lire et d'écrire dans la mémoire, et une cible qui peut recevoir des commandes de configuration. Le composant IOC ne gère qu'un unique fichier, stocké sur le disque de la station de travail qui exécute le simulateur. Le nom de ce fichier est un argument du constructeur. On trouvera la spécification fonctionnelle de ce composant [https://www.soclib.fr/trac/dev/wiki/Component/VciBlockDevice ici].
     37Le composant '''vci_block_device''' est un contrôleur de périphérique de stockage externe (disque ou mémoire flash). Ce composant IOC est à la fois un initiateur VCI, capable de lire et d'écrire dans la mémoire, et une cible qui peut recevoir des commandes de configuration. Puisque nous sommes en simulation, le composant IOC gère un unique fichier, stocké sur le disque de la station de travail qui exécute le simulateur. Le nom de ce fichier est un argument du constructeur. On trouvera la spécification fonctionnelle de ce composant [https://www.soclib.fr/trac/dev/wiki/Component/VciBlockDevice ici].
    3938
    4039Le composant '''vci_frame_buffer''' est un contrôleur d'écran graphique. C'est une cible VCI qui est vue
     
    5251 
    5352Les lignes d'interruptions ne passent pas par le réseau VCI : chaque ligne d'interruption d'un périphérique
    54 est directement connectée aux ports '''p_irq_in[i]''' du composant ICU :
     53est directement connectée aux ports d'entrée '''p_irq_in[i]''' du composant ICU :
    5554 * La ligne d'interruption du TIMER est connectée au port '''p_irq_in[0]'''
    5655 * la ligne d'interruption du TTY est connectée au port '''p_irq_in[1]'''
     
    180179= 5. Architecture multi-processeurs générique =
    181180
    182 Modifiez l'architecture matérielle de la section 3 pour introduire un nombre variable de processeurs.
     181On veut maintenant modéliser une architecture matérielle multi-processeur générique.
     182
     183== 5.1 architecture matérielle ==
     184
     185Modifiez le fichier '''tp3_top.cpp''' et renommez-le '''tp3_top_multi.cpp''' .
    183186Chaque processeur aura son propre concentrateur d'interruption (un composant ICU par processeur),
    184187et son propre contrôleur TTY (un contrôleur TTY par processeur).
    185 Le nombre de processeurs doit être un paramètre défini sur la ligne de commande au lancement du simulateur.
    186 
    187 On souhaite exécuter sur cette architecture matérielle une application logicielle multi-tâches coopérative.
    188 
    189 == 5.1 architecture matérielle ==
     188Le nombre de processeurs NPROCS doit être un paramètre défini sur la ligne de commande au lancement du simulateur.
     189Le GIET ne pouvant supporter que 8 processeurs, on vérifiera que le paramètre NPROCS est inférieur ou égal à 8.
     190
     191Il faut définir des tableaux de pointeurs pour les composants PROC[i], ICU[i], et TTY[i], ainsi que pour les signaux associés,
     192et introduire des boucles indexées par l'index du processeur chaque fois que ces composants sont concernés.
     193
     194 * il faut définir NPROCS segments pour les NPROCS TTY[i]
     195 * il faut définir NPROCS segments pour les NPROCS ICU[i]
     196 * Les NPROCS composants 
    190197
    191198== 5.2 Code de boot ==
     199
     200Un 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).
     201Le 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.
     202
     203Bien 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: Tous les processeurs exécutent le même ''code de boot,
     204mais l'exécution de ce code dépend de l'index du processeur.
     205L'index du processeur étant stockée dans un registre système (registre $15 pour le processeur MIPS32), sa valeur peut être testée par le logiciel. cette valeur est initialisée par le constructeur, ce qui modélise une valeur ''cablée'' lors de la fabrication de la puce.
     206
     207== 5.3 Exécution paralléle de programmes non-coopératifs ==
    192208
    193209== 5.4 Programme coopératif multi-tâches ==