14 | | - Dans le mode ''user'', certaines régions de la mémoire et certains registres du processeur sont protégés et donc inaccessibles. C'est dans ce mode que s'exécute les applications. |
15 | | - Dans le mode ''kernel'', toutes les ressources sont accessibles, c'est-à-dire toute la mémoire et tous les registres. Dans ce mode, toutes les instructions sont autorisées, à la fois les instructions standards (`add`, `or`, `lw`, `mul`, etc.), mais aussi des **''instructions privilégiées''** qui vont permettre de contrôler l'état de fonctionnement du processeur. C'est dans ce mode que s'exécute le noyau du système d'exploitation. |
| 14 | - Dans le mode ''user'', certaines régions de la mémoire et certains registres du processeur sont protégés et donc inaccessibles. C'est dans ce mode que s'exécute les applications. \\\\ |
| 15 | - Dans le mode ''kernel'', toutes les ressources sont accessibles, c'est-à-dire toute la mémoire et tous les registres. Dans ce mode, toutes les instructions sont autorisées, à la fois les instructions standards (`add`, `or`, `lw`, `mul`, etc.), mais aussi des **''instructions protégées''** qui vont permettre de contrôler l'état de fonctionnement du processeur. C'est dans ce mode que s'exécute le noyau du système d'exploitation. |
25 | | L'architecture du MIPS32 définit 32 registres protégés, numérotés de `$0` à `$31`, c'est-à-dire comme les registres GPR mais ils ont des instructions d'accès spécifiques. En effet, ces registres protégés ne sont accessibles que par les instructions privilégiées `mtc0` et `mfc0`. |
26 | | Ces instruction ne utilisables qu'en mode ''kernel''. `mtc0` et `mfc0` signifient respectivement ''Move-To-Coprocessor-0'' et ''Move-From-Coprocessor-0''. |
27 | | |
28 | | Ces registres appartiennent au "coprocesseur système" n°0 (appélé aussi `c0` pour ''Coprocessor 0''). Dans cette version du processeur MIPS32, il y en a 6. Ils sont tous utilisés par le système d’exploitation pour la gestion des interruptions, des exceptions et des appels système. |
| 25 | L'architecture du MIPS32 définit 32 registres protégés, numérotés de `$0` à `$31`, c'est-à-dire comme les registres GPR mais ils ont des instructions d'accès spécifiques. En effet, ces registres protégés ne sont accessibles que par des instructions protégées présentées dans la section 4. |
| 26 | |
| 27 | Ces registres appartiennent au "coprocesseur système" n°0 (appélé aussi `c0` pour ''Coprocessor 0''). Dans cette version du processeur MIPS32, il y en a 6. Ils sont tous utilisés par le système d’exploitation pour la gestion des interruptions, des exceptions et des appels système. Dans ce document, nous ferons précéder le numéro du registre protégé par `cO_` afin de lever l'ambiguïtés. |
68 | | Comportement des instructions `mtc0`et `mfc0`:: |
69 | | |
70 | | || **instruction assembleur** || **comportement dans le processeur** || **Remarques** || |
71 | | ||**`mtc0 $gpr, $c0`** || Copro. 0 (`$c0`) ← GPR (`$gpr`) || `$c0 ` = `$8`, `$12`, `$13`, `$14`, `$15` ou `$16`\\`$gpr` = `$0` ... `$31` || |
72 | | ||**`mfc0 $gpr, $c0`** || GPR (`$gpr`) ← Copro. 0 (`$c0`) || `$c0` = `$8`, `$12`, `$13`, `$14`, `$15` ou `$16`\\`$gpr ` = `$0` ... `$31` || |
73 | | |
74 | | |
97 | | 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 (ou privilégié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]. Elles contiennent les instructions arithmétiques/logiques entre registres, les instructions de branchement, les instructions de lecture et écriture mémoire et l'instruction `syscall`. Cette section décrit les instructions protégées. |
98 | | |
99 | | Les instructions protégées utilise le format R:: \\ |
| 89 | 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`. |
| 90 | La présente section décrit les instructions protégées (utilisables seulement en mode ''kernel''). Nous en utilisons 3 : `mtc0`, `mfc0` et `eret`. |
| 91 | |
| 92 | `mtc0` et `mfc0`:: \\ |
| 93 | 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 | |
| 95 | || **instruction assembleur** || **comportement dans le processeur** || **Remarques** || |
| 96 | ||**`mtc0 $GPR, $C0`** || COPRO. 0 (`$C0`) ← GPR (`$GPR`) || `$C0 ` = `$8`, `$12`, `$13`, `$14`, `$15` OU `$16`\\`$GPR` = `$0` ... `$31` || |
| 97 | ||**`mfc0 $GPR, $C0`** || GPR (`$GPR`) ← COPRO. 0 (`$C0`) || `$C0` = `$8`, `$12`, `$13`, `$14`, `$15` OU `$16`\\`$GPR ` = `$0` ... `$31` || |
| 98 | |
| 99 | `eret`:: \\ |
| 100 | signifie ''Exception-RETurn'', c'est-à-dire ''retour d'une exception''. Nous allons voir en détail dans la section **5.** ce que cela signifie. Pour le moment, comprenez que c'est l'unique instruction permettant de sortir du mode ''kernel'' pour entrer dans le mode ''user''. |
| 101 | |
| 102 | || **instruction assembleur** || **comportement dans le processeur** || **Remarques** || |
| 103 | ||**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 | |
| 105 | Codage des instructions protégées:: \\ |
| 106 | Elles utilisent toutes le format R avec le champ `OPCOD` à la valeur `COPRO` (c.-à-d. `0b010000`). L'instruction est alors coder avec les bits 25 et 23 de l'instruction (ces deux bits sont dans le champs RS). Remarquez que ERET à deux codages.\\\\ |