Changes between Version 50 and Version 51 of SoclibCourseTp4


Ignore:
Timestamp:
Nov 30, 2010, 5:24:32 PM (14 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp4

    v50 v51  
    1515D'un autre côté, on souhaite modéliser des architectures comportant plusieurs processeurs programmables.
    1616
    17 = 2 Communications par interruption =
     17= 2 Architecture mono-processeur avec interruptions =
    1818
    1919Tous les périphériques utilisent les interruptions, mais il existe deux types de périphériques:
     
    2323 * Par opposition un périphérique ''bloc'', tel qu'un contrôleur de disque, (ou un contrôleur réseau) doit tranférer de grosses quantités de données entre la mémoire et le disque (ou le réseau). 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, et peuvent directement lire ou écrire en mémoire.
    2424
    25 == 2.1 Interruptions vectorisées ==
     25== 2.1 Architecture matérielle ==
    2626
    27 La plate-forme matérielle du TP3 utilisait une technique de scrutation (polling) pour lire des caractères en provenance du terminal TTY. Cette technique n'est pas très efficace, et on souhaite remplacer ce mécanisme de scrutation par un mécanisme d'interruption, en utilisant la capacité du contrôleur TTY à générer une interruption lorsque qu'un caractère est frappé sur le clavier.
    28 
    29 Ceci nécessite d'introduire un nouveau composant matériel dans l'architecture : Le composant '''vci_icu''' est  contrôleur d'interruptions vectorisé. C'est une cible VCI dont vous trouverez  la spécification fonctionnelle
    30 [https://www.soclib.fr/trac/dev/wiki/Component/VciIcu ici].
     27Lorsque le nombre de périphériques augmente, le nombre de lignes d'interruption augmente également,
     28et il faut un mécanisme permettant de concentrer plusieurs dizaines de requêtes d'interruption vers un seul signal
     29connecté au processeur. Ceci nécessite d'introduire un nouveau composant matériel dans l'architecture : Le composant '''vci_icu''' est  contrôleur d'interruptions vectorisé. C'est une cible VCI dont vous trouverez  la spécification fonctionnelle [https://www.soclib.fr/trac/dev/wiki/Component/VciIcu ici].
    3130
    3231On en profite pour introduire d'autres périphériques : Le composant '''vci_multi_timer''' est également une cible VCI
     
    3433[https://www.soclib.fr/trac/dev/wiki/Component/VciMultiTimer ici].
    3534
    36 Le composant '''vci_block_device'''
     35Le composant '''vci_block_device'''...
    3736
    38 Le composant '''vci_frame_buffer'''
     37Le composant '''vci_frame_buffer'''...
    3938
    40 On obtient ainsi une première architecture possédant un initiateur VCI et 6 cibles VCI, conformément au schéma ci-dessous. La line d'interruption en provenance du composant TIMER sera connectée au port '''p_irq_in[0]''' du composant ICU et la ligne d'interruption en provenance du contrôleur TTY sera connectée au port '''p_irq_in[1]''' du composant ICU.
     39Le composant '''vci_dma'''...
    4140
    42 [[Image(soclib_tp4_cluster.png)]]
     41Les deux composants IOC et DMA étant à la fois initiateur et cible, on obtient une architecture possédant
     42trois initiateurs VCI et 9 cibles VCI, conformément au schéma ci-dessous.
    4343
    44 On associe à chaque ligne d'interruption une routine de traitement spécifique,
    45 appelée ISR (Interrupt Service Routine), qui est exécutée par le processeur lorsque la ligne d'interruption
    46 est activée par le périphérique, et que les interruptions ne sont pas masquées.
     44[[Image(soclib_tp4_cluster.png)]]
     45 
     46 * La ligne d'interruption du TIMER est connectée au port '''p_irq_in[0]''' du composant ICU
     47 * la ligne d'interruption du TTY est connectée au port '''p_irq_in[1]''' du composant ICU.
     48 * la ligne d'interruption du contrôleur de disque est connectée au port '''p_irq_in[5]''' du composant ICU.
     49 * la ligne d'interruption du contrôleur DMA est connectée au port '''p_irq_in[1]''' du composant ICU.
     50
     51== 2.2 Interruptions vectorisées ==
     52
     53Le système d'exploitation (pour nous c'est le GIET) associe à chaque ligne d'interruption une routine
     54de 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.
    4755Il s'agit donc pour le périphérique de "voler" quelques cycles du processeur pour lui permettre d'exécuter
    4856un peu de code. L'ISR permet généralement au périphérique de signaler un événement 
     
    5159Dans le TP3, le programme utilisateur utilisait l'appel système ''tty_getc()'' pour lire un caracère saisi au
    5260clavier. Cet appel système bloquant réalise une boucle de scrutation dans laquelle, à chaqur tour de boucle,
    53 on effectue une transaction sur le bus pour lire la valeur du registre STATUS du terminal concerné.
     61on effectue une transaction sur le bus pour lire la valeur du registre STATUS du terminal TTY concerné.
    5462On ne sort de cette boucle que lorsqu'un caractère aeffectivement été saisi. au clavier.le système lit la valeur
    5563
     
    8492'''Question:''' Quel est l'avantage de ce type de communication par interruption, comparé au mécanisme de scrutation utilisé dans le TP3 ?
    8593
    86 '''Question''' : Modifiez le fichier '''tp3_top.cpp''' pour instancier et connecter les deux nouveaux composants ICU et TIMER. On instanciera un seul terminal TTY et un seul TIMER. Renommez '''tp4_top.cpp''' le fichier ainsi modifié.
    87 Complètez également le fichier '''tp3_desc''' et renommez le '''tp4_desc'''.
    88 Utilisez '''soclib-cc''' pour générer le simulateur.
     94== 2.3 Modélisation de l'architecture matérielle ==
    8995
    90 Le logiciel doit  également être modifié. En particulier, le ''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,
    91 et contenant les adresses des différentes routines d'interruption).
     96L'archive [attachment:soclib_tp4.tgz soclib_tp4.tgz] contient différents fichiers dont vous aurez besoin pour ce TP.
     97Créez un répertoire de travail spécifique TP4, recopiez l'archive dans ce répertoire, et décompressez-la:
     98{{{
     99$ tar xzvf soclib_tp4.tgz
     100}}}
    92101
    93 '''Question''' : En ouvrant le fichier ''isr.s'', déterminez le nom des deux ISRs associées au TTY et au Timer. Modifiez 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).
     102Outre 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é.
    94103
    95 '''Question''' Modifiez le fichier '''main.c''' du TP3  pour qu'il utilise la fonction utilisateur  ''tty_getc_irq()'' au lieu de l'appel système ''tty_getc()''.
     104'''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.
    96105
     106== 2.4 Logiciel embarqué ==
    97107
    98 == 2.2 Contrôleur de disque ==
     108Le ''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).
     109
     110'''Question''' : En ouvrant le fichier ''isr.s'', déterminez les nom des quatre ISRs associées aux composants Timer, TTY,
     111IOC et DMA. Modifiez le fichier reset.s pour initialiser les entrées correspondantes du vecteur d'interruption.
     112
     113'''Question''' : Modifiez le fichier '''main.c''' du TP3  pour qu'il utilise la fonction utilisateur  ''tty_getc_irq()''.
     114
     115'''Question''' :
     116
     117== 2.5 Contrôleur de disque ==
    99118
    100119Le contrôleur de disque disponible dans SoCLib
     
    102121= 3. Architecture multi-processeurs générique =
    103122
    104 On va dans cette section modéliser une architecture matérielle comportant un nombre variable de processeurs programmables, telle que le nombre de processeurs effectivement instanciés est un paramètre ; défini sur la ligne de commande au lancement du simulateur.
     123On 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.
    105124
    106125