Changes between Version 46 and Version 47 of Archi-1-TP10
- Timestamp:
- Jan 3, 2021, 10:38:37 AM (4 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Archi-1-TP10
v46 v47 83 83 ''''''''''''''' 84 84 }}} 85 1. Commencez par rappeler ce qu'est l'espace d'adressage du MIPS et dîtes ce que veut dire qu'une adresse X mappée en mémoire.Dîtes si une adresse X mappée en mémoire est toujours accessible (en lecture ou en écriture) quelque soit le mode d'exécution du MIPS.85 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 en mémoire ».\\Dîtes si une adresse X mappée en mémoire est toujours accessible (en lecture ou en écriture) quelque soit le mode d'exécution du MIPS. 86 86 {{{#!protected ------------------------------------------------------------------------------------ 87 87 ''''''''''''''' 88 88 - L'espace d'adressage du MIPS, c'est l'ensemble des adresses que peut produire le MIPS 89 89 - On dit qu'une adresse est mappée en mémoire, s'il y a bien une case mémoire pour cette adresse. 90 - Non X n'est pas toujours accessible, si X est < `0x80000000` elle est bien accessible quelque-soit le mode d'exécution du MIPS, mais si X >=`0x80000000` alors X n'est accessible que si le MIPS est en mode kernel.91 ''''''''''''''' 92 }}} 93 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 . 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?90 - Non X n'est pas toujours accessible, si X<`0x80000000` elle est bien accessible quelque-soit le mode d'exécution du MIPS, mais si X>=`0x80000000` alors X n'est accessible que si le MIPS est en mode kernel. 91 ''''''''''''''' 92 }}} 93 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 (dit du 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? 94 94 {{{#!protected ------------------------------------------------------------------------------------ 95 95 ''''''''''''''' … … 106 106 ''''''''''''''' 107 107 }}} 108 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 ceux vuen cours).108 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). 109 109 {{{#!protected ------------------------------------------------------------------------------------ 110 110 ''''''''''''''' … … 115 115 ''''''''''''''' 116 116 }}} 117 1. Le registre cause est contient la cause d'appel du kernel. 117 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 118 118 {{{#!protected ------------------------------------------------------------------------------------ 119 119 ''''''''''''''' … … 126 126 ''''''''''''''' 127 127 }}} 128 1. Le registre ` EPC` est un registre 32 bits qui contient une adresse. Vous devriez l'avoir décrit dans la question 2, mais expliquez pourquoi ce doit être l'adresse de l'instruction qui provoque une exception qui doit être stockée dans `EPC`?128 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 ce doit être l'adresse de l'instruction qui provoque une exception qui doit être stockée dans `C0_EPC`? 129 129 {{{#!protected ------------------------------------------------------------------------------------ 130 130 ''''''''''''''' 131 131 - 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 EPC contient l'adresse de l'instruction fautive. Le gestionnaire pourra lire l'instruction et éventuellement corriger le problème. 132 - A titre indicatif, ce n'est pas question, mais pour les syscall, c'est aussi l'adresse de l'instruction syscall, or pour le retour du syscall, on souhaite aller à l'instruction suivante. Il faut donc incrémenter la valeur de `EPC` de 4 (les instructions font 4 octets) pour connaître l'adresse de retour.133 ''''''''''''''' 134 }}} 135 1. Nous avons vu trois instructions ne sont pas utilisable lorsque le MIPS est en mode kernel, lesquelles? Que font-elles? Est-ce que`syscall` peut-être utilisée en mode user?132 - 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. 133 ''''''''''''''' 134 }}} 135 1. Nous avons vu trois instructions ne sont pas utilisable lorsque le MIPS est en mode kernel, lesquelles? Que font-elles?\\Est-ce que l'instruction `syscall` peut-être utilisée en mode user? 136 136 {{{#!protected ------------------------------------------------------------------------------------ 137 137 ''''''''''''''' … … 141 141 || `mfc0 $GPR, $C0` || `M`ove `F`rom `C`oprocessor `0` || `$GPR` ← COPRO_0(`$C0`) 142 142 || `eret` || `E`xpection `RET`urn || `PC` ← `EPC` ; `c0_sr.EXL` ← `0` 143 - Bien sûr que `syscall` peut être utilisé en mode user, puisque c'est comme ça qu'on entre dans le kernel .143 - Bien sûr que `syscall` peut être utilisé en mode user, puisque c'est comme ça qu'on entre dans le kernel pour les demandes de services. 144 144 ''''''''''''''' 145 145 }}}