Changes between Version 54 and Version 55 of SoclibCourseTp4


Ignore:
Timestamp:
Dec 4, 2010, 6:58:13 PM (14 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp4

    v54 v55  
    1515D'un autre côté, on souhaite modéliser des architectures comportant plusieurs processeurs programmables.
    1616
    17 = 2 Architecture mono-processeur avec interruptions =
     17= 2 Interruptions vectorisées =
    1818
    1919Il existe deux types de périphériques:
     
    4848
    4949Les deux composants IOC et DMA étant à la fois initiateur et cible, on obtient finalement une architecture possédant
    50 trois initiateurs VCI et 9 cibles VCI, conformément au schéma ci-dessous.
     50trois initiateurs VCI (indexés de 0 à 2), et 9 cibles VCI (indexées de 0 à 8), conformément au schéma ci-dessous.
    5151
    5252[[Image(soclib_tp4_mono.png)]]
    5353 
    54  * La ligne d'interruption du TIMER est connectée au port '''p_irq_in[0]''' du composant ICU
    55  * la ligne d'interruption du TTY est connectée au port '''p_irq_in[1]''' du composant ICU.
    56  * la ligne d'interruption du contrôleur de disque IOC est connectée au port '''p_irq_in[5]''' du composant ICU.
    57  * la ligne d'interruption du contrôleur DMA est connectée au port '''p_irq_in[6]''' du composant ICU.
     54Les lignes d'interruptions ne passent pas par le réseau VCI : chaque ligne d'interruption d'un périphérique
     55est directement connectée aux ports '''p_irq_in[i]''' du composant ICU :
     56 * La ligne d'interruption du TIMER est connectée au port '''p_irq_in[0]'''
     57 * la ligne d'interruption du TTY est connectée au port '''p_irq_in[1]'''
     58 * la ligne d'interruption du contrôleur de disque IOC est connectée au port '''p_irq_in[5]'''
     59 * la ligne d'interruption du contrôleur DMA est connectée au port '''p_irq_in[6]'''
    5860
    59 == 2.2 Interruptions vectorisées ==
    60 
    61 Le système d'exploitation (pour nous c'est le GIET) associe à chaque ligne d'interruption une routine
     61Le système d'exploitation (GIET) associe à chaque ligne d'interruption une routine
    6262de traitement spécifique, appelée ISR (Interrupt Service Routine), qui est exécutée par le processeur lorsque la ligne d'interruption est activée par le périphérique, et que les interruptions ne sont pas masquées.
    6363Il s'agit donc pour le périphérique de "voler" quelques cycles du processeur pour lui permettre d'exécuter
    6464un peu de code. L'ISR permet généralement au périphérique de signaler un événement 
    65 en allant écrire à certains emplacements prédéfinis en mémoire.
     65en allant écrire dans un emplacement prédéfini en mémoire.
    6666
    67 Dans le TP3, le programme utilisateur utilisait l'appel système ''tty_getc()'' pour lire un caracère saisi au
    68 clavier. Cet appel système bloquant réalise une boucle de scrutation dans laquelle, à chaqur tour de boucle,
     67== 2.2 Communication entre le GIET et le contrôleur TTY ==
     68
     69Dans le TP3, le programme utilisateur utilise l'appel système ''tty_getc()'' pour lire un caracère saisi au
     70clavier. Cet appel système bloquant contient une boucle de scrutation dans laquelle, à chaque tour de boucle,
    6971on effectue une transaction sur le bus pour lire la valeur du registre STATUS du terminal TTY concerné.
    70 On ne sort de cette boucle que lorsqu'un caractère aeffectivement été saisi. au clavier.le système lit la valeur
     72On ne sort de cette boucle que lorsqu'un caractère a effectivement été saisi. au clavier.
    7173
    72 Dans un mécanisme interruptif, le programme utilisateur utilise l'appel système ''tty_get_irq()''.
    73 Cet appel système utilise lui-même un tampon mémoire partagé '''_tty_get_buf''', protégé par une variable de synchronisation '''-tty_get_full'''.
     74Dans ce TP4, le programme utilisateur utilise l'appel système ''tty_get_irq()'' pour lire un caractère.
     75Cet appel système utilise un tampon mémoire partagé '''_tty_get_buf''', protégé par une variable de synchronisation '''-tty_get_full'''.
    7476Ces deux variables appartiennent au système d'exploitation et sont stockées dans le segment ''seg_kunc'',
    7577qui est à la fois protégé (non accessible par les programmes utilisateur) et non cachable.
     
    7981à un autre programme utilisateur si te tampon est vide. C'est la routine d'interruption (ISR) associée au
    8082terminal TTY qui se charge d'écrire le code ASCII du caractère dans le tampon  '''_tty_get_buf''', et de
    81 forcer à 1 la variable de synchronsation '''_tty_get_full'''. Cette variable de synchronisation est remise à 0
     83forcer à 1 la variable de synchronsation '''_tty_get_full''' pour signaler que le tampon est plein. Cette variable de synchronisation est remise à 0
    8284par l'appel système ''tty_getc_irq()'' lorsque le caractère est transféré du tampon système '''tty_get_buf''' 
    8385vers le tampon mémoire défini par l'utilisateur.
    8486
    85 Dans une architecture monoprocesseur, le processeur peut exécuter plusieurs tâches (plusieurs programmes utilisateurs) en pseudo-paralléliseme, par multiplexage temporel. Chaque tâche possède alors son propre terminal écran/clavier, mais il n'y a qu'un seul contrôleur TTY.
    86 
    87 Dans une architecture multi-processeurs, on aura un contrôleur TTY pour chaque processeur, et chaque
    88 processeur peut exécuter plusieurs tâches.
     87Dans une architecture monoprocesseur, le processeur peut exécuter plusieurs tâches (plusieurs programmes utilisateurs) en pseudo-paralléliseme, par multiplexage temporel. Chaque tâche possède alors son propre terminal écran/clavier, qui sont tous contrôlés par le même contrôleur TTY. Dans une architecture multi-processeurs, chaque processeur peut exécuter plusieurs tâches, et on a un contrôleur TTY séparé pour chaque processeur .
    8988 
    9089Le GIET supporte au plus 8 processeurs, et au plus 4 tâches par processeur. Le GIET supporte donc au plus
    91  32 terminaux ecran/clavier, et définit donc deux tableaux '''_tty_get_buf[32]''' et '''_tty_get_full[32]''', indexés par le numéro du terminal concerné.
     90 32 terminaux ecran/clavier, et définit donc deux tableaux '''_tty_get_buf[32]''' et '''_tty_get_full[32]''', indexés
     91par le numéro du terminal concerné.
    9292
    93 '''Question''' : Comment l'écrivain (l'ISR) calcule-t-il l'index du terminal concerné ? Comment le lecteur
    94 (l'appel système ''tty_get_irq()'' détermine-t-il cet index ? La réponse se trouve dans les fichier ''drivers.c'' et ''isr.s''.
     93'''Question''' : Comment les deux entités communicantes (l'ISR et l'appel système) calcule-t-il l'index du terminal concerné ? La réponse se trouve dans les fichier ''drivers.c'' et ''isr.s''.
    9594
    96 '''Question:''' Que fait la routine d'interruption ISR déclenchée par le périphérique TTY lors de la frappe
    97 d'un caractère lorsque la variable '''_tty_get_full[i]''' vaut 1 ?  Ceci signifie que le précédent caractère écrit
    98 dans le tampon '''_tty_get_buf[i]''' n'a pas été lu par le programme utilisateur. La réponse se trouve dans le fichier ''isr.s''.
     95'''Question:''' Que fait la routine d'interruption ISR déclenchée par le périphérique TTY lorsqu'un caractère est frappé alors que  la variable '''_tty_get_full[i]''' vaut 1 ?   La réponse se trouve dans le fichier ''isr.s''.
    9996
    10097'''Question:''' Quel est l'avantage de ce type de communication par interruption, comparé au mécanisme de scrutation utilisé dans le TP3 ?
    10198
    102 == 2.3 Modélisation de l'architecture matérielle ==
     99== 2.2 Communication entre le GIET et le contrôleur IOC ==
     100
     101= 3 Modélisation de l'architecture matérielle =
    103102
    104103L'archive [attachment:soclib_tp4.tgz soclib_tp4.tgz] contient différents fichiers dont vous aurez besoin pour ce TP.
     
    110109Outre les fichiers qui permettent de générer le simulateur de l'architecture matérielle, cette archive contient  également le sous-répertoire ''soft'' qui est utilisé pour la génération du logiciel embarqué.
    111110
     111Question''' : Complêtez le fichier '''tp4_top.cpp''' pour définir les adresses de base et les tailles des cinq segments associés aux composants ICU, TIMER, IOC, FBF et DMA.
     112
    112113'''Question''' : Complétez le fichier '''tp4_top.cpp''' pour définir les paramètres des constructeurs des cinq nouveaux composants ICU, TIMER, IOC, FBF et DMA. Utilisez le Makefile pour pour générer le simulateur.
    113114
    114 == 2.4 Code de boot ==
     115'''Question''' : Complétez la net-list pour  connecter les 4lignes d'interruption utilisées dans cette architecture.
     116
     117= 4. Logiciel embarqué =
     118
     119== 4.1 Code de boot ==
    115120
    116121Le ''code de boot'' défini dans le fichier '''reset.s''' doit maintenant initialiser le vecteur d'interruption (c'est à dire le tableau indexé par le numéro d'interruption, et contenant les adresses des différentes routines d'interruption).
     
    119124IOC et DMA. Modifiez le fichier reset.s pour initialiser les entrées correspondantes du vecteur d'interruption.
    120125
    121 == 2.5 Utilisation du TTY ==
     126== 4.2 Programme utilisateur utilisant le TTY ==
    122127
    123128'''Question''' : Ecrire ou modifier un programme main() réalisant un interprêteur de commandes utilisant les appels système  ''tty_getc_irq()'', tty_getw_irq(), tty_printf.
    124129
    125 == 2.6 Activation du TIMER ==
     130== 4.3 Activation du TIMER ==
    126131
    127132On veut maintenant activer la génération d'interruptions périodiques par le TIMER. Consultez le fichier ''stdio.c'' pour
     
    132137'''Question''' : Pour le fun, un interprêteur de commande permettant d'activer ou de désactiver le TIMER
    133138
    134 == 2.5 Contrôleur de disque ==
     139== 4.4 Contrôleur de disque ==
    135140
    136141Le contrôleur de disque disponible dans SoCLib...
    137142
    138 = 3. Architecture multi-processeurs générique =
     143= 5. Architecture multi-processeurs générique =
    139144
    140145On va dans cette section modéliser une architecture matérielle comportant un nombre variable de processeurs de sorte  que le nombre de processeurs soit un paramètre ; défini sur la ligne de commande au lancement du simulateur.