1
Cours 3: Synchronisation entre
processus : suite de l’étude des
outils
2
Batterie d
algorithmes et outils de
synchronisation : 2 catégories
(Masquer les interruptions -> plus de concurrence -> plus de
pbms !)
Attente active : quelque chose qui représente la
condition, plus un algorithme qui met en place le test
et l’attente (semi-)active
(« spinlock », « verrou tournant »)
Des variables partagées (« solution purement logicielle ») pour
exprimer la condition
Solutions impliquant le matériel :
instruction assembleur: Test-and-set
Instruction assembleur: swap
Attente passive (plus haut niveau d’abstraction) :
Sémaphore (IPC Unix semop, Java 1.5+ )
Moniteur avec variable(s) conditionnelle(s) (Concurrent
Pascal, Java)
Verrou conditionnel cad mutex+var. condition (POSIX pthread,
Java 1.5+ )
2
3
Outil
de
synchronisation
S
é
maphore
(Dyjsktra 1965)
Structure de données et des méthodes
Entier
File d’attente de processus/threads
Opérations pour
Initialiser l’entier : nombre de jetons
Prendre un “jeton”, ou s’endormir si pas de disponible : P(sem)
Réveiller un processus qui attend le jeton, en le lui passant,
sinon, le deposer : V(sem)
Outil général, comme moniteur, pour
le problème de l’exclusion mutuelle : 1 jeton initial
Exclusion mutuelle sur N exemplaires équivalents d’une même
ressource : N jetons
N’importe quelle forme de synchronisation conditionnelle : en
jouant sur la valeur du jeton et sur les appels P ou V
4
é
tail
des
op
é
rations
sur
s
é
maphore
: une variante possible
structure de données :
Val : entier
File : file de (contexte de)
processus ou threads
Op
Opé
ération V(
ration V(s:semaphore
s:semaphore)
)
Si (
Si (s.File non vide)
s.File non vide)
Alors
Alors <retirer de s.File le contexte d
<retirer de s.File le contexte d
un processus>
un processus>
<mettre ce processus dans l
<mettre ce processus dans l’é
’état prêt>
tat prêt>
Sinon
Sinon s.Val := s.Val + 1;
s.Val := s.Val + 1;
FinSi
FinSi
Op
Opé
ération P(
ration P(s:semaphore
s:semaphore)
)
Si (
Si (s.Val <=0)
s.Val <=0)
Alors
Alors <ranger le contexte du processus dans s.File>
<ranger le contexte du processus dans s.File>
<mettre le processus dans l
<mettre le processus dans l’é
’état bloqu
tat bloqué
é>
>
Sinon
Sinon s.Val := s.Val
s.Val := s.Val
1;
1;
FinSi
FinSi
Op
Opé
ération
ration Init
Init(
(s:semaphore
s:semaphore,
, int
int init
init)
)
s.Val
s.Val = init ;
= init ;
creer
creer s.File
s.File, vide
, vide
3
5
Exclusion mutuelle avec sémaphore
Simple !
Semaphore
Semaphore sem_mutex
sem_mutex commun
commun à
àtous
tous
Init(sem_mutex
Init(sem_mutex,
, 1
1)
)
P(
P(sem_mutex
sem_mutex);
);
<section critique>
<section critique>
V(
V(sem_mutex
sem_mutex);
);
P1
P1 P2
P2
P(
P(sem_mutex
sem_mutex);
);
<section critique>
<section critique>
V(
V(sem_mutex
sem_mutex);
);
6
Partage d
un pool de N exemplaires
équivalents d’une même ressource
Ex: un exemplaire = une case d’un tampon
N exemplaires = le tampon dispose de N cases
Semaphore
Semaphore sem_exemplaires
sem_exemplaires commun
commun à
àtous
tous
Init(sem_exemplaires
Init(sem_exemplaires,
, N
N)
)
P(
P(sem_exemplaires
sem_exemplaires);
);
<section critique
<section critique
utilisant un des N
utilisant un des N
exemplaires
exemplaires
disponible>
disponible>
V(
V(sem_exemplaires
sem_exemplaires);
);
P1
P1 P2
P2
P(
P(sem_exemplaires
sem_exemplaires);
);
<section critique
<section critique
utilisant un des N
utilisant un des N
exemplaires
exemplaires
disponible>
disponible>
V(
V(sem_exemplaires
sem_exemplaires);
);
4
7
Exemple
de
synchronisation
conditionnelle avec sémaphore
/*
/* Jusque l
Jusque là
à, peu importe la valeur
, peu importe la valeur
de A */
de A */
Ecrire(A,
Ecrire(A,
valeur
valeur
)
)
/*
/* Maintenant, la valeur de A est
Maintenant, la valeur de A est
significative */
significative */
V(
V(A_est_remplie
A_est_remplie)
)
var. commune :
var. commune :
A
A
(fichier, variable,
(fichier, variable,
qui doit exister et contenir des
qui doit exister et contenir des donnees
donnees, ou avoir une valeur)
, ou avoir une valeur)
A_est_remplie
A_est_remplie : s
: sé
émaphore INIT
maphore INIT 0
0
/* Avant d
/* Avant d
utiliser A, il faut
utiliser A, il faut
qu
qu
elle ait une valeur
elle ait une valeur
significative */
significative */
P(
P(A_est_remplie
A_est_remplie)
)
Lire(A)
Lire(A)
P
P Q
Q
8
Implanter
l
outil
s
é
maphore
avec
l’outil moniteur (Java)
Bon exercice pour bien saisir les différences et les
subtilités d’implémentation
class Semap {
int Val;
public synchronized void Init(int v) {
Val=v;
}
public synchronized void P() {
if ou while 1
11
1
1
11
1(Val = 0) {
wait();
}
2
22
2
2
22
2Val = Val – 1;
}
public synchronized void V() {
Val = Val + 1;
notify(); // ou notifyAll();
}
}
Entrelacer des P ?
Test et modif. de Val:
dans une SC ? OUI
1
11
1
1
11
1et si test False,
et si test False, 2
22
2
2
22
2
Entrelacer des P et V ?
Test de val et
manipulation de la
file: dans une SC ? OUI
1
11
1
1
11
1
5
9
Bilan
des
mises
en oeuvre
d
outils
de synchronisation
Pour implanter les outils de synchronisation avec
attente (forcément!), on a besoin d’autres outils pour
gérer de l’exclusion mutuelle
atomicité d’une séquence d’instructions, aussi (de)bloquer un
processus
en pratique, ce sont des solutions de plus bas niveau
d’abstraction. Exemples :
Masquer les interruptions durant l’exécution de P
ou utiliser l’algo avec TAS, basé sur attente active pour
implanter la primitive P
Bloquer un processus, ranger son contexte, le rendre éligible à
partir de son contexte, dans l’implantation d’un P ou V
Ou utiliser des sémaphores ou des verrous (sémaphore ultra
simplifié) pour implanter un moniteur
10
Principe
mise
en oeuvre
moniteur
en
Java
Tout objet et toute classe possèdent un verrou
transparent pour le programmeur (intrinsic lock)
Gestion FIFO / non FIFO dépend du JDK
C’est quoi un verrou ?
simplement un outil de synchro bloquant sur une condition
“libre” ou “occupé”
Qui peut s’implanter avec attente active ou passive
Méthodes synchronisées :
Méthode d’instance :
currentObject.lock()
<méthode>
currentObject.unlock()
Méthode de classe (static):
currentClass.lock()
<méthode>
currentClass.unlock()
1 / 8 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !