Communication par passage de messages

Documents pareils
Introduction à la programmation concurrente

Auto-évaluation Programmation en Java

Arbres binaires de recherche

Génie Logiciel avec Ada. 4 février 2013

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

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

Problèmes liés à la concurrence

Programmer en JAVA. par Tama

Synchro et Threads Java TM

Premiers Pas en Programmation Objet : les Classes et les Objets

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Objets et Programmation. origine des langages orientés-objet

Cours de Systèmes d Exploitation

NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE

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

Corrigé des exercices sur les références

Introduction : les processus. Introduction : les threads. Plan

Développement Logiciel

Package Java.util Classe générique

JavaServer Pages (JSP)

Projet de programmation (IK3) : TP n 1 Correction

ACTIVITÉ DE PROGRAMMATION

Algorithmique & programmation

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

Java Licence Professionnelle CISII,

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Dis papa, c est quoi un bus logiciel réparti?

IFIPS 5 / Nouvelles Architectures Logicielles Projet : Bus de web services avec «moteur» BPEL

Paginer les données côté serveur, mettre en cache côté client

Introduction aux systèmes temps réel. Iulian Ober IRIT

OS Réseaux et Programmation Système - C5

Développement d un logiciel de messagerie instantanée avec Dotnet (version simplifiée)

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Programmation client-serveur sockets - RPC

Remote Method Invocation Les classes implémentant Serializable

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Java RMI. Arnaud Labourel Courriel: Université de Provence. 8 mars 2011

TD2/TME2 : Ordonnanceur et Threads (POSIX et fair)

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

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

Chapitre 10. Les interfaces Comparable et Comparator 1

Une introduction à Java

Algorithmique des Systèmes Répartis Protocoles de Communications

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

SugarCubes. Jean-Ferdinand Susini Maître de Conférences, CNAM Chaire systèmes enfouis et embarqués. Paris, le 9 janvier, 2009

Alfstore workflow framework Spécification technique

4. Groupement d objets

2 Chapitre 1 Introduction

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Programmation Par Objets

Présentation du PL/SQL

Un ordonnanceur stupide

Environnements de développement (intégrés)

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

LOG4430 : Architecture et conception avancée

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Le MSMQ. Version 1.0. Pierre-Franck Chauvet

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Gestion du cache dans les applications ASP.NET

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Cours Bases de données 2ème année IUT

Couche application. La couche application est la plus élevée du modèle de référence.

Documentation CAS à destination des éditeurs

Le prototype de la fonction main()

Messagerie asynchrone et Services Web

Une introduction à la technologie EJB (2/3)

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Programmation Orientée Objet Java

Java 1.5 : principales nouveautés

Bases de données et fournisseurs de contenu

MEMOIRE. Présenté à L École Nationale d Ingénieurs de Sfax. en vue de l obtention du MASTÈRE INFORMATIQUE NTSID. Par.

Durée estimée :1 journée Date de la réalisation : Description Fournisseur Référence Nombre PU HT LM35CZ, LM35AZ LM35DZ

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

Programmation Internet en Java

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Programmation avec des objets : Cours 7. Menu du jour

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Architecture Orientée Service, JSON et API REST

TD/TP PAC - Programmation n 3

Les arbres binaires de recherche

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

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. A308, Université de Paris 13

Bases Java - Eclipse / Netbeans

INITIATION AU LANGAGE JAVA

//////////////////////////////////////////////////////////////////// Administration bases de données

Cours de Génie Logiciel

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Programmation Objet Java Correction

Utilisation d objets : String et ArrayList

Modernisation, développement d applications et DB2 sous IBM i Technologies, outils et nouveautés Volubis.fr

Aspects techniques : guide d interfaçage SSO

as Architecture des Systèmes d Information

Transcription:

Communication par passage de messages Notion de canal de communication par mémoire partagée 29/05/2007 Messages en mémoire partagée 1 Canaux en mémoire partagée Envoi et réception de messages à travers un canal au lieu de lire ou écrire en mémoire partagée, protégée par des sémaphes ou par des moniteurs. Une classe canal peut être définie au niveau utilisateur pour les langages qui ne disposent pas en natif de l objet canal. channel requestchannel = new channel() ; channel replychannel = new channel() ; flot1 flot2 requestchannel.send(request) ; request = requestchannel.receive(); reply =replychannel.receive(); replychannel.send(reply); 29/05/2007 Messages en mémoire partagée 2

Un flot qui exécute un send() ou un receive() peut être bloqué ; ces opérations matérialisent à la fois la communication et la synchronisation. Il existe différents types de synchronisation : Émetteur bloquant : l émetteur est bloqué tant que le récepteur n a pas reçu le message. Émetteur bloquant sur tampon plein : l émetteur est bloqué dès que la file tampon entre l émetteur et récepteur est pleine (producteur consommateur entre émetteur et récepteur). Émetteur non bloquant ; la file tampon est infini : l émetteur n est jamais bloqué. Récepteur bloquant : le récepteur est bloqué tant qu un message n a pas été envoyé. Récepteur non bloquant : le récepteur n est jamais bloqué. Communication synchrone Une commande du récepteur acquite la réception du message. Communication asynchrone 29/05/2007 Messages en mémoire partagée 3 L objet canal en Java Des canaux utilisateurs sont implémentés par des objets partagés. Public abstract class channel { public abstract void send(object m); // envoi d un objet message public abstract void send(); // signal vers un récepteur public abstract Object receive(); //réception d un objet On définit trois types de canaux différentiés par le nombre de flots émetteur et receveur autisé à accéder à un objet canal : Boite_aux_lettres (mailbox) : plusieurs émetteurs plusieurs récepteurs Pt : plusieurs émetteurs un receveur Lien (link) : un émetteur et un receveur Chaque type de canal a une version synchrone et une version asynchrone. 29/05/2007 Messages en mémoire partagée 4

mailbox pt link 29/05/2007 Messages en mémoire partagée 5 Exemple : une classe mailbox synchrone Public class mailbox extends channel { private Object message = null ; private final Object sending = new Object() ; private final Object receiving = new Object() ; private final binarysemaphe sent = new binarysemaphe(0) ; private final binarysemaphe received = new binarysemaphe(0) ; public final void send(object sentmsg) { if (sentmsg == null) {throw new NullPointerException( message vide ); synchronized(sending){ message = sentmsg ; sent.v(); // signal que le message est disponible received.p(); //attendre le signal de l arrivée du message 29/05/2007 Messages en mémoire partagée 6

public final void send() { synchronized(sending) { message = new Object() ; // envoi d un message vide sent.v(); // signale que le message est dispo received.p() ; //attendre l arrivée du message public final void Object receive() { Object receivedmessage = null ; synchronized(receiving) { sent.p(); // attente de l envoi d un message receivedmessage = message ; received.v() ; // signal à l émetteur que le message est bien arrivé return receivedmessage ; 29/05/2007 Messages en mémoire partagée 7 Les classes link et pt Les méthodes send() pour les classes pts et mailbox sont identiques Les méthodes receive() pour les classes pt et link sont identiques. Un seul flot peut exécuter une opération receive sur un pt ou un lien. La nouvelle méthode pour mettre en œuvre plusieurs receveurs: public final Object receive() { synchronized(receiving) { if (receiver == null) //identifie le 1 er thread à appeler receive receiver = Thread.currentThread() ; // si currentthread() n est pas le premier thread à appeler le récepteur, lever d une exception if(thread.currentthread()!= receiver) throw new InvalidLinkUsage( tentative d accès avec de multiples récepteurs ) ; Object receivedmessage = null ; sent.p() ; // attente que le message soit expédié receivedmessage = message ; received.v() ; // signal vers l émetteur que le message a été reçu return receivedmessage ; 29/05/2007 Messages en mémoire partagée 8

Exemple2 : Une classe mailbox asynchrone public final class asynchmailbox extends channel { private final int capacity = 100 ; private Object messages[ ] = new Object[capacity] ; //tampon de messages private countingsemaphe messageavailable = new countingsemaphe(0); private countingsemaphe slotavailable = new countingsemaphe (capacity); private binarysemaphe sendermutex = new binarysemaphe(1); private binarysemaphe receivermutex = new binarysemaphe(1); private int i = 0, out =0 ; public final void send(object sent Message) { if (sentmessage == null) { throw new NullPointerException ( message null à envoyer ) ; slotavailable.p() ; sendermutex.p() ; messages[in] = sentmessage ; in = (in+1)%capacity ; sendermutex.v() ; messageavailable.v() ; 29/05/2007 Messages en mémoire partagée 9 public final void send() { slotavailable.p() ; sendermutex.p() ; messages[in] = new Object() ; in = (in+1)%capacity ; sendermutex.v() ; messageavailable.v() ; public final Object receive() { messageavailable.p() ; receivermutex.p() ; Object receivedmessage = messages [out] ; out = (out+1) % capacity ; receivermutex.v() ; slotavailable.v() ; return receivedmessage ; 29/05/2007 Messages en mémoire partagée 10

Le paradigme du rendez vous Utile dans un environnement client-serveur Appel depuis un client d une entrée dans une tâche serveur Synchronisation entre client et serveur (Rendez vous) Retour vers le client de l infmation demandée. Client i Serveur { Request.send(clientRequest) ; clientrequest = request.receive(); // exécute la requête client et produit result Result = replyi.receive() ; replyi.send(result) ; 29/05/2007 Messages en mémoire partagée 11 Un canal que le serveur peut utiliser pour recevoir les requêtes des clients et un canal pour chaque réponse aux clients. Spécification de ce paradigme Client i Serveur entry E ; { E.call(clientRequest,Result) ; E.accept(clientRequest, result) { // exécute la requête client et produit result //end accept() Le serveur utilise un nouveau type de canal appelé entry 29/05/2007 Messages en mémoire partagée 12

Propriétés du rendez vous Un seul flot peut faire accept d un appel sur une entrée donnée : quand un serveur exécute l accept sur l entrée E als : S il n y a pas d appel pendant als le serveur attend Si un ou plusieurs appels sont arrivés le serveur accepte l appel et exécute le cps de l accept ; à la fin de l exécution du cps, l entrée retourne vers le client l infmation demandée, le client et le serveur poursuivent leurs exécutions. Mécanisme de communication synchrone Natif en Ada ; des classes implémentant le paradigme sont possibles en Java. 29/05/2007 Messages en mémoire partagée 13 L activation sélective de tâches Le concept d activation sélective permet à une tâche de choisir un rendez vous parmi plusieurs possibles. La sélection peut dépendre de conditions associées à chaque alternative. entry E ; entry F ; E.accept(client1Request, result1) { result1 = ; F.accept(client2request, result2) { result2 = ; end ; end ; 29/05/2007 Messages en mémoire partagée 14

entry E ; E.accept(signal_reveil); delay 30.0 ; stop_the_train ; end ; end ; entry E ; E.accept(signal_reveil); else delay 30.0 ; stop_the_train ; end ; end ; entry E ; entry F ; E.accept(demarrer); terminate ; end ; end ; 29/05/2007 Messages en mémoire partagée 15 Exemple avec le producteur-consommateur Synchro { int tampon[ ] = new int[n] ; int i=0, j=0, nombre = 0; serveur { { Déclarations { entry deposer ; when nombre < n { entry retirer ; deposer.accept(m); tampon[i] = M ; Producteurs { i = (i+1) % n ; Envoi_message : Message ; nombre = nombre +1 ; Envoi_message = preparation_message ; when nombre >0 { buffer.deposer(envoi_message) ; retirer.accept(l) ; L = tampon[j] ; Consommateurs j = (j +1) % n ; { nombre = nombre -1 ; retrait_message : Message ; terminate ; buffer.retirer(retait_message) ; exploitation_message(retrait_message); 29/05/2007 Messages en mémoire partagée 16

procedure Main is Exemple task Synchro is entry AvantLire ; Lecteurs- entry ApresLire ; entry AvantEcrire ; Rédacteurs entry ApresEcrire ; end Synchro ; (syntaxe Ada) task body Synchro is NL : Integer := 0 ; begin le 1 er accès est pour écrire accept AvantEcrire ; accept ApresEcrire ; Une tâche synchro, when NL = 0 => N tâches Proc. accept AvantEcrire ; Accept ApresEcrire; accept AvantLire ; NL = NL+1 ; when NL >0 => accept ApresLire ; NL = NL-1 ; terminate end end 29/05/2007 Messages en mémoire partagée 17 end synchro Exemple Lecteurs- Rédacteurs (suite) Une tâche synchro, N tâches Proc. task type Proc ; Appli : array (1..N) of Proc ; task body Proc is begin -- la tâche agissant comme rédacteur Synchro.avantEcrire ; EcritureDansLeFichier ; Synchro.ApresEcrire ; -- la tâche agissant comme lecteur Synchro.AvantLire ; LectureDansLeFichier ; Synchro.ApresLire ; end Proc ; begin null ; end Main ; 29/05/2007 Messages en mémoire partagée 18 Cours suivant