Changes between Version 58 and Version 59 of Doc-MIPS-Archi-Asm-kernel


Ignore:
Timestamp:
Nov 14, 2020, 6:34:39 PM (4 years ago)
Author:
franck
Comment:

--

Legend:

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

    v58 v59  
    282282Le registre `C0_SR` contient l'état du processeur. Il définit le comportement du processeur vis-à-vis des requêtes d'interruptions, c'est-à-dire que c'est lui qui contient les masques des lignes d'interruptions matérielles et logicielles, et il définit le mode d'exécution, mode ''kernel'' ou en mode ''user''.
    283283
    284 - La figure suivante présente le contenu des 16 bits de poids faible du registre `c0_sr`. Cette version du MIPS32 n’utilise que 12 bits:
     284 La figure suivante présente le contenu des 16 bits de poids faible du registre `C0_SR`. Dans cette version du MIPS32, nous n’utilisons que 12 bits:
    285285{{{#!html
    286286<table border="1" cellspacing="0" cellpadding="0">
     
    320320
    321321
    322 - Quelques remarques :
    323    - Le processeur a le droit d’accéder aux ressources protégées (registres du coprocessor 0 `c0`),
    324      et aux adresses mémoires >= `0x80000000`) si et seulement si le bit `UM` vaut `0`,
    325      ou si l’un des deux bits `ERL` et `EXL` vaut `1`.
    326    - Les  interruptions sont autorisées si et seulement si le bit `IE` vaut `1`,
    327      et si les deux bits `ERL` et `EXL` valent `00`, et si le bit correspondant de `IM` vaut `1`.
    328    - Les trois types d’événements qui déclenchent le branchement au noyau:
    329      (interruptions, exceptions et appels système) forcent le bit `EXL` à `1`,
    330      ce qui masque les interruptions et autorise l’accès aux ressources protégées.
    331    - L’activation du signal `RESET` qui force le branchement au code de boot force le bit `ERL` à `1`,
    332      ce qui masque les interruptions et autorise l’accès aux ressources protégées.
    333    - L’instruction `eret` force le bit `EXL`  à `0`.
    334 
    335  - Lors de l’activation du RESET :
    336    - `c0_sr` contient donc la valeur `0x0004` (`0b0000000000000100`).
    337    - Pour exécuter un programme utilisateur en mode protégé, avec interruptions activées,
    338      il doit contenir la valeur `0xFF11`.
    339    - Le noyau doit écrire la valeur `0xFF13` dans `c0_sr` et l’adresse de la première fonction du programme utilisateur dans `c0_epc` avant d’appeler l’instruction `eret`.
    340 
     322- Quelques remarques sur l'état du processeur :\\\\
     323   a. Le processeur a le droit d’accéder aux ressources protégées (registres du coprocessor 0 `C0`),
     324      et aux adresses mémoires >= `0x80000000`) si et seulement si le bit `UM` vaut `0`,
     325      ou si l’un des deux bits `ERL` et `EXL` vaut `1`.
     326   b. Les  interruptions sont autorisées si et seulement si le bit `IE` vaut `1`,
     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:
     329     (interruptions, exceptions et appels système) mettent le bit `EXL` à `1`,
     330      ce qui donc masque les interruptions et autorise l’accès aux ressources protégées.
     331   d. L’activation du signal `RESET` qui force le branchement au code de boot force le bit `ERL` à `1`,
     332      ce qui masque les interruptions et autorise l’accès aux ressources protégées.
     333   e. L’instruction `eret` force le bit `EXL`  à `0`, et l'état du processeur est alors défini par
     334      par les valeurs des bits `UM` et `IE`.
     335   f. Pour exécuter un programme utilisateur en mode protégé, avec interruptions activées,
     336      le registre `C0_SR` doit contenir la valeur `0xFF11`
     337      (c'est-à-dire `IM[7:0] = 0xFF`; `UM = 1`; `IE = 1`).
     338      Par conséquent avant d'exécuter l'instruction `eret`, le noyau devra avoir écrit `0xFF13`
     339      dans `C0_SR` (c'est-à-dire `IM[7:0] = 0xFF`; `UM = 1`; `IE = 1` ; `EXL = 1`)
     340      et le noyau doit aussi mettre l’adresse de l'instruction utilisateur dans `C0_EPC`.
     341
     342- Lors de l’activation du RESET :\\\\
     343   a. `C0_SR` contient donc la valeur `0x0004` (`0b0000000000000100` donc `ERL = 1`) .
    341344
    342345
     
    344347
    345348
    346 Le registre `c0_cause` contient trois champs. Les 4 bits du champ `XCODE[3:0]` définissent la cause de l'appel du noyau. Les 6 bits du champ `IRQ[5:0]` représentent l'état des lignes d'interruption externes au moment de l'appel su noyau. Les 2 bits `SWI[1:0]` représentent les requêtes d'interruption logicielle.
     349Le registre `c0_cause` contient trois champs. Les 4 bits du champ `XCODE[3:0]` définissent la cause de l'appel du noyau. Les 6 bits du champ `IRQ[5:0]` représentent l'état des lignes d'interruption externes au moment de l'appel du noyau. Les 2 bits `SWI[1:0]` représentent les requêtes d'interruption logicielle.
    347350
    348351- La figure suivante montre le format du registre de cause CR :