Algorithmique & Programmation (INF 431)

Save this PDF as:
 WORD  PNG  TXT  JPG

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

Download "Algorithmique & Programmation (INF 431)"

Transcription

1 Algorithmique & Programmation (INF 431) Pottier 4 juin 2014

2 1 2 3 évoluées 4 Le problème de l exclusion 5 Les verrous 6 Règles d utilisation et des verrous 7

3 Une communication peu coûteuse... Les processus légers : partagent le tas et les variables globales, donc peuvent communiquer de façon potentiellement peu coûteuse.

4 ...mais pas simple pour autant Nous allons constater que si plusieurs threads tentent d accéder au même emplacement au même moment, le résultat est souvent imprévisible et/ou indésirable. Donc, la communication par mémoire partagée ne suffit pas pour écrire des programmes concurrents corrects et efficaces ; il faut aussi des mécanismes de synchronisation, c est-à-dire d attente.

5 Différents mécanismes de synchronisation Nous avons déjà rencontré un mécanisme de synchronisation, join. Il permet à un thread B d attendre la terminaison d un thread A. Cela permet, par exemple, de transmettre un résultat de A vers B. Il en existe d autres...

6 Différents mécanismes de synchronisation Si deux threads stockent des informations dans une table de hash partagée, il faut leur interdire d y accéder au même moment. Il faut donc parfois que l un d eux attende. Les verrous («locks») étudiés aujourd hui servent à cela.

7 Différents mécanismes de synchronisation Si A produit un flot de résultats, qu il souhaite transmettre au fur et à mesure qu ils sont produits à B, alors ces threads doivent se coordonner. A doit parfois attendre B, et vice-versa. Les files d attente concurrentes utilisées la semaine dernière en TD et étudiées en détail la semaine prochaine permettent cela. Nous verrons qu elles sont implémentées à l aide de mécanismes plus élémentaires, à savoir verrous et variables de condition.

8 Aujourd hui, donc, nous étudions les verrous : à quoi servent-ils? comment fonctionnent-ils? quels présentent-ils?

9 1 2 3 évoluées 4 Le problème de l exclusion 5 Les verrous 6 Règles d utilisation et des verrous 7

10 Le problème du compteur partagé Imaginons que plusieurs threads souhaitent partager un compteur.

11 Le problème du compteur partagé Voici une implémentation ordinaire d un objet «compteur» : class UnsafeCounter { private int count ; void increment () { count++ ; } int get () { return count ; } } Que se passe-t-il si plusieurs threads utilisent simultanément un tel objet? (Démonstration.)

12 Que se passe-t-il? Comment expliquer ce comportement? Chacun des deux threads appelle n fois c.increment(). La valeur finale de c ne devrait-elle pas être 2n, quel que soit l ordre dans lequel ces appels sont effectués?

13 Que se passe-t-il? Comment expliquer ce comportement? Chacun des deux threads appelle n fois c.increment(). La valeur finale de c ne devrait-elle pas être 2n, quel que soit l ordre dans lequel ces appels sont effectués? Ce raisonnement serait correct si chaque appel était exécuté de façon atomique, c est-à-dire sans interférence de la part de l autre thread. Or, ce n est pas le cas...

14 increment n est pas atomique L instruction count++ ; est une version abrégée de : count = count + 1 ; qui signifie en fait : this. count = this. count + 1 ; qui signifie en fait : int tmp = this. count ; tmp = tmp + 1 ; this. count = tmp ; On reconnaît une lecture en mémoire («load»), suivie d une addition, suivie d une écriture en mémoire («store»).

15 increment n est pas atomique Supposons que deux threads A et B appellent c.increment() au même moment. L objet c est partagé. L emplacement en mémoire nommé c.count est le même du point de vue de A et du point de vue de B. La variable tmp est locale, donc non partagée. Chaque thread a la sienne. Le code exécuté est donc, grosso modo : // thread A // thread B int tmpa = this. count ; int tmpb = this. count ; tmpa = tmpa + 1 ; tmpb = tmpb + 1 ; this. count = tmpa ; this. countb = tmp ; où chaque thread progresse à sa vitesse propre.

16 increment n est pas atomique Comment ce code est-il exécuté par la machine? Si la machine a un seul processeur, il y a partage du temps, donc entrelacement arbitraire des instructions de A et des instructions de B. Si la machine a plusieurs processeurs, A et B s exécutent réellement en même temps, et et la mémoire traite les ordres de lecture et d écriture émis par A et B dans un ordre un entrelacement imprévisible. (En fait, c est encore pire, voir plus loin.)

17 Un entrelacement possible // thread A // thread B int tmpa = this. count ; int tmpb = this. count ; tmpa = tmpa + 1 ; tmpb = tmpb + 1 ; this. count = tmpa ; this. count = tmpb ; Quoiqu il en soit, le scénario suivant (entre autres) est possible : A lit c.count et initialise tmpa à 0 ; B lit c.count et initialise tmpb à 0 ; A et B incrémentent tmpa et tmpb ; A écrit 1 dans c.count ; B écrit 1 dans c.count. À la fin, le compteur vaut 1 alors que c.increment a été appelé deux fois. Aïe!

18 increment n est pas atomique D autres scénarios peuvent se produire : par exemple, on peut voir diminuer la valeur du compteur. Dans tous les cas, le problème provient du fait que B modifie le compteur à un instant où A a déjà pu observer le compteur mais pas encore le modifier. On dit qu il y a interférence entre les threads A et B.

19 Interférence Il y a interférence ou conflit («race condition») si et seulement si : il existe un entrelacement des instructions qui fait que... deux threads accèdent au même instant à un même emplacement en mémoire, et au moins l un d eux tente d écrire à cet emplacement. Deux lectures simultanées ne constituent donc pas une race condition.

20 Thou shalt not race Nous poserons ce principe : Un programme qui présente une race condition est incorrect.

21 Thou shalt not race Deux raisons principales justifient ce principe : pour comprendre le comportement d un programme qui présente une race condition, il faudrait au minimum étudier tous les entrelacements possibles des instructions des différents threads ; cela ne suffirait même pas, car certains comportements des machines modernes ne sont expliqués par aucun entrelacement...

22 Un comportement inattendu Soient x et done des variables globales, donc partagées. Le code suivant présente une race condition sur la variable partagée done. On suppose qu initialement x vaut 0 et done vaut false. L instruction assert peut-elle échouer? // thread A // thread B x = 42 ; while (!done ) { } done = true ; assert ( x == 42) ;

23 Un comportement inattendu Soient x et done des variables globales, donc partagées. Le code suivant présente une race condition sur la variable partagée done. On suppose qu initialement x vaut 0 et done vaut false. L instruction assert peut-elle échouer? // thread A // thread B x = 42 ; while (!done ) { } done = true ; assert ( x == 42) ; Sur certaines machines (par exemple ARM), oui. B voit que done vaut true mais trouve une valeur autre que 42 dans x. Cela n est expliqué par aucun entrelacement. Comme disent Boehm et Adve, «You Don t Know Jack about Shared Variables or Memory Models».

24 Mais que fait ARM? Le processeur A a demandé à la mémoire d écrire d abord 42 dans x, puis true dans done. Or, le processeur B a lu true dans done mais pas 42 dans x. La mémoire n a pas respecté l ordre des écritures. En fait, il y a une mémoire interne au processeur A, une autre interne au processeur B, des échanges de messages entre elles, et ces messages ne circulent pas dans l ordre, pour des raisons d efficacité. Ce n est pas un bug du processeur!

25 Et que fait Intel? Les processeurs Intel garantissent que «les messages d écriture circulent dans l ordre», donc si B voit que done vaut true, il voit aussi que x vaut 42. Cela n empêche pas que, à un instant donné, A peut savoir que done vaut true tandis que B croit encore que done vaut false, parce que le message n a pas encore été reçu. On dit que ARM, Intel,... offrent des «modèles mémoire faiblement cohérents».

26 Et que dit Java? En ce qui concerne le comportement de la mémoire en présence de race, le standard Java est extrêmement complexe. (Démonstration.)

27 Et que dit Java? En ce qui concerne le comportement de la mémoire en présence de race, le standard Java est extrêmement complexe. (Démonstration.) Le compilateur Java change while (!done) boolean d = done ; while (!d) ;. ; en Mes collègues débattent toujours s il a tort ou raison! Déclarer que done est volatile impose un comportement «cohérent» et fait disparaître le problème.

28 Thou shalt not race Revenons sur Terre. Pour nous, une règle simple suffit : Un programme qui présente une race condition est incorrect. On doit synchroniser les threads pour éviter toute race condition. Le comportement des programmes est alors beaucoup plus facile à analyser et à prédire, car, en l absence de race, le fait que la mémoire est «faiblement cohérente» ne se voit pas.

29 1 2 3 évoluées 4 Le problème de l exclusion 5 Les verrous 6 Règles d utilisation et des verrous 7

30 Comment faire un compteur partagé? Notre objet UnsafeCounter ne doit pas être utilisé simultanément par plusieurs threads : cela conduit à une race condition. Il y a race condition sur count parce que plusieurs threads y accèdent (en lecture et en écriture) au même moment.

31 Comment faire un compteur partagé? On pourrait songer à ajouter un booléen ready dont la valeur indique s il est permis ou non d accéder à count. Mais cela ne ferait que déplacer le problème : il y aurait alors une race condition sur ready. Mais alors, comment implémenter correctement un compteur partagé?

32 Plusieurs solutions Dans la suite, nous allons découvrir deux réponses à ce problème : l une à base d instructions évoluées, l autre, plus générale, à base de verrous. Les deux idées sont liées : l implémentation des verrous utilise (plusieurs techniques dont) des instructions évoluées.

33 Avec l aide de la machine Et si la machine nous proposait une instruction toute faite pour lire la valeur du compteur puis y écrire une nouvelle valeur, le tout de façon atomique?

34 Avec l aide de la machine De nombreux processeurs proposent des instructions qui combinent une lecture et une écriture au même emplacement. L une de ces instructions est compareandset. Voyons quelle forme elle prend du point de vue d un programmeur Java...

35 L instruction compareandset Java fournit une classe AtomicInteger : public class AtomicInteger { public AtomicInteger ( int initialvalue) ; public int get () ; public void set ( int newvalue) ; public boolean compareandset ( int expectedvalue, int newvalue) ; } Un tel objet contient un champ de type int, consultable et modifiable grâce aux méthodes get et set. Il propose de plus une méthode compareandset...

36 L instruction compareandset L expression ai.compareandset(expectedvalue, newvalue) : 1 lit la valeur stockée dans l objet ai ; 2 compare cette valeur à expectedvalue ; 3 si cette comparaison réussit, écrit dans ai la valeur newvalue ; 4 renvoie le résultat de la comparaison (qui indique donc si l écriture a eu lieu) ; 5 le tout de façon atomique, c est-à-dire sans qu un autre thread puisse modifier ai pendant ce temps.

37 Comment utiliser compareandset? La classe AtomicInteger fournit aussi une méthode getandincrement, dont l effet est analogue à celui de l instruction count++. getandincrement est implémentée à l aide de compareandset. Comment?...

38 Comment utiliser compareandset? On va vouloir utiliser compareandset... public int getandincrement () { compareandset (?,?) ; } Mais il faut d abord déterminer l ancienne valeur et calculer la nouvelle...

39 Comment utiliser compareandset? Pour cela, on appelle d abord get : public int getandincrement () { int n = get() ; compareandset ( n, n + 1) ; } Mais compareandset peut échouer. Il faut examiner son résultat...

40 Comment utiliser compareandset? Si compareandset réussit, tout va bien! Aucune interférence n a eu lieu. public int getandincrement () { } int n = get() ; if ( compareandset (n, n + 1)) return n ; //?? Mais que faire dans le cas contraire?

41 Comment utiliser compareandset? Il faut réessayer jusqu à ce que compareandset réussisse. public int getandincrement () { while ( true ) { int n = get() ; if ( compareandset (n, n + 1)) return n ; } } C est une attente active (à éviter en principe, sauf si elle dure peu).

42 Comment utiliser compareandset? En résumé, get permet d observer la valeur du compteur, compareandset permet de la modifier, à condition que notre observation n ait pas été invalidée entre-temps ; la boucle permet d attendre que compareandset réussisse.

43 Faut-il utiliser compareandset? L utilisation de compareandset ne constitue pas une race condition. Elle est «autorisée». compareandset résout le problème du compteur partagé. Cependant, elle ne résout pas (directement) le problème plus général de l exclusion...

44 1 2 3 évoluées 4 Le problème de l exclusion 5 Les verrous 6 Règles d utilisation et des verrous 7

45 Peut-on partager une pile? Imaginons que nous souhaitions partager une pile («stack») entre plusieurs threads.

46 Une pile traditionnelle Traditionnellement, on peut implémenter une pile à l aide d une liste chaînée de cellules immuables : class StackCell <X> { final X data ; final StackCell <X> next ; StackCell ( X data, StackCell <X> next ) {... } }

47 Une pile traditionnelle L objet «pile» contient un pointeur top vers la tête de la liste : class Stack <X> { private StackCell <X> top ; void push ( X x) { top = new StackCell <X> (x, top) ; } X pop () { if ( top == null ) return null ; X data = top. data ; top = top. next ; return data ; } } Si deux threads appellent s.push(...) ou s.pop() au même moment, que se passe-t-il?...

48 Peut-on partager une pile? D abord, il y a une race condition sur le champ s.top. Donc, le programme est incorrect. Si cela ne vous convainc pas, étudiez quelques scénarios possibles : deux appels simultanés à push peuvent n empiler qu un seul objet! un objet est perdu. deux appels simultanés à pop peuvent ne dépiler qu un seul objet! un objet est dupliqué. etc.

49 Quel est le problème? La racine du problème, en ce qui concerne push par exemple, est que l instruction : top = new StackCell <X> (x, top) ; n est pas atomique. Elle signifie en fait : StackCell <X> oldcell = top ; StackCell <X> newcell = new StackCell <X> (x, oldcell) ; top = newcell ; Cette séquence d instructions est sujette à interférence.

50 Quel est le problème? Ici, on retrouve le motif simple (lecture-calcul-écriture) de la méthode UnsafeCounter.increment. Le problème peut donc à nouveau être résolu à l aide de l instruction compareandset. (Exercice! On utilisera la classe AtomicReference fournie par Java.)

51 Quel est le problème? Cependant, en général, on peut souhaiter exécuter une séquence d instructions plus longue, constituée de plus d une lecture et/ou plus d une écriture, de façon atomique (sans interférence). C est le cas si on souhaite partager, par exemple : une table de hash dotée de méthodes put et get ; un arbre binaire de recherche doté de méthodes put et get ; etc.

52 Spécifier ce que l on attend On aimerait déclarer quelles séquences d instructions, appelées «sections critiques», doivent être exécutées sans interférence. atomic {... } On pourrait écrire : void push ( X x) { atomic { top = new StackCell <X> (x, top) ; } } X pop () { atomic {... } } C est un peu simpliste/simplifié, mais c est l idée.

53 Spécifier ce que l on attend On pourrait alors exprimer la propriété que l on attend : Jamais deux threads ne sont engagés chacun dans une section critique. Cette propriété est appelée exclusion.

54 Implémenter l exclusion Pour réaliser l exclusion, l idée est simple : si un thread B arrive à l entrée d une section critique, et si un thread A se trouve déjà dans une section critique, alors B doit attendre jusqu à ce que A en sorte. Un mécanisme de synchronisation est donc nécessaire. Les verrous constituent un tel mécanisme.

55 1 2 3 évoluées 4 Le problème de l exclusion 5 Les verrous 6 Règles d utilisation et des verrous 7

56 Les verrous Habituellement, les verrous servent à la fois à : délimiter les sections critiques, donc spécifier ce que l on attend ; implémenter l attente à l entrée d une section critique.

57 Les verrous Il existe trois opérations sur les verrous : 1 création d un nouveau verrou l ; 2 verrouillage («acquisition») d un verrou existant l ; 3 déverrouillage («libération») d un verrou l préalablement verrouillé.

58 Les verrous en Java En Java, un verrou est un objet (alloué dans le tas, comme tout objet). Java fournit une interface Lock : public interface Lock { void lock () ; void unlock () ; } Il en existe plusieurs implémentations, dont celle-ci : public class ReentrantLock implements Lock {... } On peut donc créer autant de verrous qu on le souhaite : Lock l = new ReentrantLock () ;

59 Les verrous Un verrou a deux états possibles : il est soit déverrouillé («libre»), soit verrouillé («pris»). L opération de verrouillage, lock, est bloquante : si un thread B tente d acquérir un verrou, et si un thread A a déjà pris ce verrou, alors B doit attendre jusqu à ce que A libère ce verrou. C est donc une opération de synchronisation. Un verrou ne peut pas être «pris» simultanément par plusieurs threads.

60 Les verrous Un verrou peut être implémenté par attente active, à l aide de compareandset. (Exercice!) Il peut également être implémenté via un appel système : le thread qui appelle lock est suspendu jusqu à ce que le verrou soit libre. On combine en général ces deux mécanismes. Le programmeur Java n a pas à savoir comment les verrous sont implémentés.

61 Délimiter une section critique On voit que, pour délimiter une section critique, il suffit : d acquérir un verrou à l entrée de la section critique, de libérer ce verrou à la sortie de la section critique.

62 Délimiter une section critique en Java Si lock est un verrou, on écrira donc : lock. lock() ; try { // SECTION CRITIQUE } finally { lock. unlock() ; } try/finally garantit que le verrou sera libéré même si le code situé dans la section critique lance une exception. Ceci correspond à l hypothétique mot-clef atomic de tout-à-l heure.

63 Quel(s) verrou(s) utiliser? Il reste une chose à préciser. Quel verrou faut-il utiliser pour délimiter une section critique? Si s est une pile, il faut interdire à deux threads d exécuter s.pop ou s.push au même moment. Cependant, si s1 et s2 sont deux piles distinctes, mieux vaut autoriser s1.pop et s2.push à être exécutés simultanément.

64 Quel(s) verrou(s) utiliser? En termes plus généraux, deux sections de code : qui peuvent interférer entre elles doivent être contrôlées par un même verrou ; qui ne peuvent pas interférer entre elles peuvent être contrôlées par des verrous distincts.

65 Quel(s) verrou(s) utiliser? Ici, il semble naturel que chaque pile partagée ait son propre verrou.

66 Une pile partagée en Java On associe à chaque objet de classe SafeStack un verrou distinct : class SafeStack <X> { private final Lock lock = new ReentrantLock () ; private StackCell <X> top ; void push (X x) { lock. lock() ; // take the lock try { top = new StackCell <X> (x, top) ; } finally { lock. unlock() ; // release the lock } } X pop () {... } // also takes and releases the lock } Le corps des méthodes push et pop forme une section critique.

67 Une pile partagée en Java Un objet s de classe SafeStack peut être utilisé sans danger par plusieurs threads simultanément. Au plus un thread à la fois pourra exécuter un appel à s.push ou s.pop ; les autres devront attendre. Deux objets distincts s1 et s2 de classe SafeStack peuvent être utilisés simultanément par deux threads sans qu aucune attente soit nécessaire.

68 Une pile partagée en Java Le fait que la classe SafeStack est «thread-safe» (ou «synchronized») doit être indiqué dans sa documentation. On oublie trop souvent de préciser si l accès concurrent à un objet est permis ou non. Dans la documentation de Java, c est parfois précisé (voir par exemple StringBuilder versus StringBuffer), parfois non.

69 Le mot-clef synchronized Pour alléger l emploi des verrous, Java propose trois idées : tout objet o est aussi un verrou ; une section critique protégée par l objet o s écrit : synchronized ( o) { // SECTION CRITIQUE } si on souhaite que le corps d une méthode constitue une section critique protégée par this, alors il suffit d écrire synchronized dans l en-tête de la méthode. Cela correspond à l hypothétique mot-clef atomic de tout-à-l heure ; mais il faut préciser quel verrou on prend (ici, o).

70 Une pile partagée, avec synchronized L objet this joue le rôle de verrou. class SafeStack <X> { private StackCell <X> top ; synchronized void push ( X x) { top = new StackCell <X> (x, top) ; } synchronized X pop () {... } } Ce verrou est pris puis rendu par push, et de même par pop.

71 1 2 3 évoluées 4 Le problème de l exclusion 5 Les verrous 6 Règles d utilisation et des verrous 7

72 Deux règles simples Le programmeur doit respecter deux règles simples : tout accès à un champ partagé modifiable doit être protégé par un verrou ; les accès à un même champ doivent être protégés par un même verrou. Les champs non modifiables (final) n ont pas besoin d être protégés. Ces règles suffisent à garantir l absence de race condition.

73 et invariants Si une structure de données partagée possède un invariant : par exemple, «ceci est un arbre binaire de recherche équilibré», alors : lorsqu on acquiert le verrou, on peut supposer l invariant satisfait ; on peut alors briser (temporairement) l invariant, sans crainte qu un autre thread puisse observer cette violation ; lorsqu on relâche le verrou, on doit démontrer que l invariant est à nouveau satisfait.

74 Une grande latitude Le programmeur reste libre de décider (et doit savoir!) : quelles structures de données sont partagées ; quels verrous protègent quelles structures ; quel invariant est (éventuellement) associé à chaque verrou.

75 Violations d atomicité Malheureusement, l absence de race ne suffit pas! Ce code obéit à nos règles et ne présente donc aucune race condition : class BuggyCounter { private int count ; synchronized int get () { return count ; } synchronized void set ( int newcnt ) { count = newcnt ; } void increment () { set ( get () + 1) ; } } Est-il correct?...

76 Violations d atomicité Ce code ne se comporte pas de façon satisfaisante, parce que la méthode increment n est pas atomique. Entre l instant où on observe la valeur actuelle de count et l instant où on modifie count, d autres threads peuvent agir. L absence de race n est donc pas une condition suffisante pour que le programme soit correct.

77 Violations d atomicité Pour corriger ce code, on doit déclarer que increment est synchronized. Cela ne provoquera pas de blocage, car les verrous de Java sont ré-entrants : un même thread peut prendre plusieurs fois un même verrou.

78 Interblocage Autre danger : puisque l opération lock est bloquante, il y a risque de blocage éternel («deadlock»). Un thread A pourrait attendre un verrou détenu par un thread B qui ne le libérera jamais, parce qu il attend lui-même un verrou détenu par un thread C qui... Les threads ainsi bloqués forment un cycle : A attend B qui attend C qui qui attend A. Chacun attend un verrou que le suivant possède. Ce danger est bien réel! (Démonstration.)

79 Interblocage Pour éviter ce danger, on peut adopter une règle simple : chaque thread doit détenir au plus un verrou à la fois ; ou bien une règle moins restrictive mais plus complexe : pour un ordre partiel fixé sur les verrous, un thread qui acquiert plusieurs verrous doit les acquérir dans l ordre. On voit que l exemple précédent ne respecte aucune de ces règles.

80 Interblocage Le danger ne provient pas seulement de l opération lock mais de toutes les opérations bloquantes, dont par exemple join. Une règle prudente est qu il ne faut pas effectuer un appel bloquant lorsque l on a pris un verrou. Plus généralement, une section critique doit être de durée aussi courte que possible.

81 Questions d efficacité Dernier danger : l inefficacité. Prendre et relâcher un verrou a un coût en soi («lock overhead»). De plus, deux pièges nous sont tendus : goulots d étranglement séquentiels : de nombreux threads attendent pour prendre à tour de rôle un même verrou ; «huit peintres et un seul pot de peinture» compétition («contention») : plus les threads qui tentent de prendre un même verrou au même moment sont nombreux, plus cette opération est lente. «après vous, cher confrère ; je n en ferai rien» (Démonstrations.)

82 Questions d efficacité Il est souvent difficile de comprendre pourquoi un programme concurrent est efficace ou inefficace en pratique. Les comportements sont difficiles à reproduire et influencés par les observations! De plus, les performances peuvent dépendre : de la configuration de la machine (nombre de processeurs, taille et disposition des caches, etc.) ; de sa charge (pour un serveur, nombre de requêtes reçues par seconde, etc.).

83 1 2 3 évoluées 4 Le problème de l exclusion 5 Les verrous 6 Règles d utilisation et des verrous 7

84 Que retenir? La mémoire partagée pouvait sembler porteuse de promesses. On voit maintenant qu elle n a rien de miraculeux. Pour utiliser de façon cohérente la mémoire partagée, l exclusion est nécessaire, et est obtenue via des mécanismes de synchronisation, dont les verrous sont un exemple.

85 Que retenir? Les sont multiples : synchroniser trop peu conduit à des comportements incohérents ; synchroniser trop ou trop grossièrement conduit à une inefficacité, voire à un interblocage.

86 La semaine prochaine Nous verrons comment : coopérer activement : les «signaux» et canaux.

87 Et bien sûr... Cette après-midi, PC : la boucle parallel-for et la notion de tâche. Pale CC2 le vendredi 25 juin 2014 de 9h00 à 12h00. Les corrigés des pales précédentes sont disponibles en ligne. Lisez le poly!

Algorithmique & Programmation (INF 431)

Algorithmique & Programmation (INF 431) Algorithmique & Programmation () Pottier 4 juin 2014 4 juin 2014 1 / 84 Une communication peu coûteuse... Les processus légers : partagent le tas et les variables globales, donc peuvent communiquer de

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

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

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

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

Multi-processeurs, multi-cœurs et cohérence mémoire et cache

Multi-processeurs, multi-cœurs et cohérence mémoire et cache Multi-processeurs, multi-cœurs et cohérence mémoire et cache Intervenant : Thomas Robert Institut Mines-Télécom Rappel système d exploitation & Parallélisme L unité d exécution pour un système d exploitation

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

Corrigé de l examen de systèmes opératoires Module Synchronisation des processus

Corrigé de l examen de systèmes opératoires Module Synchronisation des processus Corrigé de l examen de systèmes opératoires Module Synchronisation des processus 2ième Année Informatique et Mathématiques Appliquées 17 Novembre 1999 1 Les sémaphores 1. Donner la définition d un sémaphore

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

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

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

Chap. V : Les interruptions

Chap. V : Les interruptions UMR 7030 - Université Paris 13 - Institut Galilée Cours Architecture et Système Nous étudions dans ce chapitre les interruptions matérielles (ou externes), c est-à-dire déclenchées par le matériel (hardware)

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

Applications orientées données (NSY135)

Applications orientées données (NSY135) Applications orientées données (NSY135) 10 Lecture de données Auteurs: Raphaël Fournier-S niehotta et Philippe Rigaux (philippe.rigaux@cnam.fr,fournier@cnam.fr) Département d informatique Conservatoire

Plus en détail

Examen 30 mai 2013. Vol de tâche. Système ENS L3 Info. Année 2012-2013

Examen 30 mai 2013. Vol de tâche. Système ENS L3 Info. Année 2012-2013 Système ENS L3 Info. Année 2012-2013 Examen 30 mai 2013 L énoncé est composé de 5 pages. Cette épreuve est prévue pour une durée de 2h. Les notes de cours et de TDs sont autorisées. Vol de tâche Le but

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

Cours Systemes d exploitation

Cours Systemes d exploitation Université de Kairouan Institut Supérieur des Siences Appliquées et de Technologie Cours Conçu Spécialement Aux Etudiants: De Master Pilotage et Réseaux Industriels Cours Systemes d exploitation Noureddine

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

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

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

Cours d Analyse, Algorithmique Elements de programmation

Cours d Analyse, Algorithmique Elements de programmation 1 de 33 Cours d Analyse, Algorithmique Elements de programmation Florent Hivert Mél : Florent.Hivert@lri.fr Adresse universelle : http://www.lri.fr/ hivert 2 de 33 Données et instructions Un programme

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

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

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

Mieux programmer en Java

Mieux programmer en Java Mieux programmer en Java Peter Haggar Éditions Eyrolles ISBN : 2-212-09171-0 2000 PARTIE 1 l exécution de l instruction return, cependant, le contrôle est transféré au bloc finally en // 2. Cela provoque

Plus en détail

PROJET INFORMATIQUE RECHERCHE DE SOUS-CHAÎNE DE CARACTERES

PROJET INFORMATIQUE RECHERCHE DE SOUS-CHAÎNE DE CARACTERES PROJET INFORMATIQUE RECHERCHE DE SOUS-CHAÎNE DE CARACTERES I-Présentation Un algorithme de recherche de sous-chaine est un type d'algorithme de recherche qui a pour objectif de trouver une chaîne de caractères

Plus en détail

Traduction des Langages : Le Compilateur Micro Java

Traduction des Langages : Le Compilateur Micro Java BARABZAN Jean-René OUAHAB Karim TUCITO David 2A IMA Traduction des Langages : Le Compilateur Micro Java µ Page 1 Introduction Le but de ce projet est d écrire en JAVA un compilateur Micro-Java générant

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

Université Paris Diderot Master 1 II. Théorie et pratique de la concurrence

Université Paris Diderot Master 1 II. Théorie et pratique de la concurrence Université Paris Diderot Master 1 II Théorie et pratique de la concurrence Partiel du 30 avril 2009 Durée : 1h30. Tous les documents sont autorisés. Le barème est indicatif. Question 1 : Soit le programme

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

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

Programmation en Python - Cours 2 : Premiers programmes

Programmation en Python - Cours 2 : Premiers programmes Programmation en Python - Cours 2 : Premiers programmes 2013/2014 Diverses utilisations de python Utilisation en mode interactif Ecriture d un programme python Saisie de données par l utilisateur : input(),

Plus en détail

Tp 1 correction. Structures de données (IF2)

Tp 1 correction. Structures de données (IF2) Tp 1 correction Structures de données (IF2) Remarque générale : compilez et exécutez le code au-fur-et-à mesure de son écriture. Il est plus facile de corriger une petite portion de code délimitée que

Plus en détail

8. Protection des SGBD

8. Protection des SGBD 8. Protection des SGBD 8.1 Introduction Les SGBD courent certains dangers que nous pouvons répertorier en : - accidents logiciels - utilisation pernicieuse - pannes matérielles Les SGBD doivent faire face

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

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

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

Année 2012-2013 Licence 2 TD 6. Synchronisation et Sémaphores

Année 2012-2013 Licence 2 TD 6. Synchronisation et Sémaphores Institut Galilée Systèmes d exploitation et Réseaux Année 2012-2013 Licence 2 TD 6 Synchronisation et Sémaphores 1 Synchronisation : le coiffeur Une illustration classique du problème de la synchronisation

Plus en détail

Examen Corrigé NFP137 : Systèmes et applications concurrentes

Examen Corrigé NFP137 : Systèmes et applications concurrentes CONSERVATOIRE NATIONAL DES ARTS et METIERS Centre de Paris Examen Corrigé NFP137 : Systèmes et applications concurrentes 3 juillet 2007 Exercice 1 : Gestion des ressources : L algorithme du banquier. Lorsqu

Plus en détail

Système M1. Chapitre 3 : Gérer la communication et la synchronisation inter-tâches. J.-F. Pradat-Peyre & E Hyon

Système M1. Chapitre 3 : Gérer la communication et la synchronisation inter-tâches. J.-F. Pradat-Peyre & E Hyon Chapitre 3 : Gérer la communication et la synchronisation inter-tâches 1 Plan du cours Introduction aux problèmes de synchronisation Exemple de problèmes Section critique et verrous Exclusion Mutuelle

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

Le «thread local storage» et son utilisation

Le «thread local storage» et son utilisation Résumé Les allocations mémoire sont généralement plus coûteuses que d ordinaire en environnement multi-thread. En effet, la majorité des algorithmes d allocation en usage dans les systèmes d exploitation

Plus en détail

Introduction aux systèmes d exploitation

Introduction aux systèmes d exploitation Introduction aux systèmes d exploitation Le système d exploitation est un ensemble de logiciels qui pilotent la partie matérielle d un ordinateur. Les principales ressources gérées par un système d exploitation

Plus en détail

Cours de Base de Données Cours n.12

Cours de Base de Données Cours n.12 Cours de Base de Données Cours n.12 Gestion des transactions : contrôle de concurrence Elisabetta De Maria - http://www.i3s.unice.fr/ edemaria/ UFR Sciences et Laboratoire I3S, CNRS 2013-2014 Université

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

TP/TD 5 : Section critique et Interblocage. Compare and Swap - Lock-free

TP/TD 5 : Section critique et Interblocage. Compare and Swap - Lock-free ASR2 - L3 Informatique - ENS Lyon Année 2014-2015 TP/TD 5 : Section critique et Interblocage R. Carpa, A. Cavelan et A.Lefray Compare and Swap - Lock-free Soit une implémentation de pile avec une liste

Plus en détail

Chapitre 4 : Exclusion mutuelle

Chapitre 4 : Exclusion mutuelle Chapitre 4 : Exclusion mutuelle Pierre Gançarski Juillet 2004 Ce support de cours comporte un certain nombre d erreurs : je décline toute responsabilité quant à leurs conséquences sur le déroulement des

Plus en détail

EX4C Systèmes d exploitation. Séance 6 Synchronisation

EX4C Systèmes d exploitation. Séance 6 Synchronisation EX4C Systèmes d exploitation Séance 6 Synchronisation Sébastien Combéfis vendredi 21 novembre 2014 Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution Pas d

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

Éléments de base en Java (suite et fin)

Éléments de base en Java (suite et fin) Éléments de base en Java (suite et fin) P.O.O. LMI 2 Semestre 4 Option Info Année 2008-09 1/33 Éléments de base en Java (suite et fin) Année 2008-09 Plan du cours Les chaînes de caractères Retour vers

Plus en détail

Procédures et fonctions

Procédures et fonctions Chapitre 5 Procédures et fonctions 5.1 Introduction Considérons le programme suivant, dont le but est d inverser les éléments d un tableau : public class InversionTableau1 { int t[]= {8, 2, 1, 23; Terminal.ecrireStringln("Tableau

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

Multi-processeurs, multi-cœurs, cohérence mémoire et cache

Multi-processeurs, multi-cœurs, cohérence mémoire et cache Multi-processeurs, multi-cœurs, cohérence mémoire et cache Intervenant : Thomas Robert Institut Mines-Télécom Parallélisme inter instructions n Exécution : une séquence d instructions appliquées à un 1

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

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

La gestion des exceptions

La gestion des exceptions La gestion des exceptions Même lorsqu un programme est au point, certaines circonstances exceptionnelles peuvent compromettre la poursuite de son exécution ; il peut s agir par exemple de données incorrectes

Plus en détail

Les références et la mémoire

Les références et la mémoire Chapitre 3 Les références et la mémoire 3.1 Introduction En Java, pour déclarer une variable, il faut donner son nom, précédé du type qu on souhaite lui attribuer. Ces types peuvent être des types primitifs

Plus en détail

TD3. Le problème de l'exclusion mutuelle et les mutexes. LP RGI Prog. système

TD3. Le problème de l'exclusion mutuelle et les mutexes. LP RGI Prog. système LP RGI Prog. système TD3 Le problème de l'exclusion mutuelle et les mutexes I U T d ' A m i e n s, d é p a r t e m e n t I n f o r m a t i q u e a n n é e u n i v e r s i t a i r e 2 0 1 4 / 2 0 1 5 L

Plus en détail

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

Cours Bases de données 2ème année IUT Cours Bases de données 2ème année IUT Cours 12 : Concurrence d accès Anne Vilnat http://www.limsi.fr/individu/anne/cours Plan 1 Accès concurrents Définitions Verrous Collisions Niveaux de cohérence Blocage

Plus en détail

Héritage, et quelques petits mots-clés de Java

Héritage, et quelques petits mots-clés de Java Héritage, et quelques petits mots-clés de Java Bilan de la séance du 3 février. 1 Champs d instance, champs de classe La situation usuelle pour les attributs et les méthodes est la suivante : La classe

Plus en détail

Projet Pratique de INF241 Parcours de Tableaux

Projet Pratique de INF241 Parcours de Tableaux Projet Pratique de INF241 Parcours de Tableaux L objectif de ce projet est de travailler sur les tableaux en langage d assemblage ARM. Vous devez réaliser votre projet en partie lors des séances encadrées

Plus en détail

Listes et arbres binaires

Listes et arbres binaires Des structures de données dynamiques Listes, Listes ordonnées Arbres binaires, arbre binaires de recherche Listes chaînées Utile si le nombre d éléments n est pas connu à l avance et évolue beaucoup. Permet

Plus en détail

Quelques éléments de compilation en C et makefiles

Quelques éléments de compilation en C et makefiles Quelques éléments de compilation en C et makefiles Guillaume Feuillade 1 Compiler un programme C Le principe de la compilation consiste à passer d un ensemble de fichiers de code à un programme exécutable

Plus en détail

Programmation avancée en C

Programmation avancée en C Département Informatique Nom : Prénom : Année scolaire : 2007 2008 Date : 23 juin 2008 Module INF446 Session de juin Programmation avancée en C Contrôle de connaissance 1 de 45 minutes ÅERCI de répondre

Plus en détail

TP : Gestion d une image au format PGM

TP : Gestion d une image au format PGM TP : Gestion d une image au format PGM Objectif : L objectif du sujet est de créer une classe de manipulation d images au format PGM (Portable GreyMap), et de programmer des opérations relativement simples

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

Définition: Transaction

Définition: Transaction Concurrence des accès Atomicité à la concurrence Concurrency atomicity Concepts 2PL Définition: Transaction Une transaction est une unité de travail Un ensemble d actions qui prend la base de données dans

Plus en détail

Introduction à l algorithmique et à la programmation 2013-2014. Cyril Nicaud Cyril.Nicaud@univ-mlv.fr. Cours 1 / 5

Introduction à l algorithmique et à la programmation 2013-2014. Cyril Nicaud Cyril.Nicaud@univ-mlv.fr. Cours 1 / 5 Introduction à l algorithmique et à la programmation IUT 1ère année 2013-2014 Cyril Nicaud Cyril.Nicaud@univ-mlv.fr Cours 1 / 5 Déroulement du cours Organisation : 5 séances de 2h de cours 10 séances 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

Listes de personnes et calculatrice polonaise inverse en Java

Listes de personnes et calculatrice polonaise inverse en Java Listes de personnes et calculatrice polonaise inverse en Java Université Paris Sud Motivation Le but de cet exercice est de manipuler les listes chaînées et les piles et de voir leur application en analyse

Plus en détail

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

École Polytechnique de Montréal. Département de Génie Informatique et Génie Logiciel. Cours INF2610. Contrôle périodique. École Polytechnique de Montréal Département de Génie Informatique et Génie Logiciel Cours INF2610 Contrôle périodique Automne 2013 Date : 11 octobre 2013 de 18h à 20h Professeur : Boucheneb Hanifa Documentation

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

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

Année 2008-2009. Les exceptions Java. Nicolas Baudru mél : nicolas.baudru@esil.univmed.fr page web : nicolas.baudru.perso.esil.univmed. Année 2008-2009 Les exceptions Java Nicolas Baudru mél : nicolas.baudru@esil.univmed.fr page web : nicolas.baudru.perso.esil.univmed.fr 1 Introduction Supposez que vous écrivez un programme qui accède

Plus en détail

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview. ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview. Sciences et Technologies de l Industrie et du Développement Durable Formation des enseignants parcours : ET24 Modèle de

Plus en détail

2 ème partie : Programmation concurrente multi-thread

2 ème partie : Programmation concurrente multi-thread 2 ème partie : Programmation concurrente multi-thread TC-INFO-ASR4 Françoise Baude Université de Nice Sophia-Antipolis UFR Sciences Département Informatique baude@unice.fr web du cours : www-mips.unice.fr/~baude

Plus en détail

Résumé du chapitre 3 Synchronisation entre processus : de producteur/consommateur aux sémaphores

Résumé du chapitre 3 Synchronisation entre processus : de producteur/consommateur aux sémaphores Résumé du chapitre 3 Synchronisation entre processus : de producteur/consommateur aux sémaphores Jacques Mossière 22 septembre 2008 1 Introduction Nous étudions dans ce chapitre la réalisation des processus

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

420KEL Petite révision v. 1,65. Petite révision

420KEL Petite révision v. 1,65. Petite révision Petite révision Quelques petits exercices pour vous rafraîchir la mémoire et vous remettre en forme. Dans les exercices pour lesquels on vous demande de programmer, cherchez à produire un résultat à la

Plus en détail

Algorithmique & Programmation (INF431) Contrôle classant CC2. 25 juin 2014

Algorithmique & Programmation (INF431) Contrôle classant CC2. 25 juin 2014 Algorithmique & Programmation (INF431) Contrôle classant CC2 25 juin 2014 Les parties I, II et III sont indépendantes les unes des autres. Elles peuvent être traitées dans l ordre de votre choix. Elles

Plus en détail

Architecture des ordinateurs TP 3

Architecture des ordinateurs TP 3 Architecture des ordinateurs ESIPE - IR1 TP 3 Objectif de cette séance L objectif de cette séance est d apprendre à utiliser la pile et à écrire des fonctions en assembleur En particulier, nous verrons

Plus en détail

Exceptions. Fiabilité d un logiciel. Fiabilité en Java. Erreurs/exceptions. Localisation du traitement des erreurs/exceptions.

Exceptions. Fiabilité d un logiciel. Fiabilité en Java. Erreurs/exceptions. Localisation du traitement des erreurs/exceptions. Fiabilité d un logiciel Exceptions Université Française d Egypte Version O 5.7 5/10/15 Richard Grin Robustesse : fonctionne correctement, même en présence d événements exceptionnels Correction : donne

Plus en détail

Résumé du chapitre 8 Ressources et interblocage

Résumé du chapitre 8 Ressources et interblocage Résumé du chapitre 8 Ressources et interblocage Jacques Mossière 12 août 2004 1 Introduction Ce chapitre est consacré à l étude d un problème classique dans les systèmes, l interblocage, c est à dire l

Plus en détail

Apprendre la stratégie de l adversaire

Apprendre la stratégie de l adversaire M1 Master d informatique 28/29 Apprentissage à Partir d Exemples janvier 29 Apprendre la stratégie de l adversaire 1 But Soit un jeu à deux joueurs quelconque. Supposons que l un des deux joueurs suive

Plus en détail

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

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ; CNAM NFP121 TP 10 19/11/2013 (Séance 5) Objectif Manipuler les exceptions ; 1 Entrées/sorties Exercice 1 : Lire un entier à partir du clavier Ajouter une méthode readint(string message) dans la classe

Plus en détail

1 Programmation Client/Serveur basée sur TCP/IP

1 Programmation Client/Serveur basée sur TCP/IP Outils Informatique pour l ingénieur TD 1 Réseau et Web IP, Client/serveur 1 Programmation Client/Serveur basée sur TCP/IP 1.1 Buts de cette réalisation Ce TP sur la programmation client/serveur a pour

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

Programmation d applications concurrentes et distribuées (INF 431)

Programmation d applications concurrentes et distribuées (INF 431) Programmation d applications concurrentes et distribuées (INF 431) d un Goubault Pottier 28 janvier 2015 d un 1 2 3 4 5 d un 6 7 8 d un Organisation du cours Projet info possible dans ce cours, jeu Set!

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 Didier Verna didier@lrde.epita.fr 5 décembre 2000 Table des matières Table des matières Généralités... 3 États d un processus... 4 Bloc de contrôle d un processus

Plus en détail

1 Les arbres binaires en Java

1 Les arbres binaires en Java Université de Nice-Sophia Antipolis Deug MIAS-MI 1 Algorithmique & Programmation 2002 2003 TP N 10 Arbres binaires Buts : structuration des arbres binaires en Java. classes internes. objets de parcours.

Plus en détail

Mode d emploi pour la P-machine utilisée lors des TPs et des projets du cours INFO010 Théorie des langages et de la compilation.

Mode d emploi pour la P-machine utilisée lors des TPs et des projets du cours INFO010 Théorie des langages et de la compilation. Mode d emploi pour la P-machine utilisée lors des TPs et des projets du cours INFO010 Théorie des langages et de la compilation. Sébastien COLLETTE et Gilles GEERAERTS 1 Introduction Ce document décrit

Plus en détail

Chapitre 3 : Pointeurs et références

Chapitre 3 : Pointeurs et références p. 1/18 Chapitre 3 : Pointeurs et références Notion de pointeur L adresse d une variable est une valeur. On peut donc la stocker dans une variable. Un pointeur est une variable qui contient l adresse d

Plus en détail

Notions de langage machine

Notions de langage machine Notions de langage machine 18 décembre 2009 Rappels et introduction Architecture de Van Neumann : Processeur = UC + UAL Mémoire interne au processeur = les registres (soit seulement l accumulateur, soit

Plus en détail

Architecture des calculateurs

Architecture des calculateurs Chapitre 1 Architecture des calculateurs 1.1 Introduction Ce paragraphe n a pas la prétention de présenter un cours d informatique. D une manière générale, seuls les caractéristiques architecturales qui

Plus en détail

Bases de données et sites WEB Licence d informatique LI345

Bases de données et sites WEB Licence d informatique LI345 Bases de données et sites WEB Licence d informatique LI345 Anne Doucet Anne.Doucet@lip6.fr http://www-bd.lip6.fr/ens/li345-2013/index.php/lescours 1 Contenu Transactions en pratique Modèle relationnel-objet

Plus en détail

Devoir Surveillé informatique MP, PC, PSI

Devoir Surveillé informatique MP, PC, PSI NOM : Classe : Devoir Surveillé informatique MP, PC, PSI L utilisation des calculatrices n est pas autorisée pour cette épreuve. Le langage de programmation choisi est Python. L espace laissé pour les

Plus en détail

Université de Bourgogne - UFR Sciences et Technique - Programmation objet - LPSIL - 2013

Université de Bourgogne - UFR Sciences et Technique - Programmation objet - LPSIL - 2013 Nom : Prénom : Contrôle continu n 4 Programmation objet Vous devez répondre dans les cadres aux questions posées. Documents de cours et notes personnelles autorisés. Téléphones portables, ordinateurs et

Plus en détail

Détection de la terminaison distribuée

Détection de la terminaison distribuée Cours Algorithmique répartie Master 2 Université Paris-Diderot Devoir 1 (à rendre avant le 22 février 2010) Détection de la terminaison distribuée Généralités Π = {p 0,..., p n 1 } est l ensemble des processus.

Plus en détail

Initialisation des attributs (1)

Initialisation des attributs (1) Initialisation des attributs (1) Initialiser les attributs d une instance en leur affectant individuellement une valeur, après l instanciation, n est pas une technique satisfaisante: a) elle est fastidieuse,

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

Concurrence. Concurrence d accès. Nicolas Travers nicolas.travers@cnam.fr

Concurrence. Concurrence d accès. Nicolas Travers nicolas.travers@cnam.fr Concurrence Concurrence d accès FIP1 - Bases de Données Nicolas Travers nicolas.travers@cnam.fr Équipe Vertigo Laboratoire CEDRIC Conservatoire National des Arts & Métiers, Paris, France 1 / 36 Plan Concurrence

Plus en détail