Université P.M. Curie

Polytech UPMC

Section ELI 4

TP Systèmes d’exploitation
Synchronisation de processus

 

1 Exercice 1 : Problème de synchronisation

Ecrire un programme qui affiche à l’ecran et dans un fichier, caractère par caractère, la chaîne de caractères passée en 1er argument de la ligne de commande. Insérer l’appel de la fonction usleep entre chaque écriture.

Utiliser :

Pour obtenir l’aide a propos de cette fonction, taper man nom_fonction.

Observer les résultats. Exécuter de nouveau puis observer.

2 Exercice 2 : Verrou simple par fichier

Ecrire un programme qui crée un fichier verrou, attend 5 secondes, affiche un message, ferme et supprime le fichier verrou. Si le verrou est déjà pris, afficher simplement un message d’erreur.

Visualiser l’aide à propos des fonctions open, unlink :

Exécuter plusieurs instances de ce programme en parallèle pour vérifier son fonctionnement.

3 Exercice 3 : Synchronisation simple par pipe

Ecrire un programme qui lance l’exécution de deux processus communiquant par un pipe : le processus A écrit périodiquement un octet quelconque dans le pipe ; le processus B affiche à l'ecran un nombre au hasard a chaque fois qu’un octet est lu depuis le pipe. Les deux processus sont ainsi synchronisés via le pipe.

pipe

Fig. 1 – A et B communiquent par un pipe

Consulter les aides suivantes si necessaire :

  • man pipe
  • man fork
  • man perror

 

4 Exercice 4 : Résolution du dysfonctionnement

Résoudre le dysfonctionnement de la synchronisation de l’exercice 1. Utiliser la technique de fichier verrou. Pourquoi la solution de synchronisation par pipe est-elle difficilement envisageable ?

5 Exercice 5 : Synchronisation de threads

interblocage

Fig. 2 – Graphe de tâches

Créer un programme qui effectue les opérations suivantes :

  • Créer 3 pipes p1, p2, p3
  • Créer 3 processus thread1, thread2, thread3 respectant le graphe 2

Implémenter un système de synchronisation par messages afin d’exécuter les tâches dans l’ordre suivant : thread1, thread2, thread3, thread1.


Richard Buchmann & Emmanuel Viaud, université P.M. Curie, févri12 mars, 2007