Changes between Version 10 and Version 11 of Archi-1-TD10
- Timestamp:
- Nov 19, 2022, 7:02:41 PM (3 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Archi-1-TD10
v10 v11 42 42 43 43 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 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''). (C10 S6+S7) 45 {{{#!protected ------------------------------------------------------------------------------------ 46 '' 48 47 - Il y a le mode kernel et le mode user. 49 48 - Le mode kernel est utilisé par le noyau alors que le mode user est utilisé par l'application … … 51 50 '' 52 51 }}} 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 52 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. (C10 S7) 53 {{{#!protected ------------------------------------------------------------------------------------ 54 '' 57 55 - 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. 58 56 - 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`. … … 60 58 '' 61 59 }}} 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 60 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? (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 68 65 || `c0_sr` || `$12` || contient essentiellement le mode d'exécution du MIPS et le bit d'autorisation des interruptions 69 66 || `c0_cause` || `$13` || contient la cause d'appel du noyau 70 67 || `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 71 69 || `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) 72 70 || `c0_count` || `$9 ` || contient le nombre de cycles depuis le démarrage du MIPS … … 76 74 '' 77 75 }}} 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 76 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). (C10 S12+S13+S15) 77 {{{#!protected ------------------------------------------------------------------------------------ 78 '' 82 79 || 0|| IE ||Interrupt Enable||0 → interruptions masquées\\1 → interruptions autorisées si ERL et EXL sont tous les deux à 0 83 80 || 1|| EXL ||EXception Level ||1 → MIPS en mode exception à l'entrée dans le kernel\\le MIPS est en mode kernel, interruptions masquées 84 81 || 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 }}} 85 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 (C10 S14+S15) 86 {{{#!protected ------------------------------------------------------------------------------------ 87 '' 92 88 - 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. 93 89 - 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. … … 98 94 '' 99 95 }}} 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 96 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) 97 {{{#!protected ------------------------------------------------------------------------------------ 98 '' 104 99 - 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. 105 100 - 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. 106 101 '' 107 102 }}} 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 103 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? (C10 S11) 104 {{{#!protected ------------------------------------------------------------------------------------ 105 '' 112 106 - Les trois instructions sont 113 107 … … 120 114 '' 121 115 }}} 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 116 1. 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 }}} 123 1. 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 '' 134 126 - L'instruction `syscall` induit beaucoup d'opérations élémentaires dans le MIPS: 135 127 - `EPC` ← `PC` (adresse de l'instruction `syscall`) … … 139 131 '' 140 132 }}} 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\\ 133 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) 134 {{{#!protected ------------------------------------------------------------------------------------ 135 '' 145 136 - C'est l'instruction `eret` qui permet de sortir du noyau. C'est la seule instruction permettant de sortir du noyau. 146 137 - `PC` ← `EPC` … … 161 152 162 153 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 154 1. 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 '' 167 157 - 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. 168 158 - Pour placer une fonction à une place, la méthode que vous avez vu consiste