Changes between Version 35 and Version 36 of SoclibCourseTp4


Ignore:
Timestamp:
Oct 13, 2009, 10:06:23 PM (15 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp4

    v35 v36  
    77= 1 Objectif =
    88
    9 Le but de ce quatrième TP est double : D'une part on souhaite modéliser des architectures plus complexes
    10 utilisant deux niveaux d'interconnexion. D'autre part on va introduire l'outil '''soclib-cc'''.
     9Le but de ce quatrième TP est principalement d'introduire la chaîne de compilation '''soclib-cc''', qui permet d'automatiser la génération du simulateur. On en profitera pour introduire dans l'architecture différents
     10composants matériels supportant la communication par interruption entre le(s) processeurs(s) et les périphériques.
    1111
    1212= 2 Outil soclib-cc =
     
    9696}}}
    9797
    98 = 3 Architectures Clusterisées =
    9998
    100 Nous appellerons ''architecture clusterisée'' une architecture dans laquelle on utilise un double système d'index
    101 pour repérer les initiateurs et les cibles VCI. Un cluster est un sous-système regroupant généralement plusieurs
    102 initiateurs et plusieurs cibles VCI, communiquant entre eux par un interconnect local (bus ou crossbar).
    103 Chaque composant est donc repèré par un couple `(cluster_index, local_index)`.
    104 
    105 L'espace d'adressage reste partagé par tous les composants du système (quel que soit leur cluster), et n'importe
    106 quel initiateur peut directement adresser n'importe quelle cible. Si l'initiateur et la cible n'appartiennent pas au même
    107 cluster, les paquets VCI (commande et réponse) sont acheminés grace à un interconnect global (généralement un
    108 micro-réseau intégré ou NoC).
    109 
    110 [[Image(soclib_tp4_multi.png)]]
    111 
    112 Ce regroupement en clusters répond généralement à deux objectifs:
    113  * D'un point de vue architecture, regrouper dans un même cluster les composants qui communiquent beaucoup entre eux permet de réduire la latence des communications, et de minimiser la consommation. Ce découpage permet également de distribuer la mémoire embarquée, et d'éviter le goulot d'étranglement que constituerait un unique banc mémoire sur la puce (même si l'accès à la mémoire externe reste un goulot d'étranglement).
    114  * D'un point de vue électrique, le découpage en clusters permet de résoudre en partie les problèmes d'horlogerie, puisque chaque cluster peut être implanté dans un domaine d'horloge séparé (approche GALS : Globally Asynchronous / Locally Synchronous). Le franchissement des frontières d'horlogre est alors la responsabilité du micro-réseau assurant les communications inter-clusters.
    115 
    116 Pour faciliter le décodage des adresses, on décompose les bits de poids fort de l'adresse VCI en deux champs GADR et LADR, de telle sorte que le décodage du champs GADR définisse complêtement le numéro du cluster cible.
    117 Le décodage du champs LADR permet lui de déterminer l'index local de la cible dans un cluster.
    118 Le nombre de bits des champs GADR et LADR dépend évidemment du système.
    119 || GADR || LADR ||  OFFSET  ||
    120 Cette organisation hiérarchique à deux niveaux impose évidemment que les valeurs des champs GADR des segments associés aux cibles d'un même cluster soient égales entre elles (ou appartiennent à un même ensemble de valeurs caractéristiques de ce cluster)
    121 
    122 = 4 Travail à réaliser =
     99= 3 Travail à réaliser =
    123100
    124101L'archive [attachment:soclib_tp4.tgz soclib_tp4.tgz] contient différents fichiers dont vous aurez besoin pour ce TP.
     
    176153'''tp4_top.cpp''' le fichier ainsi modifié. Modifiez également le fichier '''tp3_desc''' et renommez le '''tp4_desc'''
    177154
    178 == 4.3 Routines de traitement des interruptions ==
     155== 4.3 Communication par interruptions ==
    179156
    180157 On associe à chaque ligne d'interruption une routine de traitement spécifique,
    181 appelée ISR (Interrupt Service Routine). Une ISR a  qui a pour principale fonction
     158appelée ISR (Interrupt Service Routine). Une ISR a pour principale fonction
    182159de signaler au système d'exploitation qu'un événement s'est produit sur un périphérique.
    183 Le logiciel ''système'' doit donc  être modifié pour traiter les requêtes d'interruption.
    184 Le code de ces ISRs est défini dans le fichier '''isr.s'''. Ce code s'exécute en mode ''kernel'',
    185 et c'est le rôle du gestionnaire d'interruption (qui est des trois composants du GIET) d'exécuter
    186 l'ISR correspondant à la ligne d'interruption active, avant de rendre la main au programme interrompu.
    187160
    188 Par ailleurs, le ''code de boot'' (contenu dans le fichier '''reset.s''') doit maintenant initialiser le vecteur d'interruption
     161Pour communiquer avec un périphérique, un programme utilisateur peut utiliser
     162un tampons mémoire partagé DATA, protégé par une variable de synchronisation SYNC.
     163Supposons qu'un programme utilisateur souhaite lire un caractère sur un terminal TTY.
     164Plutôt que d'effectuer un appel système bloquant (qui effectue une scrutation directement sur le registre STATUS
     165du TTY), le programme utilisateur va appeler une fonction de communication qui s'exécute en mode ''user'', et qui
     166effectue une scrutation sur la variable SYNC. C'est le périphérique TTY qui écrit dans le tampon  DATA
     167et qui active la variable SYNC, en déclenchant l'exécution de la routine d'interruption.
     168Le programme utilisateur  lit dans le tampon DATA et désactive la variable SYNC.
     169Il existe évidemment un mécanisme symétrique pour l'écriture d'un caractère vers le contrôleur TTY.
     170
     171'''Question:''' Quel est l'avantage de ce type de communication ?
     172
     173Le logiciel doit  être modifié pour supporter la communication par interruption entre un programme
     174utilisateur et un périphérique:
     175 * le fichier '''isr.s''' contient le codes des routines d'interruption associées aux différentes requêtes d'interruption générées par les périphériques. Il y a une routine par ligne d'interruption. Ce code est écrit en assembleur, et s'exécute en mode ''kernel''.
     176 * Le fichier '''userio.c''' contient les  fonctions C permettant à un programme utilisateur de communiquer par interruption (en lecture ou en écriture) avec les périphériques. Pour l'instant seul les fonctions d'accès au TTY sont
     177disponibles.
     178 * Le ''code de boot'' défini dans le fichier '''reset.s''' doit maintenant initialiser le vecteur d'interruption
    189179(c'est à dire le tableau indexé par le numéro d'interruption, et contenant les adresses des différentes ISR).
    190180
    191 == 4.4 Architecture multi-processeurs ==
     181Modifiez le fichier reset.s pour initialiser les routines d'interruption correspondant au à la ligne IRQ[0] du composant '''vci_timer''', et à la ligne IRQ[0] du contrôleur TTY (lecture d'un caractère).
    192182
    193 = 5 Compte-rendu =
     183Modifiez le fichier '''main.c''' du TP3 pour que celui-ci la boucle infinie qui affiche le message "hello World!",
     184en utilisant la fonction utilisateur  ''user_getc()'' au lieu de l'appel système ''tty_getc()''.
     185Vous n'oublierez pas d'introduire au début du programme main() l'appel système qui permet d'activer les
     186entrées d'interruption IRQ_IN[0] et IRQ_IN[1] du concentrateur d'interruption '''vci_icu'''.
     187
     188= 4 Compte-rendu =
    194189
    195190Il ne vous est pas demandé de compte-rendu pour ce TP, mais on vous demandera une démonstration