![]() |
Unix : Programmation
Système
|
C.
Drocourt I.U.T. Amiens drocourt@iut-amiens.fr |
| Le but du TD Implanter le graphe de
précédence ci-contre avec deux sémaphores et cinq
processus s’exécutant en parallèle ; un processus (le
père) est chargé de les lancer (grâce à
fork) après avoir créé et initialisé
l’ensemble de sémaphores.
Ce graphe veut dire : – T2, T3 et T4 ne s'exécuteront que lorsque T1 sera terminée. – T5 ne s'exécutera que lorsque T2, T3 et T4 seront terminées. Les actions que doivent réaliser les processus sont : – T1 : dormir 3 secondes – T2 : dormir 20 secondes – T3 : dormir 1 seconde – T4 : dormir 4 secondes – T5 : dormir 2 secondes |
![]() |
créer et initialiser le sémaphore S à 0.
créer et initialiser le sémaphore U à 0.
Lancer simultanément T1 jusque T5 avec :
T1 : sleep(3); V(S); V(S); V(S);
T2 : P(S); sleep(20); V(U);
T3 : P(S); sleep(1) ; V(U);
T4 : P(S); sleep(4) ; V(U);
T5 : P(U); P(U); P(U); sleep(2);
#include <stdio.h> |
semid=semget(IPC_PRIVATE,2,IPC_CREAT|IPC_EXCL|0600); |
1 |
|
2 |
for(i=0;i<5;i++)
|
case … |
4 |
|
5 |
|
6 |
exit(0); |
int P(int semid, int NS);
Cette fonction décrémente de un le
sémaphore numéro NS de l'ensemble de sémaphore
semid.int V(int semid, int NS);
Cette fonction incrémente de un le sémaphore
numéro NS de l'ensemble de sémaphore semid.