Changes between Version 50 and Version 51 of SoclibCourseTp4
- Timestamp:
- Nov 30, 2010, 5:24:32 PM (14 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SoclibCourseTp4
v50 v51 15 15 D'un autre côté, on souhaite modéliser des architectures comportant plusieurs processeurs programmables. 16 16 17 = 2 Communications par interruption=17 = 2 Architecture mono-processeur avec interruptions = 18 18 19 19 Tous les périphériques utilisent les interruptions, mais il existe deux types de périphériques: … … 23 23 * 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. 24 24 25 == 2.1 Interruptions vectorisées==25 == 2.1 Architecture matérielle == 26 26 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]. 27 Lorsque le nombre de périphériques augmente, le nombre de lignes d'interruption augmente également, 28 et il faut un mécanisme permettant de concentrer plusieurs dizaines de requêtes d'interruption vers un seul signal 29 connecté 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]. 31 30 32 31 On en profite pour introduire d'autres périphériques : Le composant '''vci_multi_timer''' est également une cible VCI … … 34 33 [https://www.soclib.fr/trac/dev/wiki/Component/VciMultiTimer ici]. 35 34 36 Le composant '''vci_block_device''' 35 Le composant '''vci_block_device'''... 37 36 38 Le composant '''vci_frame_buffer''' 37 Le composant '''vci_frame_buffer'''... 39 38 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.39 Le composant '''vci_dma'''... 41 40 42 [[Image(soclib_tp4_cluster.png)]] 41 Les deux composants IOC et DMA étant à la fois initiateur et cible, on obtient une architecture possédant 42 trois initiateurs VCI et 9 cibles VCI, conformément au schéma ci-dessous. 43 43 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 53 Le système d'exploitation (pour nous c'est le GIET) associe à chaque ligne d'interruption une routine 54 de 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. 47 55 Il s'agit donc pour le périphérique de "voler" quelques cycles du processeur pour lui permettre d'exécuter 48 56 un peu de code. L'ISR permet généralement au périphérique de signaler un événement … … 51 59 Dans le TP3, le programme utilisateur utilisait l'appel système ''tty_getc()'' pour lire un caracère saisi au 52 60 clavier. 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é.61 on effectue une transaction sur le bus pour lire la valeur du registre STATUS du terminal TTY concerné. 54 62 On ne sort de cette boucle que lorsqu'un caractère aeffectivement été saisi. au clavier.le système lit la valeur 55 63 … … 84 92 '''Question:''' Quel est l'avantage de ce type de communication par interruption, comparé au mécanisme de scrutation utilisé dans le TP3 ? 85 93 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 == 89 95 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). 96 L'archive [attachment:soclib_tp4.tgz soclib_tp4.tgz] contient différents fichiers dont vous aurez besoin pour ce TP. 97 Cré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 }}} 92 101 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).102 Outre 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é. 94 103 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. 96 105 106 == 2.4 Logiciel embarqué == 97 107 98 == 2.2 Contrôleur de disque == 108 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, 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, 111 IOC 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 == 99 118 100 119 Le contrôleur de disque disponible dans SoCLib … … 102 121 = 3. Architecture multi-processeurs générique = 103 122 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.123 On 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. 105 124 106 125