Changes between Version 47 and Version 48 of Doc-MIPS-Archi-Asm-kernel
- Timestamp:
- Nov 13, 2020, 6:15:54 PM (5 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Doc-MIPS-Archi-Asm-kernel
v47 v48 12 12 Le MIPS supporte deux modes de fonctionnement utilisateur (''user'') et système (''kernel''). 13 13 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 permettrede contrôler l'état de fonctionnement du processeur. C'est dans ce mode que s'exécute le noyau du système d'exploitation.16 17 Ce document détaille les éléments de l'architecture du processeur et du langage d'assemblage spécifique au mode ''kernel''.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 les **''instructions protégées''** qui permettent 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. 16 17 Ce document détaille les éléments de l'architecture externe du processeur et du langage d'assemblage spécifique au mode ''kernel''. 18 18 19 19 … … 21 21 22 22 23 En mode ''kernel'', tous les registres sont accessibles, à la fois les registres non protégés et aussi des registres protégés. Pour rappel, les registres non protégés sont les GPR (`$0` à `$31`), le registre `PC`(accessible implicitement avec les instructions de branchement) et les registres `HI` et `LO`. Les registres protégés sont destinés au calcul alors que les **''registres protégés''** sont destinés au contrôle de l'état du processeur.23 En mode ''kernel'', tous les registres sont accessibles, à la fois les registres non protégés et aussi les registres protégés. Pour rappel, les registres non protégés sont les GPR (`$0` à `$31`), le registre `PC`(accessible implicitement avec les instructions de branchement) et les registres `HI` et `LO`. Les registres protégés sont destinés au calcul alors que les **''registres protégés''** sont destinés au contrôle de l'état du processeur. 24 24 25 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 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.28 29 Le registre ` c0_sr`::30 Le registre ` sr` de `c0` est le registre d'état (''Status Register'').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 `C0_` afin de ne pas les confondre avec les registres standards. 28 29 Le registre `C0_SR`:: 30 Le registre `SR` de `C0` est le registre d'état (''Status Register''). 31 31 Il contient en particulier le bit qui définit le mode d'exécution du processeur: 32 32 ''user'' ou ''kernel'', ainsi que les bits de masquage des interruptions.\\ 33 33 Ce registre a le numéro `$12`. 34 34 35 Le registre ` c0_cause`::36 Le registre ` cause` de `c0` est le registre de cause (''Cause Register'').35 Le registre `C0_CAUSE`:: 36 Le registre `CAUSE` de `C0` est le registre de cause (''Cause Register''). 37 37 En cas d'interruption, d'exception ou d'appel système, le programme en cours d'exécution 38 38 est dérouté vers le noyau du système d'exploitation. 39 Le contenu de ` c0_cause` contient un code qui définit la cause d'appel du noyau.\\39 Le contenu de `C0_CAUSE` contient un code qui définit la cause d'appel du noyau.\\ 40 40 Ce registre a le numéro `$13`. 41 41 42 Le registre ` c0_epc`::43 Le registre ` epc` de `c0 est le registre d'exception (''Exception Program Counter'').42 Le registre `C0_EPC`:: 43 Le registre `EPC` de `C0 est le registre d'exception (''Exception Program Counter''). 44 44 Il contient : (i) soit l'adresse de retour (PC + 4) en cas d'interruption, (ii) soit 45 45 l'adresse de l'instruction courante (`PC`) en cas d'exception ou d'appel système.\\ 46 46 Ce registre a le numéro `$14`. 47 47 48 Le registre ` c0_bar`::49 Le registre ` bar` de `c0` est le registre d'adresse illégale (''Bad Address Register'').48 Le registre `C0_BAR`:: 49 Le registre `BAR` de `C0` est le registre d'adresse illégale (''Bad Address Register''). 50 50 En cas d'exception de type ''adresse illégale'', il contient la valeur de l'adresse mal 51 51 formée. Une adresse est illégale, par exemple, si vous tentez une lecture de mot (`lw`) … … 54 54 Ce registre a le numéro `$8`. 55 55 56 Le registre ` c0_procid`::57 Le registre ` procid` est un registre en lecture seule contenant le numéro du processeur.56 Le registre `C0_PROCID`:: 57 Le registre `PROCID` de `C0` est un registre en lecture seule contenant le numéro du processeur. 58 58 Cet index « cablé » est utilisé par le noyau du système d’exploitation. Il n'a de sens que 59 59 pour gérer des architectures multiprocesseurs (multicore).\\ 60 60 Ce registre possède le numéro `$15`. 61 61 62 Le registre ` c0_count`::63 Le registre ` count` de `c0` est le registre en lecture seulement contenant62 Le registre `C0_COUNT`:: 63 Le registre `COUNT` de `C0` est le registre en lecture seulement contenant 64 64 le nombre de cycles exécutés depuis l’initialisation du processeur. \\ 65 65 Ce registre possède le numéro `$16`. 66 66 67 67 68 68 69 = 3. Adressage de la mémoire 69 70 … … 73 74 74 75 {{{ 75 bit n°31 de l'adresse = 0 partie non protégée utilisable dans tous les modes du processeur76 Bit n°31 de l'adresse = 0 partie non protégée utilisable dans tous les modes du processeur 76 77 destinée au programme de l'utilisateur 77 bit n°31 de l'adresse = 1 partie protégée utilisable seulement en mode kernel78 Bit n°31 de l'adresse = 1 partie protégée utilisable seulement en mode kernel 78 79 réservée au noyau du système d'exploitation 79 80 }}} 80 81 81 Quand le processeur est en mode utilisateur, si une instruction essaie d'accéder à la mémoire avec une adresse de la partie systèmealors le processeur part en exception, c'est-à-dire que le programme fautif est dérouté vers le noyau du système d'exploitation.82 Quand le processeur est en mode ''user'', si une instruction essaie d'accéder à la mémoire avec une adresse de la partie ''protégée'' alors le processeur part en exception, c'est-à-dire que le programme fautif est dérouté vers le noyau du système d'exploitation. 82 83 83 84 … … 98 99 99 100 `eret`:: \\ 100 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 dans le mode ''user''.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 102 102 103 || **instruction assembleur** || **comportement dans le processeur** || **Remarques** || … … 104 105 105 106 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 codée avec les bits 25 et 23 de l'instruction (ces deux bits sont dans le champs `RS`). Remarquez que ERETà deux codages.\\\\107 Elles utilisent toutes le format R avec le champ `OPCOD` à la valeur `COPRO` (c.-à-d. `0b010000`). L'instruction est alors codée avec les bits 25 et 23 de l'instruction (ces deux bits sont dans le champs `RS`). Remarquez que `eret` à deux codages.\\\\ 107 108 {{{#!html 108 109 <table border="1" cellspacing="0" cellpadding="0" align=left> … … 139 140 <tr> 140 141 <td align=center style="width:90px"><b>0</td> 141 <td align=center> MFC0</td>142 <td align=center> MTC0</td>142 <td align=center> <font>mfc0</font></td> 143 <td align=center> <font>mtc0</font></td> 143 144 </tr> 144 145 <tr> 145 146 <tr> 146 147 <td align=center style="width:90px"><b>1</td> 147 <td align=center COLSPAN="2"> ERET</td>148 <td align=center COLSPAN="2"> <font>eret</font></td> 148 149 </tr> 149 150 <tr></table>