Changes between Version 56 and Version 57 of Doc-MIPS-Archi-Asm-kernel


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

--

Legend:

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

    v56 v57  
    2121
    2222
    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.
     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.
     
    233233
    234234Le processeur doit alors passer alors en mode système et se brancher au noyau du système d'exploitation.
    235 De manière plus détaillée, lorsque le processeur détecte une exception, il réalise les opérations suivantes :
     235De manière plus détaillée, lorsque le processeur reçoit une interruption (c'est-à-dire qu'une de ces lignes en entrée est active et non masquée), alors il réalise les opérations suivantes :
    236236 - sauvegarder PC+4 (l'adresse de retour) dans le registre `C0_EPC` ;
    237237 - passer en mode système et masquer les interruptions dans `C0_SR` ;   
    238238 - écrire qu'il s'agit d'une interruption dans le registre `C0_CAUSE` ;
    239  - brancher à l'adresse `0x80000180`.
    240 
    241  Après avoir identifié que la cause est une interruption (en examinant le contenu du registre `c0_cause`), le noyau se branche au gestionnaire d’interruption qui doit appeler une fonction appropriée pour le traitement de la requête. Cette fonction est appelée routine d’interruption ou ISR (pour ''Interrupt Service Routine''). Comme il faut reprendre l'exécution de l'application en cours à la fin du traitement de l'interruption, il faut sauvegarder une adresse de retour. Lorsqu’il reçoit une requête d’interruption non masquée, le matériel  doit donc :
    242 
    243 En plus des 6 lignes d'interruption matérielles, le processeur MIPS32 possède un mécanisme d'interruption logicielle: Il existe 2 bits dans le registre de cause `c0_cause` qui peuvent être écrits par le logiciel au moyen de l'instruction privilégiée `mtc0`. La mise à 1 de ces bits déclenche le même traitement que les requêtes d'interruptions externes, s'ils ne sont pas masqués.
     239 - branchement à l'adresse `0x80000180`.
     240
     241Pour information, après avoir identifié que la cause est une interruption (en examinant le contenu du registre `C0_CAUSE`), le noyau se branche au gestionnaire d’interruption qui doit appeler une fonction appropriée pour le traitement de la requête. Cette fonction est appelée routine d’interruption ou ISR (pour ''Interrupt Service Routine'').
     242
     243En plus des 6 lignes d'interruption matérielles, le processeur MIPS32 possède un mécanisme d'interruption logicielle: Il existe 2 bits dans le registre de cause `C0_CAUSE` qui peuvent être écrits par le logiciel au moyen de l'instruction privilégiée `mtc0`. La mise à 1 de ces bits déclenche le même traitement que les requêtes d'interruptions externes, s'ils ne sont pas masqués.
    244244
    245245