Université Pierre et Marie Curie Master 2016 2017
PR : Travaux Dirigés 7. Introduction aux sémaphores
Cette séance est consacrée aux sémaphores. Selon les plates-formes, vous aurez peut-être besoin d’ajouter dans le Makefile les options -lrt et -lpthread pour l’édition de liens.
1 Barrière par sémaphores
Une barrière est un mécanisme de synchronisation. Elle permet à N processus de prendre rendez-vous en un point donné de leur exécution. Quand un des processus atteint la barrière, il reste bloqué jusqu’à ce que tous les autres arrivent à la barrière. Lorsque les N processus sont arrivés à la barrière, chacun peut alors reprendre son exécution.
Sans utiliser de compteur partagé, programmez la fonction wait_barrier prenant en argument un entier N et qui permet à N processus de se synchroniser sur une barrière. Ecrire ensuite un programme main créant par fork autant de processus que demandé sur la ligne de commande, chacun exécutant le code suivant :
void process (int NB_PCS) {
printf ("avant barrière);
wait_barrier (NB_PCS);
printf ("après barrière);
exit (0);
}
L’affichage devra être le suivant :
avant barrière avant barrière après barrière après barrièreEn d’autres termes, on veut que tous les messages « avant barrière » soient affichés avant les messages « après barrière ». On utilisera les fonctions POSIX sem_wait et sem_post, ainsi que sem_close et sem_unlink pour finir.
bin/posix_barrier 4
2 Barrière par sémaphores Sytem V (facultatif)
Si vous connaissez les sémaphores en System V (semop, semctl, semget), donner la version System V de l’exercice précédent.
bin/wait_barrier 4
3 Encore des producteurs et des consommateurs
Reprenez l’exercice Processus légers et fichiers en remplaçant les Threads par des processus, et en construisant la pile dans un segment de mémoire partagée.
echo "123456789" | bin/prod_conso_partagees 5 3
4 Synchronisation d’affichage entre processus en utilisant des sémaphores
Nous considérons qu’un processus crée N processus fils. Chaque processus fils possède un identifiant unique (1, …, N). Chacun commence par s’endormir pendant (N % identifiant) secondes. A son réveil il affiche son identifiant et son Pid, cependant ces affichages doivent être faits par ordre croissant d’identifiant. Pour assurer une telle synchronisation, vous devrez utiliser des sémaphores anonymes.
Le processus père doit attendre la terminaison de tous ses fils avant de se terminer lui aussi.
$PWD/bin/sem_affiche 7
5 Annexes
- Valid CSS 2.1
- Valid XHTML Basic 1.1
- Triple-A conformance Web Content Accessibility Guidelines 2.0
- Valid RSS Atom
-
Calculé le 22 janvier 2021 à 14h30minpar DidacSPIPUniversité Pierre et Marie Curie
- Mobile OK
- SPIP