Changes between Version 49 and Version 50 of SoclibCourseTp4


Ignore:
Timestamp:
Nov 30, 2010, 4:46:25 PM (14 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp4

    v49 v50  
    11{{{
    22#!html
    3 <h1>TP4 : Communications par interruption</h1>
     3<h1>TP4 : Interruptions et architectures multi-processeurs</h1>
    44}}}
    55[[PageOutline]]
     
    77= 1 Objectif =
    88
    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.
     9Le but de ce quatrième TP est double :
     10
     11D'un côté, on souhaite introduire de nouveaux
     12composants matériels supportant la communication par interruption,
     13et analyser les mécanismes de communication entre un programme utilisateur et un périphérique.
     14
     15D'un autre côté, on souhaite modéliser des architectures comportant plusieurs processeurs programmables.
     16
     17= 2 Communications par interruption =
    1218
    1319Tous les périphériques utilisent les interruptions, mais il existe deux types de périphériques:
     
    1723 * 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.
    1824
    19 = 2 Communications par interruption =
     25== 2.1 Interruptions vectorisées ==
    2026
    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.
     27La 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
    2429Ceci 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
    2530[https://www.soclib.fr/trac/dev/wiki/Component/VciIcu ici].
    2631
    27 On en profite pour introduire un autre périphérique : Le composant '''vci_multi_timer''' est également une cible VCI
     32On en profite pour introduire d'autres périphériques : Le composant '''vci_multi_timer''' est également une cible VCI
    2833contenant 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
    2934[https://www.soclib.fr/trac/dev/wiki/Component/VciMultiTimer ici].
    3035
    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.
     36Le composant '''vci_block_device'''
     37
     38Le composant '''vci_frame_buffer'''
     39
     40On 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.
    3241
    3342[[Image(soclib_tp4_cluster.png)]]
     
    3948un peu de code. L'ISR permet généralement au périphérique de signaler un événement 
    4049en allant écrire à certains emplacements prédéfinis en mémoire.
    41 
    42 === 2.1 Contrôleur TTY ===
    4350
    4451Dans le TP3, le programme utilisateur utilisait l'appel système ''tty_getc()'' pour lire un caracère saisi au
     
    7784'''Question:''' Quel est l'avantage de ce type de communication par interruption, comparé au mécanisme de scrutation utilisé dans le TP3 ?
    7885
     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é.
     87Complètez également le fichier '''tp3_desc''' et renommez le '''tp4_desc'''.
     88Utilisez '''soclib-cc''' pour générer le simulateur.
     89
     90Le 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,
     91et 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
     100Le contrôleur de disque disponible dans SoCLib
     101
     102= 3. Architecture multi-processeurs générique =
     103
     104On 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
    79107= 4 Travail à réaliser =
    80108
     
    88116}}}
    89117
    90 == 4.1 Utilisation de soclib-cc ==
    91118
    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 contient
    95 plus que deux fichiers : le fichier '''tp3_top.cpp''' décrivant l'architecture, et le fichier '''tp3.desc''', puisqu'on utilise
    96 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.sh
    101 }}}
    102 
    103 Puis lancer la compilation avec la commande :
    104 {{{
    105 $ soclib-cc -p tp3.desc -o tp3.simulator.x
    106 }}}
    107 
    108 Vérifiez que le simulateur '''tp3_simulator.x'''  qui vient d'être généré exécute toujours correctement l'application
    109 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.soft
    112 }}}
    113  
    114119== 4.2 Communication par interruptions ==
    115120