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


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

--

Legend:

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

    v55 v56  
    214214
    215215
    216 Dans un ordinateur, nous avons vu qu'il y a au moins un processeur, une mémoire et des contrôleurs de périphériques. Les périphériques permettent, par exemple, de communiquer avec le monde extérieur comme pour le terminal texte.
     216Dans un ordinateur, nous avons vu qu'il y a au moins un processeur, une mémoire et des contrôleurs de périphériques. Les périphériques permettent, par exemple, de communiquer avec le monde extérieur (par exemple le terminal texte).
    217217Les périphériques reçoivent des commandes dans leur registres par des instructions de lecture et d'écriture (`lw`/`sw`) venant du processeur.
    218218
    219219Lorsqu'ils ont terminées une commande ou lorsqu'ils ont reçus ou calculés des données, les contrôleurs de périphériques peuvent le signaler au processeur par des **requêtes d'interruption** (IRQ pour Interrupt Request en anglais).
    220 Une requête d'interruption est un signal d'état produit par un contrôleur de périphérique avec deux états possibles : **actif** (ou levé) qui signifie que le contrôleur demande que le noyau intervienne ou **inactif** (ou baissé) qui signifie que le contrôleur n'a pas de demande.
     220**Une requête d'interruption est un signal d'état** produit par un contrôleur de périphérique avec deux états possibles : **actif** (ou levé) qui signifie que le contrôleur demande que le noyau intervienne ou **inactif** (ou baissé) qui signifie que le contrôleur n'a pas de demande.
    221221Les requêtes d'interruptions sont donc des notifications de fins de commandes ou d'arrivée de données sur un canal d'entrée ou encore des ticks d'horloge.
    222222
    223 Les requêtes d'interruption sont envoyées par des ''lignes d'interruption''.
    224 Une ''ligne d'interruption'' est un fil électrique  qui relie un contrôleur de périphérique au processeur et qui peut prendre les deux états des requêtes : actif/inactif (ou levé/baissé).
    225 Le processeur MIPS32 possède 6 entrées de lignes d'interruptions externes qui peuvent être masquées globalement ou individuellement. Masquer une interruption signifie ne pas en tenir compte. Nous n'utiliserons qu'une seule de ces 6 entrées dans le prototype des TP.
     223Les requêtes d'interruption sont envoyées sur des ''lignes d'interruption''.
     224**Une ''ligne d'interruption'' est un fil électrique  qui relie un contrôleur de périphérique au processeur** et qui peut prendre les deux états des requêtes : actif/inactif (ou levé/baissé).
     225
     226Le processeur MIPS32 possède 6 entrées de lignes d'interruptions externes qui peuvent être ''masquées'' globalement ou individuellement. Nous n'utiliserons qu'une seule de ces 6 entrées dans le prototype des TP.
     227
     228Quand le noyau décide ''masquer une interruption'', cela signifie qu'il décide ne pas tenir compte de l'état de la ligne d'interruption. Les interruptions peuvent être masquées à certains moments pendant un temps borné lorsque le noyau est en train de faire des opérations critiques qui doivent être réalisées de manière atomique (sans être interrompu). Si une ligne d'interruption s'active alors qu'elle est masquée, alors le processeur ne la verra et donc le noyau ne la traitera qu'au moment où la ligne sera démasquée.
    226229
    227230Si elles ne sont pas masquées alors elles sont prises en compte à la fin de l'exécution de l'instruction en cours. Une requête émise par un contrôleur de périphérique doit être maintenue active par le contrôleur tant qu'elle n'a pas été prise en compte par le noyau du système d'exploitation.
     
    229232Même si l'activation d'une ligne d'interruption est toujours un événement attendu par le noyau du système d'exploitation, elle survient de manière asynchrone par rapport au programme en cours d'exécution.
    230233
    231 
    232 Le processeur doit alors passer alors en mode système et se brancher au noyau du système d'exploitation. 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 :
    233 
    234  - sauvegarder PC+4 (l'adresse de retour) dans le registre `c0_epc` ;
    235  - passer en mode système et masquer les interruptions dans `c0_sr` ;   
    236  - écrire qu'il s'agit d'une interruption dans le registre `c0_cause` ;
    237  - brancher à l'adresse `0x80000180`program.
     234Le processeur doit alors passer alors en mode système et se brancher au noyau du système d'exploitation.
     235De manière plus détaillée, lorsque le processeur détecte une exception, il réalise les opérations suivantes :
     236 - sauvegarder PC+4 (l'adresse de retour) dans le registre `C0_EPC` ;
     237 - passer en mode système et masquer les interruptions dans `C0_SR` ;   
     238 - é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 :
    238242
    239243En 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.