357 | | - Ligne 25 : $26 **←** c0_cause\\⟶ donc le registre GPR réservé au kernel prend la valeur du registre de cause. |
358 | | - Ligne 26 : $26 **←** $26 & 0b00111100\\⟶ C'est un masque qui permet de ne conserver que les 4 bits du champ `XCODE`. |
359 | | - Ligne 27 : $27 **←** 0b00100000\\⟶ On initialise le registre GPR réservé au kernel $27 avec la valeur attendue dans $26 s'il s'agit d'une cause `syscall`. |
360 | | - Ligne 28 : si $26 ≠ $27 goto not_syscall\\⟶ Si ce n'est pas un syscall, on va plus loin, sinon on continue en séquence. |
361 | | ''''''''''''''' |
362 | | }}} |
363 | | 1. Le gestionnaire de syscall est la partie du code qui gère le comportement du noyau lors de l'exécution de l'instruction `syscall`. C'est un code en assembleur présent dans le fichier `kernel/hcpu.S` que nous allons observer. Pour vous aider dans la compréhension de ce code, vous devez imaginer que l'instruction `syscall` est un peu comme un appel de fonction. Ce code utilise un tableau de pointeurs de fonctions nommé `syscall_vector` définit dans le fichier `kernel/ksyscalls.c`. Les lignes `36` à `43` sont chargées d'allouer dans la pile. Dessinez l'état de la pile après l'exécution de ces instructions. Que fait l'instruction lige `44` et quelle conséquence cela a? Que font les lignes `46` à `52`? Et enfin que font les lignes `54` à `60`\\ \\**`common/syscalls.h`** |
| 357 | - Ligne 25 : `$26` **←** `c0_cause`\\⟶ donc le registre GPR réservé au kernel prend la valeur du registre de cause. |
| 358 | - Ligne 26 : `$26` **←** `$26 & 0b00111100`\\⟶ C'est un masque qui permet de ne conserver que les 4 bits du champ `XCODE`. |
| 359 | - Ligne 27 : `$27` **←** `0b00100000`\\⟶ On initialise le registre GPR réservé au kernel $27 avec la valeur attendue dans $26 s'il s'agit d'une cause `syscall`. |
| 360 | - Ligne 28 : si `$26` ≠ `$27` goto not_syscall\\⟶ Si ce n'est pas un syscall, on va plus loin, sinon on continue en séquence. |
| 361 | ''''''''''''''' |
| 362 | }}} |
| 363 | 1. Le gestionnaire de syscall est la partie du code qui gère le comportement du noyau lors de l'exécution de l'instruction `syscall`. C'est un code en assembleur présent dans le fichier `kernel/hcpu.S` que nous allons observer. Pour vous aider dans la compréhension de ce code, vous devez imaginer que l'instruction `syscall` est un peu comme un appel de fonction. Ce code utilise un tableau de pointeurs de fonctions nommé `syscall_vector` définit dans le fichier `kernel/ksyscalls.c`. Les lignes `36` à `43` sont chargées d'allouer dans la pile. Dessinez l'état de la pile après l'exécution de ces instructions. Que fait l'instruction lige `44` et quelle conséquence cela a? Que font les lignes `46` à `51`? Et enfin que font les lignes `53` à `59`\\ \\**`common/syscalls.h`** |