Changes between Version 54 and Version 55 of Doc-MIPS-Archi-Asm-kernel


Ignore:
Timestamp:
Nov 14, 2020, 5:13:10 PM (4 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Doc-MIPS-Archi-Asm-kernel

    v54 v55  
    8989
    9090La 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`. 
     91Nous utilisons 3 instructions protégées, utilisables donc seulement en mode ''kernel'' : `mtc0`, `mfc0` et `eret`. 
    9292
    9393 `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).
    9595
    9696 || **instruction assembleur**  || **comportement dans le processeur**      || **Remarques** ||
     
    9999 
    100100 `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''.
    102102
    103103 || **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`) ||
    105105 
    106106 Codage des instructions protégées:: \\
     
    152152
    153153 || **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`**||
    156156
    157157 **Par exemple:**\\
     
    200200 CPU::  Coprocesseur inaccessible : tentative d'exécution d'une instruction privilégiée (`mtc0`, `mfc0`, `eret`) alors que le processeur est en mode ''user''.
    201201
    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.) :
     202Dans 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 :
    203203 - sauvegarde du registre `PC` (l'adresse de l'instruction fautive) dans le registre `C0_EPC` ;
    204204 - passage en mode ''kernel'' et masquage les interruptions en mettant `1` dans le bit EXL de `C0_SR` ;
     
    207207 - branchement à l'adresse `0x80000180`.
    208208
     209Le fonctionnement des registres de cause (`C0_CAUSE`) et de status (`C0_SR`) est détaillé dans les sections 6. et 7. de ce document.
    209210Pour 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.
    210211