Changes between Version 51 and Version 52 of SoclibCourseTp4
- Timestamp:
- Nov 30, 2010, 5:50:43 PM (14 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SoclibCourseTp4
v51 v52 19 19 Tous les périphériques utilisent les interruptions, mais il existe deux types de périphériques: 20 20 21 * Un contrôleur TTY est un périphérique ''caractère'' car il supporte des requêtes de lecture ou d'écriture d'un seul caractère. Ce type de périphérique est généralementune cible sur le bus, puisqu'il ne peut que recevoir des commandes provenant d'un processeur, et qu'il n'a pas la possibilité de lire ou d'écrire lui-même en mémoire.21 * Un contrôleur TTY est un périphérique ''caractère'' car il supporte des requêtes de lecture ou d'écriture d'un seul caractère. Ce type de périphérique se comporte comme une cible sur le bus, puisqu'il ne peut que recevoir des commandes provenant d'un processeur, et qu'il n'a pas la possibilité de lire ou d'écrire lui-même en mémoire. 22 22 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, etpeuvent directement lire ou écrire en mémoire.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, cat ils peuvent directement lire ou écrire en mémoire. 24 24 25 25 == 2.1 Architecture matérielle == … … 27 27 Lorsque le nombre de périphériques augmente, le nombre de lignes d'interruption augmente également, 28 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].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ées. C'est une cible VCI dont vous trouverez la spécification fonctionnelle [https://www.soclib.fr/trac/dev/wiki/Component/VciIcu ici]. 30 30 31 31 On en profite pour introduire d'autres périphériques : Le composant '''vci_multi_timer''' est également une cible VCI … … 39 39 Le composant '''vci_dma'''... 40 40 41 Les deux composants IOC et DMA étant à la fois initiateur et cible, on obtient une architecture possédant41 Les deux composants IOC et DMA étant à la fois initiateur et cible, on obtient finalement une architecture possédant 42 42 trois initiateurs VCI et 9 cibles VCI, conformément au schéma ci-dessous. 43 43 … … 104 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. 105 105 106 == 2.4 Logiciel embarqué==106 == 2.4 Code de boot == 107 107 108 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). … … 111 111 IOC et DMA. Modifiez le fichier reset.s pour initialiser les entrées correspondantes du vecteur d'interruption. 112 112 113 '''Question''' : Modifiez le fichier '''main.c''' du TP3 pour qu'il utilise la fonction utilisateur ''tty_getc_irq()''. 113 == 2.5 Utilisation du TTY == 114 114 115 '''Question''' : 115 '''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. 116 117 == 2.6 Activation du TIMER == 118 119 On veut maintenant activer la génération d'interruptions périodiques par le TIMER. Consultez le fichier ''stdio.c'' pour 120 déterminer quels sont les deux appels système qui permettent de définir la période du TIMER et d'autoriser les interruptions périodiques. 121 122 '''Question''' : Modifiez le programme main()pour que le TIMER génère une interruption périodique tous les 100 000 cyles. Exécutez ce nouveau programme et vérifiez le comportement de la machine. 123 124 '''Question''' : Pour le fun, un interprêteur de commande permettant d'activer ou de désactiver le TIMER 116 125 117 126 == 2.5 Contrôleur de disque == 118 127 119 Le contrôleur de disque disponible dans SoCLib 128 Le contrôleur de disque disponible dans SoCLib... 120 129 121 130 = 3. Architecture multi-processeurs générique = 122 131 123 132 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. 133 On souhaite exécuter sur cette architecture matérielle une application logicielle multi-tâches coopérative. 134 135 == 3.1 architecture matérielle == 136 137 == 3.2 Code de boot == 138 139 == 3.4 Programme coopératif multi-tâches == 124 140 125 141 126 = 4 Travail à réaliser =127 142 128 L'archive [attachment:soclib_tp4.tgz soclib_tp4.tgz] contient différents fichiers dont vous aurez besoin pour ce TP.129 Elle contient également un sous-répertoire '''soft''' qui est utilisé pour la génération du logiciel embarqué.130 Attention: ce répertoire '''soft''' de l'archive du TP4 contient des fichiers différents de ceux qui étaient fournis pour le TP3.131 132 Créez un répertoire de travail spécifique TP4, recopiez l'archive dans ce répertoire TP4, et décompressez-la:133 {{{134 $ tar xzvf soclib_tp4.tgz135 }}}136 137 138 == 4.2 Communication par interruptions ==139 140 Modifiez le fichier '''tp3_top.cpp''' pour instancier et connecter les deux nouveaux composants ICU et TIMER.141 On instanciera un seul terminal TTY et un seul TIMER. Renommez '''tp4_top.cpp''' le fichier ainsi modifié.142 Complètez également le fichier '''tp3_desc''' et renommez le '''tp4_desc'''143 144 Utilisez '''soclib-cc''' pour générer le simulateur '''tp4_simulator.x'''.145 146 Le logiciel doit également être modifié pour supporter la communication par interruption entre un programme147 utilisateur et un périphérique:148 * 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''.149 * 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 disponibles.150 * Le ''code de boot'' défini dans le fichier '''reset.s''' doit maintenant initialiser le vecteur d'interruption151 (c'est à dire le tableau indexé par le numéro d'interruption, et contenant les adresses des différentes ISR).152 153 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).154 155 Modifiez le fichier '''main.c''' du TP3 (fourni dans l'annexe) pour qu'il utilise la fonction utilisateur ''user_getc()'' au lieu de l'appel système ''tty_getc()''. N''oubliez pas d'introduire au début du programme main() l'appel système qui permet d'activer les156 entrées d'interruption IRQ_IN[0] et IRQ_IN[1] du concentrateur d'interruption ICU.157 158 Pour terminer ce TP, modifiez le programme main() (dans le fichier '''main.c'''), pour activer le composant '''vci_timer''' en programmant ce composant159 pour qu'il génère une interruption périodique tous les 50000 cyles. On utilsera pour cela les fonctions définies dans le fichier '''stdio.c'''.160 143 161 144 = 4 Compte-rendu =