Telechargé par Karim Ouramdane

Systèmes d Exploitation Chapitre 6 Sémaphores

publicité
Systèmes d’Exploitation
Chapitre 6
Sémaphores
F. Moal
2012/2013
Sémaphores
Par DIJKSTRA – 1971
Idée : encapsuler les solutions diverses au
pb de la section critique pour fournir une
interface unique et assurer la portabilité.
2
Sémaphores
Définition : un sémaphore est une variable S
de type entier à laquelle on ne peut
accéder que par 2 opérations :
P [puis-je ?]
V [vas-y]
3
Sémaphores
P : je m’approprie le jeton si je peux
 Entrée en section critique
V : je restitue le jeton
 Sortie de la section critique
S : nombre de jetons dans la boite
4
Sémaphores
Solution :
Procédure P(S)
tant que S ≤ 0 faire rien ftq
S = S-1
Procédure V(S)
S = S+1
P et V : opérations rendues atomiques par l’OS
5
Sémaphores
Eviter l’attente active :
Introduction d’un nouvel état [attente] pour
les processus
réveil
Attente
Actif
mise en attente
6
Sémaphores
Gestion de l’état d’attente :
Scheduling = gestion par l’OS de l’accès au
processeur par les processus
Scheduler = procédure de l’OS qui effectue le
scheduling
Gestion de 2 listes :
process actifs,
process en attente.
7
Sémaphores
Les algorithmes réalisant une exclusion mutuelle sont
difficiles à généraliser
sémaphore = type de données abstrait composée
 d'un compteur entier [initialisé à une valeur constante]
 opération P
 opération V
Procédure P(sema : sémaphore);
{Puis-je continuer?}
tantque sema.compteur = 0 faire
suspendre(sema);
ftq
sema.compteur := sema.compteur – 1;
Procédure V(sema : sémaphore);
{Vas-y}
sema.compteur := sema.compteur + 1;
Réveiller(sema);
8
Sémaphores
Réalisation des Sémaphores
Sémaphore =
structure
compteur : entier;
file : liste [d'identificateurs] de processus
fin de structure;
L'identificateur de processus permet de trouver le descriptif
de ce processus qui contient ses caractéristiques
principales :





.
état
nom
ressources détenues
localisation dans la mémoire
contenu des registres lors de la suspension (s'il n'est pas actif)
9
Sémaphores
Réalisation Logicielle
[traduction directe de la spécification fonctionnelle]
procédure P(sema : sémaphore);
si << sema.compteur > 0 alors
sema.compteur := sema.compteur - 1;
sinon
suspendre le processus demandeur;
mettre son identificateur dans sema.file;
(re)lancer un processus prêt;
fsi >>
procédure V(sema : sémaphore);
si << vide(sema.file) alors
sema.compteur := sema.compteur + 1;
sinon
enlever un identificateur de la file;
réveiller le processus correspondant;
fsi >>
10
Sémaphores
Remarques :




On suppose que suspendre et réveiller n'ont pas
d'identificateur d'attente.
Par rapport à la spécification fonctionnelle, c'est le
processus exécutant un V qui réévalue la condition
permettant de réveiller un processus suspendu. Celui-ci
pourra ensuite continuer son exécution, dès qu'il aura
reçu un processeur, comme s'il n'avait pas été
suspendu.
La politique de gestion de la file peut être quelconque
(priorité, LIFO, FIFO, ...). Si elle n'est pas FIFO, il y a
risque de famine.
Si un V débloque un processus, ou bien le processeur
est alloué au processus débloqué, ou bien il est laissé
au processus qui a fait le V (cas le plus fréquent).
11
Sémaphores
Réalisation Matérielle
De nombreuses machines proposent maintenant des
opérations P et V microprogrammées ou câblées, ce qui
règle aussi le problème de l'exclusion mutuelle pour
l'accès au compteur et à la file.
Réalisation dans un système réparti sans mémoire
commune : la gestion des sémaphores est généralement
confiée à un processeur spécifique.
12
Sémaphores
Réalisation d'exclusion mutuelle au moyen de
sémaphores
variable commune mutex : sémaphore initialisé à 1;
Processus P1
P(mutex);
section critique;
V(mutex);


Processus P2
P(mutex);
section critique;
V(mutex);
pas deux processus en section critique à la fois
[ le premier processus qui entre en exclusion mutuelle fait passer le
compteur du sémaphore mutex à 0 ce qui bloque toute entrée d'un
autre processus ]
Lorsque le premier sort de l'exclusion mutuelle il rétablit le compteur
à 1 ce qui permet à un éventuel processus bloqué de continuer.
13
Sémaphores
Graphes de précédence
Comment mettre en œuvre
les contraintes de précédence
en utilisant les sémaphores ?
P1
P2
T1
T’1
Exemple :
T’2
T2
T’3
14
Sémaphores
Graphes de précédence
P1 et P2 :
programmes séquentiels
 Pas besoin d’implanter
les contraintes de séquences !
P1
P2
T1
T’1
T’2
P1 : T1 ; T2
P2 : T1 ; T2 ; T3
T2
Reste : T1
T’3
T’2
15
Sémaphores
Graphes de précédence
Méthode systématique ???
T1
T2
T3
T4
16
Sémaphores
Réalisation d’un Producteur/consommateur
avec tampon infini
Un sémaphore NPLEIN permet de contrôler l'accès du
consommateur au tampon.
La valeur de son compteur représente le nombre de
cases pleines dans le tampon.
17
Sémaphores
Producteur/consommateur
déclarations communes :
type messages : suite de caractères;
variables communes :
tampon : tableau [1 .. °] de messages;
NPLEIN : sémaphore initialisé à 0;
Processus Producteur
Processus Consommateur
variables privées :
mess1 : messages;
tête : entier initialisé à 1;
répéter
produire (mess1);
tampon[tête]:= mess1;
tête := tête + 1;
V(NPLEIN);
jusqu'à faux;
variables privées :
mess2 : messages;
queue : entier initialisé à 1;
répéter
P(NPLEIN);
mess2 := tampon[queue]
queue := queue + 1;
consommer(mess2);
jusqu'à faux;
18
Sémaphores
Producteur/consommateur
déclarations communes :
type messages : suite de caractères;
variables communes :
tampon : taille finie ?
19
Sémaphores
Rendez-vous ?
20
Sémaphores
Les philosophes mangeurs de spaghettis
21
Sémaphores
Les philosophes mangeurs de spaghettis
Règles de politesse :
 Un philosophe ne partage ses baguettes qu'avec ses
voisins immédiats.
 Un philosophe qui réfléchit n'utilise pas de baguette.
 Un philosophe peut donc manger si ses deux voisins
réfléchissent.
 Un philosophe est susceptible et on ne peut lui enlever
une baguette .
 Un philosophe ne mange que pendant un temps fini.
 Un philosophe ne se permet pas de manger avec les
doigts.
22
Téléchargement