Changes between Version 26 and Version 27 of Archi-1-TD10


Ignore:
Timestamp:
Nov 15, 2023, 4:40:17 PM (19 months ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Archi-1-TD10

    v26 v27  
    119119''
    120120}}}
    121 1. Le registre `C0_EPC` est un registre 32 bits qui contient une adresse. Vous devriez l'avoir décrit dans la question 2.\\Expliquez pourquoi, dans le cas d'une exception, ce doit être l'adresse de l'instruction qui provoque une exception qui doit être stockée dans `C0_EPC`? (C10 S15)
    122 {{{#!protected ------------------------------------------------------------------------------------
    123 ''
    124 - Une exception, c'est une erreur du programme, telle que la lecture d'un mot à une adresse non mappée, une lecture non alignée ou une instruction illégale. Il est important que le gestionnaire d'exception sache quelle est l'instruction fautive. C'est pour cette raison que le registre EPC contient l'adresse de l'instruction fautive. Le gestionnaire pourra lire l'instruction et éventuellement corriger le problème.
    125 - A titre indicatif, ce n'est pas la question, mais pour les syscall, c'est aussi l'adresse de l'instruction `syscall` qui est stockée dans `C0_EPC`, or pour le retour de `syscall`, on souhaite aller à l'instruction suivante. Il faut donc incrémenter la valeur de `C0_EPC` de 4 (les instructions font 4 octets) pour connaître l'adresse de retour.
     1211. Le registre `c0_epc` (`$14`du coprocesseur `0`) est un registre 32 bits qui contient une adresse. Vous devriez l'avoir décrit dans la question 2.\\Expliquez pourquoi, dans le cas d'une exception, ce doit être l'adresse de l'instruction qui provoque une exception qui doit être stockée dans `c0_epc`? (C10 S15)
     122{{{#!protected ------------------------------------------------------------------------------------
     123''
     124- Une exception, c'est dû à une erreur du programme, telle que la lecture d'un mot à une adresse non mappée, une lecture non alignée ou une instruction illégale. Il est important que le gestionnaire d'exception sache quelle est l'instruction fautive. C'est pour cette raison que le registre `c0_epc` contient l'adresse de l'instruction fautive. Le gestionnaire d'exceptions dans le noyau pourra lire l'instruction et éventuellement corriger le problème.
     125- A titre indicatif, ce n'est pas la question, mais pour les `syscall`, c'est aussi l'adresse de l'instruction `syscall` qui est stockée dans `c0_epc`, or pour le retour de `syscall`, on souhaite aller à l'instruction suivante. Il faut donc incrémenter la valeur de `c0_epc` de 4 (les instructions font 4 octets) pour connaître la vraie adresse de retour du `syscall`.
    126126''
    127127}}}
     
    138138''
    139139}}}
    140 1. Quelle est l'adresse d'entrée dans le noyau au démarrage et après ? (C10 S15 S20)
     1401. Quelle est l'adresse d'entrée dans le noyau au démarrage (à la sortie du code de boot) et après (depuis l'application) ? (C10 S15 S20)
    141141{{{#!protected ------------------------------------------------------------------------------------
    142142''
    143143- Au démarrage, le boot saute à l'adresse de la fonction `kinit()` pour entrer dans le noyau.
    144 - En dehors du démarrage, c'est `0x80000180`. Il n'y a qu'une adresse pour toutes les causes `syscall`, exception et interruption.
    145 ''
    146 }}}
    147 1. Que se passe-t-il quand le MIPS entre dans le noyau, lors de l'exécution de l'instruction `syscall`? (C10 S15)
    148 {{{#!protected ------------------------------------------------------------------------------------
    149 ''
    150 - L'instruction `syscall` induit beaucoup d'opérations élémentaires dans le MIPS:
    151   - `EPC` ← `PC` (adresse de l'instruction `syscall`)
    152   - `c0_SR.EXL` ← `1`  (ainsi les bits `c0_SR.UM` et `c0_SR.IE` ne sont plus utilisés)
    153   - `c0_cause.XCODE` ← `8`
    154   - `PC` ← `0x80000180`
    155 ''
    156 }}}
    157 1. Quelle instruction utilise-t-on pour sortir du noyau et entrer dans l'application ? Dîtes précisément ce que fait cette instruction dans le MIPS. (C10 S15)
    158 {{{#!protected ------------------------------------------------------------------------------------
    159 ''
    160 - C'est l'instruction `eret` qui permet de sortir du noyau. C'est la seule instruction permettant de sortir du noyau.
    161   - `PC` ← `EPC`
    162   - `c0_SR.EXL` ← `0` (ainsi les bits `c0_SR.UM` et `c0_SR.IE` sont à nouveau utilisés)
     144- En dehors du démarrage, c'est `0x80000180`. Il n'y a qu'une adresse pour toutes les causes `syscall`, exceptions et interruptions.
     145''
     146}}}
     1471. Que se passe-t-il lorsqu'on entre dans le noyau après de l'exécution de l'instruction `syscall`? (C10 S15)
     148{{{#!protected ------------------------------------------------------------------------------------
     149''
     150- L'instruction `syscall` induit 4 opérations élémentaires dans le MIPS:
     151  - `c0_epc` ← `PC` (sauvegarde dans `c0_epc` adresse de l'instruction `syscall`)
     152  - `c0_sr.EXL` ← `1`  (ainsi les bits `c0_sr.UM` et `c0_sr.IE` ne sont plus utilisés)
     153  - `c0_cause.XCODE` ← `8` (c'est la cause `syscall`)
     154  - `PC` ← `0x80000180` (c'est l'adresse d'entrée dans le noyau)
     155- Ces 4 opérations élémentaires sont réalisées par l'instruction `syscall` !
     156''
     157}}}
     1581. Quelle instruction utilise-t-on pour sortir du noyau afin d'entrer dans l'application ?\\Dîtes précisément ce que fait cette instruction dans le MIPS. (C10 S15)
     159{{{#!protected ------------------------------------------------------------------------------------
     160''
     161- C'est l'instruction `eret` qui permet de sortir du noyau.\\**C'est la seule instruction permettant de sortir du noyau.**
     162  - `PC` ← `c0_epc` (c'est ''l'équivalent'' du `jr $31` pour sortir d'une fonction)
     163  - `c0_sr.EXL` ← `0` (ainsi les bits `c0_sr.UM` et `c0_sr.IE` sont à nouveau utilisés)
     164- Ces 2 opérations élémentaires sont réalisées par l'instruction `eret` !
    163165''
    164166}}}