« INFO622 : 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
 
(132 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
* Responsable pour 2012--2013: [http://www.lama.univ-savoie.fr/~provencal Xavier Provençal]
* Responsable pour 2015--2016: [http://www.lama.univ-savoie.fr/~provencal Xavier Provençal]
* Xavier Provençal (CM/TD/TP) <!--, Pierre-Étienne Meunier (TP), Florian Hatat (TP) -->
* Intervenants : Xavier Provençal (CM/TD/TP), Rodolphe Lepigre (TD/TP)



== Ouvrage de référence ==
== Ouvrage de référence ==


# Andrew Tanenbaum, Systèmes d'exploitation
# Andrew Tanenbaum, Systèmes d'exploitation. Principalement les chapitres 2 et 6.


== Documentation remise en classes ==
== Examen de 1ere session ==
- Entêtes de fonctions POSIX (I) :
[http://lama.univ-savoie.fr/~provencal/INFO622/fct_posix/fonctions_POSIX_1.pdf fonctions_POSIX_1.pdf.]
- Entêtes de fonctions POSIX (II) :
[http://lama.univ-savoie.fr/~provencal/INFO622/fct_posix/fonctions_POSIX_2.pdf fonctions_POSIX_2.pdf.]
- Entêtes de fonctions POSIX (III) :
[http://lama.univ-savoie.fr/~provencal/INFO622/fct_posix/fonctions_POSIX_3.pdf fonctions_POSIX_3.pdf.]
- Entêtes de fonctions POSIX (IV) :
[http://lama.univ-savoie.fr/~provencal/INFO622/fct_posix/fonctions_POSIX_4.pdf fonctions_POSIX_4.pdf.]
<!--
- Entêtes de fonctions POSIX (V) :
[http://lama.univ-savoie.fr/~provencal/INFO622/fct_posix/fonctions_POSIX_5.pdf fonctions_POSIX_5.pdf.]
-->


- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/corrige.pdf Examen de 1ere session avec solution.]


== Documentation remise à l'examen ==
== Systèmes de synchronisation et processus ==


- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/fct_POSIX_resume.pdf Entêtes de fonctions POSIX -- Aide pour l'examen.]


== Documentation remise en classes ==


- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/fct_posix-1.pdf Entêtes de fonctions POSIX (I).]
Multiprogrammation :
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/fct_posix-2.pdf Entêtes de fonctions POSIX (II).]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/fct_posix-3.pdf Entêtes de fonctions POSIX (III).]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/fct_posix-4.pdf Entêtes de fonctions POSIX (IV).]
<!--
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/fct_posix-5.pdf Entêtes de fonctions POSIX (V).]
-->


== TP ==


* '''TP0''' : Écrire un programme qui répond à la question : quel est le comportement par défaut de la mémoire partagée (obtenue par : shm_open + ftruncate + mmap) lors que le processus effectue un '''fork''' ? Est-elle copiée ou est-elle partagée entre les processus père et fils ? Inscrivez votre réponse à la question en commentaire au début du fichier.
Exécuter plusieurs programmes simultanément sur le même CPU.


- TP1 : Parallélisation du tri rapide
On divise l’écriture des programmes dans 3 espace mémoires différents donc cela permet de faire
- Un peu de documentation sur le tri rapide :
- Wikipedia : https://fr.wikipedia.org/wiki/Tri_rapide
- OpenClassRooms : https://openclassrooms.com/courses/le-tri-rapide-qsort
- Un petit vidéo : https://www.youtube.com/watch?v=xcyDSLSkb0k


- TP1 :
marcher le CPU en non-stop les programme sont exécuter en simultané avec le CPU.
[http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/info622-tp1.pdf Énoncé du TP.]
[http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/info622-tp1.tgz code fourni.]


- TP2 :
[http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/info622-tp2.tgz Fichiers sources, les exercices sont en commentaire dans le fichier tp2.c]


- TP3 :
[http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/tp3.pdf Énoncé du TP.]
[http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/info622-tp3.tgz Fichiers sources du simulateur.]


== Processus : ==
== Déroulement (2016-2017) ==


- CM1 : Multiprogrammation ( [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/info622-pres-intro.pdf Présentation d'introduction (pdf) ] )
- Introduction à la multiprogrammation
- Condition de concurrence
- Section critique.
- Banque virtuelle : exemple de condition de concurrence
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/CM1/banqueVirtuelle.c programme ``banqueVirtuelle.c``.]


- TD1 :
Un programme en cours d’exécution. Deux composantes d’un processus :
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/td1.pdf Énoncé du TD1 (en salle machine).]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD1-sol/q1a.c Solution question 1a)]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD1-sol/q2a.c Solution question 2a)]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD1-sol/q2c.c Solution question 2c)]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD1-sol/q2e.c Solution question 2e)]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD1-sol/q3a.c Solution question 3a)]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD1-sol/q3d.c Solution question 3d)]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD1-sol/q3e.c Solution question 3e)]


- CM2 : Processus et threads
* Espace d’adressage. (mémoire) (code, donnée, piles des appels, etc...)
- Commandes : fork, waitpid, wait.
* Des registres.
- Threads, définition, principe, fonctionnement, librairie pthread.
- Méthodes d'exclusion mutuelle (partie 1).


- TD2 :
Préemption :
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD2.pdf Énoncé du TD2.]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD2/q4_seq.c Code question 4, version séquentielle]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD2/q4_para.c Code question 4, version parallèle boguée]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD2/q4_b.c Solution de 4b)]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD2/q4_c.c Solution de 4c)]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD2/q4_f.c Solution de 4f)]


- CM3 :
- Mécanismes d'exclusion mutuelle (deuxième partie)
- Mutex et sémaphores (principe)
- Sémaphores POSIX anonymes.
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/CM3/verrou.c Programme verrou.c]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/CM3/mutex.c Programme mutex.c]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/CM3/parleurCC.c Programme ParleurCC.c (avec condition de concurrence)]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/CM3/parleurSem.c Programme ParleurSem.c (sans condition de concurrence)]


- TD3 :
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/td3.pdf Énoncé du TD3.]


- CM4 :
Action d’interrompre un processus avec l’intention d’un reprendre l’exécution plus tard.
- Mécanismes d'exclusion mutuelle (deuxième partie)
- Sémaphore POSIX nommés.
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/createur.c Programme createur.c]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/gestionnaire.c Programme gestionnaire.c]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/parleur.c Programme parleur.c]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/destructeur.c Programme destructeur.c]
- Mémoire partagée
- Principes de base : shm_open, ftrunctate, mmap.
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/mp_maStruct.h Fichier entête mp_maStruct.h]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/mp_lecture.c Programme mp_lecture.c]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/mp_affichage.c Programme mp_affichage.c]


- TD4 :
Note : la coopération du processus n’est pas requise.
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/td4.pdf Énoncé du TD4.]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/td4_q3.c Solution de l'exo 3.]


- CM5 :
- Barrières de synchronisation
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/barriere.c Programme barriere.c]
- Communication inter-processus
- Retour sur le problème ``producteur/consommateur`` : [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/prodCons_naif.c prodCons_naif.c ] [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/prodCons_sem.c prodCons_sem.c ]
- Communication inter-processus
- Schémas de base
- Descripteurs de fichier
- Appels systèmes : '''read''' et '''write'''
- Tubes UNIX (première partie)
- Principes de bases


- TD5 :
Principales causes de préemption :
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/td5.pdf Énoncé du TD5.]


- CM6 :
- Tubes UNIX (suite et fin)
- Tubes nommés et non-nommés
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/tubeFork.c Programme tubeFork.c]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/fifoLecture.c Programme fifoLecture.c]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/fifoEcriture.c Programme fifoEcriture.c]
- Fonction '''select'''
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/fifoLectureMultiple.c Programme fifoLectureMultiple.c]


- TD6 :
* A la demande du processus. (ex : sleep)
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/td6.pdf Énoncé du TD6.]
* Lors d’un appel système bloquant. (ex : utilisation d’un périphérique)
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/td6-q1-sol.c Solution de la question 1 (compiler avec option '''-lpthread''')]
* Déclenchement d’une interruption. (signal envoyé au CPU ex : horloge, périph, etc...)
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/td6-q1-sol-bis.c Solution alternative de la question 1 (compiler avec option '''-lrt''')]
<br/>
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/td6-q2.c Solution de la question 2]


- CM7
- Interblocages
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/banqueVirtuelle2.c banqueVirtuelle2.c]
- Trace 2D


- TD7
Observation :
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/info622-td7.pdf Énoncé du TD7.]


= Archives =


== Déroulement (2015-2016) ==




- CM1 :
- Introduction à la multiprogrammation
- Condition de concurrence
- Section critique.
- Banque virtuelle : exemple de condition de concurrence
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/CM1/banqueVirtuelle.c programme ``banqueVirtuelle.c``.]


- TD1 :
Solde = solde + 1000 ;
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD1.pdf Énoncé du TD1 (en salle machine).]
Solde = solde + (Solde * 0.01/365.0) ;
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD1-sol/q1a.c Solution question 1a)]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD1-sol/q2a.c Solution question 2a)]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD1-sol/q2c.c Solution question 2c)]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD1-sol/q2e.c Solution question 2e)]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD1-sol/q3a.c Solution question 3a)]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD1-sol/q3d.c Solution question 3d)]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD1-sol/q3e.c Solution question 3e)]




- CM2 :
# Copie Solde dans R2
- Threads et processus.
# « Arithmétique » sur des registres
- Ressources physiques et espace d'adressage.
# Copier R2 dans Solde
- Commandes fork, wait, pthread_create, pthread_join.
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/CM2/zombies.c programme ``zombies.c``.]
- Mécanismes d'exclusion mutuelle (première partie).


- TD2 :
Les deux processus partage une variable, si il se mette pas d’accord le solde est peut-être pas mis a
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD2.pdf Énoncé du TD2.]

<!--
jours au bon moment.
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD2/q4_seq.c Code question 4, version séquentielle]

- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD2/q4_para.c Code question 4, version parallèle boguée]

- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD2/q4_b.c Solution de 4b)]
On passe d’un solde de 2000 à un solde à 1000.90 ...
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD2/q4_c.c Solution de 4c)]

- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD2/q4_f.c Solution de 4f)]

-->
Condition de concurrence :



Situation ou au moins deux processus écrivent des données partagées et où le résultat final dépend

de l’ordre d’exécution.


Ex : spool d’impression :




Prochain_libre = 10


# Lire prochain_libre
# Ecrire le doc dans la case « prochain_libre »
# Incrémenter prochain_libre

Section critique :



Partie du code dans laquelle on doit jamais avoir 2 processus en même temps.

Deux objectifs :


* Identifier les sections critiques
* Assurer l’exclusion mutuelle

Les quatre règles d’or de la gestion des sert critiques :


# Deux processus ne doivent jamais se trouver simultanément en section critique.
# On ne peut faire aucune supposition quant à la vitesse ou au nombre de processus en œuvre.
# Aucun processus s’exécutant hors de sa section critique ne doit bloquer un autre processus.
# Aucun processus ne doit attendre indéfiniment longtemps avant d’entrer en section critique.




== TP ==

- TP1 :
[http://lama.univ-savoie.fr/~provencal/INFO622/TP/tp1.pdf Énoncé du TP.]
[http://lama.univ-savoie.fr/~provencal/INFO622/TP/info622-tp1.tgz code fourni.]

== Déroulement (2013-2014) ==

CM1 : Introduction à la multiprogrammation, condition de concurrence et section critique.
- Banque virtuelle : exemple de condition de concurrence.
[http://lama.univ-savoie.fr/~provencal/INFO622/CM1/banqueVirtuelle.c programme ``banqueVirtuelle.c``.]


TD1 :
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/TD1.pdf Énoncé du TD1 (effectuée en salle machine).]
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/TD1-sol/q1a.c Solution question 1a)]
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/TD1-sol/q2a.c Solution question 2a)]
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/TD1-sol/q2b.c Solution question 2b)]
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/TD1-sol/q3a.c Solution question 3a)]
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/TD1-sol/q3d.c Solution question 3d)]
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/TD1-sol/q3e.c Solution question 3e)]


CM2 : Processus et threads, utilisation des fonctions : fork, wait, waitpid, pthread_create, pthread_exit, pthread_join. Méthodes d'exclusion mutuelle : désactivation des interruptions et attente active.


TD2 :
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/TD2.pdf Énoncé du TD2.]
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/td2_q6.c Implémentation du code de la question 6.] (à compiler avec l'option -lm )
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/td2_q6-sol.c Implémentation de la solution de la question 6.] (à compiler avec les options -lm -lpthread )
Utilisez la commande "time" pour observer un gain de vitesse sur une machine à plusieurs coeurs.
Pour cela il vous faudra de grands nombres premiers. En voici un : 1000000000000039723

CM3 : Producteur/Consommateur et Sémaphores
- Exemple d'utilisation d'un sémaphore non nommé par des threads (compiler avec l'option -lpthread) :
[http://lama.univ-savoie.fr/~provencal/INFO622/CM3/semThread.c programme ``semThread.c``.]
- Exemple erroné d'utilisation d'un sémaphore non nommé par des processus apparenté ( fork() ) (compiler avec l'option -lpthread) :
[http://lama.univ-savoie.fr/~provencal/INFO622/CM3/semFork-bug.c programme ``semFork-bug.c``.]

TD3 :
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/TD3.pdf Énoncé du TD3.]
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/td3_q2.c Implémentation du code de la question 2.] (à compiler avec les options -lpthread -lcurses )
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/td3_q2-sol.c Implémentation de la solution de la question 2.] (à compiler avec les options -lpthread -lcurses )

CM4 : Sémaphores nommés et mémoire partagée
- Sémaphores nommés avec processus distincs (compiler avec l'option -lpthread) :
[http://lama.univ-savoie.fr/~provencal/INFO622/CM4/createur.c programme ``createur.c``.]
[http://lama.univ-savoie.fr/~provencal/INFO622/CM4/destructeur.c programme ``destructeur.c``.]
[http://lama.univ-savoie.fr/~provencal/INFO622/CM4/gestionnaire.c programme ``gestionnaire.c``.]
[http://lama.univ-savoie.fr/~provencal/INFO622/CM4/parleur.c programme ``parleur.c``.]
- Exemple simplissime de manipulation d'un entier situé en mémoire partagée (compiler avec l'option -lrt) :
[http://lama.univ-savoie.fr/~provencal/INFO622/CM4/mp_1.c programme ``mp_1.c``.]
[http://lama.univ-savoie.fr/~provencal/INFO622/CM4/mp_2.c programme ``mp_2.c``.]
- Exemple d'utilisation d'un sémaphore non-nommé situé en mémoire partagée (compiler avec l'option -lrt) :
[http://lama.univ-savoie.fr/~provencal/INFO622/CM4/mp_maStruct.h fichier entête ``mp_maStruct.h``.]
[http://lama.univ-savoie.fr/~provencal/INFO622/CM4/mp_lecture.c programme ``mp_lecture.c``.]
[http://lama.univ-savoie.fr/~provencal/INFO622/CM4/mp_affichage.c programme ``mp_affichage.c``.]

TD4 :
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/TD4.pdf Énoncé du TD4.]

CM5 : Variables de condision et implémentation du problème "producteurs/consommateurs".
- Solution au devoir :
[http://lama.univ-savoie.fr/~provencal/INFO622/CM5/sol_devoir.c Programme qui teste le comportement par défaut le la mémoire partagée lors d'un fork. ]
- Exemple d'utilisation d'une variable de condition.
[http://lama.univ-savoie.fr/~provencal/INFO622/CM5/prodCons_naif.c Implémentation naïve (non-fonctionnelles) ]
[http://lama.univ-savoie.fr/~provencal/INFO622/CM5/prodCons_naif.c Implémentation avec des sémaphores ]
[http://lama.univ-savoie.fr/~provencal/INFO622/CM5/prodCons_naif.c Implémentation avec des variables de conditions ]


- CM3 :
- Mécanismes d'exclusion mutuelle (deuxième partie)
- Mutex et sémaphores
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/CM3/verrou.c Programme verrou.c]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/CM3/mutex.c Programme mutex.c]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/CM3/parleurCC.c Programme ParleurCC.c (avec condition de concurrence)]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/CM3/parleurSem.c Programme ParleurSem.c (sans condition de concurrence)]
- Communication interprocessus
- Problème "producteurs/consommateurs"


- TD3 :
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD3.pdf Énoncé du TD3.]
<!--
<!--
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/td3_q1.c Solution de la question q1 (fichier source).]
CM4 : Sémaphores POSIX et mémoire partagée
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/prod_cons.c Implémentation du problème ``producteurs/consommateurs`` (avec attente active et conditions de concurrence).]
- Sémaphores nommés avec processus distincs (compiler avec l'option -lpthread) :
[http://lama.univ-savoie.fr/~provencal/INFO622/CM4/createur.c programme ``createur.c``.]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/prod_cons_sol.c Solution au problème ``producteurs/consommateurs`` (avec n producteur et m consommataeurs, sans conditions de concurrence).]
[http://lama.univ-savoie.fr/~provencal/INFO622/CM4/destructeur.c programme ``destructeur.c``.]
[http://lama.univ-savoie.fr/~provencal/INFO622/CM4/gestionnaire.c programme ``gestionnaire.c``.]
[http://lama.univ-savoie.fr/~provencal/INFO622/CM4/parleur.c programme ``parleur.c``.]
- Mémoire partagée (compiler avec l'option -lrt) :
[http://lama.univ-savoie.fr/~provencal/INFO622/CM4/mp_maStruct.h fichier entête ``mp_maStruct.h``.]
[http://lama.univ-savoie.fr/~provencal/INFO622/CM4/mp_lecture.c programme ``mp_lecture.c``.]
[http://lama.univ-savoie.fr/~provencal/INFO622/CM4/mp_affichage.c programme ``mp_affichage.c``.]

CM5 : Variables de condition et barrières de synchronisation
- Exemple producteur/consommateur implémenté avec des sémaphores.
[http://lama.univ-savoie.fr/~provencal/INFO622/CM5/prodCons_sem.c Programme ``prodCons_sem.c``.]
- Exemple producteur/consommateur implémenté avec des variables de conditions et un mutex.
[http://lama.univ-savoie.fr/~provencal/INFO622/CM5/prodCons_cnd.c Programme ``prodCons_cnd.c``.]
- Exemple d'utilisation d'une barrière de synchronisation.
[http://lama.univ-savoie.fr/~provencal/INFO622/CM5/barriere.c Programme ``barriere.c``.]

CM6 : Tubes
- Exemple d'utilisation d'un tube non-nommé entre processus père et fils.
[http://lama.univ-savoie.fr/~provencal/INFO622/CM6/tubeFork.c Programme ``tubeFork.c``.]
- Exemnple d'utilisation d'un fifo entre deux processus non-apparentés.
[http://lama.univ-savoie.fr/~provencal/INFO622/CM6/fifoEcriture.c Programme ``fifoEcriture.c``.]
[http://lama.univ-savoie.fr/~provencal/INFO622/CM6/fifoLecture.c Programme ``fifoLecture.c``.]


CM7 : Interblocages et famine
- Exemple de programme créant un interblocage.
[http://lama.univ-savoie.fr/~provencal/INFO622/CM7/banqueVirtuelle2.c Programme ``banqueVirtuelle2.c``.]
-->
-->


- CM4 :
- Sémaphores nommés vs non-nommés
- Implémentation du duo "Parleur/gestionnaire" avec un sémaphore non-nommé.
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/CM4/semThread.c Parleur/gestionnaire avec threads et sémaphore non-nommé.]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/CM4/semForkBobo.c Parleur/gestionnaire avec fork et sémpaphore non-nommé (non-fonctionnel).]
- Implémentation du duo "Parleur/gestionnaire" avec un sémphore nommé.
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/CM4/createur.c createur.c (crée un sémaphore nommé).]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/CM4/gestionnaire.c gestionnaire.c (fait des POST sur un sémaphore nommé).]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/CM4/parleur.c parleur.c (fait des WAIT sur un sémaphore nommé).]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/CM4/destructeur.c destructeur.c (détruit un sémaphore nommé).]
- Mémoire partagée
- Exemple simplissime d'utilisation de mémoire partagée.
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/CM4/mp_1.c mp_1.c (à compiler avec l'option -lrt).]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/CM4/mp_2.c mp_2.c (à compiler avec l'option -lrt).]


- TD4 :
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD4.pdf Énoncé du TD4.]
<!--
<!--
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/TD2.pdf TD2.]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD4/q1.c Solution de la question 1 (fichier source).]
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/rsa.c programme ``rsa.c``.]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD4/q2.c Solution de la question 2 (fichier source).]
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/exCleRSA.txt exemples de clés RSA valides au format ( n, d, e ) ``exCleRSA.txt``.]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD4/q3.c Solution de la question 3 (fichier source).]
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/td2-q1-solution.c Solution question 1.]
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/td2-q2-solution.c Solution question 2.]
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/td2-q3-solution.c Solution question 3.]
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/TD3/poste.c TD3 - Programme ``poste.c``]
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/TD3/makefile Fichier ``makefile`` pour compiler ``poste.c``]
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/TD4.pdf TD4.]
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/TD5.pdf TD5.]
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/TD6.pdf TD6.]
- [http://lama.univ-savoie.fr/~provencal/INFO622/TD/TD7.pdf TD7.]


TP :
- TP1 : Tri rapide en parallèle
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TP/tp1.pdf Énoncé du TP1.]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TP/info622-tp1.tgz Archive contenant les sources nécessaires au TP1 ( format tgz ).]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TP/info622-tp1.zip Archive contenant les sources nécessaires au TP1 ( format zip ).]
- TP2 : Tubes
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TP/tp2.tar Archive contenant les sources nécessaires au TP2.]
- TP3 : Simulation de physique
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TP/tp3.pdf Énonpcé du TP3.]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TP/tp3_code.tar Sources nécessaires à la réalisation du TP3.]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TP/tp3_donnees.tar Données pour exécuter le programme du TP3.]
-->
-->


- CM5
<!--
CM4 : Sémaphores POSIX et mémoire partagée
- Mémoire partagée (suite et fin)
- Solution du devoir sur le comportement par défaut de la mémoire partagée lors d'un fork.
- Entêtes de fonctions POSIX (III) :
[http://lama.univ-savoie.fr/~provencal/INFO622/CM4/fonctions_POSIX_III.pdf fonctions_POSIX_3.pdf.]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/sol_devoir.c sol_devoir.c]
- Exemple un peu plus évolué d'utilisation de mémoire partagée.
- Sémaphores non nommés avec threads (compiler avcec l'i:
[http://lama.univ-savoie.fr/~provencal/INFO622/CM4/semThread.c programme ``semThread.c``.]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/CM4/mp_maStruct.h mp_maStruct.h.]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/CM4/mp_affichage.c mp_affichage.c (à compiler avec l'option -lrt).]
- Sémaphores nommés avec processus distincs (compiler avec l'option -lpthread) :
[http://lama.univ-savoie.fr/~provencal/INFO622/CM4/createur.c programme ``createur.c``.]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/CM4/mp_lecture.c mp_lecture.c (à compiler avec l'option -lrt).]
- Variable de condition
[http://lama.univ-savoie.fr/~provencal/INFO622/CM4/destructeur.c programme ``destructeur.c``.]
[http://lama.univ-savoie.fr/~provencal/INFO622/CM4/gestionnaire.c programme ``gestionnaire.c``.]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/decrementeur_varcond.c Programme ``decrémenteur`` avec une variable de condition.]
[http://lama.univ-savoie.fr/~provencal/INFO622/CM4/parleur.c programme ``parleur.c``.]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/prodCons_cnd.c Implémentation de ``Producteur/consommateur`` avec des variables de condition.]
- Barrière de synchronisation
- Mémoire partagée (compiler avec l'option -lrt) :
[http://lama.univ-savoie.fr/~provencal/INFO622/CM4/mp_lecture.c programme ``mp_lecture.c``.]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/barriere.c Exemple simplissime d'utilisation d'une barrière de synchronisation.]
[http://lama.univ-savoie.fr/~provencal/INFO622/CM4/mp_affichage.c programme ``mp_affichage.c``.]


- TD5
CM5 : Interblocages
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD5.pdf Énoncé du TD5.]
- Banque virtuelle 2 : exemple d'interblocage (compiler avec l'option -lpthread) :
[http://lama.univ-savoie.fr/~provencal/INFO622/CM5/banqueVirtuelle2.c programme ``banqueVirtuelle.c``.]


- CM6
CM6 : Variables de condition et barrières de synchronisation
- Tubes Unix
- Implémentation du problème producteur/consommateur avec variables de condition (compiler avec l'option -lpthread) :
[http://lama.univ-savoie.fr/~provencal/INFO622/CM6/prodCons_cnd.c programme ``prodCons_cnd.c``.]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/tubeFork.c tubeFork.c]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/fifoEcriture.c fifoEcriture.c]
- Exemple simple d'utilisation d'une barrière de synchronisation (compiler avec l'option -lpthread) :
[http://lama.univ-savoie.fr/~provencal/INFO622/CM6/barriere.c programme ``barriere.c``.]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/fifoLecture.c fifoLecture.c]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/fifoLectureMultiple.c ficoLectureMultiple.c (utilisation de la fonction select)]


CM 7 : Tubes (pipe et fifo), fonction select
- Utilisation typique d'un tube non-nommé (pipe) par un père et son fils :
[http://lama.univ-savoie.fr/~provencal/INFO622/CM7/tubeFork.c programme ``tubeFork.c``.]
- Exemple de programmes communicant à l'aide d'une tube nommé (fifo), créez d'abord la fifo avec la commande ``mkfifo`` :
[http://lama.univ-savoie.fr/~provencal/INFO622/CM7/fifoLecture.c programme ``fifoLecture.c``.]
[http://lama.univ-savoie.fr/~provencal/INFO622/CM7/fifoEcriture.c programme ``fifoEcriture.c``.]
- Exemple d'utilisation de la fonction select pour surveiller en même temps les tubres "fifo1" et "fifo2" ::w
[http://lama.univ-savoie.fr/~provencal/INFO622/CM7/fifo2Lecture.c programme ``fifo2Lecture.c``.]


- TD6
TD :
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TD/TD1.pdf Première feuille de TD.]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/TD5.pdf Énoncé du TD5.]
<!--
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TD/TD2.pdf Deuxième feuille de TD.]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TD/TD3.pdf Troisième feuille de TD.]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/q1_v1.c Solution question 1 (Version sémaphores).]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TD/TD4.pdf Quatrième feuille de TD.]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/q1_v2.c Solution question 1 (Version attente active).]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TD/TD5.pdf Cinquième feuille de TD.]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/TD/q2.c Solution question 2.]
-->
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TD/TD6.pdf Sixième feuille de TD.]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TD/TD7.pdf Septième feuille de TD.]




- CM7

- Tubes Unix (suite et fin)

- Interblocages
Exercices personnels
- [ http://lama.univ-savoie.fr/~provencal/INFO622/exo/devoir1.pdf Exercice personnel #1.]
- [http://lama.univ-savoie.fr/~provencal/enseignement/INFO622/banqueVirtuelle2.c banqueVirtuelle2.c]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/exo/sol_devoir1.c Une solution de l'exercice personnel #1.]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/exo/devoir2.pdf Exercice personnel #2.]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/exo/sol_devoir2.c Une solution de l'exercice personnel #2.]

Entêtes de fonctions
- [ http://lama.univ-savoie.fr/~provencal/INFO622/fct_posix/fonctions_POSIX_1.pdf Fork et création de threads.]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/fct_posix/fonctions_POSIX_2.pdf Sémaphores et mutex.]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/fct_posix/fonctions_POSIX_3.pdf Mémoire partagée.]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/fct_posix/fonctions_POSIX_4.pdf Variables de condition et barrières de synchronisation.]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/fct_posix/fonctions_POSIX_5.pdf Tube.]

TP1 : Tri rapide en parallel
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TP1/tp1.pdf Énoncé du TP.]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TP1/genAleat.c Programme pour la génération de suite de nombres.]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TP1/testTri.sh script permettant de comparer votre tri à la commande sort.]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TP1/triRapide.h Entêtes de fonctions relatives au tri rapide.]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TP1/triRapide.c Version séquentielle du tri rapide, à modifier.]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TP1/tri.c Lis des nombres sur l'entrée standard, appele triRapide et affiche le résultat. ]

TP2 : Implémentation de tubes simplifiés
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TP2/info622-tp2.c Fichier source principal et énoncé du TP.]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TP2/monTube.h Entêtes de fonctions relatives aux tube monTube.]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TP2/monTube.c Implémentation des fonctions relatives aux tubes monTube.]

TP3 : Pizzéria
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TP3/tp3.pdf Énoncé du TP.]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TP3/clients.o Fichier objet pour recompiler le programme 'clients'.]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TP3/synchroPizza.h Entêtes des fonctions utilisées pour préparer les pizzas.]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TP3/synchroPizza.c Implémentation des fonctions utilisées pour préparer les pizzas.]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TP3/pizzeria.c Source du programme implémentant une pizzéria virtuelle (à compléter).]
- [ http://lama.univ-savoie.fr/~provencal/INFO622/TP3/makefile Makefile (optionnel).]
-->

Dernière version du 20 juin 2017 à 09:36

  • Responsable pour 2015--2016: Xavier Provençal
  • Intervenants : Xavier Provençal (CM/TD/TP), Rodolphe Lepigre (TD/TP)


Ouvrage de référence

  1. Andrew Tanenbaum, Systèmes d'exploitation. Principalement les chapitres 2 et 6.

Examen de 1ere session

- Examen de 1ere session avec solution.

Documentation remise à l'examen

- Entêtes de fonctions POSIX -- Aide pour l'examen.

Documentation remise en classes

- Entêtes de fonctions POSIX (I).
- Entêtes de fonctions POSIX (II).
- Entêtes de fonctions POSIX (III).
- Entêtes de fonctions POSIX (IV).

TP

  • TP0 : Écrire un programme qui répond à la question : quel est le comportement par défaut de la mémoire partagée (obtenue par : shm_open + ftruncate + mmap) lors que le processus effectue un fork ? Est-elle copiée ou est-elle partagée entre les processus père et fils ? Inscrivez votre réponse à la question en commentaire au début du fichier.
- TP1 : Parallélisation du tri rapide
  - Un peu de documentation sur le tri rapide : 
    - Wikipedia : https://fr.wikipedia.org/wiki/Tri_rapide
    - OpenClassRooms : https://openclassrooms.com/courses/le-tri-rapide-qsort
    - Un petit vidéo : https://www.youtube.com/watch?v=xcyDSLSkb0k
- TP1 : 
   Énoncé du TP.
   code fourni.
- TP2 : 
   Fichiers sources, les exercices sont en commentaire dans le fichier tp2.c
- TP3 : 
   Énoncé du TP.
   Fichiers sources du simulateur.

Déroulement (2016-2017)

- CM1 : Multiprogrammation ( Présentation d'introduction (pdf)  )
   - Introduction à la multiprogrammation
   - Condition de concurrence
   - Section critique.
   - Banque virtuelle : exemple de condition de concurrence 
     - programme ``banqueVirtuelle.c``.
- TD1 : 
   - Énoncé du TD1 (en salle machine).
      - Solution question 1a)
      - Solution question 2a)
      - Solution question 2c)
      - Solution question 2e)
      - Solution question 3a)
      - Solution question 3d)
      - Solution question 3e)
- CM2 : Processus et threads
   - Commandes : fork, waitpid, wait.
   - Threads, définition, principe, fonctionnement, librairie pthread.
   - Méthodes d'exclusion mutuelle (partie 1).
- TD2 : 
   - Énoncé du TD2.
      - Code question 4, version séquentielle
      - Code question 4, version parallèle boguée
      - Solution de 4b)
      - Solution de 4c)
      - Solution de 4f)
- CM3 : 
   - Mécanismes d'exclusion mutuelle (deuxième partie)
     - Mutex et sémaphores (principe)
     - Sémaphores POSIX anonymes. 
     - Programme verrou.c
     - Programme mutex.c
     - Programme ParleurCC.c (avec condition de concurrence)
     - Programme ParleurSem.c (sans condition de concurrence)
- TD3 :
   - Énoncé du TD3.
- CM4 : 
   - Mécanismes d'exclusion mutuelle (deuxième partie)
     - Sémaphore POSIX nommés.
     - Programme createur.c
     - Programme gestionnaire.c
     - Programme parleur.c
     - Programme destructeur.c
   - Mémoire partagée
     - Principes de base : shm_open, ftrunctate, mmap.
     - Fichier entête mp_maStruct.h
     - Programme mp_lecture.c
     - Programme mp_affichage.c
- TD4 :
   - Énoncé du TD4.
      - Solution de l'exo 3.
- CM5 : 
   - Barrières de synchronisation
     - Programme barriere.c
   - Communication inter-processus
     - Retour sur le problème ``producteur/consommateur`` : prodCons_naif.c    prodCons_sem.c  
   - Communication inter-processus
     - Schémas de base
     - Descripteurs de fichier
     - Appels systèmes : read et write
     - Tubes UNIX (première partie)
       - Principes de bases
- TD5 : 
   - Énoncé du TD5.
- CM6 : 
   - Tubes UNIX (suite et fin)
      - Tubes nommés et non-nommés
        - Programme tubeFork.c
        - Programme fifoLecture.c
        - Programme fifoEcriture.c
   - Fonction select
        - Programme fifoLectureMultiple.c
- TD6 : 
   - Énoncé du TD6.
     - Solution de la question 1 (compiler avec option -lpthread)
     - Solution alternative de la question 1 (compiler avec option -lrt)
     - Solution de la question 2
- CM7
   - Interblocages
     - banqueVirtuelle2.c
   - Trace 2D
- TD7
  - Énoncé du TD7.

Archives

Déroulement (2015-2016)

- CM1 : 
   - Introduction à la multiprogrammation
   - Condition de concurrence
   - Section critique.
   - Banque virtuelle : exemple de condition de concurrence 
     - programme ``banqueVirtuelle.c``.
  
- TD1 : 
   - Énoncé du TD1 (en salle machine).
      - Solution question 1a)
      - Solution question 2a)
      - Solution question 2c)
      - Solution question 2e)
      - Solution question 3a)
      - Solution question 3d)
      - Solution question 3e)


- CM2 : 
   - Threads et processus. 
   - Ressources physiques et espace d'adressage. 
   - Commandes fork, wait, pthread_create, pthread_join.
     - programme ``zombies.c``. 
   - Mécanismes d'exclusion mutuelle (première partie).
- TD2 : 
   - Énoncé du TD2.
- CM3 : 
   - Mécanismes d'exclusion mutuelle (deuxième partie)
     - Mutex et sémaphores
     - Programme verrou.c
     - Programme mutex.c
     - Programme ParleurCC.c (avec condition de concurrence)
     - Programme ParleurSem.c (sans condition de concurrence)
   - Communication interprocessus
     - Problème "producteurs/consommateurs"
- TD3 :
   - Énoncé du TD3.
- CM4 :
   - Sémaphores nommés vs non-nommés
     - Implémentation du duo "Parleur/gestionnaire" avec un sémaphore non-nommé.
       - Parleur/gestionnaire avec threads et sémaphore non-nommé.
       - Parleur/gestionnaire avec fork et sémpaphore non-nommé (non-fonctionnel).
     - Implémentation du duo "Parleur/gestionnaire" avec un sémphore nommé.
       - createur.c (crée un sémaphore nommé).
       - gestionnaire.c (fait des POST sur un sémaphore nommé).
       - parleur.c (fait des WAIT sur un sémaphore nommé).
       - destructeur.c (détruit un sémaphore nommé).
   - Mémoire partagée
     - Exemple simplissime d'utilisation de mémoire partagée.
       - mp_1.c (à compiler avec l'option -lrt).
       - mp_2.c (à compiler avec l'option -lrt).
- TD4 :
   - Énoncé du TD4.
- CM5
   - Mémoire partagée (suite et fin)
     - Solution du devoir sur le comportement par défaut de la mémoire partagée lors d'un fork.
       - sol_devoir.c
     - Exemple un peu plus évolué d'utilisation de mémoire partagée.
       - mp_maStruct.h.
       - mp_affichage.c (à compiler avec l'option -lrt).
       - mp_lecture.c (à compiler avec l'option -lrt).
   - Variable de condition
     - Programme ``decrémenteur`` avec une variable de condition.
     - Implémentation de ``Producteur/consommateur`` avec des variables de condition.
   - Barrière de synchronisation
     - Exemple simplissime d'utilisation d'une barrière de synchronisation.
- TD5
   - Énoncé du TD5.
   
- CM6
   - Tubes Unix
     - tubeFork.c
     - fifoEcriture.c
     - fifoLecture.c
     - ficoLectureMultiple.c (utilisation de la fonction select)


- TD6
  - Énoncé du TD5.


- CM7
   - Tubes Unix (suite et fin)
   - Interblocages
     - banqueVirtuelle2.c