Changes between Version 54 and Version 55 of SoclibCourseTp4
- Timestamp:
- Dec 4, 2010, 6:58:13 PM (14 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SoclibCourseTp4
v54 v55 15 15 D'un autre côté, on souhaite modéliser des architectures comportant plusieurs processeurs programmables. 16 16 17 = 2 Architecture mono-processeur avec interruptions =17 = 2 Interruptions vectorisées = 18 18 19 19 Il existe deux types de périphériques: … … 48 48 49 49 Les 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.50 trois initiateurs VCI (indexés de 0 à 2), et 9 cibles VCI (indexées de 0 à 8), conformément au schéma ci-dessous. 51 51 52 52 [[Image(soclib_tp4_mono.png)]] 53 53 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. 54 Les lignes d'interruptions ne passent pas par le réseau VCI : chaque ligne d'interruption d'un périphérique 55 est 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]''' 58 60 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 61 Le système d'exploitation (GIET) associe à chaque ligne d'interruption une routine 62 62 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. 63 63 Il s'agit donc pour le périphérique de "voler" quelques cycles du processeur pour lui permettre d'exécuter 64 64 un 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éfinisen mémoire.65 en allant écrire dans un emplacement prédéfini en mémoire. 66 66 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 69 Dans le TP3, le programme utilisateur utilise l'appel système ''tty_getc()'' pour lire un caracère saisi au 70 clavier. Cet appel système bloquant contient une boucle de scrutation dans laquelle, à chaque tour de boucle, 69 71 on 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 a effectivement été saisi. au clavier.le système lit la valeur72 On ne sort de cette boucle que lorsqu'un caractère a effectivement été saisi. au clavier. 71 73 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êmeun tampon mémoire partagé '''_tty_get_buf''', protégé par une variable de synchronisation '''-tty_get_full'''.74 Dans ce TP4, le programme utilisateur utilise l'appel système ''tty_get_irq()'' pour lire un caractère. 75 Cet appel système utilise un tampon mémoire partagé '''_tty_get_buf''', protégé par une variable de synchronisation '''-tty_get_full'''. 74 76 Ces deux variables appartiennent au système d'exploitation et sont stockées dans le segment ''seg_kunc'', 75 77 qui est à la fois protégé (non accessible par les programmes utilisateur) et non cachable. … … 79 81 à un autre programme utilisateur si te tampon est vide. C'est la routine d'interruption (ISR) associée au 80 82 terminal 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 à 083 forcer à 1 la variable de synchronsation '''_tty_get_full''' pour signaler que le tampon est plein. Cette variable de synchronisation est remise à 0 82 84 par l'appel système ''tty_getc_irq()'' lorsque le caractère est transféré du tampon système '''tty_get_buf''' 83 85 vers le tampon mémoire défini par l'utilisateur. 84 86 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. 87 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, 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 . 89 88 90 89 Le 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 91 par le numéro du terminal concerné. 92 92 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''. 95 94 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''. 99 96 100 97 '''Question:''' Quel est l'avantage de ce type de communication par interruption, comparé au mécanisme de scrutation utilisé dans le TP3 ? 101 98 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 = 103 102 104 103 L'archive [attachment:soclib_tp4.tgz soclib_tp4.tgz] contient différents fichiers dont vous aurez besoin pour ce TP. … … 110 109 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é. 111 110 111 Question''' : 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 112 113 '''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. 113 114 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 == 115 120 116 121 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). … … 119 124 IOC et DMA. Modifiez le fichier reset.s pour initialiser les entrées correspondantes du vecteur d'interruption. 120 125 121 == 2.5 Utilisation duTTY ==126 == 4.2 Programme utilisateur utilisant le TTY == 122 127 123 128 '''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. 124 129 125 == 2.6Activation du TIMER ==130 == 4.3 Activation du TIMER == 126 131 127 132 On veut maintenant activer la génération d'interruptions périodiques par le TIMER. Consultez le fichier ''stdio.c'' pour … … 132 137 '''Question''' : Pour le fun, un interprêteur de commande permettant d'activer ou de désactiver le TIMER 133 138 134 == 2.5Contrôleur de disque ==139 == 4.4 Contrôleur de disque == 135 140 136 141 Le contrôleur de disque disponible dans SoCLib... 137 142 138 = 3. Architecture multi-processeurs générique =143 = 5. Architecture multi-processeurs générique = 139 144 140 145 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.