Changes between Version 22 and Version 23 of AS6-TME-B5


Ignore:
Timestamp:
Feb 21, 2022, 11:13:39 AM (3 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AS6-TME-B5

    v22 v23  
    148148'''
    149149}}}
    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  *
     1501. 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}}}
     1591. 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}}}
     1651. 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
    166175'''
    167176}}}