38
5.1 URD L2 2005 Systèmes d’exploitation Threads Threads Vue d’Ensemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads Java

5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

Embed Size (px)

Citation preview

Page 1: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.1 URD L2 2005Systèmes d’exploitation

ThreadsThreads

Vue d’Ensemble

Modèles de Multithreading

Problèmes des Threads

Pthreads

Threads Windows XP

Threads Linux

Threads Java

Page 2: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.2 URD L2 2005Systèmes d’exploitation

Processus à Un ou Plusieurs ThreadsProcessus à Un ou Plusieurs Threads

Page 3: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.3 URD L2 2005Systèmes d’exploitation

AvantagesAvantages

Réactivité

Partage de Ressources

Economie

Utilisation d’Architectures MP

Page 4: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.4 URD L2 2005Systèmes d’exploitation

Threads UtilisateurThreads Utilisateur

Gestion des threads faite par la bibliothèqueau niveau utilisateur

Trois bibliothèques de threads assez utilisées: Pthreads

Threads Java

Threads Win32

Page 5: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.5 URD L2 2005Systèmes d’exploitation

Threads NoyauThreads Noyau

Supportés par le noyau

Exemples Windows XP/2000

Solaris

Linux

Tru64 UNIX

Mac OS X

Page 6: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.6 URD L2 2005Systèmes d’exploitation

Modèles de MultithreadingModèles de Multithreading

Plusieurs-à-Un

Un-à-Un

Plusieurs-à-Plusieurs

Page 7: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.7 URD L2 2005Systèmes d’exploitation

Plusieurs-à-UnPlusieurs-à-Un

Plusieurs threads utlisateurs attachés à un seul thread noyau

Exemples Solaris Green Threads

GNU Portable Threads

Page 8: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.8 URD L2 2005Systèmes d’exploitation

Modèle Plusieurs-à-UnModèle Plusieurs-à-Un

Page 9: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.9 URD L2 2005Systèmes d’exploitation

Modèle Un-à-UnModèle Un-à-Un

Chaque thread utilisateur est attaché à un thread noyau

Exemples Windows NT/XP/2000

Linux

Solaris 9 et +

Page 10: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.10 URD L2 2005Systèmes d’exploitation

Modèle Un-à-UnModèle Un-à-Un

Page 11: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.11 URD L2 2005Systèmes d’exploitation

Modèle Plusieurs-à-PlusieursModèle Plusieurs-à-Plusieurs

Permet à plusieurs threads utilisateur d’être attachés à plusieurs threads noyaux

Permet à l’OS de créer un nombre suffisant de threads noyau

Version de Solaris < 9

Windows NT/2000 avec le package ThreadFiber

Page 12: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.12 URD L2 2005Systèmes d’exploitation

Modèle Plusieurs-à-PlusieursModèle Plusieurs-à-Plusieurs

Page 13: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.13 URD L2 2005Systèmes d’exploitation

Modèle à Deux NiveauxModèle à Deux Niveaux

Similaire à P:P, sauf qu’il permet à un thread utilisateur d’être lié à un thread noyau

Exemples IRIX

HP-UX

Tru64 UNIX

Solaris 8 et -

Page 14: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.14 URD L2 2005Systèmes d’exploitation

Modèle à Deux NiveauxModèle à Deux Niveaux

Page 15: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.15 URD L2 2005Systèmes d’exploitation

Questions du ThreadingQuestions du Threading

Sémantiques des appels système fork() et exec()

Suppression d’un thread

Gestion des signaux

Pools de threads

Données spécifiques à un thread

Activations de l’ordonnanceur

Page 16: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.16 URD L2 2005Systèmes d’exploitation

Sémantiques de fork() et exec()Sémantiques de fork() et exec()

Est-ce que fork() duplique seulement le thread appelant ou tous les threads ?

Page 17: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.17 URD L2 2005Systèmes d’exploitation

Suppression d’un ThreadSuppression d’un Thread

Terminaison d’un thread avant sa fin

Deux approches générales: Terminaison asynchrone termine le thread immédiatement

Terminaison différée permet au thread de vérifier périodiquement s’il devrait être supprimé

Page 18: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.18 URD L2 2005Systèmes d’exploitation

Gestion des SignauxGestion des Signaux

Signals are used in UNIX systems to notify a process that a particular event has occurred

A signal handler is used to process signals

1. Signal is generated by particular event

2. Signal is delivered to a process

3. Signal is handled

Options: Deliver the signal to the thread to which the signal applies

Deliver the signal to every thread in the process

Deliver the signal to certain threads in the process

Assign a specific threa to receive all signals for the process

Page 19: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.19 URD L2 2005Systèmes d’exploitation

Thread PoolsThread Pools

Créer un nombre de threads dans un pool où ils attendent d’être utilisés

Avantages: Il est plus rapide de répondre à une requête avec un thread existant

qu’en créant un nouveau

Permet au nombre de threads dans une application de se limiter à la taille du pool

Page 20: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.20 URD L2 2005Systèmes d’exploitation

Données Spécifiques à un ThreadDonnées Spécifiques à un Thread

Permet à chaque thread d’avoir sa propre copie de données

Utile quand on n’a pas le contrôle sur la création d’un thread (i.e., en utilisant un pool de threads)

Page 21: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.21 URD L2 2005Systèmes d’exploitation

Activation de l’OrdonnanceurActivation de l’Ordonnanceur

Les modèles P:P et à deux niveaux requièrent le maintien du nombre approprié de threads noyau alloués à l’application

Les activations de l’ordonnanceur fournissent des upcalls – un mécanisme de communication du noyau vers la bibliothèque de threads

Cette communication permet à l’application le nombre correct de threads noyau

Page 22: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.22 URD L2 2005Systèmes d’exploitation

PthreadsPthreads

Un standard POSIX (IEEE 1003.1c) une API pour la création et la synchronisation des threads

L’API spécifie le comportement d’une bibliothèque de threads, l’implémentation étant laissée aux développeurs

Utilisée dans différents OSs UNIX (Solaris, Linux, Mac OS X)

Page 23: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.23 URD L2 2005Systèmes d’exploitation

PthreadsPthreadsint sum; /* this data is shared by the thread(s) */void *runner(void *param); /* the thread */

main(int argc, char *argv[]){ pthread_t tid; /* the thread identifier */ pthread_attr_t attr; /* set of attributes for the thread */ /* get the default attributes */ pthread_attr_init(&attr); /* create the thread */ pthread_create(&tid,&attr,runner,argv[1]); /* now wait for the thread to exit */ pthread_join(tid,NULL); printf("sum = %d\n",sum);}

void *runner(void *param) { int upper = atoi(param); int i; sum = 0; if (upper > 0) { for (i = 1; i <= upper; i++) sum += i; } pthread_exit(0);}

Page 24: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.24 URD L2 2005Systèmes d’exploitation

Threads WindowsThreads Windows

Implémente le modèle Un-à-Un

Chaque thread comporte Un id

Ensemble de registres

Piles utilisateur et noyau séparés

Espace de stockage de données séparé

L’ensemble de registres, piles, et l’espace de stockage privé constituent contexte d’un thread

Les structures de données d’un thread sont: ETHREAD (executive thread block)

KTHREAD (kernel thread block)

TEB (thread environment block)

Page 25: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.25 URD L2 2005Systèmes d’exploitation

Threads LinuxThreads Linux

Linux parle plutôt de tâches

La création de threads se fait à l’aide de l’appel système clone()

clone() permet à une tâche fils de partager l’espace d’adressage de la tâche parent (processus)

Page 26: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.26 URD L2 2005Systèmes d’exploitation

Threads ThreadsThreads Threads

Les threads Java sont gérés par la JVM

Les threads Java peuvent être créés par:

Extension de la classe Thread

Implémentation de l’interface Runnable

Page 27: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.27 URD L2 2005Systèmes d’exploitation

Extension de la Classe ThreadExtension de la Classe Thread

class Worker1 extends Thread

{

public void run() {

System.out.println("I Am a Worker Thread");

}

}

public class First

{

public static void main(String args[]) {

Worker1 runner = new Worker1();

runner.start();

System.out.println("I Am The Main Thread");

}

}

Page 28: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.28 URD L2 2005Systèmes d’exploitation

L’Interface RunnableL’Interface Runnable

public interface Runnable

{

public abstract void run();

}

Page 29: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.29 URD L2 2005Systèmes d’exploitation

Implementation de l’Interface RunnableImplementation de l’Interface Runnable

class Worker2 implements Runnable

{

public void run() {

System.out.println("I Am a Worker Thread ");

}

}

public class Second

{

public static void main(String args[]) {

Runnable runner = new Worker2();

Thread thrd = new Thread(runner);

thrd.start();

System.out.println("I Am The Main Thread");

}

}

Page 30: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.30 URD L2 2005Systèmes d’exploitation

Etats des Thread Java Etats des Thread Java

Page 31: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.31 URD L2 2005Systèmes d’exploitation

Lier des ThreadsLier des Threads

class JoinableWorker implements Runnable{ public void run() { System.out.println("Worker working"); }}

public class JoinExample{ public static void main(String[] args) { Thread task = new Thread(new JoinableWorker()); task.start(); try { task.join(); } catch (InterruptedException ie) { } System.out.println("Worker done"); }}

Page 32: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.32 URD L2 2005Systèmes d’exploitation

Suppression d’un ThreadSuppression d’un Thread

Thread thrd = new Thread (new InterruptibleThread());Thrd.start();

. . .

// now interrupt itThrd.interrupt();

Page 33: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.33 URD L2 2005Systèmes d’exploitation

Suppression d’un ThreadSuppression d’un Thread

public class InterruptibleThread implements Runnable { public void run() { while (true) { /** * do some work for awhile */

if (Thread.currentThread().isInterrupted()) { System.out.println("I'm interrupted!"); break; } }

// clean up and terminate }}

Page 34: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.34 URD L2 2005Systèmes d’exploitation

Données Spécifiques à un ThreadDonnées Spécifiques à un Thread

class Service{ private static ThreadLocal errorCode = new ThreadLocal();

public static void transaction() { try { /** * some operation where an error may occur */ catch (Exception e) { errorCode.set(e); } }

/** * get the error code for this transaction */ public static Object getErrorCode() { return errorCode.get(); }}

Page 35: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.35 URD L2 2005Systèmes d’exploitation

Données Spécifiques à un ThreadDonnées Spécifiques à un Thread

class Worker implements Runnable{ private static Service provider;

public void run() { provider.transaction(); System.out.println(provider.getErrorCode()); }}

Page 36: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.36 URD L2 2005Systèmes d’exploitation

Problème du Producteur-ConsommateurProblème du Producteur-Consommateur

public class Factory { public Factory() { // first create the message buffer Channel mailBox = new MessageQueue(); // now create the producer and consumer threads Thread producerThread = new Thread(new Producer(mailBox)); Thread consumerThread = new Thread(new Consumer(mailBox)); producerThread.start(); consumerThread.start(); }

public static void main(String args[]) { Factory server = new Factory(); }}

Page 37: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.37 URD L2 2005Systèmes d’exploitation

Thread ProducteurThread Producteur

class Producer implements Runnable{ private Channel mbox;

public Producer(Channel mbox) { this.mbox = mbox; } public void run() { Date message; while (true) { SleepUtilities.nap(); message = new Date(); System.out.println("Producer produced " + message); // produce an item & enter it into the buffer mbox.send(message); } }}

Page 38: 5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads

5.38 URD L2 2005Systèmes d’exploitation

Thread ConsommateurThread Consommateur

class Consumer implements Runnable{ private Channel mbox;

public Consumer(Channel mbox) { this.mbox = mbox; }

public void run() { Date message; while (true) { SleepUtilities.nap(); // consume an item from the buffer System.out.println("Consumer wants to consume."); message = (Date)mbox.receive(); if (message != null) System.out.println("Consumer consumed " + message); } } }