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 fichierEcrire 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 pipeEcrire 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.
Fig. 1 – A et B communiquent par un pipe |
Consulter les aides suivantes si necessaire :
|
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
Fig. 2 – Graphe de tâches |
Créer un programme qui effectue les opérations suivantes :
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