Changes between Version 49 and Version 50 of SoclibCourseTp4
- Timestamp:
- Nov 30, 2010, 4:46:25 PM (14 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SoclibCourseTp4
v49 v50 1 1 {{{ 2 2 #!html 3 <h1>TP4 : Communications par interruption</h1>3 <h1>TP4 : Interruptions et architectures multi-processeurs</h1> 4 4 }}} 5 5 [[PageOutline]] … … 7 7 = 1 Objectif = 8 8 9 Le but de ce quatrième TP est d'introduire dans l'architecture de nouveaux 10 composants matériels supportant la communication par interruption entre le(s) processeurs(s) et les périphériques, 11 et d'analyser les mécanismes de communication entre un programme utilisateur et un périphérique. 9 Le but de ce quatrième TP est double : 10 11 D'un côté, on souhaite introduire de nouveaux 12 composants matériels supportant la communication par interruption, 13 et analyser les mécanismes de communication entre un programme utilisateur et un périphérique. 14 15 D'un autre côté, on souhaite modéliser des architectures comportant plusieurs processeurs programmables. 16 17 = 2 Communications par interruption = 12 18 13 19 Tous les périphériques utilisent les interruptions, mais il existe deux types de périphériques: … … 17 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. 18 24 19 = 2 Communications par interruption=25 == 2.1 Interruptions vectorisées == 20 26 21 La plate-forme matérielle du TP3 utilisait une technique de scrutation (polling) pour lire des caractères en provenance du terminal TTY. 22 Cette technique n'est pas très efficace, et on souhaite remplacer ce mécanisme de scrutation par un mécanisme d'interruption, 23 en utilisantla capacité du contrôleur TTY à générer une interruption lorsque qu'un caractère est frappé sur le clavier. 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 24 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 25 30 [https://www.soclib.fr/trac/dev/wiki/Component/VciIcu ici]. 26 31 27 On en profite pour introduire un autre périphérique: Le composant '''vci_multi_timer''' est également une cible VCI32 On en profite pour introduire d'autres périphériques : Le composant '''vci_multi_timer''' est également une cible VCI 28 33 contenant un nombre queconque de timers programmables capables de générer des interruptions périodiques à destination du processeur. Vous trouverez la spécification fonctionnelle de ce composant 29 34 [https://www.soclib.fr/trac/dev/wiki/Component/VciMultiTimer ici]. 30 35 31 On obtient ainsi une 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. 36 Le composant '''vci_block_device''' 37 38 Le composant '''vci_frame_buffer''' 39 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. 32 41 33 42 [[Image(soclib_tp4_cluster.png)]] … … 39 48 un peu de code. L'ISR permet généralement au périphérique de signaler un événement 40 49 en allant écrire à certains emplacements prédéfinis en mémoire. 41 42 === 2.1 Contrôleur TTY ===43 50 44 51 Dans le TP3, le programme utilisateur utilisait l'appel système ''tty_getc()'' pour lire un caracère saisi au … … 77 84 '''Question:''' Quel est l'avantage de ce type de communication par interruption, comparé au mécanisme de scrutation utilisé dans le TP3 ? 78 85 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. 89 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). 92 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). 94 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()''. 96 97 98 == 2.2 Contrôleur de disque == 99 100 Le contrôleur de disque disponible dans SoCLib 101 102 = 3. Architecture multi-processeurs générique = 103 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. 105 106 79 107 = 4 Travail à réaliser = 80 108 … … 88 116 }}} 89 117 90 == 4.1 Utilisation de soclib-cc ==91 118 92 On va commencer par regénérer le simulateur utilisé dans le TP3, en utilisant '''soclib-cc'''.93 94 Comme vous pouvez le constater, le répertoire principal de l'archive ne contient95 plus que deux fichiers : le fichier '''tp3_top.cpp''' décrivant l'architecture, et le fichier '''tp3.desc''', puisqu'on utilise96 directement les modèles de composants enregistrés dans l'arbre SVN SoCLib.97 98 Il faut vérifier que le chemin d'accès à à soclib-cc est bien dans votre PATH en exécutant:99 {{{100 $ source /users/outil/soc/env_soclib.sh101 }}}102 103 Puis lancer la compilation avec la commande :104 {{{105 $ soclib-cc -p tp3.desc -o tp3.simulator.x106 }}}107 108 Vérifiez que le simulateur '''tp3_simulator.x''' qui vient d'être généré exécute toujours correctement l'application109 logicielle du TP3. Vous pouvez pour cela donner explicitement le cheminom (pathname) du fichier contenant le code binaire comme argument sur la ligne de commande :110 {{{111 $ ./tp3_simulator.x ../TP3/soft/bin.soft112 }}}113 114 119 == 4.2 Communication par interruptions == 115 120