Changes between Version 26 and Version 27 of AS6-TME-B2


Ignore:
Timestamp:
Feb 16, 2022, 12:50:40 PM (3 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AS6-TME-B2

    v26 v27  
    165165{{{#!protected ------------------------------------------------------------------------------------
    166166''
    167 * Il faut écrire dans le registre `TIMER_RESETIRQ`
    168 ''
    169 }}}
    170 1. Est-ce que le registre `TIMER_VALUE` peut activer (on dit aussi lever) un signal d'interruption ?
    171 1. À quel moment doit-on initialiser le vecteur d'interruption ?
    172 1. En quoi consiste la liaison des interruptions (''interrupt binding'' en anglais) ?
    173 1. Expliquer le rôle des bits `UM`, `EXL` et `IE` du registre `C0_SR`.
    174 1. Comment le noyau sait-il que la cause de son invocation est une interruption ?
    175 1. Quelle instruction permet de sortir du noyau pour revenir dans le code interrompu ? et que fait-elle précisément ?
    176 1. Rappeler la différence entre un registre temporaire et un registre persistant.
    177 1. Pour qu'une IRQ soit effectivement prise en compte, il faut que le périphérique la lève et qu'elle ne soit pas masquée. Il y a plusieurs endroits où on peut masquer une IRQ, lesquels ?
     167* Il faut écrire n'importe quelle valeur dans le registre `TIMER_RESETIRQ`
     168''
     169}}}
     1701. Est-ce que le registre `TIMER_VALUE` peut activer (on dit aussi lever) un signal d'interruption ?{{{#!protected ------------------------------------------------------------------------------------
     171''
     172* Non, c'est seulement un compteur de cycles.
     173''
     174}}}
    1781751. À quelles adresses dans l'espace d'adressage sont placés les registres des 3 contrôleurs de périphériques de la plateforme et comment le kernel les connaît ?
    179176{{{#!protected ------------------------------------------------------------------------------------
     
    264261''
    265262  * Le MIPS est dans le mode kernel.
     263''
     264}}}
     2651. À quel moment doit-on initialiser le vecteur d'interruption ?
     266{{{#!protected ------------------------------------------------------------------------------------
     267''
     268  * Ici, c'est demandé par la fonction `kinit()`.
     269''
     270}}}
     2711. En quoi consiste la liaison des interruptions (''interrupt binding'' en anglais) ?
     272{{{#!protected ------------------------------------------------------------------------------------
     273''
     274  * C'est le fait de lier une IRQ de périphérique et une ISR, c'est fait par le vecteur d'interruption.
     275''
     276}}}
     2771. Comment le noyau sait-il que la cause de son invocation est une interruption ?
     278{{{#!protected ------------------------------------------------------------------------------------
     279''
     280  * Dans kentry, c'est en analysant le champ `XCODE` du registre `c0_cause`.
     281''
     282}}}
     2831. Quelle instruction permet de sortir du noyau pour revenir dans le code interrompu ? et que fait-elle précisément ?
     284{{{#!protected ------------------------------------------------------------------------------------
     285''
     286  * c'est l'instruction `eret` qui fait : `c0_sr.EXL` ← `0` et `PC` ←  `EPC`
     287''
     288}}}
     2891. Rappeler la différence entre un registre temporaire et un registre persistant.
     290{{{#!protected ------------------------------------------------------------------------------------
     291''
     292  * C'est lors d'un appel de fonction, les registres temporaires peuvent perdre leur valeur parce que la fonction appelée peut les utiliser sans être obligée de restaurer leur valeur.
     293  * A contrario, les registres persistants conservent leur valeur. C'est-à-dire que si une fonction appelée veut utiliser un registre persistant, elle doit sauver sa valeur à l'entrée de la fonction, pour la restaurer avant de revenir à la fonction appelante.
     294''
     295}}}
     2961. Pour qu'une IRQ soit effectivement prise en compte, il faut que le périphérique la lève et qu'elle ne soit pas masquée. Il y a plusieurs endroits où on peut masquer une IRQ, lesquels ?
     297{{{#!protected ------------------------------------------------------------------------------------
     298''
     299  * On peut parfois demander au composant qui produit l'IRQ de ne pas la produire, puis il y a l'ICU (en configurant le registre `ICU_MASK`) et le processeur lui-même (en configurant le registre `c0_sr`.
    266300''
    267301}}}
     
    460494Le but de ce TP est d'analyser, de modifier et d'utiliser le gestionnaire d'interruption.
    461495
    462 
    463  ||**Nous allons utiliser la même plateforme que la dernière fois, mais malheureusement celle-ci avait un bug matériel.\\Vous allez donc devoir prendre un nouveau simulateur [htdocs:files/almo1.x.gz almo1.x.gz].\\vous devez télécharger ce fichier, le dézipper et le placer dans le répertoire AS6/bin à la place du précédent.**
    464 
    465496La plateforme que nous allons utiliser contient :
    466497- un processeur
    467498- une mémoire multisegment pour le code et les données du noyau et de l'utilisateur.
    468499- une ROM pour le boot
    469 - un contrôleur multittys (4)
     500- un contrôleur MULTITTY
    470501- un timer
    471502- une icu