Les Threads
Transcription
Les Threads
Les Threads Benmoussa Yahia Université M’hamed Bougara de Boumerdès [email protected] http://syscours.kilu.de Objectifs Définir la notion de Thread Modèles de programmation par processus et par Thread Implémentation des threads (espace noyau vs espace utilisateur) Bibliothèque pthreads sous Linux 2 Programmation multitâche Le multitâche est nécessaire au sein d’une même application. Ex : – Navigateur web : Afficher une page web // Récupérer des information du réseau – Traitement de texte : Afficher du texte // Récupéré les données tapées par l’utilisateur sur le clavier 3 Programmation multitâche par processus Créer un processus par tâche Chaque processus dispose de ses propres ressources 4 Programmation multitâche par processus Inconvénients : – L’appel fork() est consommateur de ressources. – Chaque processus dispose de sa propre zone mémoire Î Difficulté pour le partage des données. 5 Les Threads Processus léger (lightweight processes) Sous-processus qui s’exécute au sein d’un même processus Plusieurs thread partage les même ressources (Mémoire, Fichiers, …etc) 6 Les Threads text Registre data fichiers Ressources communes stack Ressource privées Processus mono-thread text data fichiers Registre Registre Registre stack stack stack Processus multi-threads 7 Les Threads Avantages : – Création d’un thread est plus rapide que la création d’un processus – Un thread consomme moins de ressources qu’un processus (Partage de ressources) – La communication entre thread est plus facile: Utilisation des variables globales 8 Implémentation des threads Threads dans l’espace utilisateurs Threads dans l’espace noyau 9 Threads dans l’espace utilisateurs Les Threads son gérés dans l’espace utilisateur à l’aide d’une bibliothèque (Tables de threads, Ordonnancement, commutation, …) 10 Threads dans l’espace utilisateurs Processus Thread Système de gestion De threads Tables de threads Espace utilisateur Espace noyau Noyau Tables de processus 11 Threads dans l’espace utilisateurs Avantages : – Transparence par rapport au système d’exploitation (portabilité) – Performance : La gestion des threads se fait à l’aide de procédure locales, pas d’appels système. – Algorithme d’ordonnancement des threads propre à chaque processus 12 Threads dans l’espace utilisateurs Inconvénients – Si un Thread se bloque(appel system bloquant. Ex : E/S) Î Tout le processus se bloque. – Si un thread est corrompu (Ex : Violation mémoire) Î Tout le processus est arrêté. – Les threads d’un même processus ne peuvent pas s’exécuter sur des processeurs différents. 13 Threads dans l’espace noyau Les Thread sont gérés par le systèmes d’exploitation 14 Threads dans l’espace noyau Processus Thread Tables de threads Espace utilisateur Espace noyau Noyau Tables de processus 15 Threads dans l’espace noyau Avantages : – Quand un thread se bloque, le noyau peut exécuter un autre thread du même processus. – Exécution des threads d’un même processus sur plusieurs processeurs 16 Threads dans l’espace noyau Inconvénients – Création/ gestion des threads nécessite des appel système Î lourdeur. 17 Les threads dans Linux Les deux implémentation (Utilisateur et Noyau) sont supportées. – Espace utilisateur : Bibliothèque Pthreads • Portable threads • Implémentation de la norme POSIX.1c – Espace noyau : appel system clone() 18 La bibliothèque Pthread Création, terminaison et attente d’un thread : pthread_create(), pthread_exit(), pthread_join() Passage de paramètres et récupération des résultats 19 #include <pthread.h> void *thread_function(void *arg); int main() { int res; pthread_t a_thread; void *thread_result; res = pthread_create(&a_thread, NULL, thread_function, (void *)message); if (res != 0) { perror(“Erreur lors de la création du thread"); exit(EXIT_FAILURE); } printf(“Attente de la fin d’exécution du thread...\n"); res = pthread_join(a_thread, &thread_result); printf("Thread joined, it returned %s\n", (char *)thread_result); printf("Message is now %s\n", message); exit(EXIT_SUCCESS); } void *thread_function(void *arg) { printf(“Début d’exécution du thread %s\n"); sleep(3); pthread_exit("Thank you for the CPU time"); } 20 Appel système clone() Linux ne fait pas la différence entre processus et threads L’appel système clone() permet de créer un processus fils qui partage des ressource avec le processus parent. Les ressource à partager peuvent êtres spécifié à l’aide de flags : – CLONE_FS – CLONE_VM – CLONE_FILES 21