Java. Mémoire présenté à la Faculté des études supérieures de l'université Laval pour l'obtention du grade de Maître ès Sciences (MSc.

Dimension: px
Commencer à balayer dès la page:

Download "Java. Mémoire présenté à la Faculté des études supérieures de l'université Laval pour l'obtention du grade de Maître ès Sciences (MSc."

Transcription

1 Vers un nouveau paradigme de programmation parallèle en Java Mémoire présenté à la Faculté des études supérieures de l'université Laval pour l'obtention du grade de Maître ès Sciences (MSc.) Département d71nformat ique FXCULTÉ DES SCIENCES ET DE GÉNIE UNTVERSITÉ LAVAL Mai Mouetsie Molière? 1999

2 National Library Acquisitions and Bi bliographic Services Bibliothèque nationale du Canada Acquisitiins et services bibliographiques 395 Wellington Street 395. nre Wellmgton Ottawa ON KI A ONs OaawaON KlAW Canada canada The author has granted a nonexclusive licence aiiowing the National Library of Canada to reproduce, lom, distribute or sel1 copies of this thesis in microfom, paper or electronic formats. The author retains ownership of the copyright in this thesis. Neither the thesis nor substantial extracts fiom it may be printed or otherwise reproduced without the author's permission. L'auteur a accordé une licence non exclusive permettant à la Bibliothèque nationale du Canada de reproduire, prêter, distribuer ou vendre des copies de cette thèse sous la forme de microfiche/film, de reproduction sur papier ou sur format électronique. L'auteur conserve la propriété du droit d'auteur qui protège cette thèse. Ni la thèse ni des extraits substantiels de celle-ci ne doivent être imprimés ou autrement reproduits sans son autorisation.

3

4 Résumé Sous présentons dans ce mémoire un nouveau paradigme de programmation parallèle en Java. Ledit paradigme améliore la composante parallèle actuelle de Java en proposant des constructions s~taxiques qui abstraient la communication. la synchronisation et l'ordonnancement. Ce niveau d'abstraction est atteint en incorporant dans Java une algèbre de processus communiquants via des canaux. L'algèbre en question intègre des primitives de création dynamique de canaux et de processus. En outre, elle incorpore des combinateurs de séquence, de choix et de composition parallèle. Un trait à la fois éiégant et utile de cette algèbre est la possibilité de définir des calculs parallèles latents. Sous nous sommes inspirés du langage Concurrent ML (CML) pour l'élaboration de ladite algèbre. Yous proposons une évaluation de la composante parallèle de Java. Nous expliquons de manière détaillée tant au niveau conception qu'implantation le modèle de programmat ion parallèle en CML. Enfin, nous présentons l'architecture. l'implantation en Java ainsi que les bancs d'essais d'un système basé sur le paradigme sus-mentionné. Yourad Dgbabi Directeur recurche MouetWlière Étudiante

5 Remerciements Je tiens tout d'abord à remercier mon Directeur de recherche M. Mourad Debbabi. professeur au Département d'informatique de l'université Laval, qui grâce à ses conseils judicieu et son soutien, a rendu possible la réalisation de ce projet..je remercie également Mme Nadia Tawbi et M. Jean Bergeron, également professeurs au Département d'informatique de l'université Laval, qui ont bien voulu être les évaluateurs de cette thèse. Merci à M. Béchir Ktari pour l'aide inestimable qu'il m'a apportée pour la compréhension de l'implantation de CML. un remerciement spécial va à mes parents pour leur soutien continu pendant ces longues années d'études. Merci également à tous les membres l'équipe LSFM avec qui les discussions ont toujours apport6 sinon solutions, bonne humeur. Enfin, je remercie toutes les personnes qui de près ou de loin ont contribué à la réalisation de ce projet.

6

7 2.6.3 État Non-exécutable État mort Sotions supplémentaires Threads Démon Groupes de threads Conclusion Programmation parallele en CML Introduction Primitives de parallélisme Threads Canaux Exemple d'utilisation de t hreads et de canaux Événements Événements simples Communication sélective Implantation... 3' Continuations Implantation des Threads Implantation des canaux Implantation des événements Conclusion Étude comparative Introduction Évaluation de Java Ordonnancement Portabilité Communication Synchronisation Sémantique formelle Abstractions Performance Évaluation de CML Communication Synchronisation Ordonnancement Abstraction Portabilité Sémantique formelle Performance Conclusion... 62

8

9 Liste des tableaux 2.1 Classe Reentrant Classe Auteur Classe Lecteur Classe Bibliothèque Classe AuteurLecteur: Programme principal Cas de famine Utilisation de yield Signature CML Opérations sur les threads et Leurs identificateurs Opérations sur les canaux Exemple d'utilisation de threads et de canaux Exemple d'utilisation des événements et de la sélection LtiIisationdeCallcc Utilisation de throw Fonction spawn Fonction send Fonction recv Structure des événements Fonction sendevt Fonction recvevt Fonction choose Fonction wrap Fonction syncononeevt FonctionsyncOnBEvt Exécution de threads à priorité égale Codage du Producteur/Consommateur en HOJ Équations des Philosophes Équations de l'ordonnanceur Résultats... 82

10

11 Chapitre 1 Introduction 1.1 Motivation et problématique Le langage Java est doté de nombreuses qualités très appréciées dans le monde de la programmation actuelle. C'est un langage orienté-objet simple qui est a la fois. neutre d'architecture, parallèle et sécurisé. Certains problèmes ont toutefois été relevés au niveau du volet parallèle de Java plus particulièrement en ce qui concerne les aspects de communication, de synchronisation et d'ordonnancement des threads. La programmation parallèle en Java est basée sur le concept de processus légers ou threads. Les threads Java communiquent et se synchronisent entre eu via des variables partagées dont l'intégrité est gérée par des moniteurs au niveau machine et par les primitives wait. notih et notifyall au niveau programmation. La gestion des moniteurs est souvent compliquée et peut mener à des résultats erronés lorsqu'elle n'est pas effectuée de manière adéquate. De plus, le langage Java manque d'abstractions et ne bénéficie pas réellement d'une définition formelle. Ce projet a pour but d'améliorer la compo, Gante parallèle actuelle de Java en proposant des constructions syntaxiques qui abstraient la communication, la synchronisation et l'ordonnancement. Ce niveau d'abstraction est atteint en incorporant dans Java une algèbre de processus communicants via des canaus. L'algèbre en question intègre des primitives de création dynamique de canaux et de processus ainsi que des combinateurs de séquence, de chois et de composition parallèle. 1.2 Langages parallèles -Avant de considérer la programmation parallèle au niveau d'un langage de programmation particulier, il est important de définir les mécanismes de fonctionnement des langages parallèles en général. II existe deux grandes catégories de langages de programmation parallèle: 0 tes langages utilisant la mémoire partagée; O Les langages utilisant la mémoire distribuée;

12 1.3 Langages a mémoire partagée Langages à mémoire partagée Les langages basés sur la mémoire partagée utilisent des variables partagées pour l'implantation de la communication des processus. Ces langages se distinguent par les mécanismes qu'ils utilisent pour la synchronisation et le contrôle du parallélisme [Rep92a]. Parmi les mécanismes de synchronisation, nous distinguons les mécanismes de synchronisation de bas niveau tels que les sémaphores et les mécanismes de haut niveau tels que les moniteurs Sémaphores Les sémaphores proposés par Dijkstra [DijE] constituent le mécanisme de synchronisation de base. Un sémaphore est constitué d'une variable entière e(s) et d'une file d'attente f(s) [CRO751. En dehors de leur valeur initiale qui est positive ou nulle! les variables e(s) peuvent prendre des valeurs positives, négatives ou nulles sur lesquelles peuvent être appliquées deux opérations de base: P ( du Hollandais Passeren) pour l'attente et V ( du Hollandais Vrygeven) pour la notification. Lorsqu'un processus exécute P(s) où s est un sémaphore, sa variable e(s) est décrémentée. Si le résuitat de cette décrémentation est strictement négatif, alors le processus se bloque et se met dans la file d'attente f(s). L'exécution de V(s) est nécessaire pour débloquer le processus. Cette opération à pour effet d'incrémenter la variable e(s). Si le résultat est négatif ou nul alors un processus est récupéré de la file d'attente et son état redevient actif. Les verrous d'exclusion mutuelle ou mutex locks encore appelés sémaphores binaires sont une forme restreinte de sémaphores. Ils ont deux états: verrouille ou déverrouillé. Les verrous assurent l'exclusion mutuelle dans les régions critiques (partagées simultanément par plusieurs processus)mais ne fournissent pas de mécanisme général de synchronisation. Le principal inconvénient des sémaphores est qu'il n'existe pas de syntaxe fixe menant à une utilisation correcte. De plus, l'implantation de patrons plus compliqués que I?esclusion mutuelle se révèle particulièrement ardue Moniteurs Les travaux parallèles de Brinch Hansen et Hoare [Hoa741 ont conduit à un mécanisme assurant l'exclusion mutuelle basé sur des moniteurs. Les moniteurs sont des modules qui permettent l'abstraction des données et l'exclusion mutuelle. Tout code déclaré à l'interne ne peut être exécuté que par un processus à la fois. Les autres processus sont mis en attente jusqu'à la libération du moniteur.

13 1.4 Langages à mémoire distribuée 10 Un moniteur possède deux variables principales de synchronisation ou variables de conditions: wait qui bloque l'exécution du processus appelant; signal qui débloque un processus bloqué par un wait; Les moniteurs encapsulent les variables partagées. Ils fournissent une forme plus structurée d'exclusion mutuelle que ies verrous. En fait, chaque moniteur possède implicitement son propre verrou. Ce verrou est activé à l'entrée d'une procédure possédant un moniteur et il est désactivé a sa sortie. 1.4 Langages à mémoire distribuée La communication au niveau des langages utilisant la mémoire distribuée se fait par passage de messages. Le passage de messages consiste en un transfert de données synchronisé entre deux processus. C'est à dire que pour transférer un message, la coopération de l'envoyeur et du receveur est requise. Tout langage communiquant par passage de message possède deux opérations de base: l'envoi et la réception. Il est caractérisé par les propriétés spécifiques des médiums et des protocoles de communication entre les processus [ASSOI. Deux types de protocoles sont couramment utilisés: les protocoles asynchrones: envoi non-bloquant de messages: les protocoles synchrones: envoi bloquant de messages; Sous pouvons également mentionner les protocoles de requête-réponse ou "remote procedure calls". Les communications utilisant ce protocole s'effectuent par des appels et des retours de procédures Passage de message asynchrone Dans le passage de messages asynchrone le médium de communication est muni d'une variable tampon qui stocke les messages et l'opération d'envoi est non bloquante. Le Processus envoyeur continue son exécution indépendamment de Ia réception du message. La figure 1.1 représente la communication asynchrone entre dewc processus P et Q. Notons que ces deux processus ont une tue différente de l'ordre des événements. Le processus Q peut envoyer un message avant de recevoir un message de P même si ce dernier à été envoyé le premier.

14 1. -4 Langages à mémoire distribuée 11 Figure 1.1: Passage de message asynchrone. i Passage de message synchrone Dans le passage de messages synchrone' l'opération d'envoi est bloquante. Le processus envoyeur ne peut continuer son exécution que si son message a été reçu par un autre processus. La figure 1.2 utilise la notation CSP pour l'envoi et la réception de messages entre les processus P et Q. Soit Q! v pour l'envoi de la valeur v par le processus Q et PI x pour la réception d'une valeur x par le processus P. Lorsque le processus P envoie la valeur v au processus Q, il reste en attente jusqu'à la réception de v par Q et vice versa. Les traits discontinus sur la figure illustrent les temps d'attente des processus. (a) Paltend Q (b) Q ancnd P Figure 1.2: Passage de message synchrone.

15 1.5 Objectifs et contributions Objectifs et contributions L'objectif principal de ce projet est de proposer un nouveau paradigme de programmation dans le but de faciliter la programmation des threads en Java. Ce paradigme améliore la composante parallèle actuelle de Java en proposant des constructions SMtaviques qui abstraient la communication, la synchronisation et l'ordonnancement. Ce niveau d'abstraction est atteint en incorporant dans Java une algèbre de processus communiquant via des canaux. L'algèbre en question intègre des primitives de création de canaux et de processus ainsi que des combinateurs de séquence. de choix et de composition parallèle. Après une évaluation approfondie des composantes parallèles des langages Java et Concurrent ML. nous expliquons de manière détaillée la conception et l'implantation d'un nouveau paquetage de threads incorporant des concepts qui: définissent des abstractions de communication et de synchronisation. augmentent l'expressivité du langage en permettant de définir des communicat ions et des synchronisations latentes. 1.6 Structure Ce document est organisé en 6 chapitres. Mis à part le présent chapitre d'introduction, ie chapitre 2 décrit les principes de la programmation parallèle en Java. Le chapitre 3 explique les bases de la programmation en CML ainsi que son implantation. Une évaluation de ces deux langages est faite au chapitre 4, de même qu'une proposition de nouveau concepts à intégrer à Java. Le chapitre 5 explique le choix de conception, l'architecture et l'implantation d'un nouveau paquetage HOJ (Higher Order Java) pour le langage Java. Des programmes de tests sont inclus de manière à pouvoir évaluer son efficacité. Pour conclure, le chapitre 6 résume les principaux points détaillés tout au long de ce mémoire. Il expose les différents problèmes rencontrés pour la réalisation de ce projet ainsi que les solutions apportées.

16 Chapitre 2 Programmation parallèle en Java 2.1 Introduction au langage Java Le Iangage Java, connu initialement sous le nom de Oak, a été créé par Sun Microsystems en 1995 dans le but de répondre à des problèmes d'ordre pratique de la programmation moderne. La croissance importante de 1'Internet a en effet modifié les besoins au niveau du développement et de la distribution logicielle. Pour s'adapter à ces modifications. un langage de programmation doit permettre le développement d'applications sécurisées. performantes et hautement robustes sur des plates-formes multiples et dans des réseaux hétérogènes, distribués. Java a été conçu pour répondre aux besoins des développeurs travaillant dans des environnements réseaux hétérogènes. Il permet donc d'exécuter des applications indépendantes du système d'exploitation et de la machine utilisés dans un environnement sécurisé. Java est un langage auquel il peut être attribué un certain nombre de caractéristiques. C'est un langage à la fois: Orient6 objet: comme dans tous les langages de ce type, les données sont structurées en classes. Les classes contiennent des variables qui constituent la structure statique ainsi que des méthodes qui définissent le comportement dynamique des objets instances de ces classes. Ces dernières sont organisées selon une hiérarchie et héritent des propriétés de leurs super-classes. Le Iangage Java ne supporte pas l'héritage multiple donc une classe étant capable d'avoir plusieurs sous classes n'aura jamais qu'une seule super-classe. Simple: l'un des soucis majeurs lors de la conception du langage Java a été la sim plici té. Tout en héritant des caractéristiques de plusieurs autres langages tels C? C++ et SmallTalk, il se retrouve dénué de la pll~part des aspects qui augmentent leur complexité comme les pointeurs ou l'héritage multiple.

17 2.1 Introduction au iangage Java 14 Distribué: Java comporte une librairie permettant d'utiliser facilement des protocoles de communication TCP/IP tels que HTTP et FTP. De ce fait. une application Java peut accéder à des objets situés sur Internet via des URLs avec autant de facilité que des fichiers locaux. Parall&le: Java supporte la programmation parallèle c'est-à-dire que plusieurs processus ou threads sont en mesure de s'exécuter en parallèle avec la possibilité de s'échanger de l'information et de se synchroniser. Le langage Java intègre des primitives de synchronisation basées sur les paradigmes de variables de conditions et de moniteurs. Robuste: la robustesse de Java vient du fait qu'il est conçu pour être fiable dans de nombreuses situations. L'emphase est mise sur la vérification. Java effectue d'abord une vérification statique et recherche les problèmes éventuels. Une seconde vérification a lieu à l'exécution dans le but d'éliminer les situations génératrices d'erreurs. Sécurisé: Java à été créé afin de pouvoir, entre autres. être utilisé dans des environnements en réseau et distribués. De ce fait, la sécurité a constitué une contrainte importante lors de sa conception. Java procure deux niveaux de sécurité: l'un au niveau du langage et l'autre au niveau bytecode. Neutre d'architecture: les réseau en général sont composés de plusieurs systèmes avec des systèmes d'exploitation, des unités centrales et des architectures différents. En vue de permettre l'exécution des programmes Java sur des platesformes différentes et partout a travers le réseau, le compilateur génère du code objet pouvant être exécuté indépendamment de l'architecture: le bytecode. Interprété: Java est un langage interprété. Il est doté d'un interpréteur capable d'exécuter directement le bytecode sur n'importe quelle machine dotée d'une JVM. Le processus d'édition de liens n'est alors plus nécessaire et la rapidité du processus de développement s'en trouve accrue. Portable: la portabilité de Java est surtout due au fait qu'il est neutre d'architecture. De plus, sa spécification ne contient aucun aspect dépendant de l'implantation. La taille et les opération sur les t-vpes primitifs Java sont nettement spécifiées et les librairies définissent des interfaces portables.

18 2.2 Programmation parallèle Programmation parallèle La programmation parallèle en Java est basée sur le concept de thread. Dans un système informatique, plusieurs programmes ou processus peuvent être fragmentés en plusieurs composantes. Ces composantes encore appelées processus légers ou threads sont des flots de contrôle ayant la possibilité d'exécuter des instructions en parallèle. Ainsi, un processus comprenant plusieurs threads est en mesure d'exécuter autant de tâches en parallèle qu'il comporte de threads. Les applications Java qui utilisent les threads permettent. mis à part l'exécution simultanée de plusieurs tâches. d'augmenter le degré d'interaction avec l'utilisateur. Elles permettent également d'implanter des comportements asynchrones [Ber96]. Bien que le paquetage de threads de Java n'offre pas toutes les possibilités que certains autres plus complets, il a l'avantage d'être simple d'utilisation. Cette simplicité rend la programmation des threads plus facile à comprendre et les applications, de ce fait, plus robustes. 2.3 Création de threads II existe deux manières de créer des threads en Java: 0 l'utilisation des sous-classes de la classe Thread: l'utilisation de l'interface Runnable: L'une des façons de créer un thread Java est de spécialiser la classe pré- définie Thread du paquetage java-lang et de redéfinir sa méthode run. Le thread ainsi créé ne s'esécute que lors de l'appel de la méthode start. Cette méthode une fois lancée appelle la méthode principale du thread. soit sa méthode run. Java ne supporte pas l'héritage multiple. Il est donc nécessaire de prévoir une méthode autre que la spécialisation pour la création de threads notamment dans le cas des applets où la spécialisation est également nécessaire. Dans ce cas, un objet qui implante l'interface prédéfinie Runna ble peut être créé. Cet objet fournira les méthodes nécessaires, en l'occurrence la met hode run? au nouveau t hread. 2.4 Synchronisation Tant que les threads s'exécutent sans interagir les uns avec les autres, le problème de synchronisation ne se pose pas. Cependant, dans la plupart des applications multithreads. ils travaillent avec des données partagées, échangent de l'information et par

19 2.4 Synchronisation 16 conséquent sont obligés de tenir compte de l'état et de l'activité des autres threads. Dans de telles situations, il devient impératif de synchroniser les processus légers. La synchronisation en Java se fait à l'aide de variables partagées. Les threads qui se synchronisent accèdent à tour de role à ces variables s ~it pour y lire soit pour y écrire des informations. La synchronisation est gérée à deux niveau: au niveau de la machine virtuelle par les moniteurs, au niveau de la programmation par les méthodes wait. notify et notisall Niveau machine virtuelle Au niveau de la machine virtuelle de Java, ta synchronisation des threads se fait grâce à l'utilisation de moniteurs. Lorsque demu threads se syuchronisent. ils se partagent des objets appelés variables de condition. Le rôle des moniteurs est d'empêcher deux threads d'accéder simultanément à une même variable de condition. Dans un programme, les sections de code pouvant être utilisées à la fois par deux ou plusieurs t hreads en parallèle sont dites critiques. Les sections critiques sont identifiées dans un programme Java par le mot clé synchronized. Les sections de code critique seront de préférence des méthodes pour éviter les problèmes lors du débogage. Un moniteur unique est associé à chaque objet ayant une méthode synchronized. Son acquisition et sa libération se font automatiquement par l'environnement d'exécution de Java. Les threads ont la possibilité de réacquérir un moniteur qu'ils ont déjà. C'est l'une des qualités des moniteurs désignée par le terme reentrant. Ceci empêche l'inter-blocage des threads sur un moniteur déjà acquis. Par exemple, considérons la classe Reentrant illustrée à la table 2.1. La classe Reentrant contient deux méthodes synchronisées: a et b. La première méthode fait appel à la seconde. Arrivé à la méthode a, le thread actuel prend le moniteur pour l'objet Reentrant. a appelle b qui est également étiquetée synchronized. Le thread doit donc ré-acquérir le moniteur. si le système ne supportait pas les moniteurs reentrant (pouvant être acquis plus d'une fois par le même thread), cette séquence aboutirait à un inter-blocage Niveau programmation La synchronisation du niveau programmation est obtenue en utilisant une combinaison des méthodes wait, notify et notifyall. Ces méthodes ne peuvent être invoquées qu'a

20 claa Reentrant.c public synchronized void a() C Systern.out.println("Je suis dans la méthode a()"); 1 public synchonized void b() 1 System.outprintln("Je suis dans la méthode b()"); } Tableau 2.1: Classe Reentrant. partir d'une méthode ou d'un bloc synchronized[cw981. Méthode wait La méthode wait sans arguments met le thread en état d'attente et ce jusqu'à ce qu'un autre thread l'avertisse d'un changement de condition grâce aux méthodes notify ou notisall. Ln thread peut attendre indéfiniment si aucune de ces méthodes n'est appelée. Deus autres versions de la méthode wait permettent la limitation de l'attente à un certain nombre de milisecondes ou même de nanosecondes: wait(long limite) wait(long limite, int nanos) Méthodes notify et notifyall La méthode notify a pour eeet d'avertir arbitrairement l'un des threads en attente de la disponibilité du moniteur. Tous les autres threads continuent d'attendre. Afin d'obtenir un résultat moins arbitraire, nous utiliserons la méthode notifyall qui au lieu d'avertir un thread unique, avertit tous les threads en attente sur le moniteur. Ces derniers sont alors en condition de course pour ré-acquérir le moniteur Exemple de synchronisation de t hreads Cet exemple est basé sur celui du Producteur/Consommateur illustré dans le manuel "The Java Tutorial" de SUN [CW981. Considérons un auteur! un lecteur et une bibliothèque. L'auteur écrit un livre avec un numéro de série pouvant aller de O à 9. Il

21 2.4 Synchronisation 18 dépose son livre dans une bibliothèque et imprime le numéro de son livre. Après quoi, il s'endort un certain temps avant d'écrire un nouveau livre. Le lecteur de son côté ne manque jamais une occasion de lire et emprunte tous les livres de la bibliothèque dès que ces derniers sont accessibles. L'auteur et le lecteur échangent des informations via la bibliothèque qui joue ici le rôle de variable partagée. Pour empêcher que le lecteur aille chercher un livre qu'il a déjà lu ou que l'auteur ne dépose de nouveau livre alors que le lecteur n'a pas lu le précédent, l'auteur et le lecteur doivent être synchronisés. Le lecteur ne doit lire qu'un livre à la fois. Le programme suivant utilise les deux mécanismes de synchronisation vu précédemment. soient les moniteurs et les méthodes wait, notify et notifyall. Les moniteurs empêchent l'auteur et le lecteur d'accéder simultanément à la bibliothèque. Les méthodes wait et notifiall sont utilisées au niveau de la bibliothèque pour assurer la coordination de l'auteur et du lecteur. Ces méthodes assurent que les livres déposés dans la bibliothèque ne sont empruntés qu'une seuie fois. Cet exemple permet d'illustrer les principaux aspects de la communication et de la synchronisation des threads Java. Le code donné par les tables 2.2 à 2.5 est composé de quatre classes principales: la classe Auteur qui définit le comportement du thread auteur. 0 la classe Lecteur qui définit le comportement du thread lecteur, la classe Bibliothèque qui constitue l'objet partagé par les deux threads? la classe AuteurLecteur qui constitue le programme principal. Classes Auteur et Lecteur Les classes Auteur et Lecteur sont définies comme étant des sous-classes de Thread. Elles héritent donc des propriétés et des méthodes de leur super-classe. Les classes Auteur et Lecteur contiennent deux données privées: une bibliothèque et un identificateur entier. Leur comportement est défini par la méthode run. Le producteur utilise la méthode déposer de la classe Bibliothèque pour envoyer une série d'entiers et le consommateur utilise la méthode emprunter de la classe Bibliothèque pour les récupérer. Classe Bibliothèque La classe Bibliothèque contient les méthodes nécessaires à la communication et à la synchronisation de l'auteur et du lecteur. Elle contient deux variables privées: un entier qui représente le contenu de la bibliothèque et un booléen enrayon indiquant

22 2.4 Synchronisation 19 class Auteur extends Thread { private Bibliothèque biblio: private int numéro; public auteur ( Bibliothèque b. int numéro) C biblio=b; this.numero=numero; 1 public void fun() { for (int i=o; i<10; i++) { biblio.deposer(i); system.out.println("l*auteur numéro " + this.numero+ " a déposé le manuel: If +i); try{sleep ((int) (Math.random() *100)); ) catch (InterruptedException e) {) 1 Tableau 2.2: Classe Auteur.

23 2.4 Synchronisation 20 class Lecteur extends Thread C private Bibliothèque biblio; private int numhro; pubiic lecteur ( Bibliothèque b, int numéro) C 3 public void run () C int manuel =O; for ( int i=0: i<10; i++) 1 manuel=biblio.emprunter(); system.out.println (II Le lecteur numéro +this.numero+ " a emprunte le manuel" +i); 1 1 Tableau 2.3: Classe Lecteur.

24 2.4 Synchronisation 21 class Bibliothèque { private int contenu; private boolean enrayon =faise; public synchronized int emprunter() { while (enrayon == false) try {wait(); ) catch (InterruptedException e){) 1 enrayon=false; notify All; return (contenu); 1 public synchronized void déposer ( int manuel) C while (enrayon == true) C try{wait(): ) catch ( InterruptedException e) {) 1 contenu =manuel; en Rayon= true; notifyall(); } Tableau 2.4: Classe Bibliothèque. class AuteurLecteur { public void main ( String fl args ) C Bibliothèque b = new Bibliothèque(); auteur a = new auteur (b.1); kteur I = new lecteur (b.1); a.start(); I.%art() ; > 3 Tableau 2.5: Classe AuteurLecteur: Programme principal.

25 la disponibilité de ce contenu. Elle contient également deux méthodes emprunter et déposer. Méthode emprunter La méthode emprunter est une méthode déclarée avec le modificateur synchronized, c'est à dire qu'un moniteur lui est associé pour empêcher son utilisation simultanée par plusieurs threads. Cette méthode est utilisée par le lecteur pour la récupération des données. Si la Bibliothèque est vide, alors le lecteur se met en attente jusqu7à ce qu'il soit notifié par l'auteur. La variable contenu est alors remplie. La variable enrayon est mise à false et le contenu est retourné. La méthode notisall est appelée afin d'avertir l'auteur. Méthode déposer Comme la méthode emprunter, Ia méthode déposer est une méthode déclarée avec le rnodificateu r synchronized. Elle est utilisée par l'auteur pour l'envoi de données. Si la bibliothèque est pleine alors l'auteur se met en attente jusqu'à ce qu'il soit notifié par le lecteur. Après quoi, la valeur à envoyer est mise dans Ia variable contenu. La enrayon est mise à true et le lecteur est averti. Exécution L 'esécut ion du programme génère les lignes suivantes: L'auteur numéro 1 a dépose le manuel: O Le lecteur numéro 1 a emprunté le manuel: O L'auteur numéro 1 a déposé le manuel: 1 Le lecteur numéro 1 a emprunté le manuel: 1 L'auteur numéro 1 a déposé le manuel: 2 Le lecteur numéro 1 a emprunté le manuel: 2 L'auteur numéro 1 a déposé le manuel: 3 Le lecteur numéro 1 a emprunté le manuel: 3 L'auteur numéro 1 a déposé le manuel: 4 Le lecteur numéro 1 a emprunte le manuel: 4 L'auteur numéro 1 a déposé le manuel: 5 Le lecteur numéro 1 a emprunté le manuel: 5 L'auteur numéro 1 a déposé le manuel: 6 Le lecteur numéro 1 a emprunté le manuel: 6 L'auteur numéro 1 a déposé le manuel: 7 Le lecteur numéro 1 a emprunté le manuel: 7 L'auteur numéro 1 a déposé le manuel: 8 Le lecteur numéro 1 a emprunté le manuel: 8 L'auteur numéro 1 a déposé le manuel: 9 Le lecteur numéro 1 a emprunté le manuel: 9

Programmation concurrente en java

Programmation concurrente en java Programmation concurrente en java M. Belguidoum Université Mentouri de Constantine Département Informatique M. Belguidoum (UMC) Programmation concurrente 1 / 29 Plan 1 Introduction 2 Création d'un thread

Plus en détail

Les tâches et la synchronisation en langage Java

Les tâches et la synchronisation en langage Java Les tâches et la synchronisation en langage Java Les threads, les verrous, les sémaphores et les moniteurs en Java D après les cours de D. Genthial et B. Caylux Langage Java Threads et synchronisation

Plus en détail

JAVA - Compléments du cours 9

JAVA - Compléments du cours 9 JAVA - Compléments du cours 9 Nicolas Baudru Année 2008-2009 Exercice 1 (Création de threads) En Java, il existe deux méthodes pour créer des threads. La première étend la classe Thread : class MonThread

Plus en détail

Programmation Concurrente, Réactive et Répartie

Programmation Concurrente, Réactive et Répartie Programmation Concurrente, Réactive et Répartie Cours N 3 Emmanuel Chailloux Master d Informatique Université Pierre et Marie Curie année 2012-2013 Cours 3 - Programmation Concurrente, Réactive et Répartie

Plus en détail

Programmation multitâches avec les Threads

Programmation multitâches avec les Threads Programmation multitâches avec les Threads A. Introduction A.1. Programmation multitâche Tous les systèmes d'exploitation actuels ont la possibilité d'effectuer plusieurs tâches en simultané. En effet,

Plus en détail

Année 2008-2009. Les threads Java. Nicolas Baudru mél : nicolas.baudru@esil.univmed.fr page web : nicolas.baudru.perso.esil.univmed.

Année 2008-2009. Les threads Java. Nicolas Baudru mél : nicolas.baudru@esil.univmed.fr page web : nicolas.baudru.perso.esil.univmed. Année 2008-2009 Les threads Java Nicolas Baudru mél : nicolas.baudru@esil.univmed.fr page web : nicolas.baudru.perso.esil.univmed.fr 1 Présentation du problème Revenons quelques instants à nos animaux.

Plus en détail

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

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation Cycle Ingénierie 2e année SIGL Dernière mise à jour : 19/10/2006 Christophe Porteneuve Threads Principes Cycle de vie Création java.lang.thread

Plus en détail

ARCHITECTURES MATÉRIELLES SYSTÈMES INFORMATIQUES

ARCHITECTURES MATÉRIELLES SYSTÈMES INFORMATIQUES CENTRALISÉE RÉPARTIE mémoire locale mémoire locale mémoire locale mémoire locale mémoire locale mémoire locale processeur processeur processeur processeur processeur processeur instructions messages MÉMOIRE

Plus en détail

Les tâches et la synchronisation en langage Java

Les tâches et la synchronisation en langage Java Les tâches et la synchronisation en langage Java Les threads, les verrous, les sémaphores et les moniteurs en Java D après les cours de D. Genthial et B. Caylux Langage Java Threads et synchronisation

Plus en détail

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

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java Info0604 Programmation multi-threadée Cours 5 Programmation multi-threadée en Java Pierre Delisle Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique 18 février 2015 Plan

Plus en détail

Parallélisme. (Basé sur Concepts of Programming Languages, 8 th edition, by Robert W. Sebesta, 2007)

Parallélisme. (Basé sur Concepts of Programming Languages, 8 th edition, by Robert W. Sebesta, 2007) Parallélisme (Basé sur Concepts of Programming Languages, 8 th edition, by Robert W. Sebesta, 2007) 1 Les différents types de Parallélisme Le Parallélisme dans l'exécution de logiciel peut se produire

Plus en détail

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique Institut Supérieure Aux Etudes Technologiques De Nabeul Département Informatique Support de Programmation Java Préparé par Mlle Imene Sghaier 2006-2007 Chapitre 1 Introduction au langage de programmation

Plus en détail

Programmation système : sémaphores

Programmation système : sémaphores Programmation système : sémaphores Un sémaphore permet de protéger une variable (ou un type de donnée abstrait) et constitue la méthode utilisée couramment pour restreindre l'accès à des ressources partagées

Plus en détail

Dr. M.W. Youssef Systèmes d exploitation Avancées 1ING ISI - 2009

Dr. M.W. Youssef Systèmes d exploitation Avancées 1ING ISI - 2009 Institut Supérieur d Informatique Chapitre 02 Synchronisation des processus Dr. Mohamed-Wassim YOUSSEF 2009 [www.wassimyoussef.info] Systèmes d exploitation avancées 1 ING ISI 1 ére année Ingénieur en

Plus en détail

Communications et synchronisations. Système L3, 2014-2015 1/21

Communications et synchronisations. Système L3, 2014-2015 1/21 Communications et synchronisations Système L3, 2014-2015 1/21 Le problème des philosophes (Dijkstra 1965) Cinq philosophes sont assis autour d une table ronde Chaque philosophe a devant lui un plat de

Plus en détail

Plan du cours 5:Threads

Plan du cours 5:Threads Plan du cours 5:Threads introduction Définition Création des Threads Gestion des priorités Synchronisation Page : 1 Introduction(1) Les structure de contrôle: If.. Else.. While Switch. Try..catch.. Offrent

Plus en détail

Moniteurs, Java, Threads et Processus

Moniteurs, Java, Threads et Processus Moniteurs, Java, Threads et Processus 1 Une vue orientée-objet de la mémoire partagée On peut voir un sémaphore comme un objet partagé accessible par deux méthodes : wait et signal. L idée du concept de

Plus en détail

INITIATION AU LANGAGE JAVA

INITIATION AU LANGAGE JAVA INITIATION AU LANGAGE JAVA I. Présentation 1.1 Historique : Au début des années 90, Sun travaillait sur un projet visant à concevoir des logiciels simples et performants exécutés dans des PDA (Personnal

Plus en détail

Chapitre 5. Communication interprocessus. 5.1 Introduction

Chapitre 5. Communication interprocessus. 5.1 Introduction Communication interprocessus 5.1 Introduction Dans une activité parallèle (ou pseudo parallèle), un ensemble de processus séquentiels s exécutent en parallèle. Cette exécution résulte deux types de relations

Plus en détail

Cours 3: Coopération entre processus: Synchronisation + Communication

Cours 3: Coopération entre processus: Synchronisation + Communication Cours 3: Coopération entre processus: Synchronisation + Communication Coopération entre processus & Synchronisation + Communication 1. Introduction 2. Rendez-vous de N entités 3. Producteur(s) / Consommateur(s)

Plus en détail

CEG4566/CSI4541 Conception de systèmes temps réel. Chapitre 8 - Communication et synchronisation dans les systèmes temps réel

CEG4566/CSI4541 Conception de systèmes temps réel. Chapitre 8 - Communication et synchronisation dans les systèmes temps réel CEG4566/CSI4541 Conception de systèmes temps réel Chapitre 8 - Communication et synchronisation dans les systèmes temps réel Sommaire 8.1 Objets partagés et exclusion mutuelle 8.2 Moniteurs et synchronisation

Plus en détail

Chapitre 4. Le langage PROMELA. (PROcess Meta LAnguage)

Chapitre 4. Le langage PROMELA. (PROcess Meta LAnguage) Chapitre 4 Le langage PROMELA (PROcess Meta LAnguage) PROcess MEta Language [Holzmann] Spécification et vérification de protocoles Abstraction de l'implémentation (niveau conceptuel) Modèle de validation

Plus en détail

Cours 4. - Créer des animations : la classe Thread et l'interface Runnable - Quelques composants supplémentaires : le choix dans une liste

Cours 4. - Créer des animations : la classe Thread et l'interface Runnable - Quelques composants supplémentaires : le choix dans une liste Cours 4 - Créer des animations : la classe Thread et l'interface Runnable - Quelques composants supplémentaires : le choix dans une liste JComboBox et JList F. Gayral 1 Rappel : multi-tâches multi-tâches

Plus en détail

Communications et synchronisations

Communications et synchronisations Communications et synchronisations Polytech Paris-Sud Cycle ingénieur de la filière étudiant Louis Mandel Université Paris-Sud 11 Louis.Mandel@lri.fr année 2012/2013 Le problème des philosophes (Dijkstra

Plus en détail

Un ordonnanceur stupide

Un ordonnanceur stupide Un ordonnanceur simple Université Paris Sud L objet des exercices qui suivent est de créer un ordonanceur implantant l algorithme du tourniquet ( round-robin scheduler ). La technique utilisée pour élire

Plus en détail

La programmation concurrente

La programmation concurrente La programmation concurrente Jean-Ferdy Susini Maître de Conférences - CNAM Département Informatique Sources : Android Developpers, Wikipedia Paris, 06/05/2015 Architecture matérielle 2 Considérons l architecture

Plus en détail

Synchronisation par. Rappels. Plan. Conditions et moniteurs (1/7) Inf 431 Cours 11. jeanjacqueslevy.net

Synchronisation par. Rappels. Plan. Conditions et moniteurs (1/7) Inf 431 Cours 11. jeanjacqueslevy.net Rappels Inf 431 Cours 11 un processus t (Thread) est un programme qui s exécute Synchronisation par mémoire partagée tstart lance l exécution concurrente de la méthode trun de t tinterrupt signale qu on

Plus en détail

PLAN. Synchronisation des Processus: Exclusion Mutuelle. Problème de synchronisation: Exemple. Spécification du Problème

PLAN. Synchronisation des Processus: Exclusion Mutuelle. Problème de synchronisation: Exemple. Spécification du Problème PLAN Synchronisation des Processus: Exclusion Mutuelle N.Hameurlain http://www.univ-pau.fr/~hameur Spécification du problème Section Critique () Exclusion Mutuelle Principe Propriétés Réalisation d exclusion

Plus en détail

Synchro et Threads Java TM

Synchro et Threads Java TM Synchro et Threads Java TM NICOD JEAN-MARC Master 2 Informatique Université de Franche-Comté UFR des Sciences et Techniques septembre 2008 NICOD JEAN-MARC Synchro et Threads avec Java TM 1 / 32 Sommaire

Plus en détail

Systèmes d Exploitation temps réel. Programmation des STR. Gabriel FREY 2013 freyg.it@gmail.com

Systèmes d Exploitation temps réel. Programmation des STR. Gabriel FREY 2013 freyg.it@gmail.com Systèmes d Exploitation temps réel 1 2 Plan de l intervention 1. Introduction aux Systèmes Temps Réel 2. Programmation concurrente Synchronisation et communication Besoin en facultés temporelles 3. Ordonnancement

Plus en détail

as Architecture des Systèmes d Information

as Architecture des Systèmes d Information Gestion des threads Gestion des timers Gestion des threads Gestion des timers Programmation - Threads - Nicolas Malandain 1 Gestion des threads Principe Création Cycle Synchronisation Collections May 1,

Plus en détail

Questions à choix multiples Page 1 de 11

Questions à choix multiples Page 1 de 11 INF3172 Principes des systèmes d'exploitation Examen intra hiver 2015 Question #1 Quel est l'objectif d'un système d'exploitation? a) Protéger les composants de l'ordinateur b) Fournir une abstraction

Plus en détail

Parallélisme en Java. Patrice Torguet

Parallélisme en Java. Patrice Torguet Parallélisme en Java Patrice Torguet Plan Introduction Notion de processus Notion de thread Créations de threads Synchronisation entre threads wait et notify Les différents états d un thread Difficultés

Plus en détail

Nom: INF5171 Programmation concurrente et parallèle Examen nal (Automne 2012) Code permanent: 1 2 3 4 5 Total /10 /10 /10 /10 /10 /50 XXX XXX XXX

Nom: INF5171 Programmation concurrente et parallèle Examen nal (Automne 2012) Code permanent: 1 2 3 4 5 Total /10 /10 /10 /10 /10 /50 XXX XXX XXX Examen nal 1 INF5171 Programmation concurrente et parallèle Examen nal (Automne 2012) Durée: 13h30 16h30 Documentation : Documentation personnelle (papier) autorisée. Nom: Code permanent: 1 2 3 4 5 Total

Plus en détail

Synchronisation et communication entre processus

Synchronisation et communication entre processus Synchronisation et communication entre processus Interblocage et coalition Joëlle Delacroix AMSI1999/2000 1 INTRODUCTION Système multiprocessus L'ordonnancement "entrelace" les exécutions P1 P2 P3 Processus

Plus en détail

Cours 3: Coopération entre processus: Synchronisation + Communication

Cours 3: Coopération entre processus: Synchronisation + Communication Cours 3: Coopération entre processus: Synchronisation + Communication Coopération entre processus & Synchronisation + Communication 1. Introduction 2. Rendez-vous de N entités 3. Producteur(s) / Consommateur(s)

Plus en détail

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

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la

Plus en détail

GESTION DES PROCESSUS

GESTION DES PROCESSUS CHAPITRE 2 : GESTION DES PROCESSUS Objectifs spécifiques Connaître la notion de processus, Connaître les caractéristiques d un processus ainsi que son contexte Connaître la notion d interruptions et de

Plus en détail

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

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

Conception et Développement Orientés Objets Cours 1 : Introduction. 2 Les paradigmes de programmation. 3 Les concepts de la programmation objet

Conception et Développement Orientés Objets Cours 1 : Introduction. 2 Les paradigmes de programmation. 3 Les concepts de la programmation objet CNAM UV 19357 Année 2003-2004 David Delahaye David.Delahaye@cnam.fr Conception et Développement Orientés Objets Cours 1 : Introduction 1 Présentation de la valeur Ce cours s adresse à toute personne ayant

Plus en détail

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf Introduction à Java Matthieu Herrb CNRS-LAAS http://homepages.laas.fr/matthieu/cours/java/java.pdf Mars 2014 Plan 1 Concepts 2 Éléments du langage 3 Classes et objets 4 Packages 2/28 Histoire et motivations

Plus en détail

Programmation concurrente Problématiques associées. Chap #3.2

Programmation concurrente Problématiques associées. Chap #3.2 Programmation concurrente Problématiques associées Chap #3.2 1 Introduction L exécution simultanée de plusieurs tâches concurrentes ne s effectue pas sans difficultés. Plusieurs threads peuvent accéder

Plus en détail

Comment régler les problèmes de synchronisation? P-A. Champin

Comment régler les problèmes de synchronisation? P-A. Champin S y s t è m e d ' e x p l o i t a t i o n S é a n c e 5 Comment régler les problèmes de synchronisation? P-A. Champin Département Informatique IUT A Université Claude Bernard Lyon 1 2009 S5 - Comment régler

Plus en détail

Chapitre 4. Le modèle de composants : les services

Chapitre 4. Le modèle de composants : les services Chapitre 4 Le modèle de composants : les services 1 Les services "A Service is an application component that can perform long-running operations in the background and does not provide a user interface."

Plus en détail

1.Programmation en Java : notions de base, orienté objet et héritage

1.Programmation en Java : notions de base, orienté objet et héritage Travaux pratique de Méthodologie et Langage de Programmation,, TP1 1 1.Programmation en Java : notions de base, orienté objet et héritage Cette séance de TP a pour objectif d'introduire à la programmation

Plus en détail

synchronisation et communication entre processus Synchronisation et communication entre processus

synchronisation et communication entre processus Synchronisation et communication entre processus 1 Synchronisation et communication entre processus Accès à des ressources communes 2 Exemple: compte bancaire dont montant en A sur disque programme pour ajouter 100: lire(n,a) N := N+100 écrire(n,a) 2

Plus en détail

Synchronisation des Processus et les sémaphores

Synchronisation des Processus et les sémaphores Synchronisation des Processus et les sémaphores Achraf Othman Support du cours : www.achrafothman.net 1 PLAN Spécification du problème Section Critique (SC) Exclusion Mutuelle Principe Propriétés Réalisation

Plus en détail

1. Les fondements de l informatique 13

1. Les fondements de l informatique 13 Introduction à l'algorithmique 1. Les fondements de l informatique 13 1.1 Architecture de Von Neumann 13 1.2 La machine de Turing 17 1.3 Représentation interne des instructions et des données 19 1.3.1

Plus en détail

Résumé Introduction Programmation Java

Résumé Introduction Programmation Java Résumé Introduction Programmation Java Concepts Un programme : séquence, test conditionnel, boucles. Objets : Les objets Java modélisent les objets d un problème donné Classe : Les objets sont crées à

Plus en détail

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

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011 Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr Université de Provence 9 février 2011 Arnaud Labourel (Université de Provence) Exclusion Mutuelle 9 février 2011 1 / 53 Contexte Epistémologique

Plus en détail

Plan. Environnement Client/Serveur. Cours 6 Rappels Java (suite) Appel de méthode à distance. Utilité. static

Plan. Environnement Client/Serveur. Cours 6 Rappels Java (suite) Appel de méthode à distance. Utilité. static Plan Environnement Client/Serveur Cours 6 Rappels Java (suite) Appel de méthode à distance kn@lri.fr http://www.lri.fr/~kn 1 Rappels sur les systèmes d'exploitations / Communication par mémoire partagée

Plus en détail

S. Laporte C# mode console DAIGL TS1

S. Laporte C# mode console DAIGL TS1 Bases du langage C# I. C# en mode console (mode texte) Avantages par rapport au mode graphique (Application Windows): - C'est un mode plus proche de l'approche algorithmique (pas de notions de composants,

Plus en détail

PROCESSUS ET RESSOURCES

PROCESSUS ET RESSOURCES Chapitre 5 PROCESSUS ET RESSOURCES 1. GENERALITES Un processus à exécuter a besoin de ressources : procédures et données, mémoire, processeur (UC, et d'autres éventuellement), périphériques, fichiers,...

Plus en détail

Programmation réseau en Java : les threads

Programmation réseau en Java : les threads Programmation réseau en Java : les threads Michel Chilowicz Transparents de cours sous licence Creative Commons By-NC-SA Master 2 TTT Université Paris-Est Marne-la-Vallée Version du 28/02/2013 chilowi

Plus en détail

Projet de Veille Technologique

Projet de Veille Technologique Projet de Veille Technologique Programmation carte à puce - JavaCard Ing. MZOUGHI Ines (i.mzoughi@gmail.com) Dr. MAHMOUDI Ramzi (mahmoudr@esiee.fr) TEST Sommaire Programmation JavaCard Les prérequis...

Plus en détail

Cours de Systèmes d Exploitation

Cours de Systèmes d Exploitation Licence d informatique Synchronisation et Communication inter-processus Hafid Bourzoufi Université de Valenciennes - ISTV Introduction Les processus concurrents s exécutant dans le système d exploitation

Plus en détail

ACCOV 2001-2002. Système avec des processus concurrents

ACCOV 2001-2002. Système avec des processus concurrents projet ACCOV 2001-2002 ACCOV 2001-2002. Système avec des processus concurrents procedure Main is type TabDoc is array(1..6) of Document; -- contrôle l'attribution d'un nom unique package ProcId is procedure

Plus en détail

Programmation Objet - Cours II

Programmation Objet - Cours II Programmation Objet - Cours II - Exercices - Page 1 Programmation Objet - Cours II Exercices Auteur : E.Thirion - Dernière mise à jour : 05/07/2015 Les exercices suivants sont en majorité des projets à

Plus en détail

Série n 1 / Solutions

Série n 1 / Solutions Série n 1 / Solutions Exercice n 1 - les deux processus partagent une variable booléenne interesse qui sera vraie si le processus est en section critique ou demande à y rentrer, et fausse sinon, /* contexte

Plus en détail

Les exceptions. Cours 12. vous les avez pratiquées sans le savoir... ArrayIndexOfBoundsException NullPointerException ClassNotFoundException...

Les exceptions. Cours 12. vous les avez pratiquées sans le savoir... ArrayIndexOfBoundsException NullPointerException ClassNotFoundException... Cours 12 Les exceptions vous les avez pratiquées sans le savoir... ArrayIndexOfBoundsException NullPointerException ClassNotFoundException... F.Gayral 1 Les exceptions, vous connaissez... public class

Plus en détail

Threads. Threads. USTL http://www.lifl.fr/ routier 1

Threads. Threads. USTL http://www.lifl.fr/ routier 1 Threads USTL http://www.lifl.fr/ routier 1 Rappels - Définitions un Process est un programme qui tourne et dispose de ses propres ressources mémoire. OS multi-tâche plusieurs process en concurrence un

Plus en détail

Modèle client-serveur

Modèle client-serveur Modèle client-serveur Daniel Hagimont IRIT/ENSEEIHT 2 rue Charles Camichel - BP 7122 31071 TOULOUSE CEDEX 7 Daniel.Hagimont@enseeiht.fr http://hagimont.perso.enseeiht.fr 1 Plan Principes généraux Modèle

Plus en détail

Introduction aux Systèmes Distribués. Compléments de programmation Java : Flux & Threads

Introduction aux Systèmes Distribués. Compléments de programmation Java : Flux & Threads Introduction aux Systèmes Distribués Licence Informatique 3 ème année Compléments de programmation Java : Flux & Threads Eric Cariou Université de Pau et des Pays de l'adour Département Informatique Eric.Cariou@univ-pau.fr

Plus en détail

Java Licence professionnelle CISI 2009-2010

Java Licence professionnelle CISI 2009-2010 Java Licence professionnelle CISI 2009-2010 Cours 10 : Type générique (c) http://manu.e3b.org/java/tutoriels/avance/generique.pdf 1 Introduction La programmation générique - nouveauté la plus significative

Plus en détail

Introduction : les processus. Introduction : les threads. Plan

Introduction : les processus. Introduction : les threads. Plan IN328 Programmation distribuée avec Java et J2EE 2 - Threads en Java Introduction : les processus Un processus est un ensemble d instructions à exécuter, un espace mémoire réservé et éventuellement d autres

Plus en détail

Précis de vocabulaire Orienté Objet

Précis de vocabulaire Orienté Objet Dernière Mise à jour : Mars 2007 Précis de vocabulaire Orienté Objet 1 Questions Expliquer et donner un exemple pour chacun des concepts suivants 1. Qu'est-ce qu'un objet? 2. Qu'est-ce qu'une classe? 3.

Plus en détail

Généralités sur le Langage Java et éléments syntaxiques.

Généralités sur le Langage Java et éléments syntaxiques. Généralités sur le Langage Java et éléments syntaxiques. Généralités sur le Langage Java et éléments syntaxiques....1 Introduction...1 Genéralité sur le langage Java....1 Syntaxe de base du Langage...

Plus en détail

Programmation Multi-Threading en Java

Programmation Multi-Threading en Java Programmation Multi-Threading en Java Christophe Gravier, Frédérique Laforest, Julien Subercaze Télécom Saint-Étienne Université Jean Monnet {prénom.nom}@univ-st-etienne.fr FI2_INFO4 2012 2013 1 / 35 Plan

Plus en détail

Algorithmique Programmation

Algorithmique Programmation Algorithmique Programmation 2ème partie DUT en alternance CNAM 2007-2008 2 Table des matières 1 Premiers Pas en Programmation Objet : les Classes et les Objets 7 1.1 Définir une Classe........................................

Plus en détail

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Polymorphisme, la classe Object, les package et la visibilité en Java... 1 Polymorphisme, la classe Object, les package et la visibilité en Java. Polymorphisme, la classe Object, les package et la visibilité en Java.... 1 Polymorphisme.... 1 Le DownCast... 4 La Classe Object....

Plus en détail

Synchronisation des processus. Didier Verna. didier@lrde.epita.fr http://www.lrde.epita.fr/ didier. Systèmes d Exploitation. Didier Verna EPITA

Synchronisation des processus. Didier Verna. didier@lrde.epita.fr http://www.lrde.epita.fr/ didier. Systèmes d Exploitation. Didier Verna EPITA 1/16 Synchronisation des processus didier@lrde.epita.fr http://www.lrde.epita.fr/ didier 2/16 Table des matières 1 2 Synchronisation matérielle 3 Synchronisation logicielle 4 classiques 4/16 Nécessité

Plus en détail

Modèle client-serveur

Modèle client-serveur Modèle client-serveur Daniel Hagimont IRIT/ENSEEIHT 2 rue Charles Camichel - BP 7122 31071 TOULOUSE CEDEX 7 Daniel.Hagimont@enseeiht.fr http://hagimont.perso.enseeiht.fr Remerciements Michel Riveill 1

Plus en détail

Cours 1 : Introduction Générale + Objet I

Cours 1 : Introduction Générale + Objet I Organisation du cours Équipe pédagogique DUT Informatique S3 - Programmation Java Jean-Claude MARTIN MARTIN@LIMSI.FR Cours 1 : Introduction Générale + Objet I Jean-Claude MARTIN (Responsable, Cours, TD

Plus en détail

Projet M1 : Application P2P Hybride avec RMI

Projet M1 : Application P2P Hybride avec RMI Projet M1 : Application P2P Hybride avec RMI Applications Réparties 2008-2009 Université Paris VIII / Parcours SRM / M1 Sujet : Le but de ce projet est d'implémenter une application de partage de fichiers

Plus en détail

Informatique industrielle A7-19571 Systèmes temps-réel J.F.Peyre. Partie I : Introduction

Informatique industrielle A7-19571 Systèmes temps-réel J.F.Peyre. Partie I : Introduction Informatique industrielle A7-19571 Systèmes temps-réel J.F.Peyre Partie I : Introduction Plan de la première partie Quelques définitions Caractéristiques communes des applications temps-réel Exemples d

Plus en détail

Systèmes concurrents

Systèmes concurrents Systèmes concurrents Philippe Quéinnec 14 septembre 2012 Systèmes concurrents 1 / 25 Deuxième partie L'exclusion mutuelle Systèmes concurrents 2 / 25 Isolation L'exclusion mutuelle Plan 1 Interférences

Plus en détail

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INTRODUCTION A JAVA. Fichier en langage machine Exécutable INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du

Plus en détail

Analyse statique de programmes Typage et analyse statique au sein de Java

Analyse statique de programmes Typage et analyse statique au sein de Java Analyse statique de programmes Typage et analyse statique au sein de Java Master Professionnel Informatique spécialité FSIL/FSI Jean-Marc Talbot jean-marc.talbot@lif.univ-mrs.fr Aix-Marseille Université

Plus en détail

CSC4002 : Contrôle Final Session 1. Date : jeudi 26 janvier 2012 Durée : 1H30. Coordonnateurs : Christian Bac et Denis Conan

CSC4002 : Contrôle Final Session 1. Date : jeudi 26 janvier 2012 Durée : 1H30. Coordonnateurs : Christian Bac et Denis Conan Corrigé et Barème Contrôle de connaissances 2011/2012 des étudiants de 2 è année (EI2) CSC4002 : Contrôle Final Session 1 Date : jeudi 26 janvier 2012 Durée : 1H30 Coordonnateurs : Christian Bac et Denis

Plus en détail

Figure 1. Structure répartie

Figure 1. Structure répartie Chapitre I: Applications Réparties et Middleware 1. Définition d une application répartie Une application répartie est constituée d un ensemble de processus (d objets, d agents, d acteurs) s exécutant

Plus en détail

Construction de logiciels.

Construction de logiciels. SEG 2506 Construction de logiciels. LABORATOIRE 8 : Evaluation de Performance SDL vs. Java présenté à: prof. G. Bochmann, Ph.D. par: Renaud Bougueng Tchemeube #4333634 rboug039@uottawa.ca Note : 13/10

Plus en détail

Notion de thread (1/2)

Notion de thread (1/2) Notion de thread (1/2) La machine virtuelle java (JVM) permet d'exécuter plusieurs traitements en parallèle (en pratique, ils s'exécutent par tranche et en alternance sur le processeur). Ces traitements

Plus en détail

Le problème des lecteurs et rédacteurs : La communication par envoi de messages. définition. Les processus lecteurs et rédacteurs

Le problème des lecteurs et rédacteurs : La communication par envoi de messages. définition. Les processus lecteurs et rédacteurs Le problème des lecteurs et rédacteurs définition Ce problème généralise celui de l exclusion mutuelle. On distingue deux types de processus : Les lecteurs (readers) qui lisent uniquement l information

Plus en détail

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés) Introduction à la POO 1. Histoire de la POO 9 2. Historique du 12 La conception orientée objet 1. Approche procédurale et décomposition fonctionnelle 13 2. La transition vers l'approche objet 14 3. Les

Plus en détail

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007 NFP 121 Java et les Threads Présentation : Thierry Escalarasse Mai 2007 Plan du cour Présentation de la notion de Threads La classe Thread L interface Runnable Les états d un thread La Synchronisation

Plus en détail

Systèmes d'exploitation Gestion des processus

Systèmes d'exploitation Gestion des processus Systèmes d'exploitation Gestion des processus Cours SYE Prof. Daniel Rossier Version 2.3 (2009-2010) 1 Plan Processus Changement de contexte Threads IPC (Inter-Process Communication) Algorithmes d'ordonnancement

Plus en détail

Université Mohammed Premier Année universitaire 2011-2012. Correction de l examen écrit de la session ordinaire 18 Février 2012

Université Mohammed Premier Année universitaire 2011-2012. Correction de l examen écrit de la session ordinaire 18 Février 2012 Université Mohammed Premier Année universitaire 2011-2012 Faculté des Sciences Filière SMI Département de Mathématiques Module : POO Java et d Informatique Semestre : S5 Correction de l examen écrit de

Plus en détail

Avant de programmer en Java DOS Set Path=C:\JDK\bin Path=C:\JDK\bin C:\JDK\bin Set Path=%Path%;C:\JDK\bin C:\JDK\bin C:\JDK\

Avant de programmer en Java DOS Set Path=C:\JDK\bin Path=C:\JDK\bin C:\JDK\bin Set Path=%Path%;C:\JDK\bin C:\JDK\bin C:\JDK\ Exercices corrigés de programmation OO Java Préparés par : Mlle Imene Sghaier Année Académique : 2006-2007 Premiers Pas I. Avant de programmer en Java Le JDK de Sun (Java Development Kit) est l outil essentiel

Plus en détail

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets. Encapsulation L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets. La visibilité dépend des membres : certains membres peuvent être visibles et d'autres

Plus en détail

Héritage presque multiple en Java (1/2)

Héritage presque multiple en Java (1/2) Héritage presque multiple en Java (1/2) Utiliser deux classes ou plus dans la définition d'une nouvelle classe peut se faire par composition. class Etudiant{ int numero; Diplome d; float passeexamen(examen

Plus en détail

Eléments de syntaxe du langage Java

Eléments de syntaxe du langage Java c jan. 2014, v3.0 Java Eléments de syntaxe du langage Java Sébastien Jean Le but de ce document est de présenter es éléments de syntaxe du langage Java : les types primitifs, les opérateurs arithmétiques

Plus en détail

Introduction à l'algorithmique Distribuée. Exclusion mutuelle

Introduction à l'algorithmique Distribuée. Exclusion mutuelle Introduction à l'algorithmique Distribuée Exclusion mutuelle Eric Cariou Université de Pau et des Pays de l'adour Département Informatique Eric.Cariou@univ-pau.fr 1 Exclusion mutuelle distribuée Exclusion

Plus en détail

Problèmes liés à la concurrence

Problèmes liés à la concurrence ENS Cachan Problématique Difficile de gérer la concurrence : Pas toujours facile d avoir des fonctions réentrantes. Risque de race condition : ex : x :=x+1 x :=x+1 On voudrait des blocs d instructions

Plus en détail

Gé n é r icit é e n AD A. Pa q u e t a g e g é n é r iq u e ( 1 /2 )

Gé n é r icit é e n AD A. Pa q u e t a g e g é n é r iq u e ( 1 /2 ) Gé n é r icit é e n AD A La notion de sous-programme permet la réutilisation de code Les paquetages et la POO permettent de réutiliser du code de façon robuste en masquant une partie de celui-ci par excapsulation

Plus en détail

Algorithmique - Techniques fondamentales de programmation Exemples en Python (nombreux exercices corrigés) - BTS, DUT informatique

Algorithmique - Techniques fondamentales de programmation Exemples en Python (nombreux exercices corrigés) - BTS, DUT informatique Introduction à l'algorithmique 1. Les fondements de l informatique 13 1.1 Architecture de Von Neumann 13 1.2 La machine de Turing 17 1.3 Représentation interne des instructions et des données 19 1.3.1

Plus en détail

Théorie des Systèmes d'exploitation : Introduction

Théorie des Systèmes d'exploitation : Introduction Théorie des Systèmes d'exploitation : Introduction Quelques systèmes d'exploitation... 3 Architecture des ordinateurs... 4 Schéma simplifié :... 4 Les concepts des systèmes d'exploitation... 5 Les 2 principales

Plus en détail

Systèmes d'exploitation. Pierre Antoine Champin IUT A de Lyon Séance 4

Systèmes d'exploitation. Pierre Antoine Champin IUT A de Lyon Séance 4 Systèmes d'exploitation Pierre Antoine Champin IUT A de Lyon Séance 4 Plan de la séance 1. Concurrence 2. Problématique liée à la concurrence section critique mécanisme d'exclusion mutuelle 3. Solutions

Plus en détail

Gestion du processeur central

Gestion du processeur central Chapitre II Gestion du processeur central 1. Introduction Evolution des systèmes informatiques 1.1- Premier système : Le programmeur/opérateur doit écrire un programme ensuite le faire fonctionner directement

Plus en détail

M2-GamaGora. Programmation Multi-Thread - partie 1. J.C. Iehl. November 13, 2008

M2-GamaGora. Programmation Multi-Thread - partie 1. J.C. Iehl. November 13, 2008 Programmation Multi-Thread - partie 1 November 13, 2008 pourquoi ça ne marche pas? et alors? introduction aux threads threads : pourquoi ça ne marche pas? et alors? un nouveau point d entrée (une fonction

Plus en détail