SlideShare une entreprise Scribd logo
Systèmes
d'exploitation
Synchronisation de
exécution
Lesslie Lamport
• Américain
• MIT
• LaTeX
• L’algorithme Lamport
bakery
• Tolérance aux fautes
Byzantines
– Utilise sur blockchain
• L’algorithme Paxos
• Signature de Lamport
2
Contenu
• course
• espace critique
• opérations atomique
• busy waiting
• semaphore
• mutex
3
Bibliographie pour aujourd'hui
• Modern Operating Systems
– Chapitre 4
• 4.4
• 4.5
• 4.6
• Operating Systems Concepts
– Chapitre 9
• 9.1 – 9.4
• 9.6
• 9.7
4
COURSE
5
Course
Processus 1
// shared variable a
int a = 0;
if (a == 0)
{
a++;
}
printf ("%dn", a);
// shared variable a
int a = 0;
if (a == 0)
{
a++;
}
printf ("%dn", a);
6
Processus 2
Course – variante séquentiel
Processus 1
// shared variable a
int a = 0;
if (a == 0) {
a++;
}
printf ("%dn", a);
// shared variable a
int a = 0;
if (a == 0) {
a++;
}
printf ("%dn", a);
7
Processus 2
1 1
Course – variante intercalé
Processus 1
// shared variable a
int a = 0;
if (a == 0) {
a++;
}
printf ("%dn", a);
// shared variable a
int a = 0;
if (a == 0) {
a++;
}
printf ("%dn", a);
8
Processus 2
2 2
Course – désiré
Processus 1
// shared variable a
int a = 0;
if (a == 0) {
a++;
}
printf ("%dn", a);
// shared variable a
int a = 0;
if (a == 0) {
a++;
}
printf ("%dn", a);
9
Processus 2
espace critique
1 1
Espace critique
• une partie du code qui doit être exécuté seul
– l'accès aux variables (ressources) qui doit être
exécuté seul
10
if (a == 0) {
a++;
}
if (a == 1) {
a--;
}
Le raison est l’accès de variable a
Operation atomique
• Un opération qui est exécute sans interruption
• Interruptions possible
– interruption matériel
– signaux
– changement de contexte
• Les instructions de CPU sont atomique
11
Exemple
int main ()
{
int a = 0;
a++;
}
12
Plus des exemples sur https://godbolt.org/
Exemple – x86-64
int main ()
{
int a = 0;
a++;
}
; rbp-4 address of
variable a
mov DWORD PTR [rbp-4], 0
add DWORD PTR [rbp-4], 1
13
a++ est atomique
Exemple – ARM
int main ()
{
int a = 0;
a++;
}
; fp-8 address of
variable a
mov r3, #0
str r3, [fp, #-8]
ldr r3, [fp, #-8]
add r3, r3, #1
str r3, [fp, #-8]
14
a++ n’est pas atomique
Instruction pour synchronisation
if (test == 0)
{
test = 1;
// do some work
test = 0;
}
cmp DWORD PTR [rbp-4], 0
jne .L2
mov DWORD PTR [rbp-4], 1
; do some work
mov DWORD PTR [rbp-4], 0
.L2:
15
; rbp-4 address of variable test
N’est pas atomique
Test and set
• Une instruction qui
– Fait un comparaison
– Fait un attribution en dépendent de la
comparaison
• TSL
16
tsl r, value
tsl (r, value)
if (r == 0)
r = value;
Instruction pour synchronisation
if (tsl(test, 1))
{
// do some work
test = 0;
}
mov eax, 0
lock cmpxchg DWORD PTR
[rbp-4], 1
jne .L2
; do some work
mov DWORD PTR [rbp-4], 0
.L2:
17
; rbp-4 address of variable test
est atomique
Fair le code executer atomique
• Spinlock
• Semaphore
• Mutex
18
SPINLOCK
19
Spinlock
while (test != 0)
continue;
test = 1;
// do some work with
test = 0;
20
Spinlock
Atomique?
Spinlock x86
while (test != 0)
continue;
test = 1;
// do some work with
test = 0;
.L2:
cmp DWORD PTR [rbp-4], 0
jne .L2
mov DWORD PTR [rbp-4], 1
; do some work
mov DWORD PTR [rbp-4], 0
21
N’est pas atomique
; rbp-4 address of variable test
Spinlock
while (tsl(test, 1))
continue;
// do some work with
test = 0;
22
Spinlock
Spinlock x86
while (tsl(test, 1))
continue;
// do some work with
test = 0;
mov eax, 0
.L2:
lock cmpxchg DWORD PTR
[rbp-4], 1
jne .L2
; do some work
mov DWORD PTR [rbp-4], 0
23
Est atomique
; rbp-4 address of variable test
lock et unlock
• lock
– prend le spinlock
• unlock
– libère le spinlock
24
lock et unlock
void lock (s)
{
while (tsl(s, 1));
}
void unlock (s)
{
s = 0;
}
25
// s - spinlock
Exemple
Processus 1
// shared variables a and s
int a = 0;
int s;
lock (s);
if (a == 0)
{
a++;
}
unlock (s);
printf ("%dn", a);
// shared variables a and s
int a = 0;
int s;
lock (s);
if (a == 0)
{
a++;
}
unlock (s);
printf ("%dn", a);
26
Processus 2
1 1
Exemple
Processus 1
// shared variables a and s
int a = 0;
int s;
lock (s);
if (a == 0)
{
a++;
}
unlock (s);
printf ("%dn", a);
// shared variables a and s
int a = 0;
int s;
lock (s);
if (a == 0)
{
a++;
}
unlock (s);
printf ("%dn", a);
27
Processus 2
1 1
Deadlock
Que se passe-t-il si nous oublions d'utiliser le
unlock?
Que se passe-t-il si nous utilisons plusieurs de fois
lock sans unlock?
Que se passe-t-il si le program s’arrêt avant unlock?
28
Oublier unlock
Processus 1
// shared variables a and s
int a = 0;
int s;
lock (s);
... waits a lot
// shared variables a and s
int a = 0;
int s;
lock (s);
if (a == 0)
{
a++;
}
printf ("%dn", a);
29
Processus 2
... 1
Plusieurs de lock
Processus 1
// shared variables a and s
int a = 0;
int s;
lock (s);
... waits a lot
// shared variables a and s
int a = 0;
int s;
lock (s);
lock (s);
...waits a lot
30
Processus 2
... ...
Arrête avent unlock
Processus 1
// shared variables a and s
int a = 0;
int s;
lock (s);
... waits a lot
// shared variables a and s
int a = 0;
int s;
lock (s);
if (a == 0)
{
a++;
}
31
Processus 2
... erreur
SÉMAPHORE
32
Spinlock
while (tsl(test, 1))
continue;
// do some work with
test = 0;
33
Spinlock
Busy Waiting
Busy Waiting
• Essayer en permanence de tester la valeur de
la variable
• Le CPU fait des instructions inutiles
• Le processus va consume toute le quantum de
temps pur tester la valeur
34
Les états de processus
35
Spinlock
Les états de processus
36
Attende la resource
Sémaphore
• Object du Système d’Exploitation
• Partage entre plusieurs processus
• Fonctions exécuté atomique
– P (attendre) / wait / down
– V (signaler) / signal / up
• Value initiale
• Queue de processus qui attende
37
Fonctions de sémaphore
void wait (s)
{
while (s <= 0);
s = s - 1;
}
void signal (s)
{
s = s + 1;
}
38
// s - semaphore
Busy waiting
block et wakeup
• block
– arrête le processus curent
• état WAITING
• wakeup
– démarre touts les processus qui sont bloque sure
le sémaphore
• état READY
39
Les états de processus
40
block
wakeup
Fonction de sémaphore
void wait (s)
{
while (s <= 0)
block (s);
s = s - 1;
}
void signal (s)
{
s = s + 1;
wakeup (s);
}
41
// s - semaphore
Types des sémaphores
• binaire
– la valeur peut être seulement 0 ou 1
• comptage
– La valeur est une valeur entier
42
Sémaphore binaire
void wait (s)
{
while (s == 0)
block (s);
s = 0;
}
void signal (s)
{
s = 1;
wakeup (s);
}
43
// s - semaphore
Exemple
Processus 1
// shared variables a and s
int a = 0;
int s;
wait (s);
if (a == 0)
{
a++;
}
signal (s);
printf ("%dn", a);
// shared variables a and s
int a = 0;
int s;
wait (s);
if (a == 0)
{
a++;
}
signal (s);
printf ("%dn", a);
44
Processus 2
1 1
Exemple
Processus 1
// shared variables a and s
int a = 0;
int s;
wait (s);
if (a == 0)
{
a++;
}
signal (s);
printf ("%dn", a);
// shared variables a and s
int a = 0;
int s;
wait (s);
if (a == 0)
{
a++;
}
signal (s);
printf ("%dn", a);
45
Processus 2
1 1
Deadlock
Que se passe-t-il si nous oublions d'utiliser le
signal?
Que se passe-t-il si nous utilisons plusieurs de fois
wait sans signal?
Que se passe-t-il si le program s’arrêt avant signal?
46
Oublier signal
Processus 1
// shared variables a and s
int a = 0;
int s;
wait (s);
... waits a lot
// shared variables a and s
int a = 0;
int s;
wait (s);
if (a == 0)
{
a++;
}
printf ("%dn", a);
47
Processus 2
... 1
Plusieurs de wait
Processus 1
// shared variables a and s
int a = 0;
int s;
wait (s);
... waits a lot
// shared variables a and s
int a = 0;
int s;
wait (s);
wait (s);
...waits a lot
48
Processus 2
... ...
Arrête avent signal
Processus 1
// shared variables a and s
int a = 0;
int s;
wait (s);
... waits a lot
// shared variables a and s
int a = 0;
int s;
wait (s);
if (a == 0)
{
a++;
}
49
Processus 2
... erreur
MUTEX
50
Mutex
• Mutual Exclusion
• Similaire avec le sémaphore binaire
• Utilisez pour threads (même processus)
51
lock et unlock
• lock
– prend le mutex et mémorise le id de thread qui a
le pris
• la fonction lock est réentrante dans le même thread
• unlock
– libéré le mutex
• au fin du program (thread) le mutex est libéré
52
Deadlock
Que se passe-t-il si nous oublions d'utiliser le
unlock?
Que se passe-t-il si nous utilisons plusieurs de fois
wait sans lock?
Que se passe-t-il si le program s’arrêt avant unlock?
53
Oublier unlock
Processus 1
// shared variables a and s
int a = 0;
mutex s;
lock (s);
if (a == 0)
{
a++;
}
unlock (s);
printf ("%dn", a);
// shared variables a and s
int a = 0;
mutex s;
lock (s);
if (a == 0)
{
a++;
}
printf ("%dn", a);
54
Processus 2
1 1
Plusieurs de lock
Processus 1
// shared variables a and s
int a = 0;
mutex s;
lock (s);
if (a == 0)
{
a++;
}
unlock (s);
printf ("%dn", a);
// shared variables a and s
int a = 0;
mutex s;
lock (s);
lock (s);
if (a == 0)
{
a++;
}
unlock (s);
printf ("%dn", a);
55
Processus 2
1 1
Arrête avent unlock
Processus 1
// shared variables a and s
int a = 0;
mutex s;
lock (s);
if (a == 0)
{
a++;
}
unlock (s);
printf ("%dn", a);
// shared variables a and s
int a = 0;
mutex s;
lock (s);
if (a == 0)
{
a++;
}
56
Processus 2
1 erreur
Synchronization en Java
class Run
{
private Object a;
public synchronized void runAlone ()
{
// run some work
}
public void run ()
{
synchronized (a)
{
// run some work using the variable a
}
}
}
57
Mot clés
• course
• espace critique
• opération atomique
• busy waiting
• spinlock
• lock
• unlock
• sémaphore
• sémaphore binaire
• sémaphore comptage
• deadlock
• wait
• signal
• mutex
58
Questions
59

Contenu connexe

Tendances

BackDay Xebia : Découvrez RxJava, le reactive programming
BackDay Xebia : Découvrez RxJava, le reactive programmingBackDay Xebia : Découvrez RxJava, le reactive programming
BackDay Xebia : Découvrez RxJava, le reactive programming
Publicis Sapient Engineering
 
SdE2 - Planification, IPC
SdE2 - Planification, IPCSdE2 - Planification, IPC
SdE2 - Planification, IPC
Alexandru Radovici
 
C2 - Langage C - ISIMA 1 - Deuxieme partie
C2 - Langage C - ISIMA 1 - Deuxieme partieC2 - Langage C - ISIMA 1 - Deuxieme partie
C2 - Langage C - ISIMA 1 - Deuxieme partie
Loic Yon
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech days
Jean-Pierre Vincent
 
Cours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMACours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMA
Loic Yon
 
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Loic Yon
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
Abdoulaye Dieng
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieurFredy Fadel
 
States machines (1)
States machines (1)States machines (1)
States machines (1)
omar bllaouhamou
 
ALF 2 - Automates Fini (2018)
ALF 2 - Automates Fini (2018)ALF 2 - Automates Fini (2018)
ALF 2 - Automates Fini (2018)
Alexandru Radovici
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
Haytam EL YOUSSFI
 
C3 - Langage C - ISIMA 1 - Troisieme partie
C3 - Langage C - ISIMA 1 - Troisieme partieC3 - Langage C - ISIMA 1 - Troisieme partie
C3 - Langage C - ISIMA 1 - Troisieme partie
Loic Yon
 
ALF 1 - Automates finis
ALF 1 - Automates finis ALF 1 - Automates finis
ALF 1 - Automates finis
Alexandru Radovici
 
Découverte d'UNIX - ISIMA
Découverte d'UNIX - ISIMADécouverte d'UNIX - ISIMA
Découverte d'UNIX - ISIMA
Loic Yon
 
Introduction à l'objet - Deuxième année ISIMA
Introduction à l'objet - Deuxième année ISIMAIntroduction à l'objet - Deuxième année ISIMA
Introduction à l'objet - Deuxième année ISIMA
Loic Yon
 
Les listes en Python
Les listes en PythonLes listes en Python
Les listes en Python
ABDESSELAM ARROU
 
C1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partieC1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partie
Loic Yon
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El Hassani
Shellmates
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6Julien CROUZET
 

Tendances (20)

BackDay Xebia : Découvrez RxJava, le reactive programming
BackDay Xebia : Découvrez RxJava, le reactive programmingBackDay Xebia : Découvrez RxJava, le reactive programming
BackDay Xebia : Découvrez RxJava, le reactive programming
 
SdE2 - Planification, IPC
SdE2 - Planification, IPCSdE2 - Planification, IPC
SdE2 - Planification, IPC
 
C2 - Langage C - ISIMA 1 - Deuxieme partie
C2 - Langage C - ISIMA 1 - Deuxieme partieC2 - Langage C - ISIMA 1 - Deuxieme partie
C2 - Langage C - ISIMA 1 - Deuxieme partie
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech days
 
Cours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMACours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMA
 
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
 
States machines (1)
States machines (1)States machines (1)
States machines (1)
 
ALF 2 - Automates Fini (2018)
ALF 2 - Automates Fini (2018)ALF 2 - Automates Fini (2018)
ALF 2 - Automates Fini (2018)
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 
C3 - Langage C - ISIMA 1 - Troisieme partie
C3 - Langage C - ISIMA 1 - Troisieme partieC3 - Langage C - ISIMA 1 - Troisieme partie
C3 - Langage C - ISIMA 1 - Troisieme partie
 
ALF 1 - Automates finis
ALF 1 - Automates finis ALF 1 - Automates finis
ALF 1 - Automates finis
 
Découverte d'UNIX - ISIMA
Découverte d'UNIX - ISIMADécouverte d'UNIX - ISIMA
Découverte d'UNIX - ISIMA
 
Introduction à l'objet - Deuxième année ISIMA
Introduction à l'objet - Deuxième année ISIMAIntroduction à l'objet - Deuxième année ISIMA
Introduction à l'objet - Deuxième année ISIMA
 
Les listes en Python
Les listes en PythonLes listes en Python
Les listes en Python
 
C1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partieC1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partie
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El Hassani
 
Ch11
Ch11Ch11
Ch11
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6
 

Similaire à SdE 8 - Synchronisation de execution

java_PAR.pdf
java_PAR.pdfjava_PAR.pdf
java_PAR.pdf
Patiento Del Mar
 
cours Plsql _ abdelkhalek benhoumine
cours Plsql _ abdelkhalek benhouminecours Plsql _ abdelkhalek benhoumine
cours Plsql _ abdelkhalek benhoumine
abdelkhalek benhoumine
 
08 visual basic .net - debogage et gestion des exceptions
08 visual basic .net - debogage et gestion des exceptions08 visual basic .net - debogage et gestion des exceptions
08 visual basic .net - debogage et gestion des exceptions
Hamza SAID
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
Abdoulaye Dieng
 
ALT.NET Modéliser Parallèle avec C# 4.0
ALT.NET Modéliser Parallèle avec C# 4.0ALT.NET Modéliser Parallèle avec C# 4.0
ALT.NET Modéliser Parallèle avec C# 4.0
Bruno Boucard
 
Logique floue application
Logique floue application Logique floue application
Logique floue application Arrow Arrow
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
Microsoft
 
Multithreading
MultithreadingMultithreading
Multithreading
Ghazouani Mahdi
 
Python appliqué en apprentissage automatique (Applied Python in Machine Learn...
Python appliqué en apprentissage automatique (Applied Python in Machine Learn...Python appliqué en apprentissage automatique (Applied Python in Machine Learn...
Python appliqué en apprentissage automatique (Applied Python in Machine Learn...
Guillaume Chevalier
 
BBL chez Mappy autour de Tsung
BBL chez Mappy autour de TsungBBL chez Mappy autour de Tsung
BBL chez Mappy autour de Tsung
Rodolphe Quiédeville
 
11-Concurrence-Section critiques.pdf
11-Concurrence-Section critiques.pdf11-Concurrence-Section critiques.pdf
11-Concurrence-Section critiques.pdf
Patiento Del Mar
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)
Dr Samir A. ROUABHI
 
Java1_BasesLangage.pdf
Java1_BasesLangage.pdfJava1_BasesLangage.pdf
Java1_BasesLangage.pdf
LarbaSAWADOGO2
 
Java1_BasesLangage.pdf
Java1_BasesLangage.pdfJava1_BasesLangage.pdf
Java1_BasesLangage.pdf
LarbaSAWADOGO2
 
SdE 5 - Communication entre processus et Planification
SdE 5 - Communication entre processus et PlanificationSdE 5 - Communication entre processus et Planification
SdE 5 - Communication entre processus et Planification
Alexandru Radovici
 
Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...
Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...
Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...CERTyou Formation
 
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronesAsyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
tchappui
 
Cours tp2
Cours tp2Cours tp2
Cours tp2
Mohamed MHAMDI
 
Eric Moreau: AOP in .Net sing PostSharp
Eric Moreau: AOP in .Net sing PostSharpEric Moreau: AOP in .Net sing PostSharp
Eric Moreau: AOP in .Net sing PostSharp
MSDEVMTL
 

Similaire à SdE 8 - Synchronisation de execution (20)

java_PAR.pdf
java_PAR.pdfjava_PAR.pdf
java_PAR.pdf
 
cours Plsql _ abdelkhalek benhoumine
cours Plsql _ abdelkhalek benhouminecours Plsql _ abdelkhalek benhoumine
cours Plsql _ abdelkhalek benhoumine
 
08 visual basic .net - debogage et gestion des exceptions
08 visual basic .net - debogage et gestion des exceptions08 visual basic .net - debogage et gestion des exceptions
08 visual basic .net - debogage et gestion des exceptions
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
ALT.NET Modéliser Parallèle avec C# 4.0
ALT.NET Modéliser Parallèle avec C# 4.0ALT.NET Modéliser Parallèle avec C# 4.0
ALT.NET Modéliser Parallèle avec C# 4.0
 
Logique floue application
Logique floue application Logique floue application
Logique floue application
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Multithreading
MultithreadingMultithreading
Multithreading
 
Python appliqué en apprentissage automatique (Applied Python in Machine Learn...
Python appliqué en apprentissage automatique (Applied Python in Machine Learn...Python appliqué en apprentissage automatique (Applied Python in Machine Learn...
Python appliqué en apprentissage automatique (Applied Python in Machine Learn...
 
BBL chez Mappy autour de Tsung
BBL chez Mappy autour de TsungBBL chez Mappy autour de Tsung
BBL chez Mappy autour de Tsung
 
11-Concurrence-Section critiques.pdf
11-Concurrence-Section critiques.pdf11-Concurrence-Section critiques.pdf
11-Concurrence-Section critiques.pdf
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)
 
Java1_BasesLangage.pdf
Java1_BasesLangage.pdfJava1_BasesLangage.pdf
Java1_BasesLangage.pdf
 
Java1_BasesLangage.pdf
Java1_BasesLangage.pdfJava1_BasesLangage.pdf
Java1_BasesLangage.pdf
 
SdE 5 - Communication entre processus et Planification
SdE 5 - Communication entre processus et PlanificationSdE 5 - Communication entre processus et Planification
SdE 5 - Communication entre processus et Planification
 
Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...
Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...
Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...
 
Ladder
LadderLadder
Ladder
 
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronesAsyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
 
Cours tp2
Cours tp2Cours tp2
Cours tp2
 
Eric Moreau: AOP in .Net sing PostSharp
Eric Moreau: AOP in .Net sing PostSharpEric Moreau: AOP in .Net sing PostSharp
Eric Moreau: AOP in .Net sing PostSharp
 

Plus de Alexandru Radovici

SdE2 - Pilot Tock
SdE2 - Pilot TockSdE2 - Pilot Tock
SdE2 - Pilot Tock
Alexandru Radovici
 
SdE2 - Systèmes embarquées
SdE2 - Systèmes embarquéesSdE2 - Systèmes embarquées
SdE2 - Systèmes embarquées
Alexandru Radovici
 
ALF1 - Introduction
ALF1 - IntroductionALF1 - Introduction
ALF1 - Introduction
Alexandru Radovici
 
SdE2 - Introduction
SdE2 - IntroductionSdE2 - Introduction
SdE2 - Introduction
Alexandru Radovici
 
MDAD 6 - AIDL and Services
MDAD 6 - AIDL and ServicesMDAD 6 - AIDL and Services
MDAD 6 - AIDL and Services
Alexandru Radovici
 
MDAD 5 - Threads
MDAD 5 - ThreadsMDAD 5 - Threads
MDAD 5 - Threads
Alexandru Radovici
 
MDAD 4 - Lists, adapters and recycling
MDAD 4 - Lists, adapters and recyclingMDAD 4 - Lists, adapters and recycling
MDAD 4 - Lists, adapters and recycling
Alexandru Radovici
 
MDAD 3 - Basics of UI Applications
MDAD 3 - Basics of UI ApplicationsMDAD 3 - Basics of UI Applications
MDAD 3 - Basics of UI Applications
Alexandru Radovici
 
MDAD 2 - Introduction to the Android Framework
MDAD 2 - Introduction to the Android FrameworkMDAD 2 - Introduction to the Android Framework
MDAD 2 - Introduction to the Android Framework
Alexandru Radovici
 
MDAD 1 - Hardware
MDAD 1 - HardwareMDAD 1 - Hardware
MDAD 1 - Hardware
Alexandru Radovici
 
MDAD 0 - Introduction
MDAD 0 - IntroductionMDAD 0 - Introduction
MDAD 0 - Introduction
Alexandru Radovici
 
SdE 11 - Reseau
SdE 11 - ReseauSdE 11 - Reseau
SdE 11 - Reseau
Alexandru Radovici
 
SdE 10 - Threads
SdE 10 - ThreadsSdE 10 - Threads
SdE 10 - Threads
Alexandru Radovici
 
SdE 8 - Memoire Virtuelle
SdE 8 - Memoire VirtuelleSdE 8 - Memoire Virtuelle
SdE 8 - Memoire Virtuelle
Alexandru Radovici
 
SdE 7 - Gestion de la Mémoire
SdE 7 - Gestion de la MémoireSdE 7 - Gestion de la Mémoire
SdE 7 - Gestion de la Mémoire
Alexandru Radovici
 
SdE 6 - Planification
SdE 6 - PlanificationSdE 6 - Planification
SdE 6 - Planification
Alexandru Radovici
 
SdE 5 - Planification
SdE 5 - PlanificationSdE 5 - Planification
SdE 5 - Planification
Alexandru Radovici
 
ALF 6 - Parser
ALF 6 - ParserALF 6 - Parser
ALF 6 - Parser
Alexandru Radovici
 
ALF 5 - Parser
ALF 5 - ParserALF 5 - Parser
ALF 5 - Parser
Alexandru Radovici
 
ALF 4 - Grammaires
ALF 4 - GrammairesALF 4 - Grammaires
ALF 4 - Grammaires
Alexandru Radovici
 

Plus de Alexandru Radovici (20)

SdE2 - Pilot Tock
SdE2 - Pilot TockSdE2 - Pilot Tock
SdE2 - Pilot Tock
 
SdE2 - Systèmes embarquées
SdE2 - Systèmes embarquéesSdE2 - Systèmes embarquées
SdE2 - Systèmes embarquées
 
ALF1 - Introduction
ALF1 - IntroductionALF1 - Introduction
ALF1 - Introduction
 
SdE2 - Introduction
SdE2 - IntroductionSdE2 - Introduction
SdE2 - Introduction
 
MDAD 6 - AIDL and Services
MDAD 6 - AIDL and ServicesMDAD 6 - AIDL and Services
MDAD 6 - AIDL and Services
 
MDAD 5 - Threads
MDAD 5 - ThreadsMDAD 5 - Threads
MDAD 5 - Threads
 
MDAD 4 - Lists, adapters and recycling
MDAD 4 - Lists, adapters and recyclingMDAD 4 - Lists, adapters and recycling
MDAD 4 - Lists, adapters and recycling
 
MDAD 3 - Basics of UI Applications
MDAD 3 - Basics of UI ApplicationsMDAD 3 - Basics of UI Applications
MDAD 3 - Basics of UI Applications
 
MDAD 2 - Introduction to the Android Framework
MDAD 2 - Introduction to the Android FrameworkMDAD 2 - Introduction to the Android Framework
MDAD 2 - Introduction to the Android Framework
 
MDAD 1 - Hardware
MDAD 1 - HardwareMDAD 1 - Hardware
MDAD 1 - Hardware
 
MDAD 0 - Introduction
MDAD 0 - IntroductionMDAD 0 - Introduction
MDAD 0 - Introduction
 
SdE 11 - Reseau
SdE 11 - ReseauSdE 11 - Reseau
SdE 11 - Reseau
 
SdE 10 - Threads
SdE 10 - ThreadsSdE 10 - Threads
SdE 10 - Threads
 
SdE 8 - Memoire Virtuelle
SdE 8 - Memoire VirtuelleSdE 8 - Memoire Virtuelle
SdE 8 - Memoire Virtuelle
 
SdE 7 - Gestion de la Mémoire
SdE 7 - Gestion de la MémoireSdE 7 - Gestion de la Mémoire
SdE 7 - Gestion de la Mémoire
 
SdE 6 - Planification
SdE 6 - PlanificationSdE 6 - Planification
SdE 6 - Planification
 
SdE 5 - Planification
SdE 5 - PlanificationSdE 5 - Planification
SdE 5 - Planification
 
ALF 6 - Parser
ALF 6 - ParserALF 6 - Parser
ALF 6 - Parser
 
ALF 5 - Parser
ALF 5 - ParserALF 5 - Parser
ALF 5 - Parser
 
ALF 4 - Grammaires
ALF 4 - GrammairesALF 4 - Grammaires
ALF 4 - Grammaires
 

Dernier

Proyecto Erasmus Jardineros y jardineras de paz
Proyecto Erasmus Jardineros y jardineras de pazProyecto Erasmus Jardineros y jardineras de paz
Proyecto Erasmus Jardineros y jardineras de paz
Morzadec Cécile
 
Veille Audocdi 90 - mois de juin 2024.pdf
Veille Audocdi 90 - mois de juin 2024.pdfVeille Audocdi 90 - mois de juin 2024.pdf
Veille Audocdi 90 - mois de juin 2024.pdf
frizzole
 
BATIMENT 5.pptx. Fil français tourné en France
BATIMENT 5.pptx. Fil français tourné en FranceBATIMENT 5.pptx. Fil français tourné en France
BATIMENT 5.pptx. Fil français tourné en France
Txaruka
 
Margaux Laurens - Neel.pptx
Margaux        Laurens     -     Neel.pptxMargaux        Laurens     -     Neel.pptx
Margaux Laurens - Neel.pptx
Txaruka
 
Presentation powerpoint sur la filiere electrotechnique
Presentation powerpoint sur la filiere electrotechniquePresentation powerpoint sur la filiere electrotechnique
Presentation powerpoint sur la filiere electrotechnique
mohammadaminejouini
 
Dimensionnement réseau de transmission pour un réseau GSM-R - AIT KADDOUR Ghi...
Dimensionnement réseau de transmission pour un réseau GSM-R - AIT KADDOUR Ghi...Dimensionnement réseau de transmission pour un réseau GSM-R - AIT KADDOUR Ghi...
Dimensionnement réseau de transmission pour un réseau GSM-R - AIT KADDOUR Ghi...
MustaphaZhiri
 
Bibliothèque de L'Union - Bilan de l'année 2023
Bibliothèque de L'Union - Bilan de l'année 2023Bibliothèque de L'Union - Bilan de l'année 2023
Bibliothèque de L'Union - Bilan de l'année 2023
Bibliothèque de L'Union
 

Dernier (7)

Proyecto Erasmus Jardineros y jardineras de paz
Proyecto Erasmus Jardineros y jardineras de pazProyecto Erasmus Jardineros y jardineras de paz
Proyecto Erasmus Jardineros y jardineras de paz
 
Veille Audocdi 90 - mois de juin 2024.pdf
Veille Audocdi 90 - mois de juin 2024.pdfVeille Audocdi 90 - mois de juin 2024.pdf
Veille Audocdi 90 - mois de juin 2024.pdf
 
BATIMENT 5.pptx. Fil français tourné en France
BATIMENT 5.pptx. Fil français tourné en FranceBATIMENT 5.pptx. Fil français tourné en France
BATIMENT 5.pptx. Fil français tourné en France
 
Margaux Laurens - Neel.pptx
Margaux        Laurens     -     Neel.pptxMargaux        Laurens     -     Neel.pptx
Margaux Laurens - Neel.pptx
 
Presentation powerpoint sur la filiere electrotechnique
Presentation powerpoint sur la filiere electrotechniquePresentation powerpoint sur la filiere electrotechnique
Presentation powerpoint sur la filiere electrotechnique
 
Dimensionnement réseau de transmission pour un réseau GSM-R - AIT KADDOUR Ghi...
Dimensionnement réseau de transmission pour un réseau GSM-R - AIT KADDOUR Ghi...Dimensionnement réseau de transmission pour un réseau GSM-R - AIT KADDOUR Ghi...
Dimensionnement réseau de transmission pour un réseau GSM-R - AIT KADDOUR Ghi...
 
Bibliothèque de L'Union - Bilan de l'année 2023
Bibliothèque de L'Union - Bilan de l'année 2023Bibliothèque de L'Union - Bilan de l'année 2023
Bibliothèque de L'Union - Bilan de l'année 2023
 

SdE 8 - Synchronisation de execution

  • 2. Lesslie Lamport • Américain • MIT • LaTeX • L’algorithme Lamport bakery • Tolérance aux fautes Byzantines – Utilise sur blockchain • L’algorithme Paxos • Signature de Lamport 2
  • 3. Contenu • course • espace critique • opérations atomique • busy waiting • semaphore • mutex 3
  • 4. Bibliographie pour aujourd'hui • Modern Operating Systems – Chapitre 4 • 4.4 • 4.5 • 4.6 • Operating Systems Concepts – Chapitre 9 • 9.1 – 9.4 • 9.6 • 9.7 4
  • 6. Course Processus 1 // shared variable a int a = 0; if (a == 0) { a++; } printf ("%dn", a); // shared variable a int a = 0; if (a == 0) { a++; } printf ("%dn", a); 6 Processus 2
  • 7. Course – variante séquentiel Processus 1 // shared variable a int a = 0; if (a == 0) { a++; } printf ("%dn", a); // shared variable a int a = 0; if (a == 0) { a++; } printf ("%dn", a); 7 Processus 2 1 1
  • 8. Course – variante intercalé Processus 1 // shared variable a int a = 0; if (a == 0) { a++; } printf ("%dn", a); // shared variable a int a = 0; if (a == 0) { a++; } printf ("%dn", a); 8 Processus 2 2 2
  • 9. Course – désiré Processus 1 // shared variable a int a = 0; if (a == 0) { a++; } printf ("%dn", a); // shared variable a int a = 0; if (a == 0) { a++; } printf ("%dn", a); 9 Processus 2 espace critique 1 1
  • 10. Espace critique • une partie du code qui doit être exécuté seul – l'accès aux variables (ressources) qui doit être exécuté seul 10 if (a == 0) { a++; } if (a == 1) { a--; } Le raison est l’accès de variable a
  • 11. Operation atomique • Un opération qui est exécute sans interruption • Interruptions possible – interruption matériel – signaux – changement de contexte • Les instructions de CPU sont atomique 11
  • 12. Exemple int main () { int a = 0; a++; } 12 Plus des exemples sur https://godbolt.org/
  • 13. Exemple – x86-64 int main () { int a = 0; a++; } ; rbp-4 address of variable a mov DWORD PTR [rbp-4], 0 add DWORD PTR [rbp-4], 1 13 a++ est atomique
  • 14. Exemple – ARM int main () { int a = 0; a++; } ; fp-8 address of variable a mov r3, #0 str r3, [fp, #-8] ldr r3, [fp, #-8] add r3, r3, #1 str r3, [fp, #-8] 14 a++ n’est pas atomique
  • 15. Instruction pour synchronisation if (test == 0) { test = 1; // do some work test = 0; } cmp DWORD PTR [rbp-4], 0 jne .L2 mov DWORD PTR [rbp-4], 1 ; do some work mov DWORD PTR [rbp-4], 0 .L2: 15 ; rbp-4 address of variable test N’est pas atomique
  • 16. Test and set • Une instruction qui – Fait un comparaison – Fait un attribution en dépendent de la comparaison • TSL 16 tsl r, value tsl (r, value) if (r == 0) r = value;
  • 17. Instruction pour synchronisation if (tsl(test, 1)) { // do some work test = 0; } mov eax, 0 lock cmpxchg DWORD PTR [rbp-4], 1 jne .L2 ; do some work mov DWORD PTR [rbp-4], 0 .L2: 17 ; rbp-4 address of variable test est atomique
  • 18. Fair le code executer atomique • Spinlock • Semaphore • Mutex 18
  • 20. Spinlock while (test != 0) continue; test = 1; // do some work with test = 0; 20 Spinlock Atomique?
  • 21. Spinlock x86 while (test != 0) continue; test = 1; // do some work with test = 0; .L2: cmp DWORD PTR [rbp-4], 0 jne .L2 mov DWORD PTR [rbp-4], 1 ; do some work mov DWORD PTR [rbp-4], 0 21 N’est pas atomique ; rbp-4 address of variable test
  • 22. Spinlock while (tsl(test, 1)) continue; // do some work with test = 0; 22 Spinlock
  • 23. Spinlock x86 while (tsl(test, 1)) continue; // do some work with test = 0; mov eax, 0 .L2: lock cmpxchg DWORD PTR [rbp-4], 1 jne .L2 ; do some work mov DWORD PTR [rbp-4], 0 23 Est atomique ; rbp-4 address of variable test
  • 24. lock et unlock • lock – prend le spinlock • unlock – libère le spinlock 24
  • 25. lock et unlock void lock (s) { while (tsl(s, 1)); } void unlock (s) { s = 0; } 25 // s - spinlock
  • 26. Exemple Processus 1 // shared variables a and s int a = 0; int s; lock (s); if (a == 0) { a++; } unlock (s); printf ("%dn", a); // shared variables a and s int a = 0; int s; lock (s); if (a == 0) { a++; } unlock (s); printf ("%dn", a); 26 Processus 2 1 1
  • 27. Exemple Processus 1 // shared variables a and s int a = 0; int s; lock (s); if (a == 0) { a++; } unlock (s); printf ("%dn", a); // shared variables a and s int a = 0; int s; lock (s); if (a == 0) { a++; } unlock (s); printf ("%dn", a); 27 Processus 2 1 1
  • 28. Deadlock Que se passe-t-il si nous oublions d'utiliser le unlock? Que se passe-t-il si nous utilisons plusieurs de fois lock sans unlock? Que se passe-t-il si le program s’arrêt avant unlock? 28
  • 29. Oublier unlock Processus 1 // shared variables a and s int a = 0; int s; lock (s); ... waits a lot // shared variables a and s int a = 0; int s; lock (s); if (a == 0) { a++; } printf ("%dn", a); 29 Processus 2 ... 1
  • 30. Plusieurs de lock Processus 1 // shared variables a and s int a = 0; int s; lock (s); ... waits a lot // shared variables a and s int a = 0; int s; lock (s); lock (s); ...waits a lot 30 Processus 2 ... ...
  • 31. Arrête avent unlock Processus 1 // shared variables a and s int a = 0; int s; lock (s); ... waits a lot // shared variables a and s int a = 0; int s; lock (s); if (a == 0) { a++; } 31 Processus 2 ... erreur
  • 33. Spinlock while (tsl(test, 1)) continue; // do some work with test = 0; 33 Spinlock Busy Waiting
  • 34. Busy Waiting • Essayer en permanence de tester la valeur de la variable • Le CPU fait des instructions inutiles • Le processus va consume toute le quantum de temps pur tester la valeur 34
  • 35. Les états de processus 35 Spinlock
  • 36. Les états de processus 36 Attende la resource
  • 37. Sémaphore • Object du Système d’Exploitation • Partage entre plusieurs processus • Fonctions exécuté atomique – P (attendre) / wait / down – V (signaler) / signal / up • Value initiale • Queue de processus qui attende 37
  • 38. Fonctions de sémaphore void wait (s) { while (s <= 0); s = s - 1; } void signal (s) { s = s + 1; } 38 // s - semaphore Busy waiting
  • 39. block et wakeup • block – arrête le processus curent • état WAITING • wakeup – démarre touts les processus qui sont bloque sure le sémaphore • état READY 39
  • 40. Les états de processus 40 block wakeup
  • 41. Fonction de sémaphore void wait (s) { while (s <= 0) block (s); s = s - 1; } void signal (s) { s = s + 1; wakeup (s); } 41 // s - semaphore
  • 42. Types des sémaphores • binaire – la valeur peut être seulement 0 ou 1 • comptage – La valeur est une valeur entier 42
  • 43. Sémaphore binaire void wait (s) { while (s == 0) block (s); s = 0; } void signal (s) { s = 1; wakeup (s); } 43 // s - semaphore
  • 44. Exemple Processus 1 // shared variables a and s int a = 0; int s; wait (s); if (a == 0) { a++; } signal (s); printf ("%dn", a); // shared variables a and s int a = 0; int s; wait (s); if (a == 0) { a++; } signal (s); printf ("%dn", a); 44 Processus 2 1 1
  • 45. Exemple Processus 1 // shared variables a and s int a = 0; int s; wait (s); if (a == 0) { a++; } signal (s); printf ("%dn", a); // shared variables a and s int a = 0; int s; wait (s); if (a == 0) { a++; } signal (s); printf ("%dn", a); 45 Processus 2 1 1
  • 46. Deadlock Que se passe-t-il si nous oublions d'utiliser le signal? Que se passe-t-il si nous utilisons plusieurs de fois wait sans signal? Que se passe-t-il si le program s’arrêt avant signal? 46
  • 47. Oublier signal Processus 1 // shared variables a and s int a = 0; int s; wait (s); ... waits a lot // shared variables a and s int a = 0; int s; wait (s); if (a == 0) { a++; } printf ("%dn", a); 47 Processus 2 ... 1
  • 48. Plusieurs de wait Processus 1 // shared variables a and s int a = 0; int s; wait (s); ... waits a lot // shared variables a and s int a = 0; int s; wait (s); wait (s); ...waits a lot 48 Processus 2 ... ...
  • 49. Arrête avent signal Processus 1 // shared variables a and s int a = 0; int s; wait (s); ... waits a lot // shared variables a and s int a = 0; int s; wait (s); if (a == 0) { a++; } 49 Processus 2 ... erreur
  • 51. Mutex • Mutual Exclusion • Similaire avec le sémaphore binaire • Utilisez pour threads (même processus) 51
  • 52. lock et unlock • lock – prend le mutex et mémorise le id de thread qui a le pris • la fonction lock est réentrante dans le même thread • unlock – libéré le mutex • au fin du program (thread) le mutex est libéré 52
  • 53. Deadlock Que se passe-t-il si nous oublions d'utiliser le unlock? Que se passe-t-il si nous utilisons plusieurs de fois wait sans lock? Que se passe-t-il si le program s’arrêt avant unlock? 53
  • 54. Oublier unlock Processus 1 // shared variables a and s int a = 0; mutex s; lock (s); if (a == 0) { a++; } unlock (s); printf ("%dn", a); // shared variables a and s int a = 0; mutex s; lock (s); if (a == 0) { a++; } printf ("%dn", a); 54 Processus 2 1 1
  • 55. Plusieurs de lock Processus 1 // shared variables a and s int a = 0; mutex s; lock (s); if (a == 0) { a++; } unlock (s); printf ("%dn", a); // shared variables a and s int a = 0; mutex s; lock (s); lock (s); if (a == 0) { a++; } unlock (s); printf ("%dn", a); 55 Processus 2 1 1
  • 56. Arrête avent unlock Processus 1 // shared variables a and s int a = 0; mutex s; lock (s); if (a == 0) { a++; } unlock (s); printf ("%dn", a); // shared variables a and s int a = 0; mutex s; lock (s); if (a == 0) { a++; } 56 Processus 2 1 erreur
  • 57. Synchronization en Java class Run { private Object a; public synchronized void runAlone () { // run some work } public void run () { synchronized (a) { // run some work using the variable a } } } 57
  • 58. Mot clés • course • espace critique • opération atomique • busy waiting • spinlock • lock • unlock • sémaphore • sémaphore binaire • sémaphore comptage • deadlock • wait • signal • mutex 58