Version 10 (modified by 3 years ago) (diff) | ,
---|
Gestion des Threads
Rappels de cours
A. Questions
La majorité des réponses aux questions sont dans le cours ou dans le rappel du cours donné au début de cette page, c'est voulu. Les questions suivent à peu près l'ordre du cours, elles sont simples, mais vous avez besoin de comprendre le cours pour y répondre :-) Quand une question vous demande si quelque chose est vrai ou faux, ne répondez pas juste "oui" ou "non », mais justifiez vos réponses avec une petite phrase. Le but de ces questions est d'évaluer vos connaissances, donc plus vous êtes précis, mieux c'est.
- Dites-en une phrase ce qu'est un processus informatique (selon Wikipédia)
- Est-ce qu'un processus utilisateur s'exécute toujours dans le mode utilisateur du MIPS ?
- Nous avons vu qu'un processus utilisateur peut faire des appels système, c'est-à-dire demander des services au noyau du système d'exploitation. Est-ce qu'un processus peut faire des interruptions et des exceptions ?
- Un processus dispose d'un espace d'adressage pour s'exécuter, qu'y met-il ?
- Dans un fichier exécutable (le programme) avant qu'il ne soit chargé en mémoire, on trouve le code du programme et les données globales. Est-ce qu'il y a aussi les piles d'exécution ? justifiez votre réponse
- Un thread de processus informatique représente une exécution de ce processus. Il est défini par une pile d'exécution pour ses fonctions, un état des registres du processeur et des propriétés comme un état d'exécution (RUNNING, READY, DEAD, et d'autres que nous verront plus tard). Combien de threads a-t-on par processus au minimum et au maximum ?
- Tous les threads d'un processus se partagent le même espace d'adressage, et donc le même code, les mêmes variables globales, les mêmes variables dynamiques (nous les verrons dans un prochain cours). Est-ce qu'ils se partagent aussi les piles ?
- Lorsque l'on crée un nouveau thread (un nouveau fil d'exécution du processus), il faut indiquer sa fonction principale, c'est-à-dire la fonction par laquelle qu'il doit exécuter.
- Est-ce que le nouveau thread pourra appeler d'autres fonctions ?
- Est-ce qu'on peut créer deux threads avec la même fonction principale ?
- Combien d'arguments la fonction principale peut-elle prendre et de quel type ?
- Que se passe-t-il lorsqu'on sort de la fonction principale d"un thread ?
- L'exécution en temps partagé est un mécanisme permettant d'exécuter plusieurs threads à tour de rôle sur le même processeur. Comment s'appelle le service du noyau chargé du changement de thread ?
- Le changement de thread a une certaine durée, quel nom porte cette durée de changement ?
- Pour l'exécution en temps partagé, le noyau applique une politique, laquelle définit l'ordre d'exécution. Si les threads sont toujours prêts à être exécutés et que le noyau les exécute à tour de rôle de manière équitable, comment se nomme cette politique ?
- Dans cette politique équitable, quelle est la fréquence type de changement de thread ?
- Le mécanisme de changement de thread (dont vous avez donné le nom précédemment) se déroule en 3 étapes, quelle que soit la politique suivie. Quelles sont ces étapes ?
- Comment se nomme la perte du processeur par le thread en cours par un nouveau thread ?
- Qu'est-ce qui provoque le changement de thread ?
- Dans le mécanisme de changement de thread, l'une des étapes est la sauvegarde du contexte, est-ce la même chose qu'un contexte de fonction ? Dites de quoi il est composé.
- Où est sauvé le contexte d'un thread ? Que pouvez dire de la fonction de sauvegarde ?
- Chaque thread dispose de sa pile propre, est-ce que l'on doit aussi sauver la pile lors des changement de thread ?
- 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)
- Un thread se termine dans deux cas. Dans le premier cas, il fait appel à la fonction
thread_exit()
, explicitement dans la fonction principale du thread ou implicitement au retour de la fonction principale du thread. Cette terminaison volontaire peut être qualifiée de suicide. C'est celle que nous avons vu en cours et que nous pouvons utiliser dans le code actuel. Le second cas de terminaison, non encore disponible, c'est quand un thread demande la terminaison d'un autre parthread_cancel()
, ce qui provoque chez le thread désigné unthread_exit()
. Cette terminaison imposée peut être qualifiée de meurtre. Dans les cas du suicide et du meurtre, pour quelle raison le thread qui va disparaitre, ne peut désallouer sa pile.