Programmation Parallèle et Distribuée. PERACHE Marc

Documents pareils
Les processus légers : threads. Système L3, /31

Cours Programmation Système

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Introduction aux Systèmes et aux Réseaux

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Introduction au langage C

Problèmes liés à la concurrence

3IS - Système d'exploitation linux - Programmation système

Programmation système en C/C++

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

Le prototype de la fonction main()

INTRODUCTION À LA PROGRAMMATION CONCURRENTE

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Java Licence Professionnelle CISII,

Exécutif temps réel Pierre-Yves Duval (cppm)

Programmation système de commandes en C

Logiciel de base. Première année ENSIMAG

École Polytechnique de Montréal. Département de Génie Informatique et Génie Logiciel. Cours INF2610. Contrôle périodique.

Plan du cours. Historique du langage Nouveautés de Java 7

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Cours de Systèmes d Exploitation

Derrière toi Une machine virtuelle!

Structure d un programme

LEs processus coopèrent souvent pour traiter un même problème. Ces

Chapitre 4 : Outils de communication centralisés entre processus

Synchro et Threads Java TM

Programmation C. Apprendre à développer des programmes simples dans le langage C

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Programmation système I Les entrées/sorties

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Programmation Système (en C sous linux) Rémy Malgouyres LIMOS UMR 6158, IUT département info Université Clermont 1, B.P.

Programmation système

OS Réseaux et Programmation Système - C5

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Cours 6 : Tubes anonymes et nommés

Architecture des ordinateurs

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Playing with ptrace() for fun and profit

ENSP Strasbourg (Edition ) Les Systèmes Temps Réels - Ch. DOIGNON. Chapitre 3. Mise en œuvre : signaux, gestion du temps et multi-activités

Introduction à la programmation concurrente

Introduction à la Programmation Parallèle: MPI

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

Arguments d un programme

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

Programmer en JAVA. par Tama

Threads. Threads. USTL routier 1

Un ordonnanceur stupide

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

1 Mesure de la performance d un système temps réel : la gigue

Le système de gestion des fichiers, les entrées/sorties.

Conventions d écriture et outils de mise au point

TD3: tableaux avancées, première classe et chaînes

Les processus. Système L3, /39

INFO-F-404 : Techniques avancées de systèmes d exploitation

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Simulation d un système de paiement par carte bancaire

as Architecture des Systèmes d Information

Initiation à la sécurité

Une introduction à Java

Exercices INF5171 : série #3 (Automne 2012)

IRL : Simulation distribuée pour les systèmes embarqués

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

INITIATION AU LANGAGE JAVA

TP Temps Réel. Polytech Paris - Mars 2012

Compression de Données - Algorithme de Huffman Document de Conception

Programmation d Applications Concurrentes et Distribuées (INF431)

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Cours de Programmation Impérative: Zones de mémoires et pointeurs

IFT Systèmes d exploitation - TP n 1-20%

<Insert Picture Here> Solaris pour la base de donnés Oracle

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Architecture des ordinateurs

Programmation client-serveur sockets - RPC

Qu'est-ce qu'un processus: Définitions

WEA Un Gérant d'objets Persistants pour des environnements distribués

Cours 1: Java et les objets

Le système GNU/Linux IUP NTIC /11/05

Le langage C. Séance n 4

Programmation Classique en langage C

Temps Réel. Jérôme Pouiller Septembre 2011

COMPARAISONDESLANGAGESC, C++, JAVA ET

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Initiation au HPC - Généralités

INF6500 : Structures des ordinateurs. Sylvain Martel - INF6500 1

Mon premier rpm. 7 juin Avant de commencer RPM URPMI RPMBUILD... 2

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

Premiers Pas en Programmation Objet : les Classes et les Objets

Introduction au calcul parallèle avec OpenCL

DAns un système d exploitation multiprogrammé en temps partagé, plusieurs


DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Programme Compte bancaire (code)

Transcription:

Programmation Parallèle et Distribuée PERACHE Marc marc.perache@cea.fr

Le fonctionnement du cours Le cours Présentation des bibliothèques de threads. API POSIX. Les entrailles des bibliothèques. Les TD: Découvertes de différentes bibliothèques. Implémentation de fonctionnalités dans la bibliothèque mthread. Tous les TD sont notés. PERACHE Marc Programmation Parallèle et distribuée 2

Pourquoi les threads? Permet de profiter de communication instantanées. Profite de l'aspect mémoire partagée des noeuds de calcul. Permet de faire du recouvrement. Très adapté au multicoeur. Très adapté aux SMP et NUMA. PERACHE Marc Programmation Parallèle et distribuée 3

Qu'est-ce qu'un thread Thread = processus léger. Éléments d'un thread: Une pile. Un contexte: ensembles de registres. Éléments d'un processus multithread: Une table de pages. Un ensemble de threads. PERACHE Marc Programmation Parallèle et distribuée 4

Qu'est-ce qu'un processus Pile Tas Variables globales Code SP IP FR 1 FR n IR n Mémoire Structures PERACHE Marc Programmation Parallèle et distribuée 5

Qu'est-ce qu'un processus multithread Pile thread 0 Pile thread 2 Pile thread 1 SP IP FR 1 FR n IR n 2 Tas SP IP FR 1 FR n IR n 1 Variables globales Code SP IP FR 1 FR n IR n 0 Mémoire Structures PERACHE Marc Programmation Parallèle et distribuée 6

Qu'est-ce qu'un thread Caractéristiques: Les threads partagent tous le même espace d'adressage. La pile des threads (hormis le 0) ne grossit pas. La pile d'un thread est localisée dans le tas. Les variables globales sont toutes partagées. Les threads communiquent directement par la mémoire. PERACHE Marc Programmation Parallèle et distribuée 7

Les bibliothèques de threads Bibliothèque utilisateur: Processus multithread Ordonnanceur utilisateur Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 8

Les bibliothèques de threads Bibliothèque utilisateur: Processus multithread Ordonnanceur utilisateur Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 9

Les bibliothèques de threads Bibliothèque utilisateur: Processus multithread Ordonnanceur utilisateur Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 10

Les bibliothèques de threads Bibliothèque utilisateur: Processus multithread Ordonnanceur utilisateur Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 11

Les bibliothèques de threads Bibliothèque utilisateur: Processus multithread Ordonnanceur utilisateur Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 12

Les bibliothèques de threads Bibliothèque utilisateur: Appel système bloquant Processus multithread Ordonnanceur utilisateur Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 13

Les bibliothèques de threads Bibliothèque utilisateur: Blocage du processeur virtuel Processus multithread Ordonnanceur utilisateur Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 14

Les bibliothèques de threads Bibliothèque utilisateur: Processus multithread Ordonnanceur utilisateur Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 15

Les bibliothèques de threads Bibliothèque utilisateur: Réveil du processeur virtuel Processus multithread Ordonnanceur utilisateur Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 16

Les bibliothèques de threads Bibliothèque utilisateur: Fin de l'appel système bloquant Processus multithread Ordonnanceur utilisateur Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 17

Les bibliothèques de threads Bibliothèque utilisateur: Processus multithread Ordonnanceur utilisateur Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 18

Les bibliothèques de threads Bibliothèque utilisateur: Processus multithread Ordonnanceur utilisateur Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 19

Les bibliothèques de threads Bibliothèque utilisateur: 1 thread noyau par processus Simple à implémenter. Première bibliothèque de threads. Pas adapté au SMP et multicoeur. Problèmes avec les appels systèmes. Entièrement en utilisateur. Performante. Ex: GNUPth PERACHE Marc Programmation Parallèle et distribuée 20

Les bibliothèques de threads Bibliothèque système: Processus multithread Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 21

Les bibliothèques de threads Bibliothèque système: Processus multithread Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 22

Les bibliothèques de threads Bibliothèque système: Appel système bloquant Processus multithread Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 23

Les bibliothèques de threads Bibliothèque système: Blocage du processeur virtuel Processus multithread Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 24

Les bibliothèques de threads Bibliothèque système: Processus multithread Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 25

Les bibliothèques de threads Bibliothèque système: Réveil du processeur virtuel Processus multithread Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 26

Les bibliothèques de threads Bibliothèque système: Fin de l'appel système bloquant Processus multithread Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 27

Les bibliothèques de threads Bibliothèque système: Processus multithread Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 28

Les bibliothèques de threads Bibliothèque système: N threads noyau. Adaptée au SMP et multicoeur. Gère bien les appels systèmes. Entièrement au niveau système. Complexe à mettre en oeuvre. Coût plus élevé. Ex: Linuxthread, NPTL. PERACHE Marc Programmation Parallèle et distribuée 29

Les bibliothèques de threads Bibliothèque mixte (ou MxN): Processus multithread Ordonnanceur utilisateur Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 30

Les bibliothèques de threads Bibliothèque mixte (ou MxN): Processus multithread Ordonnanceur utilisateur Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 31

Les bibliothèques de threads Bibliothèque mixte (ou MxN): Processus multithread Ordonnanceur utilisateur Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 32

Les bibliothèques de threads Bibliothèque mixte (ou MxN): Processus multithread Ordonnanceur utilisateur Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 33

Les bibliothèques de threads Bibliothèque mixte (ou MxN): Processus multithread Ordonnanceur utilisateur Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 34

Les bibliothèques de threads Bibliothèque mixte (ou MxN): Appel système bloquant Processus multithread Ordonnanceur utilisateur Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 35

Les bibliothèques de threads Bibliothèque mixte (ou MxN): Blocage du processeur virtuel Processus multithread Ordonnanceur utilisateur Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 36

Les bibliothèques de threads Bibliothèque mixte (ou MxN): Processus multithread Ordonnanceur utilisateur Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 37

Les bibliothèques de threads Bibliothèque mixte (ou MxN): Réveil du processeur virtuel Processus multithread Ordonnanceur utilisateur Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 38

Les bibliothèques de threads Bibliothèque mixte (ou MxN): Fin de l'appel système bloquant Processus multithread Ordonnanceur utilisateur Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 39

Les bibliothèques de threads Bibliothèque mixte (ou MxN): Processus multithread Ordonnanceur utilisateur Système d'exploitation Ordonnanceur système PERACHE Marc Programmation Parallèle et distribuée 40

Les bibliothèques de threads Bibliothèque mixte: M threads noyau pour N threads utilisateurs. Les plus complexes à implémenter. Adaptée aux SMP et multicoeur. Deux odonnanceurs: Un système. Un utilisateur. Performante. Quelques problèmes avec les appels systèmes. Ex: Solaris threads, mthread. PERACHE Marc Programmation Parallèle et distribuée 41

Tableau récapitulatif Caractéristiques Bibliothèque Performances Flexibilité SMP Appels systèmes bloquants Utilisateur + + - - Système - - + + Mixte + + + Limités PERACHE Marc Programmation Parallèle et distribuée 42

Définitions Définition 1: SMP Un système SMP est constitué de plusieurs processeurs identiques connecté à une unique mémoire physique. Définition 2: Non Uniform Memory Access Un système NUMA est constitué de plusieurs processeurs connecté à plusieurs mémoires distincte reliées entre-elles par des mécanisme matériels. Le temps d accès à des données en mémoire locale au processeur est donc réduit par rapport au temps d accès à des données présente dans une mémoire distante. Définition 3: Processus Un processus est une "coquille" dans laquelle le système exécute chaque programme. Définition 4: Thread Un thread est une suite logique d actions résultat de l exécution d un programme. PERACHE Marc Programmation Parallèle et distribuée 43

Définitions Définition 5: Préemption La préemption est le fait de passer régulièrement la main d un flot d exécution à l autre sans indication particulière dans les flots eux-mêmes. Définition 6: Section critique Région du programme où l on souhaite limiter(généralement à un seul) le nombre de flots d exécution. Ces régions correspondent généralement à des zones où des invariants sur des données peuvent ne pas être respectés. Définition 7: Attente active Méthode de synchronisation où l entité, attendant de passer cette synchronisation, garde le contrôle du processeur. PERACHE Marc Programmation Parallèle et distribuée 44

Définitions Définition 8: Réentrance fait, pour une fonction, de pouvoir être exécutée pendant son exécution. Une fonction sans effet de bord et travaillant uniquement avec des variables locales est de fait automatiquement réentrante. Définition 9: Mutex Un mutex permet l exclusion mutuelle et la synchronisation entre threads. Définition 10: Sémaphore Les sémaphores sont purement et simplement des compteurs pour des ressources partagées par plusieurs threads. Définition 11: Condition Les condition variables (condvar) permettent de réveiller un thread endormis en fonction de la valeur d une variable. PERACHE Marc Programmation Parallèle et distribuée 45

La bibliothèque mthread Bibliothèque de thread MxN. Déjà présent: L'ordonnanceur. Les spinlocks. Les corps de fonctions. A compléter: Tous les types de verrous. Les Clés. PERACHE Marc Programmation Parallèle et distribuée 46

Notion clés Atomicité: atomique se dit d une instruction dont le résultat de l exécution ne dépend pas de l entrelacement avec d autres instructions. Des instructions simples comme une lecture ou une écriture en mémoire sont atomiques. Cependant, les instructions atomiques complexes sont souvent plus intéressantes. Ainsi, l incrémentation d une variable n est généralement pas une instruction atomique : une instruction dans un autre flot d exécution en parallèle peut modifier la variable entre sa lecture et son écriture incrémentée. PERACHE Marc Programmation Parallèle et distribuée 47

Notion clés int i = 0; int main(int argc, char** argv){ i = i + argc; i++; printf("%d",i); } movl %esp, %ebp movl i, %eax addl 8(%ebp), %eax incl %eax PERACHE Marc Programmation Parallèle et distribuée 48

Notion clés Volatilité: le compilateur va créer un problème qui s ajoute à celui de la non-atomicité des opérations. Il effectue des optimisations en plaçant temporairement les valeurs de variables partagées dans les registres du processeur pour effectuer des calculs. Les threads accédant à la variable à cet instant ne peuvent pas se rendre compte des changements effectués sur celle-ci car sa copie en mémoire n a pas encore été modifiée. Pour lui éviter d effectuer ces optimisations, il faut ajouter le qualificatif volatile à la déclaration des objets qui seront en mémoire partagée. PERACHE Marc Programmation Parallèle et distribuée 49

Notion clés int i = 0; int main(int argc, char** argv){ i = i + argc; movl %esp, %ebp movl i, %eax addl 8(%ebp), %eax i++; incl %eax printf("%d",i); } PERACHE Marc Programmation Parallèle et distribuée 50

Notion clés volatile int i = 0; int main(int argc, char** argv){ i = i + argc; i++; printf("%d",i); } movl %esp, %ebp movl i, %eax addl 8(%ebp), %eax movl %eax, i movl i, %eax incl %eax movl %eax, i PERACHE Marc Programmation Parallèle et distribuée 51

L'API POSIX pthread_create( thread, attribut, routine, argument ) Création d un thread. Le nouveau flot d exécution démarre en se branchant à la routine spécifiée. Cette routine reçoit l argument prévu. pthread_exit( résultat ) Suicide d un thread. pthread_join( thread, résultat ) Attendre la terminaison d un autre thread. PERACHE Marc Programmation Parallèle et distribuée 52

L'API POSIX pthread_kill( thread, nu_du_signal ) Envoyer un signal (UNIX) à un thread. C est un moyen dur pour tuer un thread. Il existe des méthodes plus conviviales. sched_yield()ou pthread_yield() Abandonner le CPU pour le donner à un autre thread (ou un autre processus). pthread_self() Renvoie l'identifiant d'un thread. PERACHE Marc Programmation Parallèle et distribuée 53

Le premier code multithread #include <pthread.h> int NB_THREAD; void* run(void* arg){ long rank; rank = (long)arg; fprintf(stdout,"hello, I am %ld (%p)\n",rank,pthread_self()); return arg; } int main(int argc, char** argv){ pthread_t* pids; long i; NB_THREAD=atoi(argv[1]); pids = (pthread_t*)malloc(nb_thread*sizeof(pthread_t)); for(i = 0; i < NB_THREAD; i++){ pthread_create(&(pids[i]),null,run,(void*)i); } for(i = 0; i < NB_THREAD; i++){ void* res; pthread_join(pids[i],&res); fprintf(stderr,"thread %ld Joined\n",(long)res); assert(res == (void*)i); } return 0; } PERACHE Marc Programmation Parallèle et distribuée 54

Synchronisations Problème du producteur/consommateur: Le problème est le suivant: le programme est constitué de deux threads; le premier lit les caractères au clavier et le second se charge de les afficher. Il faut noter que le thread principal (le père) se charge de la création de ses fils et de l attente de leur mort. Cette disparition est programmée à l arrivée du caractère "F". PERACHE Marc Programmation Parallèle et distribuée 55

Synchronisations Comment faire des synchronisations entre threads? PERACHE Marc Programmation Parallèle et distribuée 56

Synchronisations Comment faire des synchronisations entre threads? Il suffit de mettre en place une politique d'attente active. PERACHE Marc Programmation Parallèle et distribuée 57

Synchronisations Comment faire des synchronisations entre threads? Il suffit de mettre en place une politique d'attente active. Quel est le principal défaut de la méthode choisie précédemment? PERACHE Marc Programmation Parallèle et distribuée 58

Synchronisations Comment faire des synchronisations entre threads? Il suffit de mettre en place une politique d'attente active. Quel est le principal défaut de la méthode choisie précédemment? Elle est très gourmande en temps CPU et peut donc perturber les autres applications. PERACHE Marc Programmation Parallèle et distribuée 59

Synchronisations volatile char thechar = \0 ; volatile char afficher = 0; void lire (void name) { do { while (afficher == 1); / attendre mon tour / thechar = getchar (); afficher = 1; / donner le tour / } while (thechar!= F ); return NULL; } void affichage (void name) { do { while (afficher == 0); / attendre / printf ("car = %c\n", thechar); afficher = 0; / donner le tour / } while (thechar!= F ); return NULL; } PERACHE Marc Programmation Parallèle et distribuée 60

Synchronisations int main (void) { pthread_t filsa, filsb; if (pthread_create (&filsa, NULL, affichage, "AA")) { perror ("pthread create"); exit (EXIT_FAILURE); } if (pthread_create (&filsb, NULL, lire, "BB")) { perror ("pthread create"); exit (EXIT_FAILURE); } if (pthread_join (filsa, NULL)) perror ("pthread join"); if (pthread_join (filsb, NULL)) perror ("pthread join"); printf ("Fin du pere\n"); return (EXIT_SUCCESS); } PERACHE Marc Programmation Parallèle et distribuée 61

Synchronisations Que peut-on observer concernant l utilisation CPU? Un processeur est chargé à 100% de temps user. Comme on peut le voir avec la commande ps -AeLf bash-3.0: ps -AeLf UID PID PPID LWP C NLWP STIME TTY TIME CMD perache 10857 10666 10857 0 3 08:31 pts/4 00:00:00./a.out perache 10857 10666 10858 99 3 08:31 pts/4 00:01:45./a.out perache 10857 10666 10859 0 3 08:31 pts/4 00:00:00./a.out Sur architecture mono-processeur, cela peut complètement bloquer la réactivité du système! PERACHE Marc Programmation Parallèle et distribuée 62

Synchronisations Pourquoi? PERACHE Marc Programmation Parallèle et distribuée 63

Synchronisations Pourquoi? La boucle while du thread qui affiche consomme tout le temps CPU car le thread ne passe jamais la main aux autres threads. PERACHE Marc Programmation Parallèle et distribuée 64

Synchronisations Pourquoi? La boucle while du thread qui affiche consomme tout le temps CPU car le thread ne passe jamais la main aux autres threads. Comment y remédier? PERACHE Marc Programmation Parallèle et distribuée 65

Synchronisations Pourquoi? La boucle while du thread qui affiche consomme tout le temps CPU car le thread ne passe jamais la main aux autres threads. Comment y remédier? Un moyen simple d y remédier, est de mettre un sched_yield dans le while. Il faut remplacer while (afficher == 0) ; /* attendre */ par while (afficher == 0) sched_yield(); /* attendre */ PERACHE Marc Programmation Parallèle et distribuée 66

Synchronisations Ainsi le système redevient réactif, mais les applications sont tout de même fortement perturbées par notre application car la priorité de la tâche est très haute. Pour solutionner totalement le problème, il faut plutôt faire la modification en utilisant usleep while (afficher == 0) ; /* attendre */ par while (afficher == 0) usleep(5); /* attendre */ PERACHE Marc Programmation Parallèle et distribuée 67

Synchronisations La commande ps -AeLf donne bash-3.0: ps -AeLf UID PID PPID LWP C NLWP STIME TTY TIME CMD perache 11103 10666 11103 0 3 08:47 pts/4 00:00:00./a.out perache 11103 10666 11104 0 3 08:47 pts/4 00:00:00./a.out perache 11103 10666 11105 0 3 08:47 pts/4 00:00:00./a.out Problème: le code manque de réactivité. PERACHE Marc Programmation Parallèle et distribuée 68