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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Recherche dans un tableau

Recherche dans un tableau Chapitre 3 Recherche dans un tableau 3.1 Introduction 3.1.1 Tranche On appelle tranche de tableau, la donnée d'un tableau t et de deux indices a et b. On note cette tranche t.(a..b). Exemple 3.1 : 3 6

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

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

Introduction à la programmation concurrente

Introduction à la programmation concurrente Introduction à la programmation concurrente Moniteurs Yann Thoma Reconfigurable and Embedded Digital Systems Institute Haute Ecole d Ingénierie et de Gestion du Canton de Vaud This work is licensed under

Plus en détail

Initiation à JAVA et à la programmation objet. raphael.bolze@ens-lyon.fr

Initiation à JAVA et à la programmation objet. raphael.bolze@ens-lyon.fr Initiation à JAVA et à la programmation objet raphael.bolze@ens-lyon.fr O b j e c t i f s Découvrir un langage de programmation objet. Découvrir l'environnement java Découvrir les concepts de la programmation

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

Licence d'informatique 2004-2005 Examen Programmation orientée objet Juin 2005

Licence d'informatique 2004-2005 Examen Programmation orientée objet Juin 2005 Licence d'informatique 2004-2005 Examen Programmation orientée objet Juin 2005 Durée de l'épreuve : 2 heures TRÈS IMPORTANT : respectez l'ordre des questions. La lisibilité sera un critère important pour

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

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr . Cours intensif Java 1er cours: de C à Java Septembre 2009 Enrica DUCHI LIAFA, Paris 7 Enrica.Duchi@liafa.jussieu.fr LANGAGES DE PROGRAMMATION Pour exécuter un algorithme sur un ordinateur il faut le

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

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

Chapitre 1 : Introduction aux bases de données

Chapitre 1 : Introduction aux bases de données Chapitre 1 : Introduction aux bases de données Les Bases de Données occupent aujourd'hui une place de plus en plus importante dans les systèmes informatiques. Les Systèmes de Gestion de Bases de Données

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

On appelle variable condition une var qui peut être testée et

On appelle variable condition une var qui peut être testée et Un concept plus général: g Variables condition On appelle variable condition une var qui peut être testée et endort le thread qui la teste si la condition est fausse le réveille quand la condition devient

Plus en détail

Les diagrammes de modélisation

Les diagrammes de modélisation L approche Orientée Objet et UML 1 Plan du cours Introduction au Génie Logiciel L approche Orientée Objet et Notation UML Les diagrammes de modélisation Relations entre les différents diagrammes De l analyse

Plus en détail

Télécom Nancy Année 2013-2014

Télécom Nancy Année 2013-2014 Télécom Nancy Année 2013-2014 Rapport 1A Ajout du langage C dans la Programmer's Learning Machine GIANNINI Valentin Loria 615, rue du Jardin Botanique 54600, Villers-Lès-Nancy Maître de stage : QUINSON

Plus en détail

DÉTECTION IMMÉDIATE DES INTERBLOCAGES

DÉTECTION IMMÉDIATE DES INTERBLOCAGES UNIVERSITÉ DU QUÉBEC À IvIONTRÉAL DÉTECTION IMMÉDIATE DES INTERBLOCAGES iviémoire PRÉSENTÉ COiVIlvIE EXIGENCE PARTIELLE DE LA lviaîtrise EN INFOR1'v[ATIQUE PAR ]viourad DAHMANE JUILLET 2010 UNIVERSITÉ

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

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

RMI le langage Java XII-1 JMF

RMI le langage Java XII-1 JMF Remote Method Invocation (RMI) XII-1 Introduction RMI est un ensemble de classes permettant de manipuler des objets sur des machines distantes (objets distants) de manière similaire aux objets sur la machine

Plus en détail

Cours Programmation Système

Cours Programmation Système Cours Programmation Système Filière SMI Semestre S6 El Mostafa DAOUDI Département de Mathématiques et d Informatique, Faculté des Sciences Université Mohammed Premier Oujda m.daoudi@fso.ump.ma Février

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

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr)

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Programmer en JAVA par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes

Plus en détail

Les entrées/sorties Java (sérialisation, accès aux chiers et connexion réseau)

Les entrées/sorties Java (sérialisation, accès aux chiers et connexion réseau) Année 2008-2009 Les entrées/sorties Java (sérialisation, accès aux chiers et connexion réseau) Nicolas Baudru mél : nicolas.baudru@esil.univmed.fr page web : nicolas.baudru.perso.esil.univmed.fr 1 Introduction

Plus en détail

Un chat en C# Extrait de Wikipédia

Un chat en C# Extrait de Wikipédia Un chat en C# Un chat utilise un mécanisme de communication entre deux applications distantes. Il existe plusieurs solutions pour faire communiquer deux applications ; nous allons, ici, utiliser le protocole

Plus en détail

REALISATION d'un. ORDONNANCEUR à ECHEANCES

REALISATION d'un. ORDONNANCEUR à ECHEANCES REALISATION d'un ORDONNANCEUR à ECHEANCES I- PRÉSENTATION... 3 II. DESCRIPTION DU NOYAU ORIGINEL... 4 II.1- ARCHITECTURE... 4 II.2 - SERVICES... 4 III. IMPLÉMENTATION DE L'ORDONNANCEUR À ÉCHÉANCES... 6

Plus en détail

processus fonction main() l'image binaire contexte d'exécution un contexte mémoire. en même temps

processus fonction main() l'image binaire contexte d'exécution un contexte mémoire. en même temps 1 2 Dans une première approche, on peut dire qu'un processus représente une "application" qui tourne en mémoire. Il sera donc chargé en mémoire par le noyau et commencera son exécution; du point de vue

Plus en détail

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

Exercices INF5171 : série #3 (Automne 2012) Exercices INF5171 : série #3 (Automne 2012) 1. Un moniteur pour gérer des ressources Le moniteur MPD 1 présente une première version d'un moniteur, exprimé en pseudo-mpd, pour gérer des ressources le nombre

Plus en détail

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

Structure d un programme et Compilation Notions de classe et d objet Syntaxe Cours1 Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1 Programmation Orientée Objet Un ensemble d objet qui communiquent Pourquoi POO Conception abstraction sur les types

Plus en détail

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java Langages objets Introduction M2 Pro CCI, Informatique Emmanuel Waller, LRI, Orsay présentation du module logistique 12 blocs de 4h + 1 bloc 2h = 50h 1h15 cours, 45mn exercices table, 2h TD machine page

Plus en détail

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

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores INTRODUCTION AUX SYSTEMES D EXPLOITATION TD2 Exclusion mutuelle / Sémaphores Exclusion mutuelle / Sémaphores - 0.1 - S O M M A I R E 1. GENERALITES SUR LES SEMAPHORES... 1 1.1. PRESENTATION... 1 1.2. UN

Plus en détail

Programmabilité du réseau avec l'infrastructure axée sur les applications (ACI) de Cisco

Programmabilité du réseau avec l'infrastructure axée sur les applications (ACI) de Cisco Livre blanc Programmabilité du réseau avec l'infrastructure axée sur les applications (ACI) de Cisco Présentation Ce document examine la prise en charge de la programmabilité sur l'infrastructure axée

Plus en détail

Introduction à la programmation concurrente

Introduction à la programmation concurrente Introduction à la programmation concurrente Exclusion mutuelle par attente active Yann Thoma Reconfigurable and Embedded Digital Systems Institute Haute Ecole d Ingénierie et de Gestion du Canton de Vaud

Plus en détail

Exercices de programmation concurrente (PCO) semestre printemps 2014-2015. Exclusion mutuelle, synchronisation, coordination

Exercices de programmation concurrente (PCO) semestre printemps 2014-2015. Exclusion mutuelle, synchronisation, coordination Prof. Yann Thoma Exercices de programmation concurrente (PCO) semestre printemps 2014-2015 Exclusion mutuelle, synchronisation, coordination Question 1: Exclusion mutuelle Soit les deux tâches T 0 et T

Plus en détail

Chapitre I Notions de base et outils de travail

Chapitre I Notions de base et outils de travail Chapitre I Notions de base et outils de travail Objectifs Connaître les principes fondateurs et l historique du langage Java S informer des principales caractéristiques du langage Java Connaître l environnement

Plus en détail

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février 2014 17:30 à 20:30

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février 2014 17:30 à 20:30 Examen intra 20 février 2014 17:30 à 20:30 Nom, prénom : Code permanent : Répondez directement sur le questionnaire. Question #1 5% Quelle influence peut avoir le typage dynamique sur la maintenabilité

Plus en détail

CHAPITRE 1. Introduction aux web services. 1.1 Définition. Contenu du chapitre : Env. De dev. Langage Visual Studio Java EE Qt Creator C#

CHAPITRE 1. Introduction aux web services. 1.1 Définition. Contenu du chapitre : Env. De dev. Langage Visual Studio Java EE Qt Creator C# CHAPITRE 1 Introduction aux web services Contenu du chapitre : Env. De dev. Langage Visual Studio Java EE Qt Creator C# NetBeans JavaScript Eclipse Objective C Xcode PHP HTML Objectifs du chapitre : Ce

Plus en détail

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

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran)  Processus = suite d'actions = suite d'états obtenus = trace Processus 1) Contexte 2) Modèles de Notion de Points de vue Modèle fourni par le SX Opérations sur les 3) Gestion des Représentation des Opérations 4) Ordonnancement des Niveaux d ordonnancement Ordonnancement

Plus en détail

TP1 : Initiation à Java et Eclipse

TP1 : Initiation à Java et Eclipse TP1 : Initiation à Java et Eclipse 1 TP1 : Initiation à Java et Eclipse Systèmes d Exploitation Avancés I. Objectifs du TP Ce TP est une introduction au langage Java. Il vous permettra de comprendre les

Plus en détail

java : Langage et Environnement

java : Langage et Environnement java : Langage et Environnement 1. rintroduction ava est une nouvelle technologie conçue par Sun Microsystems l'un des premiers fabriquants des stations de travail Sun. Depuis son apparition, à peine plus

Plus en détail

Deuxième partie. Protocoles d exclusion mutuelle. Plan. Interférences et isolation. Isolation Protocoles d exclusion mutuelle

Deuxième partie. Protocoles d exclusion mutuelle. Plan. Interférences et isolation. Isolation Protocoles d exclusion mutuelle Plan Deuxième partie 1 2 Primitives de gestion des activités 2 / 26 4 / 26 Interférences et isolation Contenu de cette partie di cultés résultant d accès concurrents à un objet partagé mise en œuvre de

Plus en détail

Tutorat C/Unix : Un Rapido Client/Serveur

Tutorat C/Unix : Un Rapido Client/Serveur Tutorat C/Unix : Un Rapido Client/Serveur Nouredine Melab 1 Description générale du projet 1.1 Objectif L'objectif du projet est de concevoir et de réaliser un jeu de hasard dénommé Rapido. Un serveur

Plus en détail

Examen de Système. Questions de cours : les threads. Licence 3 Informatique. ENS Cachan, mardi 13 janvier 2009

Examen de Système. Questions de cours : les threads. Licence 3 Informatique. ENS Cachan, mardi 13 janvier 2009 Examen de Système Licence 3 Informatique ENS Cachan, mardi 13 janvier 2009 Durée : 3h. Documents autorisés : livres, notes de cours. Langage de programmation : C. Des erreurs de syntaxe, de nom de fonction

Plus en détail

Cours de Génie Logiciel

Cours de Génie Logiciel Cours de Génie Logiciel Sciences-U Lyon Diagrammes UML (2) http://www.rzo.free.fr Pierre PARREND 1 Avril 2005 Sommaire Les Diagrammes UML Diagrammes de Collaboration Diagrammes d'etats-transitions Diagrammes

Plus en détail

5 Moniteurs. Slide 1. Caractéristique majeure d un programme avec moniteurs = Composé de deux sortes de modules/processus: Slide 2

5 Moniteurs. Slide 1. Caractéristique majeure d un programme avec moniteurs = Composé de deux sortes de modules/processus: Slide 2 5 Moniteurs Motivation = les sémaphores peuvent être utilisés pour résoudre à peu près n importe quel problème d exclusion mutuelle ou synchronisation... mais, les sémaphores possèdent certains désavantages:

Plus en détail

Évaluation et implémentation des langages

Évaluation et implémentation des langages Évaluation et implémentation des langages Les langages de programmation et le processus de programmation Critères de conception et d évaluation des langages de programmation Les fondations de l implémentation

Plus en détail

Java Licence Professionnelle 2009-2010. Cours 7 : Classes et méthodes abstraites

Java Licence Professionnelle 2009-2010. Cours 7 : Classes et méthodes abstraites Java Licence Professionnelle 2009-2010 Cours 7 : Classes et méthodes abstraites 1 Java Classes et méthodes abstraites - Le mécanisme des classes abstraites permet de définir des comportements (méthodes)

Plus en détail

Précis de système d exploitation Synchronisation des processus

Précis de système d exploitation Synchronisation des processus Précis de système d exploitation Synchronisation des processus 2ième Année Informatique et Mathématiques Appliquées Gérard Padiou 4 septembre 2007 Table des matières 1 Introduction 3 1.1 Hypothèses de

Plus en détail

Université Laval Faculté des sciences et de génie Département d'informatique et de génie logiciel IFT-3101. Travail pratique #2

Université Laval Faculté des sciences et de génie Département d'informatique et de génie logiciel IFT-3101. Travail pratique #2 Université Laval Faculté des sciences et de génie Département d'informatique et de génie logiciel IFT-3101 Danny Dubé Hiver 2014 Version : 11 avril Questions Travail pratique #2 Traduction orientée-syntaxe

Plus en détail

Auto-évaluation Programmation en Java

Auto-évaluation Programmation en Java Auto-évaluation Programmation en Java Document: f0883test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INTRODUCTION AUTO-ÉVALUATION PROGRAMMATION EN

Plus en détail

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/2012. 1 - Vue générale 2 - Mon premier programme 3 - Types de Programme Java

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/2012. 1 - Vue générale 2 - Mon premier programme 3 - Types de Programme Java 1 - Vue générale 2 - Mon premier programme 3 - Types de Programme 1 2 c est quoi? Technologie développée par SUN Microsystems lancée en 1995 Dans un des premiers papiers* sur le langage JAVA, SUN le décrit

Plus en détail

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

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme Rappel Ralf Treinen Université Paris Diderot UFR Informatique Laboratoire Preuves, Programmes et Systèmes treinen@pps.univ-paris-diderot.fr 6 mai 2015 Jusqu'à maintenant : un petit langage de programmation

Plus en détail

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 ) P r ob lé m a t iq u e d e la g é n é r icit é les versions de Java antérieures à 1.5 permettaient de créer des classes de structures contenant n'importe quels types d'objet : les collections (classes

Plus en détail

Introduction aux Systèmes Distribués. Introduction générale

Introduction aux Systèmes Distribués. Introduction générale Introduction aux Systèmes Distribués Licence Informatique 3 ème année Introduction générale Eric Cariou Université de Pau et des Pays de l'adour Département Informatique Eric.Cariou@univ-pau.fr 1 Plan

Plus en détail

Premiers Pas en Programmation Objet : les Classes et les Objets

Premiers Pas en Programmation Objet : les Classes et les Objets Chapitre 2 Premiers Pas en Programmation Objet : les Classes et les Objets Dans la première partie de ce cours, nous avons appris à manipuler des objets de type simple : entiers, doubles, caractères, booléens.

Plus en détail

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

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40 Déroulement du cours Introduction Concepts Java Remarques Langage et Concepts de Programmation Orientée-Objet Gauthier Picard École Nationale Supérieure des Mines de Saint-Étienne gauthier.picard@emse.fr

Plus en détail

Claude Kaiser Paradigmes de la concurrence SRI_B PASSAGE DE TÉMOIN

Claude Kaiser Paradigmes de la concurrence SRI_B PASSAGE DE TÉMOIN PASSAGE DE TÉMOIN coopération par division du travail entre les processus 4) Rendez-vous à 2, symétrique, avec ou non une écriture ou un envoi de message (avec acquittement) Rendez-vous multiple : m processus

Plus en détail

DÉVELOPPEMENT INFONUAGIQUE - meilleures pratiques

DÉVELOPPEMENT INFONUAGIQUE - meilleures pratiques livre blanc DÉVELOPPEMENT INFONUAGIQUE MEILLEURES PRATIQUES ET APPLICATIONS DE SOUTIEN DÉVELOPPEMENT INFONUAGIQUE - MEILLEURES PRATIQUES 1 Les solutions infonuagiques sont de plus en plus présentes sur

Plus en détail

Les processus légers : threads. Système L3, 2014-2015 1/31

Les processus légers : threads. Système L3, 2014-2015 1/31 Les processus légers : threads Système L3, 2014-2015 1/31 Les threads Les threads sont des processus légers exécutés à l intérieur d un processus L exécution des threads est concurrente Il existe toujours

Plus en détail

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig Fabienne.Boyer@imag.fr

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig Fabienne.Boyer@imag.fr 4. Outils pour la synchronisation F. Boyer, Laboratoire Lig Fabienne.Boyer@imag.fr Le problème Insuffisance des solutions de base (verrous) Les solutions de plus haut niveau Les Sémaphores Les Moniteurs

Plus en détail

Projet gestion d'objets dupliqués

Projet gestion d'objets dupliqués Projet gestion d'objets dupliqués Daniel Hagimont Daniel.Hagimont@enseeiht.fr 1 Projet Service de gestion d'objets dupliqués Mise en cohérence lors de la prise d'un verrou sur un objet Pas de verrous imbriqués

Plus en détail

Une introduction à Java

Une introduction à Java Une introduction à Java IFT 287 (Semaine 1) UNIVERSITÉ DE SHERBROOKE 1 Java - Historique Développé par Sun Microsystems en 1994 Inventeur James Gosling (canadien!) Objectif langage sûr (fortement typé)

Plus en détail

Projet Active Object

Projet Active Object Projet Active Object TAO Livrable de conception et validation Romain GAIDIER Enseignant : M. Noël PLOUZEAU, ISTIC / IRISA Pierre-François LEFRANC Master 2 Informatique parcours MIAGE Méthodes Informatiques

Plus en détail

SHERLOCK 7. Version 1.2.0 du 01/09/09 JAVASCRIPT 1.5

SHERLOCK 7. Version 1.2.0 du 01/09/09 JAVASCRIPT 1.5 SHERLOCK 7 Version 1.2.0 du 01/09/09 JAVASCRIPT 1.5 Cette note montre comment intégrer un script Java dans une investigation Sherlock et les différents aspects de Java script. S T E M M E R I M A G I N

Plus en détail

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

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting IUT Bordeaux 1 2005-2006 Département Informatique Licence Professionnelle ~ SI TD Objets distribués n 3 : Windows XP et Visual Studio.NET Introduction à.net Remoting Partie 1 : l'analyseur de performances

Plus en détail

Java 7 Les fondamentaux du langage Java

Java 7 Les fondamentaux du langage Java 184 Java 7 Les fondamentaux du langage Java 1.1 Les bibliothèques graphiques Le langage Java propose deux bibliothèques dédiées à la conception d'interfaces graphiques. La bibliothèque AWT et la bibliothèque

Plus en détail

I. Introduction aux fonctions : les fonctions standards

I. Introduction aux fonctions : les fonctions standards Chapitre 3 : Les fonctions en C++ I. Introduction aux fonctions : les fonctions standards A. Notion de Fonction Imaginons que dans un programme, vous ayez besoin de calculer une racine carrée. Rappelons

Plus en détail

Informatique / Programmation

Informatique / Programmation Informatique / Programmation Programmation orientée objet avec Java 02 : Expressions et opérateurs Jacques Bapst jacques.bapst@hefr.ch Expressions [1] Les expressions sont des entités composées de littéraux,

Plus en détail

SOA et Services Web. 23 octobre 2011. Evolution des Systèmes d Information

SOA et Services Web. 23 octobre 2011. Evolution des Systèmes d Information SOA et Services Web 23 octobre 2011 1 Evolution des Systèmes d Information 2 Qu est ce qu une application répartie? Il s agit d une application découpée en plusieurs unités Chaque unité peut être placée

Plus en détail

Chapitre 2. Classes et objets

Chapitre 2. Classes et objets Chapitre 2: Classes et Objets 1/10 Chapitre 2 Classes et objets Chapitre 2: Classes et Objets 2/10 Approche Orientée Objet Idée de base de A.O.O. repose sur l'observation de la façon dont nous procédons

Plus en détail

Guide de fonctions du téléphone du système SCI Norstar

Guide de fonctions du téléphone du système SCI Norstar Guide de fonctions du téléphone du système SCI Norstar Renseignements généraux Cette fiche sert de référence rapide pour accéder aux fonctions de votre poste. Votre coordinateur de système vous avisera

Plus en détail

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES Leçon 11 PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES Dans cette leçon, nous retrouvons le problème d ordonnancement déjà vu mais en ajoutant la prise en compte de contraintes portant sur les ressources.

Plus en détail

Chapitre 10. Les interfaces Comparable et Comparator 1

Chapitre 10. Les interfaces Comparable et Comparator 1 Chapitre 10: Les interfaces Comparable et Comparator 1/5 Chapitre 10 Les interfaces Comparable et Comparator 1 1 Ce chapitre a été extrait du document "Objets, Algorithmes, Patterns" de [René Lalement],

Plus en détail

PROGRAMMATION EVENEMENTIELLE sur EXCEL

PROGRAMMATION EVENEMENTIELLE sur EXCEL MASTERs SMaRT & GSI PROGRAMMATION EVENEMENTIELLE sur EXCEL Pierre BONNET Programmation évènementielle La programmation évènementielle permet un appel de procédure depuis l'interface HMI d'excel (ou d'un

Plus en détail

Annexe : La Programmation Informatique

Annexe : La Programmation Informatique GLOSSAIRE Table des matières La Programmation...2 Les langages de programmation...2 Java...2 La programmation orientée objet...2 Classe et Objet...3 API et Bibliothèque Logicielle...3 Environnement de

Plus en détail

Chapitre VI- La validation de la composition.

Chapitre VI- La validation de la composition. Chapitre VI- La validation de la composition. Objectifs du chapitre : Expliquer les conséquences de l utilisation de règles de typage souples dans SEP. Présenter le mécanisme de validation des connexions

Plus en détail

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml OCL Object Constraint Language Le langage de contraintes d'uml Plan 1. Introduction 2. Les principaux concepts d'ocl Object Constraint Language 1 Object Constraint Language 2 Exemple: une application bancaire

Plus en détail

Cours 1: Java et les objets

Cours 1: Java et les objets Ressources Les interface homme-machine et le langage Java DUT première année Henri Garreta, Faculté des Sciences (Luminy) Cyril Pain-Barre & Sébastien Nedjar, IUT d Aix-Marseille (Aix) Cours 1: infodoc.iut.univ-aix.fr/~ihm/

Plus en détail