Changes between Version 47 and Version 48 of Doc-MIPS-Archi-Asm-kernel


Ignore:
Timestamp:
Nov 13, 2020, 6:15:54 PM (5 years ago)
Author:
franck
Comment:

--

Legend:

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

    v47 v48  
    1212Le MIPS supporte deux modes de fonctionnement utilisateur (''user'') et système (''kernel'').
    1313
    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.
    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
     17Ce document détaille les éléments de l'architecture externe du processeur et du langage d'assemblage spécifique au mode ''kernel''.
    1818
    1919
     
    2121
    2222
    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.
     23En 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.
    2424
    2525L'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.
    2626
    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'').
     27Ces 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'').
    3131   Il contient en particulier le bit qui définit le mode d'exécution du processeur:
    3232   ''user'' ou ''kernel'', ainsi que les bits de masquage des interruptions.\\
    3333   Ce registre a le numéro `$12`.
    3434
    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'').
    3737   En cas d'interruption, d'exception ou d'appel système, le programme en cours d'exécution
    3838   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.\\
    4040   Ce registre a le numéro `$13`.
    4141
    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'').
    4444   Il contient : (i) soit l'adresse de retour (PC + 4) en cas d'interruption, (ii) soit
    4545   l'adresse de l'instruction courante (`PC`) en cas d'exception ou d'appel système.\\
    4646   Ce registre a le numéro `$14`.
    4747
    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'').
    5050   En cas d'exception de type ''adresse illégale'', il contient la valeur de l'adresse mal
    5151   formée. Une adresse est illégale, par exemple,  si vous tentez une lecture de mot (`lw`)
     
    5454   Ce registre a le numéro `$8`.
    5555
    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.
    5858   Cet index « cablé » est utilisé par le noyau du système d’exploitation. Il n'a de sens que
    5959   pour gérer des architectures multiprocesseurs (multicore).\\
    6060   Ce registre possède le numéro `$15`.
    6161
    62  Le registre `c0_count`::
    63    Le registre `count` de `c0` est le registre en lecture seulement contenant
     62 Le registre `C0_COUNT`::
     63   Le registre `COUNT` de `C0` est le registre en lecture seulement contenant
    6464   le nombre de cycles exécutés depuis l’initialisation du processeur. \\
    6565   Ce registre possède le numéro `$16`.
    6666
    6767
     68
    6869= 3. Adressage de la mémoire
    6970
     
    7374
    7475{{{
    75 bit n°31 de l'adresse = 0       partie non protégée utilisable dans tous les modes du processeur
     76Bit n°31 de l'adresse = 0       partie non protégée utilisable dans tous les modes du processeur
    7677                                destinée au programme de l'utilisateur
    77 bit n°31 de l'adresse = 1       partie protégée utilisable seulement en mode kernel
     78Bit n°31 de l'adresse = 1       partie protégée utilisable seulement en mode kernel
    7879                                réservée au noyau du système d'exploitation
    7980}}}
    8081
    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ème alors le processeur part en exception, c'est-à-dire que le programme fautif est dérouté vers le noyau du système d'exploitation.
     82Quand 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.
    8283
    8384
     
    9899 
    99100 `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''.
    101102
    102103 || **instruction assembleur**  || **comportement dans le processeur**      || **Remarques** ||
     
    104105 
    105106 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.\\\\
    107108{{{#!html
    108109<table border="1" cellspacing="0" cellpadding="0" align=left>
     
    139140<tr>
    140141<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>
    143144</tr>
    144145<tr>
    145146<tr>
    146147<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>
    148149</tr>
    149150<tr></table>