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.

Slides:



Advertisements
Présentations similaires
ORTHOGRAM PM 3 ou 4 Ecrire: « a » ou « à » Référentiel page 6
Advertisements

LES NOMBRES PREMIERS ET COMPOSÉS
[number 1-100].
Module Systèmes d’exploitation
Qualité du Premier Billot. 2 3 Défauts reliés à labattage.
1. Résumé 2 Présentation du créateur 3 Présentation du projet 4.
Module Systèmes d’exploitation
GEF 435 Principes des systèmes d’exploitation
Synchronisation des processus père - fils
GEF 435 Principes des systèmes d’exploitations
GEF 435 Principes des systèmes dexploitation Concepts des Systèmes dexploitation (Tanenbaum 1.5)
Cours MIAGE « Architectures Orientées Services » Henry Boccon-Gibod 1 Architectures Orientées Services Composants de Service Exemple pratique de développement.
Formation Technique 6èmepartie.
Présentation de l’Architecture Windows NT
PLAN du COURS Introduction Structure des Systèmes Informatiques
Conception et programmation Programmation Parallèle
Objectif de l’exposé.
Mémoire & Processus Cours SE - SRC
La diapo suivante pour faire des algorithmes (colorier les ampoules …à varier pour éviter le « copiage ») et dénombrer (Entoure dans la bande numérique.
Description du fonctionnement d'un système 1 Clic Clic
2 1. Vos droits en tant quusagers 3 1. Vos droits en tant quusagers (suite) 4.
Mr: Lamloum Med LES NOMBRES PREMIERS ET COMPOSÉS Mr: Lamloum Med.
ARCHITECTURE GLOBALE CAPTAGE Traitement DES des données GRANDEURS
Page 1 Introduction à ATEasy 3.0 Page 2 Quest ce quATEasy 3.0? n Ensemble de développement très simple demploi n Conçu pour développer des bancs de test.
PAFI Référentiel de données par Sonia Watts DGIF (Direction de la gestion et de linformation forestière) 27 octobre 2010 et 3 novembre 2010.
Vuibert Systèmes dinformation et management des organisations 6 e édition R. Reix – B. Fallery – M. Kalika – F. Rowe Chapitre 1 : La notion de système.
Gestion des Périphériques
Synchronisation et communication entre processus
2-1 CIRCUITS ÉLECTRIQUES SIMPLES
1 Guide de lenseignant-concepteur Vincent Riff 27 mai 2003.
1 Threads et Lightweight Processes Chapitre 5 En français on utilise parfois flots ou fils pour threads. Votre manuel préfère le mot anglais thread : terminologie.
Système d’exploitation
Bienvenue! INF3723: Systèmes d’exploitation Luigi Logrippo
Titre : Implémentation des éléments finis sous Matlab
Configuration de Windows Server 2008 Active Directory
Présentation des documents administratifs
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
LES NOMBRES PREMIERS ET COMPOSÉS
5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads.
La Saint-Valentin Par Matt Maxwell.
Développer en C avec Eclipse Introduction Création d'un projet Ajout de fichiers Compilation Exécution Utiliser le débogueur Département dinformatique.
Représentation des systèmes dynamiques dans l’espace d’état
Représentation des systèmes dynamiques dans l’espace d’état
Programmation concurrente
1.1 LES VECTEURS GÉOMÉTRIQUES
Tournoi de Flyball Bouin-Plumoison 2008 Tournoi de Flyball
Notre calendrier français MARS 2014
Module 3 - Fils (Threads)
CSI3531 – Labo 1 Lobservation du comportement de processus.
Portail CVM Vision pédagogique.
Équipe 2626 Octobre 2011 Jean Lavoie ing. M.Sc.A.
LA GESTION COLLABORATIVE DE PROJETS Grâce aux outils du Web /03/2011 Académie de Créteil - Nadine DUDRAGNE 1.
Traitement de différentes préoccupations Le 28 octobre et 4 novembre 2010.
CALENDRIER-PLAYBOY 2020.
Architecture Chapitre 4 Interruptions. 2 Plan Principe Schéma d’acquisition Les états d’une interruption Décentralisation des interruptions Exemples.
Les Chiffres Prêts?
AFPA CRETEIL 1-1 Windows NT Environnement Windows NT Chapitre 1.
Projet Implémentation du protocole MMT sous Linux
NOTIONS DE BASE DES SYSTÈMES TEMPS-RÉEL Sujets Concepts de processus/thread concurrents –Windows NT et la programmation temps réel Lectures: Chapitres.
La programmation système
Programmation Système et Réseau
Processus Légers. Rappel sur le fork() fork() Processus 1 Pile Data Text Processus 2 Pile Data Text.
Structure des Systèmes Informatiques
Les Processus.
Gestion des Tâches Les Processus. Un système multitâches La carte mère comporte Le Processeur (calcul et attente) Les jeux de composants spécialisés (entrées-sorties.
1 UNIX AVANCE Yves PAGNOTTE – Janvier – LES PROCESSUS SOUS UNIX.
1 Module 3 - Fils (Threads) Lecture: Chapitre 4 (Silberschatz) Objectif:  Comprendre le concept de fils et sa relation avec le processus  Comprendre.
Threads et Lightweight Processes
Threads et Lightweight Processes
Transcription de la présentation:

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 et sa relation avec le processus Comprendre comment le systèmes dexploitations gèrent et utilisent les fils. Comprendre comment le systèmes dexploitations gèrent et utilisent les fils.

2 Sujets La fil dexé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

3 Caractéristiques des processus Unité de possession de ressources - un processus possède: un espace virtuel adressable contenant limage du processus autre ressources (fichiers, unités E/S...) Unité dexécution (dispatching) - un processus sexécute le long dun chemin parmi plusieurs programmes exécution simbriquant parmi lexécution de plusieurs processus le processus possède un état dexécution et une priorité pour lordonnancement

4 Processus Possède sa mémoire, ses fichiers, ses ressources, etc. Accès protégé à la mémoire, fichiers, ressources dautres processus

5 Caractéristiques des processus Ces 2 caractéristiques sont perçues comme indépendantes par certains SE Lunité dexécution est habituellement désigné par fil dexécution Lunité de possession de ressources est habituellement désigné par processus

6 Unité de possession de ressources Relier aux composantes suivantes de limage dun processus La partie du BCP qui contient identification et structures aux ressources Mémoire contenant le code dexécution Mémoire contenant les données globales Code dexécution Données globales Identification Structures de données Pile usager Pile noyau État de processeur Ordonnan. BCP Mémoire usager Piles Image de processus

7 Unité dexécution Relier aux composantes suivantes de limage dun processus BCP État de processeur Structure dordonnancement Piles Code dexécution Données globales Identification Structures de données Pile usager Pile noyau État de processeur Ordonnan. BCP Mémoire usager Piles Image de processus

8 Sujets La fil dexé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

9 Fils = Flots = threads = lightweight processes Un thread est une subdivision d`un processus Un fil de contrôle dans un processus Les différents threads d un processus partagent lespace adressable et les ressources dun processus lorsquun 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)

10 Exemple 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

11 Processus à un thread et à plusieurs threads Mono-flot Multi-flots

12 Threads et processus [Stallings]

13 Thread Possède un état dexécution (prêt, bloqué…) Possède sa pile et un espace privé pour variables locales A accès à lespace adressable, fichiers et ressources du processus auquel il appartient En commun avec les autres threads du même proc

14 Pourquoi les threads Réactivité: un processus peut être subdivisé en plusieurs threads, p.ex. lun dédié à linteraction avec les usagers, lautre dédié à traiter des données Lun peut exécuter tant que lautre est bloqué Utilisation de multiprocesseurs: les threads peuvent exécuter en parallèle sur des UCT différentes

15 La commutation entre threads est moins dispendieuse que la commutation 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 dun 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

16 La communication aussi est moins dispendieuse entre threads quentre processus É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

17 La 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 dun proc

18 Threads de noyau (kernel) et dutilisateur Où implémenter les threads: Dans les bibliothèques dusager contrôlés par lusager 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

19 Threads dutilisateur et de noyau (kernel) threads dutilisateur: supportés par des bibliothèques dusager 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

20 Solutions 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)

21 Plusieurs threads utilisateur pour un thread noyau: lusager 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

22 Un vers un: le SE contrôle les threads Les ops sur les threads sont des appels du système Permet à un autre thread de sexécuter lorsquun thread exécute un appel de système bloquant Win NT, XP, OS/2 Linux, Solaris 9

23 Plusieurs à plusieurs: solution mixte (M:M – many to many) Utilise tant les threads utilisateur, que les threads noyau Flexibilité pour l utilisateur d utiliser la technique quil 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 sexécuter en même temps Quelques versions dUnix, dont Solaris avant la version 9 Windows NT/2000 avec le ThreadFiber package

24 Modèle à deux niveaux Semblable au M:M, mais permet dattacher un fil dutilisateur à un fil noyau Exemples IRIX HP-UX Tru64 UNIX Solaris 8 et avant

25 Multithreads 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

26 Sujets La fil dexé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

27 Défis du Threading Que cest beau davoir des fils, mais que sont les conséquences au niveau pratique? Défis: Sémantique des appels systèmes fork() et exec() Lannulation des threads Les signaux Un groupement de thread (pools) Les données spécifiques des threads Lordonnancement

28 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? Quest ce que exec() fait? Il remplace lespace dadresse, donc tous les fils sont remplacés

29 Lannulation du thread (cancellation) La terminaison du thread avant quil 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 sil devra annuler son exécution Donne une terminaison en douceur

30 Les signaux Les signaux en UNIX sont utilisés pour avisé un processus larrivé dun é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

31 Les groupements de fils (Thread 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 nas lieu quau début à la création du groupe de fils Le nombre de fils exécutant est limité par la grandeur du groupe

32 Les données spécifiques aux fils Permet à chaque fil davoir 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).

33 Lordonnancement (scheduler activations) La communication du noyau est nécessaire pour informé la bibliothèque de fil usage quun fil sera bloqué et par la suite quand il sera prêt pour lexé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é).

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

35 Sujets La fil dexé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

36 Exemples de bibliothèques de fil Pthreads Win32 Java threads

37 Pthreads Une norme POSIX (IEEE c) dun 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 dopérations UNIX (Solaris, Linux, Mac OS X) Fonctions typiques: pthread_create (&threadid,&attr,start_routine,arg) pthread_create pthread_exit (status) pthread_exit pthread_join (threadid,status) pthread_join pthread_attr_init (&attr) pthread_attr_init

38

39 Exercice de programmation avec fils Objectif: É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 dordre 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?

40 La multiplication de matrice avec multi-fils Idé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 0 Thread 1 Thread 2 Thread 3 Thread 4 Thread 5

41 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 */ …

42 Allons-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); }

43 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, …

44 API du thread Win32 // création dun 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); }

45 Threads Java Les fils Java sont crées avec un appel à la méthode start() dune classe qui Étend (extend) la classe Thread, ou Utilise linterface 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.

46 Étendre 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"); }

47 Linterface 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"); }

48 Joindre 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"); }

49 Lannulation de Thread Thread thrd = new Thread (new InterruptibleThread()); Thrd.start();... // now interrupt it Thrd.interrupt();

50 Lannulation de 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 }

51 Données privées du 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(); }

52 Données privées du Thread class Worker implements Runnable { private static Service provider; public void run() { provider.transaction(); System.out.println(provider.getErrorCode()); }

53 Exemples dImplémentation de fil chez les E/S Windows XP Linux Java

54 Threads du Windows XP Modèle un à un Chaque fil contient Un identificateur de fil (id) Un ensemble de registres Différentes piles dutilisateur et de noyau Mémoire privée de données Lensemble de registres, les piles, et la mémoire privée forme le contexte du fil Les structures principales de données dun fil comprend: ETHREAD (executive thread block) KTHREAD (kernel thread block) TEB (thread environment block)

55 Threads de Windows XP

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

57 Le 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 dimpression produit des caractères -- consommés par une imprimante un assembleur produit des modules objet qui seront consommés par le chargeur Nécessité dun tampon pour stocker les items produits (attendant dêtre consommés)

58 Tampons de communication Prod Cons 1 donn Prod Cons 1 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

59 Le tampon borné (bounded buffer) une 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

60 Le pb du producteur - consommateur public 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(); }

61 Fil producteur class 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); }

62 Fil consommateur class 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); }