Changes between Version 10 and Version 11 of Archi-1-TD10


Ignore:
Timestamp:
Nov 19, 2022, 7:02:41 PM (3 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Archi-1-TD10

    v10 v11  
    4242
    4343
    44 1. Le MIPS propose deux modes d'exécution, rappelez quels sont ces deux modes et à quoi ils servent? (''Nous l'avons dit dans le descriptif de la séance'').
    45 {{{#!protected ------------------------------------------------------------------------------------
    46 ''
    47 Cours 10 / slides 6 et 7
     441. Le MIPS propose deux modes d'exécution, rappelez quels sont ces deux modes et à quoi ils servent? (''Nous l'avons dit dans le descriptif de la séance''). (C10 S6+S7)
     45{{{#!protected ------------------------------------------------------------------------------------
     46''
    4847- Il y a le mode kernel et le mode user.
    4948- Le mode kernel est utilisé par le noyau alors que le mode user est utilisé par l'application
     
    5150''
    5251}}}
    53 1. Commencez par rappeler ce qu'est l'espace d'adressage du MIPS et dîtes ce que signifie «une adresse X est mappée dans l'espace d'adressage».\\Dîtes si une adresse `X` mappée dans l'espace d'adressage est toujours accessible (en lecture ou en écriture) quelque soit le mode d'exécution du MIPS.
    54 {{{#!protected ------------------------------------------------------------------------------------
    55 ''
    56 Cours 10 / slide 7
     521. Commencez par rappeler ce qu'est l'espace d'adressage du MIPS et dîtes ce que signifie «une adresse X est mappée dans l'espace d'adressage».\\Dîtes si une adresse `X` mappée dans l'espace d'adressage est toujours accessible (en lecture ou en écriture) quelque soit le mode d'exécution du MIPS. (C10 S7)
     53{{{#!protected ------------------------------------------------------------------------------------
     54''
    5755- L'espace d'adressage du MIPS, c'est l'ensemble des adresses que peut produire le MIPS, il y a 2^32^ adresses d'octets.
    5856- On dit qu'une adresse `X` est mappée dans l'espace d'adressage, si cette adresse 'X' est bien dans un segment d'adresses utilisables de l'espace d'adressage`. Autrement dit, le MIPS peut faire des lectures et des écritures à cette adresse, ou encore qu'il y a bien une case mémoire pour cette adresse `X`.
     
    6058''
    6159}}}
    62 1. Le MIPS propose des registres à usage général (GPR ''General Purpose Register'') pour les calculs ($0 à $31). Le MIPS propose un deuxième banc de registres à l'usage du système d'exploitation, ce sont les registres système (dans le coprocesseur 0).\\Comment sont-ils numérotés? Chaque registre porte un nom correspondant à son usage, quels sont ceux que vous connaissez: donner leur nom, leur numéro et leur rôle? Peut-on faire des calculs avec des registres? Quelles sont les instructions qui permettent de les manipuler?
    63 {{{#!protected ------------------------------------------------------------------------------------
    64 ''
    65 Cours 10 / slides 7, 8 et 9
    66 - Les registres système sont numérotés de $0 à $31, comme les registres GPR, ce qui peut induire une certaine confusion, parce qu'avec cette syntaxe, si on demande que trouve-t-on dans le registres `$14`? Si on ne précise pas qu'il s'agit du registre `$14` du coprocesseur 0, alors on ne peut pas répondre. C'est pour cette raison qu'il est préférable d'utiliser leur nom (`EPC` ou `c0_epc` pour `$14` par exemple ou alors `c0_$14`)
    67 - Nous avons vu 6
     601. Le MIPS propose des registres à usage général (GPR ''General Purpose Register'') pour les calculs ($0 à $31). Le MIPS propose un deuxième banc de registres à l'usage du système d'exploitation, ce sont les registres système (dans le coprocesseur 0).\\Comment sont-ils numérotés? Chaque registre porte un nom correspondant à son usage, quels sont ceux que vous connaissez: donner leur nom, leur numéro et leur rôle? Peut-on faire des calculs avec des registres? Quelles sont les instructions qui permettent de les manipuler? (C10 S5+S11)
     61{{{#!protected ------------------------------------------------------------------------------------
     62''
     63- Les registres système sont numérotés de $0 à $31, comme les registres GPR, ce qui peut induire une certaine confusion, parce qu'avec cette syntaxe, si on demande que trouve-t-on dans le registres `$14`? Si on ne précise pas qu'il s'agit du registre `$14` du coprocesseur 0, alors on ne peut pas répondre. C'est pour cette raison qu'il est préférable d'utiliser leur nom (`EPC` ou `c0_epc` pour `$14` par exemple ou alors `c0_$14`)\\\\
     64- Nous avons vu les 3 principaux
    6865   || `c0_sr`     || `$12` || contient essentiellement le mode d'exécution du MIPS et le bit d'autorisation des interruptions
    6966   || `c0_cause`  || `$13` || contient la cause d'appel du noyau
    7067   || `c0_epc`    || `$14` || contient l'adresse de l'instruction ayant provoqué l'appel du noyau ou l'adresse de l'instruction suivante
     68- Il y en a d'autres, dont certains seront utilisés plus tard
    7169   || `c0_bar`    || `$8 ` || contient l'adresse mal formée si la cause est une exception due à un accès non aligné (p.ex. lw a une adresse non multiple de 4)
    7270   || `c0_count`  || `$9 ` || contient le nombre de cycles depuis le démarrage du MIPS
     
    7674''
    7775}}}
    78 1. Le registre status est composé de plusieurs champs de bits qui ont chacun une fonction spécifique.\\Décrivez le contenu du registre status et le rôle des bits de l'octet 0 (seulement les bits vus en cours).
    79 {{{#!protected ------------------------------------------------------------------------------------
    80 ''
    81 Cours 10 / slides 10 et 11
     761. Le registre status est composé de plusieurs champs de bits qui ont chacun une fonction spécifique.\\Décrivez le contenu du registre status et le rôle des bits de l'octet 0 (seulement les bits vus en cours). (C10 S12+S13+S15)
     77{{{#!protected ------------------------------------------------------------------------------------
     78''
    8279 || 0|| IE  ||Interrupt Enable||0 → interruptions masquées\\1 → interruptions autorisées si ERL et EXL sont tous les deux à 0
    8380 || 1|| EXL ||EXception Level ||1 → MIPS en mode exception à l'entrée dans le kernel\\le MIPS est en mode kernel, interruptions masquées
    8481 || 2|| ERL ||ERror Level     ||1 → au démarrage du MIPS et certaines erreurs de la mémoire\\le MIPS est en mode kernel, interruptions masquées
    85  || 4|| UM  ||User Mode       ||0 → MIPS en mode kernel\\1 → MIPS en mode user si ERL et EXL sont tous les deux à 0
    86 ''
    87 }}}
    88 1. Le registre cause est contient la cause d'appel du kernel.\\Dites à quel endroit est stockée cette cause et donnez la signification des codes 0, 4 et 8
    89 {{{#!protected ------------------------------------------------------------------------------------
    90 ''
    91 Cours 10 / slide 12
     82 || 4|| UM  ||User Mode       ||0 → MIPS en mode kernel\\1 → MIPS en mode user, seulement si ERL et EXL sont tous les deux à 0
     83''
     84}}}
     851. Le registre cause est contient la cause d'appel du kernel.\\Dites à quel endroit est stockée cette cause et donnez la signification des codes 0, 4 et 8 (C10 S14+S15)
     86{{{#!protected ------------------------------------------------------------------------------------
     87''
    9288- Le champ `XCODE` qui contient le code de la cause d'entrée dans le noyau est codé sur 4 bits entre les bits 2 et 5.
    9389- Les valeurs les plus importantes sont 0 et 8 (interruption et syscall). Les autres valeurs sont des exceptions, c'est-à-dire des fautes faites par le programme.
     
    9894''
    9995}}}
    100 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`?
    101 {{{#!protected ------------------------------------------------------------------------------------
    102 ''
    103 Cours 10 / slide 13
     961. 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)
     97{{{#!protected ------------------------------------------------------------------------------------
     98''
    10499- Une exception, c'est une erreur du programme, telle qu'une division par 0, 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.
    105100- 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.
    106101''
    107102}}}
    108 1. Nous avons vu trois instructions utilisables **seulement** lorsque le MIPS est en mode kernel, lesquelles? Que font-elles?\\Est-ce que l'instruction `syscall` peut-être utilisée en mode user?
    109 {{{#!protected ------------------------------------------------------------------------------------
    110 ''
    111 Cours 10 / slide 9
     1031. Nous avons vu trois instructions utilisables **seulement** lorsque le MIPS est en mode kernel, lesquelles? Que font-elles?\\Est-ce que l'instruction `syscall` peut-être utilisée en mode user? (C10 S11)
     104{{{#!protected ------------------------------------------------------------------------------------
     105''
    112106- Les trois instructions sont
    113107
     
    120114''
    121115}}}
    122 1. Quelle est l'adresse d'entrée dans le noyau?
    123 {{{#!protected ------------------------------------------------------------------------------------
    124 ''
    125 Cours 10 / slide 13
    126 - C'est `0x80000180`. Il n'y a qu'une adresse pour toutes les causes `syscall`, exception et interruption.
    127 - (slides 16 et 17) Il y a aussi l'adresse de la fonction `kinit()` qui est la fonction appelée par le code de boot (à l'adresse `0xBFC00000`) pour entrer dans le noyau.
    128 ''
    129 }}}
    130 1. Que se passe-t-il quand le MIPS entre dans le noyau, lors de l'exécution de l'instruction `syscall`?
    131 {{{#!protected ------------------------------------------------------------------------------------
    132 ''
    133 Cours 10 / slide 13
     1161. Quelle est l'adresse d'entrée dans le noyau au démarrage et après ? (C10 S15 S20)
     117{{{#!protected ------------------------------------------------------------------------------------
     118''
     119- Au démarrage, le boot saute à l'adresse de la fonction `kinit()` pour entrer dans le noyau.
     120- En dehors du démarrage, c'est `0x80000180`. Il n'y a qu'une adresse pour toutes les causes `syscall`, exception et interruption.
     121''
     122}}}
     1231. Que se passe-t-il quand le MIPS entre dans le noyau, lors de l'exécution de l'instruction `syscall`? (C10 S15)
     124{{{#!protected ------------------------------------------------------------------------------------
     125''
    134126- L'instruction `syscall` induit beaucoup d'opérations élémentaires dans le MIPS:
    135127  - `EPC` ← `PC` (adresse de l'instruction `syscall`)
     
    139131''
    140132}}}
    141 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.
    142 {{{#!protected ------------------------------------------------------------------------------------
    143 ''
    144 Cours 10 / slide 13\\
     1331. 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)
     134{{{#!protected ------------------------------------------------------------------------------------
     135''
    145136- C'est l'instruction `eret` qui permet de sortir du noyau. C'est la seule instruction permettant de sortir du noyau.
    146137  - `PC` ← `EPC`
     
    161152
    162153
    163 1. Comment imposer le placement d'adresse d'une fonction ou d'une variable en mémoire?
    164 {{{#!protected ------------------------------------------------------------------------------------
    165 ''
    166 Cours 9 / slide 24  et Cours 10 / slides 64 et 65
     1541. Comment imposer le placement d'adresse d'une fonction ou d'une variable en mémoire? (C9 S18+S22+S23 C10 annexe S6+S8)
     155{{{#!protected ------------------------------------------------------------------------------------
     156''
    167157- C'est l'éditeur de lien qui est en charge du placement en mémoire du code et des données, et c'est dans le fichier ldscript `kernel.ld` ou `user.ld` que le programmeur peut imposer ses choix.
    168158- Pour placer une fonction à une place, la méthode que vous avez vu consiste