150 | | 1. Où est sauvé le contexte d'un thread ? Que pouvez-vous dire de la fonction de sauvegarde ? |
151 | | {{{#!protected ------------------------------------------------------------------ |
152 | | ''' |
153 | | * |
154 | | ''' |
155 | | }}} |
156 | | 1. Chaque thread dispose de sa pile propre, doit-on aussi sauver la pile lors des changements de thread ? |
157 | | {{{#!protected ------------------------------------------------------------------ |
158 | | ''' |
159 | | * |
160 | | ''' |
161 | | }}} |
162 | | 1. Après qu'un thread a été élu et que son contexte a été chargé dans le processeur, où va-t-on ? (attention, il y a deux cas) |
163 | | {{{#!protected ------------------------------------------------------------------ |
164 | | ''' |
165 | | * |
| 150 | 1. Où est sauvé le contexte d'un thread ? Que pouvez-vous dire de la fonction de sauvegarde ? (langage, prototype, valeur de retour, etc.) |
| 151 | {{{#!protected ------------------------------------------------------------------ |
| 152 | ''' |
| 153 | * Pour notre système, c'est dans un tableau présent dans la structure de données du thread (`struct thread_s`). |
| 154 | * C'est une fonction en fonction en assembleur parce qu'elle est spécifique au processeur, on ne pourrait pas l'écrire en C. |
| 155 | * Elle prend en argument un pointeur vers le tableau de sauvegarde. C'est un prototype générique qui fait partie de la HAL (Hardware Abstraction Layer). |
| 156 | * Elle rend 1 quand elle vient juste de faire la sauvegarde du contexte du thread en cours. |
| 157 | ''' |
| 158 | }}} |
| 159 | 1. Chaque thread dispose de sa propre pile d'exécution, doit-on aussi sauver la pile lors des changements de thread ? |
| 160 | {{{#!protected ------------------------------------------------------------------ |
| 161 | ''' |
| 162 | * Non, elle reste en mémoire, mais lors des changements de thread, on change simplement le pointeur de pile, ainsi on change de pile. |
| 163 | ''' |
| 164 | }}} |
| 165 | 1. Après qu'un thread a été élu et que son contexte a été chargé dans le processeur, donnez le nom de la fonction responsable du chargement et dites où elle retourne ? (attention, il y a deux cas) |
| 166 | {{{#!protected ------------------------------------------------------------------ |
| 167 | ''' |
| 168 | * C'est la fonction `thread_load()` qui se charge du chargement de la restauration du contexte du thread entrant (nouvellement élu). |
| 169 | * Quand on sort de la fonction `thread_load()`, il y a en effet 2 cas: |
| 170 | * Le thread entrant n'a jamais été élu. Dans ce cas, le `jr $31` va nous faire entrer dans la fonction `thread_bootstrap()` dont le but est lancer le thread en allant chercher les informations dans la structure `thread_s` du thread nouvellement élu, à savoir |
| 171 | * la fonction de démarrage `_start()` ou `thread_start()` |
| 172 | * la fonction principale du thread (uniquement pour les threads standards, c'est inutile pour le thread `main()`, on sait que c'est `main()`) |
| 173 | * l'argument du thread (uniquement pour les threads standards, c'est inutile pour le thread `main()`, ce sont en principe des arguments de la ligne de commande (on ne voit pas ça pour le moment). |
| 174 | * Le thread avait déjà été élu et donc il avait perdu le processeur et appelé `thread_save()`. En conséqie |