Changes between Version 52 and Version 53 of Doc-MIPS-Archi-Asm-kernel


Ignore:
Timestamp:
Nov 13, 2020, 8:01:27 PM (5 years ago)
Author:
franck
Comment:

--

Legend:

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

    v52 v53  
    167167
    168168
    169 = 5. Cause d'entrée et sortie du noyau du système d'exploitation
     169= 5. Cause d'entrée et de sortie du noyau du système d'exploitation
    170170
    171171
     
    177177 - et le signal RESET.
    178178
    179 Dans tous ces cas, le principe général consiste à dérouter le programme vers un code spécial (appelée noyau du système d'exploitation) qui s'exécute en mode système et à qui il faut transmettre les informations minimales lui permettant de traiter le problème.
     179Dans tous ces cas, le principe général consiste à dérouter le programme vers un code spécial (appelé noyau du système d'exploitation) qui s'exécute en mode ''kernel'' et à qui il faut transmettre les informations minimales lui permettant
     180de traiter le problème.
    180181
    181182
     
    183184
    184185
    185 Les exceptions sont des évènements "anormaux" détectés au moment de l'exécution des instructions. Ils sont le plus souvent liés à une erreur de programmation qui empêche l'exécution correcte de l'instruction en cours. La détection d'une exception entraîne l'arrêt immédiat de l'exécution de l'instruction fautive. Ainsi, on assure que l'instruction fautive ne modifie pas la valeur d'un registre visible ou de la mémoire. Les exceptions ne sont évidemment pas masquables, cela signifie que l'on ne peut pas interdire leur gestion. Il y a 7 types d'exception dans cette version du processeur MIPS32 :
    186 
    187  ADEL:: Adresse illégale en lecture : adresse non alignée ou se trouvant dans la partie système alors que le processeur est en mode utilisateur.
    188  
    189  ADES:: Adresse illégale en écriture : adresse non alignée ou accès à une donnée dans le partie système alors que le processeur est en mode utilisateur.
    190  
    191  DBE::  Data Bus Erreur : le système mémoire signale une erreur en activant le signal BERR à la suite d'un accès de donnée à une adresse qui n'a pas de case mémoire associée. On dit qu'elle n'est pas ''mappée''. Cette erreur est aussi nommée erreur de segmentation ('segmentation fault` en anglais).
    192  
    193  IBE::  Instruction Bus Erreur : le système mémoire signale une erreur en activant le signal BERR à l'occasion d'une lecture instruction. C'est le même problème que pour **DBE** mais cela concerne les instructions.
    194  
    195  OVF::  Dépassement de capacité : lors de l'exécution d'une instruction arithmétique (ADD ou ADDI), le résultat ne peut être représenté sur 32 bits. Par exemple, la somme de 2 nombres positifs donne un nombre négatif.
    196  
    197  RI::   OPCOD illégal : l'OPCOD ne correspond à aucune instruction connue, il s'agit probablement d'un branchement dans une zone mémoire ne contenant pas du code exécutable.
    198  
    199  CPU::  Coprocesseur inaccessible : tentative d'exécution d'une instruction privilégiée (`mtc0`, `mfc0`, `eret`) alors que le processeur est en mode utilisateur.
    200 
    201 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`. Après avoir identifié que la cause est une exception (en examinant le contenu du registre `C0_CAUSE`), le noyau se branche alors 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. Le processeur doit cependant transmettre au gestionnaire d'exceptions l'adresse de l'instruction fautive et indiquer dans le registre de cause le type d'exception détectée. Lorsqu’il détecte une exception, le matériel doit donc:
    202 
    203  - sauvegarder le registre `PC` (l'adresse de l'instruction fautive) dans le registre `C0_EPC` ;
    204  - passer en mode ''kernel'' et masquer les interruptions en mettant `1` dans le bit EXL de `C0_SR` ;
    205  - sauvegarder éventuellement l’adresse fautive dans `C0_BAR` ;
    206  - écrire le type de l'exception dans le registre `C0_CAUSE` ;
    207  - se brancher à l'adresse `0x80000180`.
     186Les exceptions sont des évènements « anormaux » détectés au moment de l'exécution des instructions. Ils sont le plus souvent liés à une erreur de programmation qui empêche l'exécution correcte de l'instruction en cours. La détection d'une exception entraîne l'arrêt immédiat de l'exécution de l'instruction fautive, afin que l'instruction fautive ne modifie pas la valeur d'un registre visible ou la mémoire. Les exceptions ne sont évidemment pas masquables, cela signifie que l'on ne peut pas interdire leur gestion. Il y a 7 types d'exception dans cette version du processeur MIPS32 :
     187
     188 ADEL:: Adresse illégale en lecture : adresse non alignée (comme un `lw` à une adresse non multiple de 4) ou alors une adresse se trouvant dans la partie ''kernel'' alors que le processeur est en mode ''user''.
     189 
     190 ADES:: Adresse illégale en écriture : adresse non alignée (comme un `sw` à une adresse non multiple de 4) ou alors un accès à une donnée dans la partie ''kernel'' alors que le processeur est en mode ''user''.
     191 
     192 DBE::  Data Bus Error : le système mémoire signale une erreur en activant le signal `BERR` (Bus ERRor) à la suite d'un accès de donnée à une adresse qui n'a pas de case mémoire associée. On dit qu'elle n'est pas ''mappée''. Cette erreur est aussi nommée erreur de segmentation ('segmentation fault` en anglais).
     193 
     194 IBE::  Instruction Bus Error : le système mémoire signale une erreur en activant le signal `BERR` à l'occasion d'une lecture instruction. C'est le même problème que pour `DBE` mais cela concerne les instructions.
     195 
     196 OVF::  Dépassement de capacité : lors de l'exécution d'une instruction arithmétique (`add` ou `addi`), le résultat ne peut être représenté sur 32 bits. Par exemple, la somme de 2 nombres positifs donne un nombre négatif.
     197 
     198 RI::   OPCOD illégal : l'`OPCOD` ne correspond à aucune instruction connue, il s'agit probablement d'un branchement dans une zone mémoire ne contenant pas du code exécutable.
     199 
     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
     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`.
     203Lorsque le processeur détecte une exception, il réalise les opérations suivantes :
     204 - sauvegarde du registre `PC` (l'adresse de l'instruction fautive) dans le registre `C0_EPC` ;
     205 - passage en mode ''kernel'' et masquage les interruptions en mettant `1` dans le bit EXL de `C0_SR` ;
     206 - sauvegarde éventuelle de l’adresse fautive dans `C0_BAR` ;   
     207 - écriture du type de l'exception dans le registre `C0_CAUSE` ;
     208 - branchement à l'adresse `0x80000180`.
     209
     210Après avoir identifié que la cause est une exception (en examinant le contenu du registre `C0_CAUSE`), le noyau se branche alors 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.
     211Le processeur doit cependant transmettre au gestionnaire d'exceptions l'adresse de l'instruction fautive et indiquer dans le registre de cause le type d'exception détectée.
     212
     213
    208214
    209215