Changes between Version 51 and Version 52 of SoclibCourseTp4


Ignore:
Timestamp:
Nov 30, 2010, 5:50:43 PM (14 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp4

    v51 v52  
    1919Tous les périphériques utilisent les interruptions, mais il existe deux types de périphériques:
    2020
    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éralement 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.
     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.
    2222
    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.
     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.
    2424
    2525== 2.1 Architecture matérielle ==
     
    2727Lorsque le nombre de périphériques augmente, le nombre de lignes d'interruption augmente également,
    2828et 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].
     29connecté 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].
    3030
    3131On en profite pour introduire d'autres périphériques : Le composant '''vci_multi_timer''' est également une cible VCI
     
    3939Le composant '''vci_dma'''...
    4040
    41 Les deux composants IOC et DMA étant à la fois initiateur et cible, on obtient une architecture possédant
     41Les deux composants IOC et DMA étant à la fois initiateur et cible, on obtient finalement une architecture possédant
    4242trois initiateurs VCI et 9 cibles VCI, conformément au schéma ci-dessous.
    4343
     
    104104'''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.
    105105
    106 == 2.4 Logiciel embarqué ==
     106== 2.4 Code de boot ==
    107107
    108108Le ''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).
     
    111111IOC et DMA. Modifiez le fichier reset.s pour initialiser les entrées correspondantes du vecteur d'interruption.
    112112
    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 ==
    114114
    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
     119On veut maintenant activer la génération d'interruptions périodiques par le TIMER. Consultez le fichier ''stdio.c'' pour
     120dé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
    116125
    117126== 2.5 Contrôleur de disque ==
    118127
    119 Le contrôleur de disque disponible dans SoCLib
     128Le contrôleur de disque disponible dans SoCLib...
    120129
    121130= 3. Architecture multi-processeurs générique =
    122131
    123132On 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.
     133On 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 ==
    124140
    125141
    126 = 4 Travail à réaliser =
    127142
    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.tgz
    135 }}}
    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 programme
    147 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'interruption
    151 (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 les
    156 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 composant
    159 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'''.
    160143
    161144= 4 Compte-rendu =