CSI2520, Hiver 2007 Programmation concurrente. CSI2520, Hiver 2007 Programmation concurrente La programmation est distribuée lorsque les processus ne.

Slides:



Advertisements
Présentations similaires
La programmation concurrente en Java
Advertisements

Module Systèmes d’exploitation
GEF 435 Principes des systèmes d’exploitation
Le mécanisme des exceptions
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
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 Communication Interprocessus (CIP) II (Tanenbaum 2.3)
GEF 435 Principes des systèmes dexploitation Communication Interprocessus (CIP) III (Tanenbaum 2.3)
TP 7.1 synchronized et join Écrire un programme Java qui crée 1000 threads et maintient un compteur nb du nombre de threads créés jusque-là. Le thread.
(Classes prédéfinies – API Java)
Conception et programmation Programmation Parallèle
Plan du cours La sérialisation: – comment stocker et restaurer les Objets? Les interfaces graphiques et la programmation évènementielle. –Comment concevoir.
Exécutif Temps réel. Limitation des système classiques Rappels Mise en œuvre lourde des communications entre processus Problème de prédictibilité avec.
Mémoire & Processus Cours SE - SRC
Programmer en JAVA par Tama
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
Parallel Programming in C with MPI and OpenMP
Système d’Exploitation
Programmation de cartes graphiques
Principes de programmation (suite)
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
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.
Système d’exploitation
Chapitre VII Généricité. POO-L3 H. Fauconnier2 Chapitre VII 1. Principes généraux 2. Types génériques imbriqués 3. Méthodes génériques 4. Types paramètres.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Classes abstraites et Interfaces
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
Module 51 Module 5 - Synchronisation de Processus (ou threads, ou fils ou tâches) Module 5 - Synchronisation de Processus (ou threads, ou fils ou tâches)
Présentation Structures de Données et TDA
Programmation concurrente
Chapitre 6 (Silberchatz)
Parallelisme (Basé sur Concepts of Programming Languages, 8th edition, by Robert W. Sebesta, 2007)
Multi-Thread Jian-Yun Nie
IFT 6800 Atelier en Technologies d’information
PROGRAMMATION MULTI-TÂCHES (MULTITHREADING)
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Cours 11 Threads. Chapitre X threads threadPOO-L3 H. Fauconnier3 Threads threads: plusieurs activités qui coexistent et partagent des données exemples:
COURS DE PROGRAMMATION ORIENTEE OBJET :
CSI 1502 Principes fondamentaux de conception de logiciels
Chapitre 6 : Synchronisation des processus et des fils
Synchronisation Classique
1111 Gestion des exceptions Objectifs À la fin de ce cours, vous serez capables de : • Expliquer les concepts de base de la gestion des exceptions.
1212 Entrée et sortie de fichiers Objectifs À la fin de ce cours, vous serez capables de : • Lire à partir de la console • Écrire sur la console.
APPLETS. Applets : généralités Applet : application s'exécutant dans une page HTML Le ByteCode (fichiers.class) est téléchargé depuis un serveur. L'exécution.
La notion de type revisitée en POO
Gestion de processus Corrigé TD 1 EFREI I
Factory Design Patterns. Contents Factory patterns: principesFactory patterns: principes The Factory Method patternThe Factory Method pattern The Abstract.
Cours 9 Exceptions (fin) Généricité. POO-L3 H. Fauconnier2 Chaînage d'exceptions  Une exception peut être causée par une autre.  il peut être utile.
Cours 7 Classes locales Clonage Divers: tableaux.
Créer des packages.
Interactions entre Processus
1 Extension du modèle de composants CORBA avec accès concurrent à des données partagées Travail réalisé par : Landry BREUIL PFE, ISIMA Encadrants : Gabriel.
Tutorat en bio-informatique
12/04/ Les exceptions Cours 11 Cours 11.
Entrées / Sorties.
Programmation Système et Réseau
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Schéma de conception Factory Method Exemple Sylvain Giroux.
Cours du 5 novembre.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Pthread Ordonnancement. #define _MULTI_THREADED #include #ifndef _CHECK_H #define _CHECK_H /* headers used by a majority of the example program */ #include.
Héritage Conception par Objet et programmation Java
Transcription de la présentation:

CSI2520, Hiver 2007 Programmation concurrente

CSI2520, Hiver 2007 Programmation concurrente La programmation est distribuée lorsque les processus ne partagent pas la mémoire Sinon la programmation est dite parallèle

CSI2520, Hiver 2007 Processus Un processus ou tâche est une instance d'un programme ou d' une partie d' un programme pouvant être exécuté de façon autonome Un langage de programmation concurrente doit permettre: –la création de processus: des processus concurrents peuvent être créés à partir de n' importe quel langage en utilisant de mécanismes explicites de programmation concurrente –la synchronisation de leurs opérations: Synchronisation coopérative: lorsqu' un processus attend la fin de lexécution d' un autre avant de poursuivre son exécution. Synchronisation compétitive: lorsque plusieurs processus utilise la même ressource. Il faut alors disposer d' un mécanisme dexclusion mutuelle afin déviter que les processus interfèrent entre eux –la communication des données entre processus: en utilisant des mécanismes de communication inter-processus définis par le système dexploitation

CSI2520, Hiver 2007 Fil dexécution Un fil dexécution (thread) est une séquence dexécution pouvant ou non interagir avec dautres fils Les fils partagent souvent les même variables Les fils ont souvent (mais pas nécessairement) une durée de vie limitée Un fil peut être bloqué: –Si il désire utiliser des variables partagées avec dautres fils –Si il doit attendre des résultats dun autre fil Une application se subdivise en processus et un processus peut être composé de fils Les processus sont généralement créés lors de la conception de larchitecture alors que les fils sont créés lors de la phase de programmation

CSI2520, Hiver 2007 Fils en C++ En utilisant –AfxBeginThread(fonction,parametre); Le paramètre est un pointeur à des void La fonction transmise a comme signature –UINT fonction(LPVOID connectionP);

CSI2520, Hiver 2007 Exemple class CMyThread {... public: static UINT ThreadProc( LPVOID param ); private: UINT DoThreadJob(); }; UINT CMyThread::ThreadProc( LPVOID param ) { // Get the "this" pointer CMyThread * pThis = reinterpret_cast (param); // Route to non-static member function return pInstance->DoThreadJob(); } UINT CMyThread::DoThreadJob() { //... Can call member functions here } // Instance of the thread class CMyThread myThread; AfxBeginThread( CMyThread::ThreadProc, reinterpret_cast ( &myThread));

CSI2520, Hiver 2007 Fils en Java public class HelloRunnable implements Runnable { public void run() { System.out.println("Hello from a thread!"); } public static void main(String args[]) { (new Thread(new HelloRunnable())).start(); } public class HelloThread extends Thread { public void run() { System.out.println("Hello from a thread!"); } public static void main(String args[]) { (new HelloThread()).start(); }

CSI2520, Hiver 2007 Contrôle des fils HelloThread thread = HelloThread Fil(); thread.start(); // demarrer le fil dexecution thread.sleep( 3000 ); // mettre un fil en pause thread.isAlive(); // verifier si un fil est actif thread.interrupt(); // interrompre un fil thread.join(); // attendre la terminaison dun fil

CSI2520, Hiver 2007 Exemple class Example extends Thread { volatile boolean stop = false; public static void main( String args[] ) throws Exception { Example2 thread = new Example2(); System.out.println( "Starting thread..." ); thread.start(); Thread.sleep( 3000 ); System.out.println( "Asking thread to stop..." ); thread.stop = true; Thread.sleep( 3000 ); System.out.println( "Stopping application..." ); System.exit( 0 ); } public void run() { while ( !stop ) { System.out.println( "Thread is running..." ); sleep( 1000 ); } System.out.println( "Thread exiting under request..." ); }

CSI2520, Hiver 2007 Niveaux de concurrence au niveau des énoncés: une série d' énoncés sont exécutés de façon concurrente, le processus principal suspend alors son exécution. Chacun des processus ainsi créés partagent le même ensemble de données (OpenMP) au niveau des sous-programmes: un processus commande alors la création dun autre processus dont la tâche consiste à exécuter un certain sous- programme. Une fois le processus lancé, le processus appelant continue son exécution. Un mécanisme de synchronisation doit toutefois être disponible. au niveau des objets: chacune des instances d' une classe devient une entité concurrente; il y a alors exécution concurrente d' une de ses méthodes. Les attributs ne sont pas partagés. au niveau des programmes: ceci se produit lorsqu' un processus parent a la capacité de lancer un ou plusieurs processus enfant. Il doit toutefois exister un moyen de connaître l' identité d' un processus. Les données peuvent être partagées ou non.

CSI2520, Hiver 2007 Type de concurrence Physique: lorsque plusieurs processeurs se partagent les différents processus Logique: lorsque plusieurs processus se partagent le temps d' exécution sur un seul processeur. Distribué: lorsque plusieurs machines constituées en réseau se partagent les processus.

CSI2520, Hiver 2007 Moniteur Un moniteur est une abstraction qui contient les données partagées ainsi que les procédures qui accèdent à ces données La synchronisation est alors réalisée implicitement en nautorisant quun accès à la fois au moniteur Lorsque le moniteur est occupé, tous les processus en attente pour accès sont placés dans une file En réalisant un appel à une opération du moniteur, un processus obtient des droits exclusifs d' accès aux ressources du moniteur. Cette exclusivité demeure jusquà ce que lopération soit complétée ou jusquà ce que ce processus se place en attente

CSI2520, Hiver 2007 Java et moniteurs En Java, tous les objets ont un moniteur intrinsèque associé –Méthodes synchronisées –Blocs synchronisés avec lénoncé synchronized(object) La file dattente est gérée par la machine virtuelle Java Jusquà 50 fois plus lente que les méthodes non- synchronisées

CSI2520, Hiver 2007 Exemple: un bassin dobjets protected Object[] items =... whatever kinds of items being managed protected boolean[] used = new boolean[MAX_AVAILABLE]; protected synchronized Object getNextAvailableItem() { for (int i = 0; i < MAX_AVAILABLE; ++i) { if (!used[i]) { used[i] = true; return items[i]; } } return null; // not reached } protected synchronized boolean markAsUnused(Object item) { for (int i = 0; i < MAX_AVAILABLE; ++i) { if (item == items[i]) { if (used[i]) { used[i] = false; return true; } else return false; } return false; }

CSI2520, Hiver 2007 Exemple: Le producteur/consommateur private LinkedList list = new LinkedList(); public void produce() { int len = 0; synchronized(list) { // impose un verrou sur la liste Object justProduced = new Object(); list.addFirst(justProduced); len = list.size(); list.notifyAll(); // avise les autres fils } // libere le verrou System.out.println("List size now " + len); }

CSI2520, Hiver 2007 Exemple: Le producteur/consommateur public void consume() { Object obj = null; int len = 0; synchronized(list) { while (list.size() == 0) { try { list.wait(); // suspend le fil } catch (InterruptedException ex) { return; } } obj = list.removeLast(); len = list.size(); } System.out.println("Consuming object " + obj); System.out.println("List size now " + len); }

CSI2520, Hiver 2007 Sémaphore Une sémaphore est un mécanisme qui permet la synchronisation et le partage de ressource entre processus P(Semaphore s) // Acquire Resource { wait until s > 0, then s := s-1; } V(Semaphore s) // Release Resource { s := s+1; } Init(Semaphore s, Integer v) { s := v; }

CSI2520, Hiver 2007 Mutex Un mutex permet de verrouiller une ressource pendant quun fil y accède Un mutex est donc associé à une ressource (une classe) Implementés en utilisant des sémaphore binaires

CSI2520, Hiver 2007 Exemple C++ CMutex mutex; // this is the Mutex class // This is the synchronization class // when you need to control access // to one resource using a given mutex CSingleLock mulock(&mutex); if (mulock.Lock(1000)) { // will block until // the Mutex is available // exclusive access to this block conteneur.erase(id); } mulock.Unlock(); // release the Mutex

CSI2520, Hiver 2007 Exemple: Accès exclusif à un fichier CMutex mutex; // one attribute // of the class void reader() { CSingleLock mulock(&mutex); if (mulock.Lock(1000)) { // do something… read_file(); } mulock.Unlock(); } void writer() { CSingleLock mulock(&mutex); if (mulock.Lock(1000)) { // do something… write_file(); } mulock.Unlock(); }

CSI2520, Hiver 2007 Exemple: Accès à un fichier Lecture partagée –Il y a un nombre maximum de fils pouvant lire Écriture exclusive –Un seul fil doit écrire à la fois –Le fil écrivant doit attendre que tous les fils lisant terminent import java.util.concurrent.Semaphore const int MaxReaders = 32; Semaphore semaphore(MaxReaders); // MaxReaders is the total number of permits void ReaderThread::run() { semaphore.acquire(); // Acquires a permit from this semaphore, // blocking until one is available; read_file(); semaphore.release(); // Release a permit } void WriterThread::run() // should be synchronized // if more than one writer { for (int i = 0; i < MaxReaders; ++i) semaphore.acquire(); // acquisition graduelle de ressource write_file(); semaphore.release(MaxReaders); // Release all permits }

CSI2520, Hiver 2007 Attention aux deadlocks ! Se produit lorsque deux fils vérouillent chacun une ressource et veulent aussi accéder à la ressource de lautre –Ex: Le diner des philosophes

CSI2520, Hiver 2007 Exemple class Attention { public synchronized void ceci(Attention obj) {... obj.cela(this); } public synchronized void cela(Attention obj) { … }