0% ont trouvé ce document utile (0 vote)
44 vues17 pages

Threads Etudiants

Transféré par

Dhiee Hmem
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
44 vues17 pages

Threads Etudiants

Transféré par

Dhiee Hmem
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Université Tunis El Manar Institut Supérieur d’informatique

Programmation Système sous


UNIX

Préparé par : Dr. Najar Yousra


Email : [email protected]

Niveau : 2éme année ingénieur

Programmation Système sous UNIX


2 éme ing 1
Les Threads
La notion des Threads
Un thread une unite basique de l’utilization du CPU; Il
contient
- thread ID (TID)
- program counter, (CP/CO)
- register set,
- Et une pile.

Il partage avec les threads qui appartiennent au même


processus son segement de code, et données, et d’autres
ressources du système, comme les fichiers et le signaux.

• Un processus traditionnel (processus lourd) il a au moins un


thread de contrôle
• Lorsqu’un processus a plus qu un thread de controle il peut
executer plusieurs parties de son code en paralléle.
La notion des Threads

• La plus part des OS sont multithreadeds. Plusieurs


threads opérent dans le kernel pour executer des taches
spécifiques comme : géstion des périphiriques, gestion de
la mémoire, des intérruptions ……
La notion des Threads
• Exemple 1 : Microsoft Word peut avoir
- Un thread pour afficher les graphiques,
- Un autre thread pour répondre aux tapes du clavier de l’utilisateur,
- Un troisième pour faire la verification synthaxique en arrière plan.

• Exemple 2 :Web browser peut avoir


- Un thread pour télécharger les fichiers
- Un thread pour chaque page web
- Un serveur Web est multithreaded : Le serveur va créer un thread qui
reste à l’ecoute de des requests de clients et puis il crée un thread par
traiter les demandes (un par request) puis retourne à l’écoute
Les modèles du Multithreading
• Le support des thread peut être assurer à deux niveaux
niveau user et niveau kernel

• User threads sont supportés par les threads du kernel, alors


que les threads du kernel sont gérés par l’operating system.

• Une relation doit exister entre les user threads et les kernel
threads.Trois modèles sont utilisés dans ce cadre:

- many-to-one model,
- one-to-one model,
- many-to many model.
Les modèles du Multithreading
Many-to-one model
Le many-to-one model associe à plusieurs user-level threads un
seul kernel thread. La gestion des threads est faite par thread
library dans l’espace de l’utilisateur.

- Toute l’opération se bloque lorsque un


thread est bloqué.
- Parce qu un seul thread accéde au thread
du kernel on ne peut pas executer des
threads en paralléle avec des multicores .
Les modèles du Multithreading
One-to-one model
one-to-one model associe à chaque user thread un kernel
thread. Il fournit plus de concurrence que le modèle many-to-
one en permettant à un autre thread de s’exécuter lorsqu’un
thread fait un appel système bloquant. Il permet également à
plusieurs threads de fonctionner en parallèle sur des
multiprocesseurs.
Le seul inconvénient de ce modèle est que la
création d’un thread utilisateur nécessite la
création du thread noyau correspondant.
Comme la création de threads du noyau peut
affecter les performances d’une application, la
plupart des implémentations de ce modèle
limitent le nombre de threads supportés par le
système.
Multithreading Models
Many-to-many model
The many-to-many model associe plusieurs user-level threads
au meme nombre de ou à nombre inférieur de kernel threads.

The many-to-many : les devloppeurs


peuvent créer le nombre nécessaire de
user threads, et ils peuvent s’executer en
paralléle sur une architecture
multiprocessor. Egalement quand un
thread est bloqué il ne bloque pas les
autres,
Multithreading

- Main program a.out est le "heavy weight" process.

•a.out veut faire du travail en parallel crée 3 thread qui s


executent en paralléle (multitasking)

•Chaque thread a ses vriables locales, mais partage les


ressources de a.out.

•Le traitement du thread peut etre définit comme une function à


executer du code du père

•Threads partage et communique à travers la mémoire donc il


faut synchroniser.

•Les threads sont crées et tués mais le processus principal


continue à s’executer
Multithreading Operations (POSIX)
Thread library fournit au programmeur une API pour créer et
gérer des threads. Il existe deux manières principales
d'implémenter une bibliothèque thread .

Trois bibliothéques de thread existent : POSIX Pthreads,


Windows, et Java.

- Pthreads, une extension de POSIX standard, elle fournit


une bibliothéque du user-level et kernel-level.
- Windows thread library fournit une biblithéque kernel-
level pour Windows.
- Java thread API créer des user threads gérer par des
programmes Java,
Multithreading Operations (POSIX)
Pthreads fait référence à la norme POSIX (IEEE 1003.1c) définissant une
API pour la création et la synchronisation de threads. Il s'agit d'une
spécification pour le comportement des Threads
.

1. Thread management: creation, detachement, et jointure des threads, etc. elle


inclue des fonctions qui modifient les attribues des threads set/query thread
(joinable, scheduling etc.)
2. Mutexes: Mutex fonctions qui bloquent et reveillent sur mutex,

3. Condition variables: Utilisation des variables partagées.


Multithreading Operations (POSIX)
Gestion des Threads :

 Création des Threads


int pthread_create (pthread_t *thread ,
pthread_attr_t *attr,
void *nomfonction,
void *arg );

- The pthread_create retourne thread ID dans l argument thread.

- Le paramétre attr est utilisé pour préciser les paramétres du thread. Par défaut il
estégal à NULL

- Nomfunction est une function C routine que le thread va executer.


Multithreading Operations (POSIX)
 Suspension du Thread
int pthread_join (int threadId, void *status)

subroutine bloque le thread appellant la terminaison d’un autre. Retourne l’état de


terminaison dans status.
Retourne 0 or -1.
 Terminaison du Thread
- Cet appel système termine le thread appellant ( precise une valeur de retour)

void pthread_exit(int returnvalue )

- Le thread est tué par un autre:

int pthread_cancel(pthread_t thread)

 Thread identifier
- Le thread TID est donné par:
pthread_t pthread_self (void)
Multithreading Operations (POSIX)
Example (thread-pid.c) > gcc -o pthread-pid thread-pid.c
# include < unistd . h> > pthread-pid
# include < pthread . h> pid de main = 24133
# include < stdio. h> pid du thread fils = 24136
Multithreading Operations(POSIX)
Application : Ecrire un prog.c qui implémente cet arbre de threads.

Creates two threds A and B and


waits for their termination
Principal thread

Creates the thread C and


Thread B waits for its termination
Thread A

The routine that A, B and C execute


: prints an alphabitic letter n time, Thread C
The letter and the n are parameters
to the function.
Multithreading Operations (POSIX)
Application

Vous aimerez peut-être aussi