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, valuetsl (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

SdE2 - Planification, IPC
SdE2 - Planification, IPCSdE2 - Planification, IPC
SdE2 - Planification, IPC
Alexandru Radovici
 
SdE 4 - Processus
SdE 4 - ProcessusSdE 4 - Processus
SdE 4 - Processus
Alexandru Radovici
 
SdE 2 - Langage C, Allocation de memoire
SdE 2 - Langage C, Allocation de memoireSdE 2 - Langage C, Allocation de memoire
SdE 2 - Langage C, Allocation de memoire
Alexandru Radovici
 
SdE 2 - Introduction
SdE 2 - IntroductionSdE 2 - Introduction
SdE 2 - Introduction
Alexandru Radovici
 
Principes de fonctionnement unix
Principes de fonctionnement unixPrincipes de fonctionnement unix
Principes de fonctionnement unix
webreaker
 
SdE 3 - System de fichiers
SdE 3 - System de fichiersSdE 3 - System de fichiers
SdE 3 - System de fichiers
Alexandru Radovici
 
SdE 3 - Systemes de fichiers
SdE 3 - Systemes de fichiersSdE 3 - Systemes de fichiers
SdE 3 - Systemes de fichiers
Alexandru Radovici
 
Systemes d'explotation: Threads
Systemes d'explotation: ThreadsSystemes d'explotation: Threads
Systemes d'explotation: Threads
Alexandru Radovici
 
Systèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introductionSystèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introduction
Lilia Sfaxi
 
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
 
Expose linux gestion des processus
Expose linux  gestion des processusExpose linux  gestion des processus
Expose linux gestion des processus
Fatima Zahra Fagroud
 
SdE - Introduction
SdE - IntroductionSdE - Introduction
SdE - Introduction
Alexandru Radovici
 
Boot
BootBoot
Gestion des processus
Gestion des processusGestion des processus
Gestion des processus
guebba sara
 
SdE 1 - Introduction
SdE 1 - IntroductionSdE 1 - Introduction
SdE 1 - Introduction
Alexandru Radovici
 
ALF 1 - Introduction
ALF 1 - IntroductionALF 1 - Introduction
ALF 1 - Introduction
Alexandru Radovici
 
Découverte d'UNIX - ISIMA
Découverte d'UNIX - ISIMADécouverte d'UNIX - ISIMA
Découverte d'UNIX - ISIMA
Loic Yon
 
Ordinnancement des processus
Ordinnancement des processusOrdinnancement des processus
Ordinnancement des processusSelman Dridi
 
Solutions temps réel sous linux
Solutions temps réel sous linuxSolutions temps réel sous linux
Solutions temps réel sous linux
embedded-linux-bdx
 

Tendances (20)

SdE2 - Planification, IPC
SdE2 - Planification, IPCSdE2 - Planification, IPC
SdE2 - Planification, IPC
 
SdE 4 - Processus
SdE 4 - ProcessusSdE 4 - Processus
SdE 4 - Processus
 
SdE 2 - Langage C, Allocation de memoire
SdE 2 - Langage C, Allocation de memoireSdE 2 - Langage C, Allocation de memoire
SdE 2 - Langage C, Allocation de memoire
 
SdE 2 - Introduction
SdE 2 - IntroductionSdE 2 - Introduction
SdE 2 - Introduction
 
Principes de fonctionnement unix
Principes de fonctionnement unixPrincipes de fonctionnement unix
Principes de fonctionnement unix
 
SdE 3 - System de fichiers
SdE 3 - System de fichiersSdE 3 - System de fichiers
SdE 3 - System de fichiers
 
SdE 3 - Systemes de fichiers
SdE 3 - Systemes de fichiersSdE 3 - Systemes de fichiers
SdE 3 - Systemes de fichiers
 
Systemes d'explotation: Threads
Systemes d'explotation: ThreadsSystemes d'explotation: Threads
Systemes d'explotation: Threads
 
Systèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introductionSystèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introduction
 
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
 
Expose linux gestion des processus
Expose linux  gestion des processusExpose linux  gestion des processus
Expose linux gestion des processus
 
SdE - Introduction
SdE - IntroductionSdE - Introduction
SdE - Introduction
 
Boot
BootBoot
Boot
 
Gestion des processus
Gestion des processusGestion des processus
Gestion des processus
 
SdE 1 - Introduction
SdE 1 - IntroductionSdE 1 - Introduction
SdE 1 - Introduction
 
ALF 1 - Introduction
ALF 1 - IntroductionALF 1 - Introduction
ALF 1 - Introduction
 
Découverte d'UNIX - ISIMA
Découverte d'UNIX - ISIMADécouverte d'UNIX - ISIMA
Découverte d'UNIX - ISIMA
 
Ordinnancement des processus
Ordinnancement des processusOrdinnancement des processus
Ordinnancement des processus
 
Solutions temps réel sous linux
Solutions temps réel sous linuxSolutions temps réel sous linux
Solutions temps réel sous linux
 
Ordonnancement SJF
Ordonnancement SJFOrdonnancement SJF
Ordonnancement SJF
 

Similaire à Systemes d'explotation: Synchronization 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
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
Abdoulaye Dieng
 
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
 
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
 
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
 
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
 
11-Concurrence-Section critiques.pdf
11-Concurrence-Section critiques.pdf11-Concurrence-Section critiques.pdf
11-Concurrence-Section critiques.pdf
Patiento Del Mar
 
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
 
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
 
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
 
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
 

Similaire à Systemes d'explotation: Synchronization 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
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
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
 
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
 
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
 
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...
 
11-Concurrence-Section critiques.pdf
11-Concurrence-Section critiques.pdf11-Concurrence-Section critiques.pdf
11-Concurrence-Section critiques.pdf
 
BBL chez Mappy autour de Tsung
BBL chez Mappy autour de TsungBBL chez Mappy autour de Tsung
BBL chez Mappy autour de Tsung
 
Ch11
Ch11Ch11
Ch11
 
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
 
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
 
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
 

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 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
 
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
 
ALF 3 - Expressions régulières et Lexer
ALF 3 - Expressions régulières et LexerALF 3 - Expressions régulières et Lexer
ALF 3 - Expressions régulières et Lexer
Alexandru Radovici
 
ALF 1 - Automates finis
ALF 1 - Automates finis ALF 1 - Automates finis
ALF 1 - Automates finis
Alexandru Radovici
 
SdE 2 - System de fichiers
SdE 2 - System de fichiersSdE 2 - System de fichiers
SdE 2 - System de fichiers
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 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
 
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
 
ALF 3 - Expressions régulières et Lexer
ALF 3 - Expressions régulières et LexerALF 3 - Expressions régulières et Lexer
ALF 3 - Expressions régulières et Lexer
 
ALF 1 - Automates finis
ALF 1 - Automates finis ALF 1 - Automates finis
ALF 1 - Automates finis
 
SdE 2 - System de fichiers
SdE 2 - System de fichiersSdE 2 - System de fichiers
SdE 2 - System de fichiers
 

Dernier

M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...
M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...
M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...
M2i Formation
 
Calendrier du 3 juin 2024 et compte rendu.pdf
Calendrier du 3 juin 2024 et compte rendu.pdfCalendrier du 3 juin 2024 et compte rendu.pdf
Calendrier du 3 juin 2024 et compte rendu.pdf
frizzole
 
Iris et les hommes.pptx
Iris      et         les      hommes.pptxIris      et         les      hommes.pptx
Iris et les hommes.pptx
Txaruka
 
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24Newsletter SPW Agriculture en province du Luxembourg du 03-06-24
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24
BenotGeorges3
 
1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx
1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx
1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx
schneiderbeatrice78
 
Exame DELF - A2 Francês pout tout public
Exame DELF - A2  Francês pout tout publicExame DELF - A2  Francês pout tout public
Exame DELF - A2 Francês pout tout public
GiselaAlves15
 
Méthodologie de recherche et de rédaction de mémoire.pptx
Méthodologie de recherche et de rédaction de mémoire.pptxMéthodologie de recherche et de rédaction de mémoire.pptx
Méthodologie de recherche et de rédaction de mémoire.pptx
LamoussaPaulOuattara1
 
4 expositions à voir à Paris.pptx
4   expositions    à   voir   à Paris.pptx4   expositions    à   voir   à Paris.pptx
4 expositions à voir à Paris.pptx
Txaruka
 
Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"
Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"
Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"
IES Turina/Rodrigo/Itaca/Palomeras
 
Bilan schéma pour réun concertation SDLP V4.pptx
Bilan schéma pour réun concertation SDLP V4.pptxBilan schéma pour réun concertation SDLP V4.pptx
Bilan schéma pour réun concertation SDLP V4.pptx
bibliogard
 
Contrôle fiscale en république de guinée
Contrôle fiscale en république de guinéeContrôle fiscale en république de guinée
Contrôle fiscale en république de guinée
bangalykaba146
 
Festival de Cannes 2024.pptx
Festival      de      Cannes     2024.pptxFestival      de      Cannes     2024.pptx
Festival de Cannes 2024.pptx
Txaruka
 
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdf
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdfCours SE - Gestion de la mémoire- Cours IG IPSET.pdf
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdf
MedBechir
 
Mémoire de licence en finance comptabilité et audit
Mémoire de licence en finance comptabilité et auditMémoire de licence en finance comptabilité et audit
Mémoire de licence en finance comptabilité et audit
MelDjobo
 

Dernier (14)

M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...
M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...
M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...
 
Calendrier du 3 juin 2024 et compte rendu.pdf
Calendrier du 3 juin 2024 et compte rendu.pdfCalendrier du 3 juin 2024 et compte rendu.pdf
Calendrier du 3 juin 2024 et compte rendu.pdf
 
Iris et les hommes.pptx
Iris      et         les      hommes.pptxIris      et         les      hommes.pptx
Iris et les hommes.pptx
 
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24Newsletter SPW Agriculture en province du Luxembourg du 03-06-24
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24
 
1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx
1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx
1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx
 
Exame DELF - A2 Francês pout tout public
Exame DELF - A2  Francês pout tout publicExame DELF - A2  Francês pout tout public
Exame DELF - A2 Francês pout tout public
 
Méthodologie de recherche et de rédaction de mémoire.pptx
Méthodologie de recherche et de rédaction de mémoire.pptxMéthodologie de recherche et de rédaction de mémoire.pptx
Méthodologie de recherche et de rédaction de mémoire.pptx
 
4 expositions à voir à Paris.pptx
4   expositions    à   voir   à Paris.pptx4   expositions    à   voir   à Paris.pptx
4 expositions à voir à Paris.pptx
 
Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"
Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"
Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"
 
Bilan schéma pour réun concertation SDLP V4.pptx
Bilan schéma pour réun concertation SDLP V4.pptxBilan schéma pour réun concertation SDLP V4.pptx
Bilan schéma pour réun concertation SDLP V4.pptx
 
Contrôle fiscale en république de guinée
Contrôle fiscale en république de guinéeContrôle fiscale en république de guinée
Contrôle fiscale en république de guinée
 
Festival de Cannes 2024.pptx
Festival      de      Cannes     2024.pptxFestival      de      Cannes     2024.pptx
Festival de Cannes 2024.pptx
 
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdf
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdfCours SE - Gestion de la mémoire- Cours IG IPSET.pdf
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdf
 
Mémoire de licence en finance comptabilité et audit
Mémoire de licence en finance comptabilité et auditMémoire de licence en finance comptabilité et audit
Mémoire de licence en finance comptabilité et audit
 

Systemes d'explotation: Synchronization 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, valuetsl (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