Changes between Version 96 and Version 97 of SoclibCourseTp4


Ignore:
Timestamp:
Dec 11, 2013, 9:30:54 PM (11 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp4

    v96 v97  
    7777 
    7878Plutôt que d'accéder directement au registre STATUS du contrôleur TTY, l'appel système '''tty_getc_irq()'''
    79 teste la variable '''_tty_get_full''' rangée en mémoire pour savoir si un caractère est disponible. C'est la routine d'interruption (ISR) associée au terminal TTY qui se charge d'écrire le code ASCII du caractère dans le tampon  '''_tty_get_buf''', et de forcer à 1 la variable de synchronsation '''_tty_get_full''' pour signaler que le tampon est plein. Cette variable de synchronisation est remise à 0 par l'appel système ''tty_getc_irq()'' lorsque le caractère est transféré du tampon système '''tty_get_buf'''  vers le tampon mémoire défini par l'utilisateur.
    80 
    81 Une architecture peut contenir plusieurs processeurs et chaque processeur peut exécuter plusieurs tâches (plusieurs programmes utilisateurs) en pseudo-paralléliseme, par multiplexage temporel. Le GIET supporte au plus 8 processeurs, et au plus 4 tâches par processeur. Le GIET supporte donc au plus 32 tâches.
     79teste la variable '''_tty_get_full''' rangée en mémoire pour savoir si un caractère est disponible. C'est la routine d'interruption (ISR) associée au terminal TTY qui se charge d'écrire le code ASCII du caractère dans le tampon  '''_tty_get_buf''', et de forcer à 1 la variable de synchronsation '''_tty_get_full''' pour signaler que le tampon est plein. Cette variable de synchronisation est remise à 0 par l'appel système '''tty_getc_irq()''' lorsque le caractère est transféré du tampon système '''tty_get_buf'''  vers le tampon mémoire défini par l'utilisateur.
     80
     81Une architecture peut contenir plusieurs processeurs et chaque processeur peut exécuter plusieurs tâches (plusieurs programmes utilisateurs) en pseudo-paralléliseme, par multiplexage temporel. Le GIET supporte au plus 8 processeurs, et au plus 4 tâches par processeur, soit 32 tâches au maximum.
    8282
    8383Comme chaque tâche possède son propre terminal écran/clavier, Il peut exister jusque 32 terminaux indépendants, qui sont tous 
    8484contrôlés par le même contrôleur TTY : Chaque terminal possède donc son propre jeu de 4 registres, pour communiquer avec l'OS.
    85 On dit que le contrôleur TTY est un périohérique multi-canaux.
     85On dit que le contrôleur TTY est un périphérique multi-canaux.
    8686 
    8787Le GIET définit donc deux tableaux '''_tty_get_buf[32]''' et '''_tty_get_full[32]''', indexés par le numéro du terminal concerné.
     
    133133= 4. Logiciel embarqué =
    134134
    135 Le répertoire ''soft'' contient les sept fichiers '''app.ld''', '''sys.ld''', '''seg.ld''', '''config.h''', '''reset.s''', '''interp.c''', et '''Makefile''' permettant de générer
     135Le répertoire ''soft'' contient les sept fichiers '''app.ld''', '''sys.ld''', '''seg.ld''', '''config.h''', '''reset.s''', '''main.c''', et '''Makefile''', permettant de générer
    136136le logiciel embarqué.
    137137
    138138== 4.1 Code de boot ==
    139139
    140 Puisqu'on utilise des interruptions, le ''code de boot'' doit 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). Il doit également initialiser le composant ICU, pour démasquer les interruptions qu'on veut autoriser.
     140Puisqu'on utilise des interruptions, le ''code de boot'' défini dans le fichier '''soft/reset.s''' doit 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). Il doit également initialiser le composant ICU, pour démasquer les interruptions qu'on veut autoriser.
    141141
    142142'''Question''' : En ouvrant le fichier '''sys/irq_handler.c''', déterminez les nom des quatre ISRs associées aux composants TIMER, TTY,
     
    148148== 4.2 Activation du TIMER ==
    149149
    150 On va commencer par exécuter un programme très simple défini dans le fichier '''soft/timer.c''', qui se contente d'activer la génération d'interruptions périodiques par le TIMER. Consultez le fichier '''app/stdio.c'' pour déterminer quels sont les deux appels système qui permettent de définir la période et d'autoriser le TIMER à générer les interruptions périodiques.
    151 
    152 '''Question''' : modifiez le fichier '''timer.c''' pour que le TIMER génère des interruptions avec une période de 100000 cycles, compilez le logiciel embarqué, et lancez la simulation.
     150On va commencer par exécuter un programme très simple, qui se contente d'activer la génération d'interruptions périodiques par le TIMER. Consultez le fichier '''app/stdio.c'' pour déterminer quels sont les deux appels système qui permettent de définir la période et d'autoriser le TIMER à générer les interruptions périodiques.
     151
     152'''Question''' : modifiez le fichier '''main.c''' pour que le TIMER génère des interruptions avec une période de 500000 cycles, compilez le logiciel embarqué, et lancez la simulation.
    153153
    154154N'oubliez pas de modifier préalablement la variable d'environnement PATH de la fenêtre dans laquelle vous lancez le simulateur, en exécutant la commande:
     
    167167 * '''q''' : sortie de l'interprêteur par l'appel système exit()
    168168
    169 '''Question''' : Complétez le fichier '''main_0.c''' pour coder cet interprêteur de commandes en utilisant les appels système  '''tty_getc_irq()''' et  '''tty_puts()'''. Compilez  en utilisant le Makefile du répertoire soft, et exécutez ce programme interactif sur le simulateur.
     169'''Question''' : Complétez le fichier '''main.c''' pour coder cet interprêteur de commandes en utilisant les appels système  '''tty_getc_irq()''' et  '''tty_puts()'''. Compilez  en utilisant le Makefile du répertoire soft, et exécutez ce programme interactif sur le simulateur.
    170170
    171171== 4.4 Contrôleur IOC et contrôleur d'écran graphique ==
     
    181181'''Question''' : Quel est l'encombrement d'une image en nombre de blocs?
    182182
    183 '''Question''' : Ecrivez un nouveau programme main_1 dans un fichier '''main_1.c'''. Vous  utiliserez les appels système '''ioc_read()''' et '''ioc_completed()''' pour charger une image dans un tampon mémoire de 128*128 octets tab[128][128], déclaré dans la fonction main(). Dans quel segment sera rangéé ce tableau tab[128][128]?
    184 Utilisez l'appel système '''fb_write()''' pour afficher cette image sur l'écran graphique.
     183'''Question''' : Ecrivez un nouveau programme dans un fichier '''main_display.c'''. Vous  utiliserez les appels système '''ioc_read()''' et '''ioc_completed()''' pour charger une image dans un tampon mémoire de 128*128 octets tab[128][128], déclaré dans la fonction main_display(). Utilisez l'appel système '''fb_write()''' pour afficher cette image sur l'écran graphique.
     184
    185185N'oubliez pas de tester systématiquement la valeur du code de retour chaque fois que vous utilisez un appel système.
    186 Modifiez le Makefile pour utiliser main_1.c au lieu de main_0.c, compilez le logiciel embarqué, et exécutez-le sur le simulateur.
    187 
    188 '''Question''' : Complétez le fichier '''main_1.c''' pour encapsuler cette séquence chargement / affichage dans une boucle
    189 de façon à afficher successivement les images du fichier '''images.raw'''. On pourra utiliser l'appel système '''tty_getc_irq''' pour rendre interactif le passage à l'image suivante.
     186Modifiez le Makefile pour utiliser main_display.c au lieu de main.c, compilez le logiciel embarqué, et exécutez-le sur le simulateur.
     187
     188'''Question''' : Dans quel segment sera rangéé ce tableau tab[128][128]?
     189
     190'''Question''' : Complétez le fichier '''main_display.c''' pour encapsuler cette séquence chargement / affichage dans une boucle
     191de façon à afficher successivement les images du fichier '''images.raw'''. On pourra utiliser l'appel système '''tty_getc_irq()''' pour rendre interactif le passage à l'image suivante.
    190192
    191193= 5. Architecture multi-processeurs générique =