Académique Documents
Professionnel Documents
Culture Documents
SYSTEMES D’EXPLOITATION
TD2
Exclusion mutuelle / Sémaphores
TD2
Exclusion mutuelle / Sémaphores - 0.1 -
S O M M A I R E
1.1. Présentation
Un sémaphore est un mécanisme empêchant deux processus ou plus d’accéder simultanément à une
ressource partagée. Sur les voies ferrées, un sémaphore empêche deux trains d’entrer en collision sur
un tronçon de voie commun.
Sur les voies ferrées comme dans les ordinateurs, les sémaphores ne sont qu’indicatifs :
– Si un machiniste ne voit pas le signal ou ne s’y conforme pas, le sémaphore ne pourra éviter la
collision.
– De même si un processus ne teste pas un sémaphore avant d’accéder à une ressource
partagée, le chaos peut en résulter.
Un sémaphore général peut avoir un très grand nombre d’états car il s’agit d’un compteur dont la valeur
initiale peut être assimilée au nombre de ressources disponibles.
Par exemple, si le sémaphore compte le nombre d’emplacements libres dans un tampon et qu’il y en ait
initialement 5 on doit créer un sémaphore général dont la valeur initiale sera 5. Ce compteur :
– Décroît d’une unité quand il est acquis (” verrouillé ”).
– Croît d’une unité quand il est libéré (” déverrouillé ”).
Quand il vaut zéro, un processus tentant de l’acquérir doit attendre qu’un autre processus ait augmenté
sa valeur car il ne peut jamais devenir négatif.
L’accès à un sémaphore se fait généralement par deux opérations :
P : pour l’acquisition
V : pour la libération
P V
void P(int* sem) void V(int *sem)
{ {
while (*sem <=0); (*sem)++
(*sem)--; }
}
Les sémaphores doivent être fournis par le noyau qui, lui, peut :
– Partager des données entre les processus.
– Exécuter des opérations indivisibles (ou atomiques).
– Allouer l’unité centrale à un processus prêt quand un autre processus se bloque.
Expliquer les principes de fonctionnement de l’algorithme proposé. La solution proposée est-elle correcte
? Sinon corrigez.
3. Lecteur/Rédacteur
3.1. Présentation
– Soit la variable tour, qui a initialement la valeur 1 et dont le contenu permettra de savoir qui peut
rentrer en section critique
o 1 : le processus 1 peut rentrer en section critique
– Soit une donnée partageable par plusieurs processus :
o Un rédacteur qui met à jour la donnée et qui y accède en lecture/écriture.
o Plusieurs lecteurs qui consultent la donnée en lecture uniquement.
Processus REDACTEUR
Processus LECTEUR
Redacteur () {
P(donnee) ;
ecrire (donnee) ;
V(donnee) ;
}
Lecteur () {
if pas-de-lecteur-en-cours {
P(donnee) ;
}
lire (donnee);
if dernier-lecteur {
V(donnee) ;
}
}
3.2. Exercice
A l’aide d’une variable nbLecteur stockée dans un segment de mémoire partagée, et d’un sémaphore
mutex_ l de protection associé à cette variable, écrire le code du processus LECTEUR.
TD2
Exclusion mutuelle / Sémaphores - 4 -
4.1. Présentation
Dans l’exercice proposé, il n’existe pas de priorité entre les différents processus. On souhaite à présent
changer cela.
4.2. Exercices
Répondez aux questions suivantes :
1. Quel est le risque pour les rédacteurs dans la situation actuelle ?
2. Comment garantir que si un rédacteur et un premier lecteur sont simultanément candidats, le
rédacteur sera prioritaire ?
3. Comment garantir qu’un rédacteur est prioritaire sur les lecteurs (c’est-à-dire que si un
rédacteur est bloqué, plus aucun lecteur ne peut accéder à la ressource) ?