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

Slides:



Advertisements
Présentations similaires
Module Systèmes d’exploitation
Advertisements

Module Systèmes d’exploitation
GEF 435 Principes des systèmes d’exploitation
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Module Systèmes dexploitation Chapitre 6 Communication Interprocessus Partie III École Normale Supérieure Tétouan Département Informatique
GEF 435 Principes des systèmes d’exploitations
GEF 435 Principes des systèmes dexploitation Structure des systèmes dexploitation (Tanenbaum 1.7)
Conception et programmation Programmation Parallèle
Introduction aux Systèmes d’Exploitation
Parallel Programming in C with MPI and OpenMP
Système d’Exploitation
Programmation de cartes graphiques
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
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.
Processus Concept de Processus Ordonnancement de Processus
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads.
Programmation concurrente
CSI2520, Hiver 2007 Programmation concurrente. CSI2520, Hiver 2007 Programmation concurrente La programmation est distribuée lorsque les processus ne.
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.
PROGRAMMATION MULTI-TÂCHES (MULTITHREADING)
Module 3 - Fils (Threads)
Chapitre 6 : Synchronisation des processus et des fils
Synchronisation Classique
Créer des packages.
Interactions entre Processus
SYSTÈME D’EXPLOITATION I
La programmation système
Programmation Système et Réseau
NOTIONS DE BASE DES SYSTÈMES TEMPS-RÉEL Sujets Concepts de processus/thread concurrents –Windows NT et la programmation temps réel –Synchronisation et.
Processus Légers. Rappel sur le fork() fork() Processus 1 Pile Data Text Processus 2 Pile Data Text.
Constitution d'un système de preuve de propriété d'un logiciel/progiciel et Valorisation d'un patrimoine IT AGORANOV 20 octobre 2015 Henri de Hauteclocque.
1 Comment préparer un plan Document No. 2.1 Gestion des activités conjointes de lutte contre la tuberculose et le VIH: cours de formation pour responsables.
Mediator 9 - Un outil de développement multimédia 3AC Techno/Informatique.
Chapitre10 Prise en charge des utilisateurs distants Module S41.
Développement d’application avec base de données Semaine 3 : Modifications avec Entité Framework Automne 2015.
ASR5 Système pour architectures multicœurs CSC5001 : Systèmes Hautes Performances Architecte de Services informatiques Répartis Gaël Thomas
Les outils de tests 1 1 CHAKI Abderrazak - ETIENNE Jonathan - TOUMI Nacereddine - VACHER Nicolas.
UNIX AVANCE Yves PAGNOTTE – Janvier – QUELQUES RAPPELS SUR LES SYSTEMES D’EXPLOITATION 1.
1 Les bases de données Séance 7 Les fonctions avancées : Opérateurs ensemblistes, Sous-requêtes et transactions.
Un outil de communication : la liste de diffusion Mis à jour en juillet 2008 Anne Maincent-Bourdalé CRDoc IUT Paul Sabatier.
G. Botti Service de l ’Information Médicale Pr M. Fieschi Hôpital Timone-adultesMarseille le 13 novembre 2000 Problématique du codage Langage, communication,
Module S42 Chapitre 1  Présentation de l'administration des comptes et des ressources.
1 Les logiciels en général sont classés en deux familles:  Logiciels de base  Logiciels d’applications (applications) 2.
Projet Personnel (Epreuve 6) Projet réalisé dans le cadre de mon épreuve E6 au sein de mon alternance au conseil départemental du val de marne Arnaud PICANO.
Spécialisation covariante cours et TP. Plan  Introduction  Rappels théoriques  Définition de la covariance  Présentation du modèle servant d'exemple.
1 ALGORITHMIQUE AVANCEE IUT Vélizy – RT2 FA Laurent Marsan.
Automates Programmables Industriels ( ITEEM 2004 ) I.T.E.E.M de BEAULIEU Enseignante : Mme RECHID CHAPITRE 7 Le Logiciel PL7 Présentation - Ergonomie Les.
Les méthodes de tests Les grands principes pour réaliser des tests efficaces.
Réflexion sur un exemple possible de projet proposé en I.S.N.
Chapitre 6 Déploiement et gestion des logiciels à l'aide d'une stratégie de groupe Module S44.
1 Adaptation Structurelle de Composants Logiciels Stage de DEA informatique effectué à L’ENSM-Douai Encadré par Mr. Abdelhak SERIAI & Mr. Mourad OUSSALAH.
UML : méthode Processus. Introduction(1) ● Cycles ● Spécification par cas d'utilisation ● Identifier les besoins ● Analyse par cas d'utilisation ● Affiner.
Introduction à la Programmation Orientée Objet H.GATI.
Jobs multicore dans WLCG Présentation en partie basée sur des présentations faites dans le cadre du groupe de travail multicore.
1 UNIX AVANCE Yves PAGNOTTE – Janvier – RAPPELS SUR UNIX DE BASE.
Eric Fede - 1 GESTION DES PRIORITES SUR LA GRILLE.
CSI 3531 Systèmes d’exploitation Nathalie Japkowicz 1.
Human Task Service (2008) Oscar Barrios et François Charoy Human Task Service Service de tâches dans un système de gestion de workflow Oscar Barrios
On the analysis of CMMN expressiveness: revisiting workflow patterns Renata Carvalho Hafedh Mili.
Informatique 1A Langage C 6 ème séance 1. Objectifs de la séance 6  Allocation dynamique de mémoire  Application à la création de tableaux 2.
Informatique 2A Langage C 3 ème séance.
IFT359 – Programmation fonctionnelle Thème #8 Création de nouvelles formes syntaxiques 1.
Chapitre 9 Gestion des maîtres d'opérations
Les applications O.Legrand G. Seront. Les applications Chaque application a son Linux.
1 UNIX AVANCE Yves PAGNOTTE – Janvier – PROCESSUS ET RESSOURCES.
Colloque LCG France14-15 mars SURVEILLANCE ET GESTION D’INCIDENTS Cécile Barbier (LAPP)
Persistance des données O.Legrand. Persistance developer.android.com/guide/topics/data/data-storage.htmll Plusieurs moyens sur le mobile: –Système de.
Threads et Lightweight Processes
Threads et Lightweight Processes
Transcription de la présentation:

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

2 Sujets  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

3 Caracté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

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

5 Caracté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

6 Unité 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é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é 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é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 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

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

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 tout 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 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

14 Pourquoi 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

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

16 La communication aussi est moins dispendieuse entre threads qu’entre 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 d’un proc

18 Threads 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

19 Threads d’utilisateur et de noyau (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

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: l’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

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 s’exécuter lorsqu’un 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 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

24 Modè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

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

27 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  Un groupement de thread (pools)  Les données spécifiques des threads  L’ordonnancement

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?  Qu’est ce que exec() fait?  Il remplace l’espace d’adresse, donc tous les fils sont remplacés

29 L’annulation du 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

30 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 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

31 Les 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).

32 Sujets  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

33 Exemples de bibliothèques de fil  Pthreads  Win32  Java threads

34 Pthreads  Une norme POSIX (IEEE c) 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_create  pthread_exit (status) pthread_exit  pthread_join (threadid,status) pthread_join  pthread_attr_init (&attr) pthread_attr_init

35

36 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 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?

37 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

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

39 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); }

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

41 API 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); }

42 Threads 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.

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

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

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

46 L’annulation de Thread Thread thrd = new Thread (new InterruptibleThread()); Thrd.start();... // now interrupt it Thrd.interrupt();

47 Exemples d’Implémentation de fil chez les E/S  Windows XP  Linux  Java

48 Threads 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)

49 Threads de Windows XP

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

51 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 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écessite d’un tampon pour stocker les items produits (attendant d’être consommés)

52 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

53 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

54 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(); }

55 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); }

56 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); }

Thank You! متشکرم