62
1 Module 3 - Fils Module 3 - Fils (Threads) (Threads) Lecture: Chapitre 4 Lecture: Chapitre 4 Objectif: Objectif: Comprendre le concept de fils et sa Comprendre le concept de fils et sa relation avec le processus relation avec le processus Comprendre comment le systèmes Comprendre comment le systèmes d’exploitations gèrent et utilisent les d’exploitations gèrent et utilisent les fils. fils.

1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

Embed Size (px)

Citation preview

Page 1: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

1

Module 3 - Fils (Threads)Module 3 - Fils (Threads)

Lecture: Chapitre 4Lecture: Chapitre 4

Objectif: Objectif: Comprendre le concept de fils et sa relation Comprendre le concept de fils et sa relation avec le processusavec le processus Comprendre comment le systèmes Comprendre comment le systèmes d’exploitations gèrent et utilisent les fils.d’exploitations gèrent et utilisent les fils.

Page 2: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

2

SujetsSujets

La fil d’exécution chez les processus

Multi-fils versus fil unique (le thread) Les fils niveau usager et les fils niveau noyau

Les défis du « Threading »

Exemples de fils

Page 3: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

3

Caractéristiques des processusCaractéristiques des processus Unité de possession de ressources - un

processus possède: un espace virtuel adressable contenant l’image

du processus autre ressources (fichiers, unités E/S...)

Unité d’exécution (dispatching) - un processus s’exécute le long d’un chemin parmi plusieurs programmes exécution s’imbriquant parmi l’exécution de

plusieurs processus le processus possède un état d’exécution et

une priorité pour l’ordonnancement

Page 4: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

4

ProcessusProcessus

Possède sa mémoire, ses fichiers, ses ressources, etc.

Accès protégé à la mémoire, fichiers, ressources d’autres processus

Page 5: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

5

Caractéristiques des processusCaractéristiques des processus

Ces 2 caractéristiques sont perçues comme indépendantes par certains SE

L’unité d’exécution est habituellement désigné par fil d’exécution

L’unité de possession de ressources est habituellement désigné par processus

Page 6: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

6

Unité de possession de ressourcesUnité de possession de ressources

Relier aux composantes suivantes de l’image d’un processus La partie du BCP qui

contient identification et structures aux ressources

Mémoire contenant le code d’exécution

Mémoire contenant les données globales

Code d’exécution

Donnéesglobales

IdentificationStructures de

données

Pileusager

Pile noyau

État de processeurOrdonnan.

BCP

Mémoireusager

Piles

Image de processus

Page 7: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

7

Unité d’exécutionUnité d’exécution

Relier aux composantes suivantes de l’image d’un processus BCP

État de processeur Structure

d’ordonnancement Piles

Code d’exécution

Donnéesglobales

IdentificationStructures de

données

Pileusager

Pile noyau

État de processeurOrdonnan.

BCP

Mémoireusager

Piles

Image de processus

Page 8: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

8

SujetsSujets

La fil d’exécution chez les processus

Multi-fils versus fil unique (le thread) Les fils niveau usager et les fils niveau noyau

Les défis du « Threading »

Exemples de fils

Page 9: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

9

Fils = Flots = threads = lightweight Fils = Flots = threads = lightweight processesprocesses

Un thread est une subdivision d`un processus Un fil de contrôle dans un processus

Les différents threads d ’un processus partagent l’espace adressable et les ressources d’un processus lorsqu’un thread modifie une variable (non

locale), tous les autres threads voient la modification

un fichier ouvert par un thread est accessible aux autres threads (du même processus)

Page 10: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

10

ExempleExemple

Le processus MS-Word implique plusieurs threads: Interaction avec le clavier Rangement de caractères sur la page Sauvegarde régulière du travail fait Contrôle orthographe Etc.

Ces threads partagent tous le même document

Page 11: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

11

Processus à un thread et à plusieurs Processus à un thread et à plusieurs threadsthreads

Mono-flot Multi-flots

Page 12: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

12

Threads et processus Threads et processus [Stallings][Stallings]

Page 13: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

13

ThreadThread

Possède un état d’exécution (prêt, bloqué…) Possède sa pile et un espace privé pour

variables locales A accès à l’espace adressable, fichiers et

ressources du processus auquel il appartient En commun avec les autres threads du même

proc

Page 14: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

14

Pourquoi les threadsPourquoi les threads

Réactivité: un processus peut être subdivisé en plusieurs threads, p.ex. l’un dédié à l’interaction avec les usagers, l’autre dédié à traiter des données L’un peut exécuter tant que l’autre est bloqué

Utilisation de multiprocesseurs: les threads peuvent exécuter en parallèle sur des UCT différentes

Page 15: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

15

La commutation entre threads est La commutation entre threads est moins dispendieuse que la moins dispendieuse que la commutation entre processuscommutation entre processus Un processus possède mémoire, fichiers,

autres ressources Changer d`un processus à un autre

implique sauvegarder et rétablir l’état de tout ça

Changer d’un thread à un autre dans le même proc est bien plus simple, implique sauvegarder les registres de l ’UCT, la pile, et peu d ’autres choses

Page 16: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

16

La communication aussi est moins La communication aussi est moins dispendieuse entre threads qu’entre dispendieuse entre threads qu’entre processusprocessus

Étant donné que les threads partagent leur mémoire, la communication entre threads dans un même

processus est plus efficace que la communication entre processus

Page 17: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

17

La création est moins dispendieuseLa création est moins dispendieuse

La création et terminaison de nouveaux threads dans un proc existant est aussi moins dispendieuse que la création d’un proc

Page 18: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

18

Threads de noyau (kernel) et d’utilisateurThreads de noyau (kernel) et d’utilisateur

Où implémenter les threads: Dans les bibliothèques d’usager

contrôlés par l’usager POSIX Pthreads, Java threads, Win32 threads

Dans le noyau du SE: contrôlés par le noyau Windows XP/2000, Solaris, Linux, True64 UNIX,

Mac OS X Solutions mixtes

Solaris 2, Windows 2000/NT

Page 19: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

19

Threads d’utilisateur et de noyau Threads d’utilisateur et de noyau (kernel)(kernel)

threads d’utilisateur: supportés par des bibliothèques d’usager ou langage de prog efficace car les ops sur les threads ne demandent pas des

appels du système désavantage: le noyau n ’est pas capable de distinguer

entre état de processus et état des threads dans le processus

blocage d ’un thread implique blocage du processus threads de noyau: supportés directement par le

noyau du SE (WIN NT, Solaris) le noyau est capable de gérer directement les états des

threads Il peut affecter différents threads à différentes UCTs

Page 20: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

20

Solutions mixtes: threads utilisateur et noyauSolutions mixtes: threads utilisateur et noyau

Relation entre threads utilisateur et threads noyau plusieurs à un un à un plusieurs à plusieurs (2 modèles)

Nous devons prendre en considération plusieurs niveaux: Processus Thread usager Thread noyau Processeur (UCT)

Page 21: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

21

Plusieurs threads utilisateur pour un thread noyau:Plusieurs threads utilisateur pour un thread noyau:l’usager contrôle les threadsl’usager contrôle les threads

Le SE ne connaît pas les threads utilisateur v. avantages et désavantages mentionnés avant

Exemples Solaris Green Threads GNU Portable Threads

Page 22: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

22

Un vers un: Un vers un: le SE contrôle les threadsle SE contrôle les threads

Les ops sur les threads sont des appels du système Permet à un autre thread de s’exécuter lorsqu’un

thread exécute un appel de système bloquant Win NT, XP, OS/2 Linux, Solaris 9

Thread utilisateur

Thread noyau

Page 23: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

23

Plusieurs à plusieurs: solution mixte (M:M – Plusieurs à plusieurs: solution mixte (M:M – many to many)many to many)

Utilise tant les threads utilisateur, que les threads noyau

Flexibilité pour l ’utilisateur d ’utiliser la technique qu’il préfère

Si un thread utilisateur bloque, son kernel thread peut être affecté à un autre

Si plus. UCT sont disponibles, plus. kernel threads peuvent s’exécuter en même temps

Quelques versions d’Unix, dont Solaris avant la version 9

Windows NT/2000 avec le ThreadFiber package

Page 24: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

24

Modèle à deux niveauxModèle à deux niveaux

Semblable au M:M, mais permet d’attacher un fil d’utilisateur à un fil noyau

Exemples IRIX HP-UX Tru64 UNIX Solaris 8

et avant

Page 25: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

25

Multithreads et monothreadsMultithreads et monothreads

MS-DOS supporte un processus usager à monothread

UNIX SVR4 supporte plusieurs processus à monothread

Solaris, Widows NT, XP et OS2 supportent plusieurs processus multithreads

Page 26: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

26

SujetsSujets

La fil d’exécution chez les processus

Multi-fils versus fil unique (le thread) Les fils niveau usager et les fils niveau noyau

Les défis du « Threading »

Exemples de fils

Page 27: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

27

Défis du “Threading”Défis du “Threading”

Que c’est beau d’avoir des fils, mais que sont les conséquences au niveau pratique?

Défis: Sémantique des appels systèmes fork() et exec() L’annulation des threads Les signaux Un groupement de thread (pools) Les données spécifiques des threads L’ordonnancement

Page 28: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

28

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

Est-ce que fork() copie seulement le fil appelant ou tous les fils? Souvent deux versions disponibles Lequel utiliser?

Qu’est ce que exec() fait? Il remplace l’espace d’adresse, donc tous les

fils sont remplacés

Page 29: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

29

L’annulation duL’annulation du thread (cancellation) thread (cancellation)

La terminaison du thread avant qu’il soit fini. Deux approches générales:

Annulation asynchrone qui termine le fils immédiatement

Peut laisser les données partagées dans un mauvaise état

Certaines ressources ne sont pas libérées. Annulation différé

Utilise un drapeau que le fils vérifie pour voir s’il devra annuler son exécution

Donne une terminaison en douceur

Page 30: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

30

Les signauxLes signaux Les signaux en UNIX sont utilisés pour avisé un

processus l’arrivé d’un évènement En pratique, une interruption logique Un programme de service répond au signaux

Un signal est créer par un évènement particulier Le signal est livré à un processus Le programme de service exécute

Options: Livrer le signal au fil correspondant Livrer le signal à tous les fils du processus Livrer le signal à certains fils du processus Affecte un fil pour composer avec tous les signaux

Page 31: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

31

Les groupements de filsLes groupements de fils (Thread (Thread Pools)Pools)

Un processus serveur peut desservir ses demandes en créant un fil pour chaque demande La création de fil prend du temps Aucun contrôle sur le nombre de fils, ce qui peut

accroître la charge du système. Solution

Créons un certain nombre de fils qui attendent du travail Avantages:

Le temps de création n’as lieu qu’au début à la création du groupe de fils

Le nombre de fils exécutant est limité par la grandeur du groupe

Page 32: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

32

Les données spécifiques aux filsLes données spécifiques aux fils

Permet à chaque fil d’avoir une copie privée de données

Pratique lorsque le contrôle de la création du fil est limité (i.e. dans un groupe de fils).

Page 33: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

33

L’ordonnancement (scheduler L’ordonnancement (scheduler activations)activations)

La communication du noyau est nécessaire pour informé la bibliothèque de fil usage qu’un fil sera bloqué et par la suite quand il sera prêt pour l’exécution. Modèle plusieurs à plusieurs Modèle à deux niveaux

À ces évènements, le noyau fait un appel vers la bibliothèque de fil (upcall)

Le programme de service de ces appels compose avec l’évènement (i.e. sauvegarde l’état du fil et le change à l’état bloqué).

Page 34: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

34

Processus 2 est équivalent à une approche ULTProcessus 4 est équivalent à une approche KLTNous pouvons ajuster le degré de parallélisme du noyau (processus 3 et 5)Stallings

Page 35: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

35

SujetsSujets

La fil d’exécution chez les processus

Multi-fils versus fil unique (le thread) Les fils niveau usager et les fils niveau noyau

Les défis du « Threading »

Exemples de fils

Page 36: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

36

Exemples de bibliothèques de filExemples de bibliothèques de fil

Pthreads Win32 Java threads

Page 37: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

37

PthreadsPthreads

Une norme POSIX (IEEE 1003.1c) d’un API pour la création et synchronisation de fils

Le API spécifie le comportement de la bibliothèque de fil (sa réalisation dépend du développeur)

Commun dans les systèmes d’opérations UNIX (Solaris, Linux, Mac OS X)

Fonctions typiques: pthread_create (&threadid,&attr,start_routine,arg) pthread_exit (status) pthread_join (threadid,status) pthread_attr_init (&attr)

Page 38: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

38

Page 39: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

3939

Exercice de programmation avec filsExercice de programmation avec filsObjectif: Écrire un programme de multiplication de matrice avec plusieurs fils, pour profiter de plusieurs UCTs.

Programme pour la multiplication avec mono-fil de matrice A et B d’ordre n x n

for(i=0; i<n; i++)for(j=0; j<n; j++) {

C[i,j] = 0;for(k=0; k<n; k++)

C[i,j] += A[i,k] * B[k,j];}

Pour rendre notre vie plus facile:On a 6 UCTs et n est un multiple de 6

Comment commencer? Des idées?

Page 40: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

4040

La multiplication de matrice avec multi-filsLa multiplication de matrice avec multi-filsIdée:

• création de 6 fils• chaque fil résout 1/6 de la matrice C• attendons la fin des 6 fils• la matrice C peut maintenant être utilisée

Thread 0Thread 1Thread 2Thread 3Thread 4Thread 5

Page 41: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

4141

Allons-y!Allons-y!pthread_t tid[6];pthread_attr_t attr;int i;

pthread_init_attr(&attr);for(i=0; i<6; i++) /* création des fils de travail */

pthread_create( &tid[i], &attr, travailleur, &i);

for(i=0; i<6; i++) /* attendons que tous soient fini */pthread_join(tid[i], NULL);

/* la matrice C peut maintenant être utilisée */…

Page 42: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

4242

Allons-yAllons-y!!void *travailleur(void *param) {

int i,j,k;int id = *((int *) param); /* interprétons le param come pointeur à un entier */int bas = id*n/6; int haut = (id+1)*n/6;

for(i=bas; i<haut; i++)for(j=0; j<n; j++) {

C[i,j] = 0;for(k=0; k<n; k++)

C[i,j] = A[i,k]*B[k,j];}

pthread_exit(0);}

Page 43: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

4343

Allons-y!Allons-y!Ca fonctionne?

• A-t-on besoin de passer A, B, C et n comme paramètre?• non, ils sont dans la mémoire partagée, on est bon

• Est ce que les IDs ont bien été passés?• pas vraiment, les pointeurs reçoivent tous la même adresse.

int id[6];..for(i=0; i<6; i++) /* create the working threads */ {

id[i] = i;pthread_create( &tid[i], &attr, worker, &id[i]);

}

Maintenant ça fonctionne?• devrait, …

Page 44: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

44

API du thread Win32API du thread Win32// création d’un thread ThreadHandle = CreateThread(

NULL, // default security attributes 0, // default stack size Summation, // function to execute &Param, // parameter to thread function 0, // default creation flags &ThreadId); // returns the thread ID

if (ThreadHandle != NULL) { WaitForSingleObject(ThreadHandle, INFINITE);

CloseHandle(ThreadHandle); printf("sum = %d\n",Sum);

}

Page 45: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

45

Threads JavaThreads Java Les fils Java sont crées avec un appel à

la méthode start() d’une classe qui Étend (extend) la classe Thread, ou Utilise l’interface Runnable:

public interface Runnable{ public abstract void run();}

Les fils Java sont une partie importante du langage Java qui offre un API riche de fonctions.

Page 46: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

46

Étendre la classe ThreadÉtendre la classe Threadclass 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 47: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

47

L’interface RunnableL’interface Runnableclass 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 48: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

48

Joindre des ThreadsJoindre des Threadsclass 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 49: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

49

L’annulation de ThreadL’annulation de Thread

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

. . .

// now interrupt itThrd.interrupt();

Page 50: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

50

L’annulation de ThreadL’annulation de Threadpublic 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 51: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

51

Données privées du ThreadDonnées privées du Threadclass 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 52: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

52

Données privées du ThreadDonnées privées du Thread

class Worker implements Runnable{ private static Service provider;

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

Page 53: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

53

Exemples d’Implémentation de fil chez Exemples d’Implémentation de fil chez les E/Sles E/S

Windows XP Linux Java

Page 54: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

54

Threads du Windows XPThreads du Windows XP Modèle un à un Chaque fil contient

Un identificateur de fil (id) Un ensemble de registres Différentes piles d’utilisateur et de noyau Mémoire privée de données

L’ensemble de registres, les piles, et la mémoire privée forme le contexte du fil

Les structures principales de données d’un fil comprend: ETHREAD (executive thread block) KTHREAD (kernel thread block) TEB (thread environment block)

Page 55: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

55

Threads de Windows XPThreads de Windows XP

Page 56: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

56

Les fils JavaLes fils Java

Les fils Java sont gérés par le JVM

Page 57: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

57

Le pb du producteur - consommateurLe pb du producteur - consommateur

Un problème classique dans l ’étude des processus communicants un processus producteur produit des données (p.ex.des

enregistrements d ’un fichier) pour un processus consommateur

un pgm d’impression produit des caractères -- consommés par une imprimante

un assembleur produit des modules objet qui seront consommés par le chargeur

Nécessité d’un tampon pour stocker les items produits (attendant d’être consommés)

Page 58: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

58

Tampons de communicationTampons de communication

Prod

Cons

1 donn

Prod

Cons

1 donn 1 donn1 donn

Si le tampon est de longueur 1, le producteur et consommateur doivent forcement aller à la même vitesse

Des tampons de longueur plus grandes permettent une certaine indépendance. P.ex. à droite le consommateur a été plus lent

Page 59: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

59

Le tampon borné Le tampon borné (bounded buffer)(bounded buffer)une structure de données fondamentale dans les SEune structure de données fondamentale dans les SE

b[0] b[1]

b[7] b[2]

b[6] b[3]

b[4]b[5]

ou

out: 1ère pos. pleine

in: 1ère pos. libre b[0] b[1] b[7]b[2] b[6]b[3] b[4] b[5]

in: 1ère pos. libre

out: 1ère pos. pleine

bleu: plein, blanc: libre

Le tampon borné se trouve dans la mémoire partagée entre consommateur et usager

Page 60: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

60

Le pb du producteur - consommateurLe pb du producteur - consommateurpublic class Factory { public Factory() { // first create the message buffer MessageQueue 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 61: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

61

Fil producteurFil producteurclass Producer implements Runnable{ private MessageQueue mbox;

public Producer(MessageQueue 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 62: 1 Module 3 - Fils (Threads) Lecture: Chapitre 4 Objectif: Comprendre le concept de fils et sa relation avec le processus Comprendre le concept de fils

62

Fil consommateurFil consommateurclass Consumer implements Runnable{ private MessageQueue mbox;

public Consumer(MessageQueue 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); } } }