Changes between Version 54 and Version 55 of Doc-MIPS-Archi-Asm-kernel
- Timestamp:
- Nov 14, 2020, 5:13:10 PM (4 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Doc-MIPS-Archi-Asm-kernel
v54 v55 89 89 90 90 La version du MIPS32 que nous utilisons possède une cinquantaine d'instructions, il y a les instructions standards utilisables quel que soit le mode d'exécution du processeur et il y a les instructions protégées qui ne sont utilisables qu'en mode ''kernel''. Les instructions standards sont présentées dans le document sur [htdocs:cours/doc_MIPS32.pdf l'architecture et l'assembleur en mode user]. Ce sont les instructions arithmétiques/logiques entre registres, les instructions de branchement, les instructions de lecture et écriture mémoire et l'instruction `syscall`. 91 Nous utilisons 3 instructions protégées (utilisables seulement en mode ''kernel''): `mtc0`, `mfc0` et `eret`.91 Nous utilisons 3 instructions protégées, utilisables donc seulement en mode ''kernel'' : `mtc0`, `mfc0` et `eret`. 92 92 93 93 `mtc0` et `mfc0`:: \\ 94 signifient respectivement ''Move-To-Coprocessor-0'' et ''Move-From-Coprocessor-0''. Comme leur nom l'indique, elles permettent de déplacer le contenu des registres entre les bancs (GPR et Copro).94 Elles signifient respectivement ''Move-To-Coprocessor-0'' et ''Move-From-Coprocessor-0''. Comme leur nom l'indique, elles permettent de déplacer le contenu des registres entre les bancs (GPR et Copro). 95 95 96 96 || **instruction assembleur** || **comportement dans le processeur** || **Remarques** || … … 99 99 100 100 `eret`:: \\ 101 signifie ''Exception-RETurn'', c'est-à-dire ''retour d'une exception''. Nous allons voir en détail ce que cela signifie dans la section **5**. Pour le moment, comprenez que c'est l'unique instruction permettant de sortir du mode ''kernel'' pour entrer ou retourner dans le mode ''user''.101 Elle signifie ''Exception-RETurn'', c'est-à-dire ''retour d'une exception''. Nous allons voir en détail ce que cela signifie dans la section **5**. Pour le moment, comprenez que c'est l'unique instruction permettant de sortir du mode ''kernel'' pour entrer ou retourner dans le mode ''user''. 102 102 103 103 || **instruction assembleur** || **comportement dans le processeur** || **Remarques** || 104 || **eret** || `PC` ← `CO_EPC`\\`C0_SR.EXL` ← `0` || copie le contenu du registre `C0_EPC` (`C0_$14`)\\dans le registre `PC` et met `0` dans le bit `EXL`\\du registre `C0_SR` (`C0_$12`) ||104 || **`eret`** || `PC` ← `CO_EPC`\\`C0_SR.EXL` ← `0` || copie le registre `C0_EPC` (`C0_$14`)\\dans le registre `PC` et met `0` dans le bit `EXL`\\ du registre `C0_SR` (bit n°1 de `C0_$12` <— `0`) || 105 105 106 106 Codage des instructions protégées:: \\ … … 152 152 153 153 || **instruction** || || **comportement** || || **commentaire** || 154 || `mtc0 RT, RD` || ||`C0_RD` ← `RT` || ||Recopie le contenu du registre GPR n°**RT**\\dans le registre du coprocesseur 0 n°**RD**||155 || `mfc0 RT, RD` || ||`RT` ← `C0_RD` || ||Recopie le contenu du registre du coprocesseur 0 n°**RD**\\dans le registre GPR n°**RT**||154 ||**`mtc0 RT, RD`** || ||`C0_RD` ← `RT` || ||Recopie le contenu du registre GPR n°**`RT`**\\dans le registre n°**`RD`** du coprocesseur 0 || 155 ||**`mfc0 RT, RD`** || ||`RT` ← `C0_RD` || ||Recopie le contenu du registre n°**`RD`**du coprocesseur 0\\dans le registre GPR n°**`RT`**|| 156 156 157 157 **Par exemple:**\\ … … 200 200 CPU:: Coprocesseur inaccessible : tentative d'exécution d'une instruction privilégiée (`mtc0`, `mfc0`, `eret`) alors que le processeur est en mode ''user''. 201 201 202 Dans tous les cas, le processeur doit passer en mode ''kernel'' et se brancher au noyau du système d'exploitation implanté à l'adresse `0x80000180`. De manière plus détaillée, lorsque le processeur détecte une exception, il réalise les opérations suivantes (le fonctionnement des registres de cause (`C0_CAUSE`) et de status (`C0_SR`) est détaillé dans les section 6. et 7.):202 Dans tous les cas, le processeur doit passer en mode ''kernel'' et se brancher au noyau du système d'exploitation implanté à l'adresse `0x80000180`. De manière plus détaillée, lorsque le processeur détecte une exception, il réalise les opérations suivantes : 203 203 - sauvegarde du registre `PC` (l'adresse de l'instruction fautive) dans le registre `C0_EPC` ; 204 204 - passage en mode ''kernel'' et masquage les interruptions en mettant `1` dans le bit EXL de `C0_SR` ; … … 207 207 - branchement à l'adresse `0x80000180`. 208 208 209 Le fonctionnement des registres de cause (`C0_CAUSE`) et de status (`C0_SR`) est détaillé dans les sections 6. et 7. de ce document. 209 210 Pour information, après avoir identifié que la cause d'entrée est une exception (en examinant le contenu du registre `C0_CAUSE`), le noyau se branche au gestionnaire d’exception. Ici, toutes les exceptions sont fatales, il n'y a pas de reprise de l'exécution de l'application contenant l'instruction fautive. 210 211