Changes between Version 59 and Version 60 of Doc-MIPS-Archi-Asm-kernel
- Timestamp:
- Nov 14, 2020, 6:40:31 PM (4 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Doc-MIPS-Archi-Asm-kernel
v59 v60 42 42 Le registre `C0_EPC`:: 43 43 Le registre `EPC` de `C0 est le registre d'exception (''Exception Program Counter''). 44 Il contient : (i) soit l'adresse de retour (PC + 4) en cas d'interruption ,(ii) soit44 Il contient : (i) soit l'adresse de retour (PC + 4) en cas d'interruption ; (ii) soit 45 45 l'adresse de l'instruction courante (`PC`) en cas d'exception ou d'appel système.\\ 46 46 Ce registre a le numéro `$14`. … … 50 50 En cas d'exception de type ''adresse illégale'', il contient la valeur de l'adresse mal 51 51 formée. Une adresse est illégale, par exemple, si vous tentez une lecture de mot (`lw`) 52 a une adresse non -alignée (non multiple de 4) ou si vous tentez une lecture en dehors52 a une adresse non alignée (non multiple de 4) ou si vous tentez une lecture en dehors 53 53 des segments d'adresse où se trouve de la mémoire.\\ 54 54 Ce registre a le numéro `$8`. … … 71 71 72 72 73 L’espace d'adressage de la mémoire est découpé en 2 parties identifié s par le bit de poids fort de l’adresse (bit n°31). Quand le processeur est en mode ''kernel'' alors les 2 parties (protégée et non protégée) sont accessibles. Quand le processeur est en mode ''user'' alors seule la partie protégée est accessible.73 L’espace d'adressage de la mémoire est découpé en 2 parties identifiées par le bit de poids fort de l’adresse (bit n°31). Quand le processeur est en mode ''kernel'' alors les 2 parties (protégée et non protégée) sont accessibles. Quand le processeur est en mode ''user'' alors seule la partie protégée est accessible. 74 74 75 75 {{{ … … 105 105 106 106 Codage des instructions protégées:: \\ 107 Elles utilisent toutes le format R avec le champ `OPCOD` à la valeur `COPRO` (c.-à-d. `0b010000`). L'instruction est alors codée avec les bits 25 et 23 de l'instruction (ces deux bits sont dans le champ s`RS`). Remarquez que `eret` à deux codages.\\\\107 Elles utilisent toutes le format R avec le champ `OPCOD` à la valeur `COPRO` (c.-à-d. `0b010000`). L'instruction est alors codée avec les bits 25 et 23 de l'instruction (ces deux bits sont dans le champ `RS`). Remarquez que `eret` à deux codages.\\\\ 108 108 {{{#!html 109 109 <table border="1" cellspacing="0" cellpadding="0"> … … 149 149 }}} 150 150 151 Pour les instructions `mtc0` et `mfc0`, le premier argument est mis dans le champ s `RT` et le second argument est mis dans le champs`RD`.151 Pour les instructions `mtc0` et `mfc0`, le premier argument est mis dans le champ `RT` et le second argument est mis dans le champ `RD`. 152 152 153 153 || **instruction** || || **comportement** || || **commentaire** || … … 160 160 — `mtc0 $5, $14` = `0b``010000`|`0.1..`| `$5` | `$14`|`.....`|`......` \\ 161 161 — `mtc0 $5, $14` = `0b``010000`|`0.1..`|`00101`|`01110`|`.....`|`......` \\ 162 — `.` est un jo cker qui peut être remplacé par `0`ou `1`, utilisons `0`\\162 — `.` est un joker qui peut être remplacé par `0`ou `1`, utilisons `0`\\ 163 163 — `mtc0 $5, $14` = `0b``010000`|`00100`|`00101`|`01110`|`00000`|`000000` \\ 164 164 — `mtc0 $5, $14` = `0b``0100 0000 1000 0101 0111 0000 0000 0000`\\ … … 215 215 216 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 (par exemple le terminal texte). 217 Les périphériques reçoivent des commandes dans leur registres par des instructions de lecture et d'écriture (`lw`/`sw`) venant du processeur.218 219 Lorsqu'ils ont terminé es une commande ou lorsqu'ils ont reçus ou calculésdes 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).217 Les périphériques reçoivent des commandes dans leurs registres par des instructions de lecture et d'écriture (`lw`/`sw`) venant du processeur. 218 219 Lorsqu'ils ont terminé une commande ou lorsqu'ils ont reçu ou calculé 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 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. 221 221 Les 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. … … 230 230 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. 231 231 232 Mê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.232 Mê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. 233 233 234 234 Le processeur doit alors passer alors en mode système et se brancher au noyau du système d'exploitation. … … 248 248 249 249 250 L'instruction `syscall` permet à une application de l'utilisateur de demander un service au noyau du système d'exploitation, comme par exemple effectuer une entrée-sortie. Le code définissant le type de service demandé au système, et d'éventuels paramètres doivent avoir été préalablement rangés dans des registres généraux. Quand le processeur exécute l'instruction `syscall, il réalise les opérations suivantes :250 L'instruction `syscall` permets à une application de l'utilisateur de demander un service au noyau du système d'exploitation, comme par exemple effectuer une entrée-sortie. Le code définissant le type de service demandé au système, et d'éventuels paramètres doivent avoir été préalablement rangés dans des registres généraux. Quand le processeur exécute l'instruction `syscall, il réalise les opérations suivantes : 251 251 - sauvegarde du `PC` (l'adresse de l'instruction) dans le registre `C0_EPC` (l’adresse de retour est `PC` + `4`) ; 252 252 - passage en mode ''kernel'' et masquage des interruptions dans `C0_SR` : `C0_SR`.`EXL` ← `1`; … … 260 260 261 261 262 Le processeur possède également une entrée `RESET` dont l'activation pendant au moins un cycle entraîne le branchement inconditionnel du code de démarrage de l'ordinateur (code de boot). Ce code, implanté à l’adresse `0xBFC00000` doit ''normalement'' charger le code du noyau du système d’exploitation dans la mémoire depuis le disque ou le réseau, puis se brancher à la fonction d'initialisation du noyau. Cette dernière initialise les contrôleurs de périphériques et les structures internes du noyau et, à la fin elle se branche à la première application utilisateur. Dans notre modèle d'ordinateur, le noyau est pré -chargé en mémoire et le code de boot se contente d'appeler la fonction d'initialisation après avoir juste initialiséele pointeur de pile `$29`.262 Le processeur possède également une entrée `RESET` dont l'activation pendant au moins un cycle entraîne le branchement inconditionnel du code de démarrage de l'ordinateur (code de boot). Ce code, implanté à l’adresse `0xBFC00000` doit ''normalement'' charger le code du noyau du système d’exploitation dans la mémoire depuis le disque ou le réseau, puis se brancher à la fonction d'initialisation du noyau. Cette dernière initialise les contrôleurs de périphériques et les structures internes du noyau et, à la fin elle se branche à la première application utilisateur. Dans notre modèle d'ordinateur, le noyau est préchargé en mémoire et le code de boot se contente d'appeler la fonction d'initialisation après avoir juste initialisé le pointeur de pile `$29`. 263 263 264 264 Cette requête est très semblable à une septième ligne d'interruption externe avec les différences importantes suivantes : … … 271 271 272 272 273 Pour reprendre l'exécution de l'application qui a effectué un appel système (instructions `syscall`) ou alors qui a été interrompu par uneinterruption, il faut exécuter l'instruction `eret`.273 Pour reprendre l'exécution de l'application qui a effectué un appel système (instructions `syscall`) ou alors qui a été interrompue par une requête d’interruption, il faut exécuter l'instruction `eret`. 274 274 Cette instruction modifie le contenu du registre `C0_SR` en mettant `0` dans son bit `EXL`, et effectue un branchement à l’adresse contenue dans le registre `C0_EPC`. Le fonctionnement du registre `C0_SR` détaillé dans la section **6**. 275 275 … … 314 314 315 315 ||**`IE `**||Interrupt Enable ||0 = toutes les interruptions sont masquées\\1 = interruptions non-masquées mais elles peuvent l'être avec `IM[7:0]`|| 316 ||**`EXL `**||Exception Level ||0 = aucun effet sur le processeur\\1 = le processeur vient d'entrer dans le noyau\\et donc le processeur est en mode ''kernel'' et interruptions mas squées||316 ||**`EXL `**||Exception Level ||0 = aucun effet sur le processeur\\1 = le processeur vient d'entrer dans le noyau\\et donc le processeur est en mode ''kernel'' et interruptions masquées|| 317 317 ||**`ERL `**||Error Level ||1 = après le signal reset ou certaines erreurs de la mémoire || 318 318 ||**`UM `**||User Mode ||0 = mode d'exécution ''kernel''\\1 = mode d'exécution ''user''|| … … 326 326 b. Les interruptions sont autorisées si et seulement si le bit `IE` vaut `1`, 327 327 et si les deux bits `ERL` et `EXL` valent `00`, et si le bit correspondant de `IM` vaut `1`. 328 c. Les trois types d’év énements qui déclenchent le branchement au noyau:328 c. Les trois types d’évènements qui déclenchent le branchement au noyau: 329 329 (interruptions, exceptions et appels système) mettent le bit `EXL` à `1`, 330 330 ce qui donc masque les interruptions et autorise l’accès aux ressources protégées.