Systèmes d’Exploitation Avancés - Slides PDF
Document Details
Uploaded by AchievableConnemara6614
École supérieure privée d'ingénierie et de technologies
Anis Zouaquii
Tags
Summary
These slides cover advanced operating systems concepts, focusing on threads POSIX. Topics include thread creation, termination, and synchronization mechanisms, as well as different thread types. The presentation is well organized, clearly defining key concepts and illustrating with examples.
Full Transcript
Systèmes d’Exploitation Avancés Préparé par : Anis ZOUAOUI Hassen JEDIDI [email protected] 1 Systèmes d’Exploitation Avancés Chapitre 5 Les Threads POSIX...
Systèmes d’Exploitation Avancés Préparé par : Anis ZOUAOUI Hassen JEDIDI [email protected] 1 Systèmes d’Exploitation Avancés Chapitre 5 Les Threads POSIX Par : Anis ZOUAOU 2 PLAN Théorie de threads ✔ Les processus ✔ Les threads ✔ Différents Threads Librairie pthread.h ✔ Création ✔ Terminaison ✔ Attente de la fin d’un thread ✔ Nettoyage à la terminaison ✔ Communication entre Threads ✔ TP 3 Théorie de threads(1) Processus unix : ✔ Trois segments : ▪ Le segment texte : code + données statiques ▪ Le segment donnée : variables ▪ Le segment stack : Pile du processus ✔ Un environnement ▪ Information nécessaire au kernel pour gérer le processus (contenu du processus, priorités, fichiers ouverts …) ▪ Peut être modifié par un appel 4 Théorie de threads(2) Processus : Le modèle processus décrit précédemment est un programme qui s’exécute selon un chemin unique (compteur ordinal). On dit qu’il a un flot de contrôle unique (un seul thread). 5 Théorie de threads(3) Threads : De nombreux systèmes d’exploitation modernes offrent la possibilité d’associer à un même processus plusieurs chemins d’exécution (multithreading, multiflot d’exécution). 6 Théorie de threads(4) Threads : Un thread est une unité d’exécution rattachée à un processus, chargée d’exécuter une partie du processus. Un processus est vu comme étant un ensemble de ressources (espace d’adressage, fichiers, périphériques…) que ses threads (flots de contrôle ou processus légers) partagent. 7 Théorie de threads(5) Threads : Lorsqu’un processus est créé, un seul flot d’exécution (thread) est associé au processus. Ce thread peut en créer d’autres. Chaque thread a : – un identificateur unique – une pile d'exécution – des registres (un compteur ordinal) – un état… 8 Comment ça marche? Copie de : ⮚ Compteur ordinal (adresse mémoire de la prochaine instruction à exécuter) ⮚ Registre (emplacement de mémoire interne à un processeur) ⮚ Pile d'appel ⮚ Etat d'ordonnancement (quel processus va prendre la main) Partage de : ⮚ Espace d'adressage ⮚ Variables globales ⮚ Fichiers ouverts ⮚ Signaux 9 Comment ça marche? Threads : Le multithreading permet l’exécution simultanée ou en pseudo-parallèle de plusieurs parties d’un même processus. 10 11 Pourquoi utiliser les threads ✔ Améliorer la rapidité des applications (pas de blocages pour des tâches qui peuvent être effectuée en parallèle) ✔ Exploiter de manière efficace les machines multiprocesseur ✔ Améliorer la structure de votre programme ✔ Utiliser moins de ressources système 12 Différents Threads : ✔ Thread utilisateur : ⮚ Les threads utilisateur sont implantés dans une bibliothèque (niveau utilisateur) qui fournit un support pour les gérer. ⮚ Ils ne sont pas gérés par le noyau. ⮚ Le noyau gère les processus (table des processus) et ne se préoccupe pas de l’existence des threads (modèle plusieurs- à-un). ⮚ Lorsque le noyau alloue le processeur à un processus, le temps d’allocation du processeur est réparti entre les différents 13 Différents Threads : ✔ Thread Noyau: ⮚ Les threads noyau sont directement supportés par le système d’exploitation. ⮚ Le système d’exploitation se charge de leur gestion. Du temps CPU est alloué à chaque thread. (modèle un-à-un) ⮚ Si un thread d’un processus est bloqué, un autre thread du même processus peut être élu par le noyau ⮚ Cette implémentation est plus intéressante pour les systèmes multiprocesseurs. 14 Threads POSIX : Librairie pthread.h Création d’un thread : int pthread_create(pthread_t *tid, const pthread_attr_t *tattr, void*(*start_routine)(void *), void *arg); // renvoie 0 si l’appel réussit, sinon !=0 : identifiant de l’erreur Explication : pthread_t *tid : ID du thread const pthread_attr_t *tattr : les attributs du thread (taille de la pile, priorité….) void*(*start_routine)(void *) : La fonction à exécuter void *arg : le paramètre de la fonction 15 Threads POSIX : Librairie pthread.h Exemple : #include void* thr_f (void* param) { int * t = (int *) param; printf ("parametre : %d", *t); } int main () {int arg=6; pthread_t thr1; pthread_create(&thr1,NULL,thr_f, &arg); return 0; } Pour compiler ajouter l’option -lpthread 16 #include #include void* thr_f (void* param) { int * t = (int *) param; printf ("parametre : %d \n", *t); pthread_exit (0); } int main () {int arg=6; void* ret ; pthread_t thr1; pthread_create(&thr1,NULL,thr_f, &arg); pthread_join(thr1,&ret); printf ("valeur ret est egale %d\n", ret); 17 pthread_exit(NULL); Threads POSIX : Librairie pthread.h Attendre qu’un thread se termine : int pthread_join(thread_t tid, void **status); Explication : Suspend l'activité du thread appelant tant que le thread tid n'est pas terminée. status contient la valeur de retour du thread tid lors de sa terminaison. 18 Threads POSIX : Librairie pthread.h Terminer une thread: void pthread_exit(void *status); Explication : Termine l‘exécution du thread courant avec une valeur de retour particulière 19 Threads POSIX : Librairie pthread.h Avoir le TID d’un thread : pthread_t pthread_self(void); Explication : Retourne le TID d’un thread. 20 Threads POSIX : Librairie pthread.h Exemple : 21 Threads POSIX : Librairie pthread.h Exemple1 : // exemple_threads.c #include #include #include void afficher(int n, char lettre) { int i,j; for (j=1; j