« INFO604 : Systèmes de synchronisation et Processus » : différence entre les versions

De Wiki du LAMA (UMR 5127)
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
 
(17 versions intermédiaires par le même utilisateur non affichées)
Ligne 4 : Ligne 4 :
* [http://lama.univ-savoie.fr/~provencal/INFO604/TD/TD2.pdf énoncé du TD2]
* [http://lama.univ-savoie.fr/~provencal/INFO604/TD/TD2.pdf énoncé du TD2]
* [http://lama.univ-savoie.fr/~provencal/INFO604/TD/TD3.pdf énoncé du TD3]
* [http://lama.univ-savoie.fr/~provencal/INFO604/TD/TD3.pdf énoncé du TD3]
* [http://lama.univ-savoie.fr/~provencal/INFO604/TD/TD4.pdf énoncé du TD4]
* [http://lama.univ-savoie.fr/~provencal/INFO604/TD/TD5.pdf énoncé du TD5]
* [http://lama.univ-savoie.fr/~provencal/INFO604/TD/TD6.pdf énoncé du TD6]

TP1 : Tri fusion en parallèle
* [http://lama.univ-savoie.fr/~provencal/INFO604/TP1/tp1.pdf énoncé du TP1]
* [http://lama.univ-savoie.fr/~provencal/INFO604/TP1/triFusion.h fichier triFusion.h]
* [http://lama.univ-savoie.fr/~provencal/INFO604/TP1/test-tp1.c fichier test-tp1.c]
* [http://lama.univ-savoie.fr/~provencal/INFO604/TP1/triFusion-solution.c Solution du TP1.]

TP2 : Mémoire partagée et tubes
* [http://lama.univ-savoie.fr/~provencal/INFO604/TP2/testTube.c énoncé du TP2 et fichier source principal]
* [http://lama.univ-savoie.fr/~provencal/INFO604/TP2/monTube.h fichier monTube.h]
* [http://lama.univ-savoie.fr/~provencal/INFO604/TP2/monTube.c fichier monTube.c]
* [http://lama.univ-savoie.fr/~provencal/INFO604/TP2/makefile makefile]

TP3 : Simulation d'une pizzeria
* [http://lama.univ-savoie.fr/~provencal/INFO604/TP3/TP3.pdf Énoncé du TP3]
* [http://lama.univ-savoie.fr/~provencal/INFO604/TP3/pizzeria.c fichier pizzeria.c]
* [http://lama.univ-savoie.fr/~provencal/INFO604/TP3/clients.o fichier clients.o]
* [http://lama.univ-savoie.fr/~provencal/INFO604/TP3/synchroPizza.h fichier synchroPizza.h]
* [http://lama.univ-savoie.fr/~provencal/INFO604/TP3/synchroPizza.c fichier synchroPizza.c]
* [http://lama.univ-savoie.fr/~provencal/INFO604/TP3/makefile makefile]

Résumé des entêtes des fonctions C utilisées.
* [http://lama.univ-savoie.fr/~provencal/INFO604/entetesDeFonctions.pdf Entêtes de fonctions]


Exemple d'utilisation de sémaphores nommées :
Exemple d'utilisation de sémaphores nommées :


* [http://lama.univ-savoie.fr/~provencal/INFO604/exemples/parleur.c programme ``parleur.c``]
* [http://lama.univ-savoie.fr/~provencal/INFO604/exemples/createur.c programme ``createur.c`` qui crée un sémaphore.]
* [http://lama.univ-savoie.fr/~provencal/INFO604/exemples/parleur.c programme ``parleur.c`` qui décrémente (DOWN) un sémaphore.]
* [http://lama.univ-savoie.fr/~provencal/INFO604/exemples/gestionnaire.c programme ``gestionnaire.c`` qui incrémente (UP) un sémphore.]
* [http://lama.univ-savoie.fr/~provencal/INFO604/exemples/destructeur.c programme ``destructeur.c`` qui détruit un sémaphore.]

Exemple d'utilisation de sémaphores sans-noms :
* [http://lama.univ-savoie.fr/~provencal/INFO604/exemples/semThread.c programme ``semThread.c`` qui implémente le parleur et le gestionnaire avec des threads.]

Exemple d'utilisation d'une variable de condition :
* [http://lama.univ-savoie.fr/~provencal/INFO604/exemples/var_cond.c programme ``var_cond.c``.]

Deux versions du même programme. Dans les deux cas l'affichage est effectué à l'aide de la librairie ncurses. Dans le premier exemple, la synchronisation est assurée à l'aide d'un sémaphore et de deux mutex alors que dans le second utilise deux mutex et une variable de condition.
* [http://lama.univ-savoie.fr/~provencal/INFO604/exemples/danseursSem.c programme ``danseursSem.c``.]
* [http://lama.univ-savoie.fr/~provencal/INFO604/exemples/danseursCond.c programme ``danseursCond.c``.]

Version parallèle du tri rapide (quicksort). La première version utilise un "trywait" et l'attente active pour faire attendre les threads et détecter s'il reste du travail à accomplir. La deuxième version évite l'attente active en ayant recours à une variable globale indiquant si le travail est terminé. La troisième version utilise une variable de condition de manière à ce que le thread principal puisse tuer tous ces fils une fois le travail terminé.
* [http://lama.univ-savoie.fr/~provencal/INFO604/exemples/triRapidePar-v1.c programme ``triRapidePar-v1.c``.]
* [http://lama.univ-savoie.fr/~provencal/INFO604/exemples/triRapidePar-v2.c programme ``triRapidePar-v2.c``.]
* [http://lama.univ-savoie.fr/~provencal/INFO604/exemples/triRapidePar-v3.c programme ``triRapidePar-v3.c``.]

Trois programme très simples pour illustrer une utilisation de mémoire partagée. Le premier alloue un segment de mémoire partagée et affiche son identifiant. Les deux suivant demandent un identifiant et attachent le segment de mémoire correspondant pour ensuite y écrire (resp. lire) des nombres entrés par l'utilisateur. Finalement, le dernier programme alloue de la mémoire partagée, se l'attache puis effectue un fork. Ensuite, les deux programmes (père et fils) effectuent la même chose que mpEcritre et mpLecture.
* [http://lama.univ-savoie.fr/~provencal/INFO604/exemples/mpAllocation.c programme ``mpAllocation.c``.]
* [http://lama.univ-savoie.fr/~provencal/INFO604/exemples/mpEcriture.c programme ``mpEcriture.c``.]
* [http://lama.univ-savoie.fr/~provencal/INFO604/exemples/mpLecture.c programme ``mpLecture.c``.]
* [http://lama.univ-savoie.fr/~provencal/INFO604/exemples/mpFork.c programme ``mpFork.c``.]

Exemple d'utilisation d'un tube. Le programme crée d'abord le tube puis effectue un fork. Ensuite, le père lis des nombres entrés au clavier et les inscrit dans le tube. Le fils lis les nombres inscrits dans le tube et les affiche.
* [http://lama.univ-savoie.fr/~provencal/INFO604/exemples/tubeFork.c programme ``tubeFork.c``.]

Dernière version du 4 avril 2011 à 06:17

Quelques documents pour les TD et TP d'INFO604 :

TP1 : Tri fusion en parallèle

TP2 : Mémoire partagée et tubes

TP3 : Simulation d'une pizzeria

Résumé des entêtes des fonctions C utilisées.

Exemple d'utilisation de sémaphores nommées :

Exemple d'utilisation de sémaphores sans-noms :

Exemple d'utilisation d'une variable de condition :

Deux versions du même programme. Dans les deux cas l'affichage est effectué à l'aide de la librairie ncurses. Dans le premier exemple, la synchronisation est assurée à l'aide d'un sémaphore et de deux mutex alors que dans le second utilise deux mutex et une variable de condition.

Version parallèle du tri rapide (quicksort). La première version utilise un "trywait" et l'attente active pour faire attendre les threads et détecter s'il reste du travail à accomplir. La deuxième version évite l'attente active en ayant recours à une variable globale indiquant si le travail est terminé. La troisième version utilise une variable de condition de manière à ce que le thread principal puisse tuer tous ces fils une fois le travail terminé.

Trois programme très simples pour illustrer une utilisation de mémoire partagée. Le premier alloue un segment de mémoire partagée et affiche son identifiant. Les deux suivant demandent un identifiant et attachent le segment de mémoire correspondant pour ensuite y écrire (resp. lire) des nombres entrés par l'utilisateur. Finalement, le dernier programme alloue de la mémoire partagée, se l'attache puis effectue un fork. Ensuite, les deux programmes (père et fils) effectuent la même chose que mpEcritre et mpLecture.

Exemple d'utilisation d'un tube. Le programme crée d'abord le tube puis effectue un fork. Ensuite, le père lis des nombres entrés au clavier et les inscrit dans le tube. Le fils lis les nombres inscrits dans le tube et les affiche.