Changes between Version 56 and Version 57 of Doc-MIPS-Archi-Asm-kernel
- Timestamp:
- Nov 14, 2020, 5:58:41 PM (4 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Doc-MIPS-Archi-Asm-kernel
v56 v57 21 21 22 22 23 En mode ''kernel'', tous les registressont 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.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. … … 233 233 234 234 Le 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 :235 De 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 : 236 236 - sauvegarder PC+4 (l'adresse de retour) dans le registre `C0_EPC` ; 237 237 - passer en mode système et masquer les interruptions dans `C0_SR` ; 238 238 - écrire qu'il s'agit d'une interruption dans le registre `C0_CAUSE` ; 239 - branche rà 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 241 Pour 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 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. 244 244 245 245