202 | | Dans tous les cas, le processeur doit passer en mode système 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: |
203 | | |
204 | | - sauvegarder `PC` (l'adresse de l'instruction fautive) dans le registre `c0_epc` ; |
205 | | - passer en mode système et masquer les interruptions dans `c0_sr` ; |
206 | | - sauvegarder éventuellement l’adresse fautive dans `c0_bar`; |
207 | | - écrire le type de l'exception dans le registre `c0_cause`; |
208 | | - brancher à l'adresse `0x80000180`. |
| 203 | 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: |
| 204 | |
| 205 | - sauvegarder le registre `PC` (l'adresse de l'instruction fautive) dans le registre `C0_EPC` ; |
| 206 | - passer en mode ''kernel'' et masquer les interruptions en mettant `1` dans le bit EXL de `C0_SR` ; |
| 207 | - sauvegarder éventuellement l’adresse fautive dans `C0_BAR` ; |
| 208 | - écrire le type de l'exception dans le registre `C0_CAUSE` ; |
| 209 | - se brancher à l'adresse `0x80000180`. |
214 | | Les requêtes d'interruption matérielles sont des évènements asynchrones provenant des contrôleurs de périphériques. Elles peuvent être masquées (ignorées) par le processeur. Le processeur MIPS32 possède 6 lignes d'interruptions externes qui peuvent être masquées globalement ou individuellement. L'activation d'une de ces lignes est une requête d'interruption. Elles sont notifiées dans le registre `c0_cause` et, si elles ne sont pas masquées, elles sont prises en compte à la fin de l'exécution de l'instruction en cours. Cette requête doit être maintenue active par le contrôleur de périphérique tant qu'elle n'a pas été prise en compte par le processeur. |
| 215 | 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. |
| 216 | Les périphériques reçoivent des commandes dans leur registres par des instructions de lecture et d'écriture venant du processeur. |
| 217 | |
| 218 | Lorsqu'ils ont terminées une commande ou lorsqu'ils ont reçus ou calculés des données, ils peuvent prévenir |
| 219 | envoyer des requêtes d'interruption par des lignes d'interruption qui les relie au processeur. |
| 220 | Une ligne d'interruption est un fil électrique qui peut prendre deux états : actif ou inactif, on dit aussi levé ou baissé. |
| 221 | |
| 222 | Les requêtes d'interruption matérielles sont des évènements asynchrones provenant des contrôleurs de périphériques. Ces évènements sont toujours attendus par le noyau du système d'exploitation. Ce sont des notifications de fins de commandes, ou d'arrivée de données sur un canal d'entrée, ou des tick d'horloge. |
| 223 | |
| 224 | 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. |
| 225 | |
| 226 | Les lignes d'interruption peuvent être actives ou inactives (on dit aussi levées ou baissées). L'activation d'une de ces lignes est une requête d'interruption provenant d'un contrôleur de périphérique. |
| 227 | |
| 228 | Si 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. |