Changes between Version 19 and Version 20 of AS6-TME-B7


Ignore:
Timestamp:
Apr 12, 2022, 4:09:43 PM (2 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AS6-TME-B7

    v19 v20  
    6565{{{#!protected ------------------------------------------------------------------
    6666'''
    67  *
     67 * Il y a désormais la fonction `thread_wait()` qui permet à un thread (A) de passer de lui-même de l'état RUNNING à l'état WAIT, et la fonction `thread_notify()` qui permet à un thread (B) de faire passer un autre thread (A) de l'état WAIT à l'état READY.
     68 * En cas de compétition, entre `thread_wait()` et `thread_notify()`, si `thread_notify()` s'exécute avant `thread_wait()`, il pourrait y avoir y risque que le thread (A) se mette en attente et ne soit pas notifié (puisque c'est déjà fait. Mais on sort de cette situation parce que `thread_wait()` peut savoir que `thread_notify` est déjà passé, car son propre état n'est plus RUNNING, il est READY.
     69 * Non, ce ne sont pas des fonctions de l'API utilisateur, ces fonctions sont appelées par les service du noyau. La raison est qu'avant de passer un thread à WAIT, il doit déjà s'être enregistré dans une file d'attente d'une ressource et se sont des structures interne du noyau. C'est pareil pour notify qui est invoqué lors d'une libération de ressource du noyau.
    6870'''
    6971}}}
     
    7173{{{#!protected ------------------------------------------------------------------
    7274'''
    73  *
    74 '''
    75 }}}
    76 1. Un thread passe de l'état RUNNING à l'état ZOMBIE lorsqu'il appelle `thread_exit()`. Quand passe-t-il à l'état DEAD ?
    77 {{{#!protected ------------------------------------------------------------------
    78 '''  *
     75 * Non, un thread ne peut attendre (avec `thread_join) qu'un seul thread à la fois. Si on veut attendre plusieurs threads, il faut le faire en séquence.
     76'''
     77}}}
     781. Un thread passe de l'état RUNNING à l'état ZOMBIE lorsqu'il appelle `thread_exit()`. Quand passe-t-il à l'état DEAD ? Quand est-ce qu'on efface la piles et les structures utilisées par un thread, est-ce qu'un thread peut s'effacer lui-même ?
     79{{{#!protected ------------------------------------------------------------------
     80''' 
     81 * Un thread passe à DEAD lors de l'exécution d'un `thread_join()` par un autre thread.
     82 * L'effacement a lieu après le passage à l'état DEAD et un thread ne peut pas s'effacer lui-même. Pour effacer, il faut exécuter du code, or pour exécuter du code, il faut une pile, et on ne peut pas effacer la pile parce qu'elle est utilisée. C'est pour ça que c'est toujour un autre thread qui fait le ménage.
     83 * Dans le code de kO6, il n'y a pas encore de ménage, ça permet de voir les threads mort de l'affichage du contenu du scheduler. Mais, plus tard cela pourra être ajouté dans le scheduler. Quand un thread devient RUNNING, il peut regarder s'il y a eu un DEAD juste précédemment et l'effacer. On pourrait aussi, le faire au dernier moment quand le kernel n'a plus de place, alors il fait le ménage (un peu comme chez moi à certaines périodes :-)
    7984'''
    8085}}}