Synchronisation sous systeme Linux
Pourquoi synchroniser les processus ?
Le nombre de ressources d'un
système d'exploitation est limité.
On trouve les processus en
situation de concurrence (race)
vis-à-vis des ressources.
le But de la synchronisation est
de contrôler la concurrence.
Contrôler la concurrence
➔Organiser la compétition:
◆ Fournir des services de synchronisation indirecte par exclusion mutuelle : « Arbitrage »,
rôle du système.
◆ Ou au contraire, inclure la partie contrôle de concurrence au sein des programmes : «
sans arbitrage » par le système.
➔Coordonner l’utilisation des ressources:
◆ Empêcher ou réparer des blocages
◆ Garantir l’équité ou absence de famine
Section Critique
Section Critique: Toute section de code (séquence d’instructions) manipulant de ressources
communes (variables communes, …)
Exclusion mutuelle ou Mutex: Il y a au plus une entité en section critique qui permet de
réguler l’accès aux données.
Exemple : accès à une base de données.
Remarque: Plusieurs processus peuvent la lire simultanément.
Outils de synchronisation
Matériels :
emploi de Test and Set qui est basée sur l’utilisation d’une instruction permettant
de lire et d’écrire le contenu d’un mot mémoire de manière indivisible.
inhibition des interruptions (possible seulement dans le cas d'un processus se
déroulant en mode privilégié).
Logiciels :
sémaphores (outils logiciels mis à la disposition des utilisateurs par le système
d'exploitation)
algorithmes de synchronisation.
Masquage d ’interruptions (Monoprocesseurs)
Solution brutale: seule l’interruption générée par la fin du quantum de temps
nous intéresse.
Le comportement des processus est décrit par le schéma suivant :
while(1)
{
< Section Restante >
Masquer les interruptions ;
< Section Critique >
Démasquer les interruptions ;
}
Test And Set (Multiprocesseurs: instruction indivisible)
Cette solution est basée sur l’utilisation d’une instruction permettant de lire et
d’écrire le contenu d’un mot mémoire de manière indivisible.
➔Instruction minimale permettant de bâtir de la synchronisation
➔Instruction atomique (garantie atomique par le scheduler et le hard)
Le drapeau est partagé par plusieurs processus, il est initialisée à zéro.
tas registre, drapeau
⇔
{registre ← drapeau; drapeau ← 1;}
EntreeMutex:
tas registre, drapeau
cmp registre 0
jnz EntreeMutex
ret
Inconvénients de cette technique :
➔Attente active (busy waiting)
➔On ne sait pas qui va prendre la main.
On peut avoir une solution pour l’attente active par la mise en sommeil en
utilisant sleep(), awake().
Efficace mais (trop) complexe à mettre en œuvre !
Sémaphores
Un sémaphore est un type de donnée abstraite. Le sémaphore a été inventé par
Edsger Dijkstra.
Les sémaphores fournissent la solution la plus courante pour le fameux problème du
« dîner des philosophes »
Un sémaphore Sem associé à une ressource R est un objet composé :
d'un compteur Sem.Ka qui indique le nombre d'éléments disponibles ou le
nombre de processus en attente sur R
d'une file d'attente Sem.L où sont chaînés les processus en attente sur la
ressource R.
Les trois opérations prises en charge par un sémaphore sont Init, P et V.
Les operations
P (Proberen signifie tester): elle teste la
disponibilité d’une ressource, et elle
alloue immediatement au
processus courant.
V (Verhogen signifie incrementer): elle
libère la ressource après que le
processus a terminé de l'utiliser.
Init: Pour initialiser le sémaphore.
Cette opération est utilisée une
seule et unique fois.
Operations Init
function Init (semaphore sem, int val)
{
disable_Interrupt;
sem.K = val;
enable_interrupt;
}
Operation P
function P (semaphore sem)
{
disable_interrupt;
if (sem.K == 0)
{
L.suivant = processus_courant;
processus_courant.état = bloque;
reordonnancement = vrai;
}
else
{
sem.K = sem.K-1;
}
enable_interrupt;
}
Operation V
function V (semaphore sem)
{
disable_interrupt;
sem.K = sem.K+1;
if (not L.vide)
{
processus_réveillé = L.tête;
processus_réveillé.état = prêt;
reordonnancement = vrai;
}
enable_interrupt;
}
Les cas traités par les Sémaphores
Producteur et consommateur
Lecteur et écrivain
Production Consommation
Producteur Consommateur
Ecriture Lecture
Producteur LecteurEcrivain
R
R
Producteur et consommateur
Producteur
créer un document D
verrouiller F
ajouter D à la fin de la file F
déverrouiller F
envoyer un signal au processus consommateur
Consommateur
répéter
attendre signal de F
tant que F n'est pas vide:
pour chaque élément E de F:
verrouiller F
imprimer E
supprimer E de F
déverrouiller F
fin pour
fin tant-que
attendre un signal d'un producteur
fin répéter
Contrôle de La concurrence « sans arbitrage » par
le systèm
La concurrence entre le
Processus Pi et Pj.
Ces algorithmes sont introduits
au sein de Pi.
Algorithme de Dekker
/* i veut entrer en S.C. */
Etat[i] = 1;
while (Etat[j] == 1) {
if (tour == j) {
Etat[i] = 0;
/* attendre que
l'autre sorte de SC */
while(tour == j) { };
Etat[i] = 1;
}
}
/* debut de section critique */
... ...
/* fin de section critique */
tour = j;
• Exclusion
mutuelle garantie
• Pas d'interblocage
Algorithme de Peterson
... /* i veut entrer en S.C. */
Etat[i] = 1;
/* mais il laisse passer j, si j veut entrer */
tour = j;
/* attendre que Pj sorte de SC */
while ((Etat[j] == 1) && (tour == j)) {};
/* debut de S.C. */
...
…
/* fin de section critique */
Etat[i] = 0;
● Exclusion mutuelle
garantie,
● pas d’interblocage
● attente limitée
Réalisé par :
Fadwa Gmiden
Synchronisation sous systeme Linux
Pourquoi synchroniser les processus ?
Le nombre de ressources d'un
système d'exploitation est limité.
On trouve les processus en
situation de concurrence (race)
vis-à-vis des ressources.
le But de la synchronisation est
de contrôler la concurrence.
Contrôler la concurrence
➔Organiser la compétition:
◆ Fournir des services de synchronisation indirecte par exclusion mutuelle : « Arbitrage »,
rôle du système.
◆ Ou au contraire, inclure la partie contrôle de concurrence au sein des programmes : «
sans arbitrage » par le système.
➔Coordonner l’utilisation des ressources:
◆ Empêcher ou réparer des blocages
◆ Garantir l’équité ou absence de famine
Section Critique
Section Critique: Toute section de code (séquence d’instructions) manipulant de ressources
communes (variables communes, …)
Exclusion mutuelle ou Mutex: Il y a au plus une entité en section critique qui permet de
réguler l’accès aux données.
Exemple : accès à une base de données.
Remarque: Plusieurs processus peuvent la lire simultanément.
Outils de synchronisation
Matériels :
emploi de Test and Set qui est basée sur l’utilisation d’une instruction permettant
de lire et d’écrire le contenu d’un mot mémoire de manière indivisible.
inhibition des interruptions (possible seulement dans le cas d'un processus se
déroulant en mode privilégié).
Logiciels :
sémaphores (outils logiciels mis à la disposition des utilisateurs par le système
d'exploitation)
algorithmes de synchronisation.
Masquage d ’interruptions (Monoprocesseurs)
Solution brutale: seule l’interruption générée par la fin du quantum de temps
nous intéresse.
Le comportement des processus est décrit par le schéma suivant :
while(1)
{
< Section Restante >
Masquer les interruptions ;
< Section Critique >
Démasquer les interruptions ;
}
Test And Set (Multiprocesseurs: instruction indivisible)
Cette solution est basée sur l’utilisation d’une instruction permettant de lire et
d’écrire le contenu d’un mot mémoire de manière indivisible.
➔Instruction minimale permettant de bâtir de la synchronisation
➔Instruction atomique (garantie atomique par le scheduler et le hard)
Le drapeau est partagé par plusieurs processus, il est initialisée à zéro.
tas registre, drapeau
⇔
{registre ← drapeau; drapeau ← 1;}
EntreeMutex:
tas registre, drapeau
cmp registre 0
jnz EntreeMutex
ret
Inconvénients de cette technique :
➔Attente active (busy waiting)
➔On ne sait pas qui va prendre la main.
On peut avoir une solution pour l’attente active par la mise en sommeil en
utilisant sleep(), awake().
Efficace mais (trop) complexe à mettre en œuvre !
Sémaphores
Un sémaphore est un type de donnée abstraite. Le sémaphore a été inventé par
Edsger Dijkstra.
Les sémaphores fournissent la solution la plus courante pour le fameux problème du
« dîner des philosophes »
Un sémaphore Sem associé à une ressource R est un objet composé :
d'un compteur Sem.Ka qui indique le nombre d'éléments disponibles ou le
nombre de processus en attente sur R
d'une file d'attente Sem.L où sont chaînés les processus en attente sur la
ressource R.
Les trois opérations prises en charge par un sémaphore sont Init, P et V.
Les operations
P (Proberen signifie tester): elle teste la
disponibilité d’une ressource, et elle
alloue immediatement au
processus courant.
V (Verhogen signifie incrementer): elle
libère la ressource après que le
processus a terminé de l'utiliser.
Init: Pour initialiser le sémaphore.
Cette opération est utilisée une
seule et unique fois.
Operations Init
function Init (semaphore sem, int val)
{
disable_Interrupt;
sem.K = val;
enable_interrupt;
}
Operation P
function P (semaphore sem)
{
disable_interrupt;
if (sem.K == 0)
{
L.suivant = processus_courant;
processus_courant.état = bloque;
reordonnancement = vrai;
}
else
{
sem.K = sem.K-1;
}
enable_interrupt;
}
Operation V
function V (semaphore sem)
{
disable_interrupt;
sem.K = sem.K+1;
if (not L.vide)
{
processus_réveillé = L.tête;
processus_réveillé.état = prêt;
reordonnancement = vrai;
}
enable_interrupt;
}
Les cas traités par les Sémaphores
Producteur et consommateur
Lecteur et écrivain
Production Consommation
Producteur Consommateur
Ecriture Lecture
Producteur LecteurEcrivain
R
R
Producteur et consommateur
Producteur
créer un document D
verrouiller F
ajouter D à la fin de la file F
déverrouiller F
envoyer un signal au processus consommateur
Consommateur
répéter
attendre signal de F
tant que F n'est pas vide:
pour chaque élément E de F:
verrouiller F
imprimer E
supprimer E de F
déverrouiller F
fin pour
fin tant-que
attendre un signal d'un producteur
fin répéter
Algorithme de Peterson
... /* i veut entrer en S.C. */
Etat[i] = 1;
/* mais il laisse passer j, si j veut entrer */
tour = j;
/* attendre que Pj sorte de SC */
while ((Etat[j] == 1) && (tour == j)) {};
/* debut de S.C. */
...
…
/* fin de section critique */
Etat[i] = 0;
● Exclusion mutuelle
garantie,
● pas d’interblocage
● attente limitée
Réalisé par :
Fadwa Gmiden

Synchronisation sous systeme linux

  • 1.
  • 2.
    Pourquoi synchroniser lesprocessus ? Le nombre de ressources d'un système d'exploitation est limité. On trouve les processus en situation de concurrence (race) vis-à-vis des ressources. le But de la synchronisation est de contrôler la concurrence.
  • 3.
    Contrôler la concurrence ➔Organiserla compétition: ◆ Fournir des services de synchronisation indirecte par exclusion mutuelle : « Arbitrage », rôle du système. ◆ Ou au contraire, inclure la partie contrôle de concurrence au sein des programmes : « sans arbitrage » par le système. ➔Coordonner l’utilisation des ressources: ◆ Empêcher ou réparer des blocages ◆ Garantir l’équité ou absence de famine
  • 4.
    Section Critique Section Critique:Toute section de code (séquence d’instructions) manipulant de ressources communes (variables communes, …) Exclusion mutuelle ou Mutex: Il y a au plus une entité en section critique qui permet de réguler l’accès aux données.
  • 5.
    Exemple : accèsà une base de données. Remarque: Plusieurs processus peuvent la lire simultanément.
  • 6.
    Outils de synchronisation Matériels: emploi de Test and Set qui est basée sur l’utilisation d’une instruction permettant de lire et d’écrire le contenu d’un mot mémoire de manière indivisible. inhibition des interruptions (possible seulement dans le cas d'un processus se déroulant en mode privilégié). Logiciels : sémaphores (outils logiciels mis à la disposition des utilisateurs par le système d'exploitation) algorithmes de synchronisation.
  • 7.
    Masquage d ’interruptions(Monoprocesseurs) Solution brutale: seule l’interruption générée par la fin du quantum de temps nous intéresse. Le comportement des processus est décrit par le schéma suivant : while(1) { < Section Restante > Masquer les interruptions ; < Section Critique > Démasquer les interruptions ; }
  • 8.
    Test And Set(Multiprocesseurs: instruction indivisible) Cette solution est basée sur l’utilisation d’une instruction permettant de lire et d’écrire le contenu d’un mot mémoire de manière indivisible. ➔Instruction minimale permettant de bâtir de la synchronisation ➔Instruction atomique (garantie atomique par le scheduler et le hard) Le drapeau est partagé par plusieurs processus, il est initialisée à zéro. tas registre, drapeau ⇔ {registre ← drapeau; drapeau ← 1;} EntreeMutex: tas registre, drapeau cmp registre 0 jnz EntreeMutex ret
  • 9.
    Inconvénients de cettetechnique : ➔Attente active (busy waiting) ➔On ne sait pas qui va prendre la main. On peut avoir une solution pour l’attente active par la mise en sommeil en utilisant sleep(), awake(). Efficace mais (trop) complexe à mettre en œuvre !
  • 10.
    Sémaphores Un sémaphore estun type de donnée abstraite. Le sémaphore a été inventé par Edsger Dijkstra. Les sémaphores fournissent la solution la plus courante pour le fameux problème du « dîner des philosophes » Un sémaphore Sem associé à une ressource R est un objet composé : d'un compteur Sem.Ka qui indique le nombre d'éléments disponibles ou le nombre de processus en attente sur R d'une file d'attente Sem.L où sont chaînés les processus en attente sur la ressource R. Les trois opérations prises en charge par un sémaphore sont Init, P et V.
  • 11.
    Les operations P (Proberensignifie tester): elle teste la disponibilité d’une ressource, et elle alloue immediatement au processus courant. V (Verhogen signifie incrementer): elle libère la ressource après que le processus a terminé de l'utiliser. Init: Pour initialiser le sémaphore. Cette opération est utilisée une seule et unique fois.
  • 12.
    Operations Init function Init(semaphore sem, int val) { disable_Interrupt; sem.K = val; enable_interrupt; }
  • 13.
    Operation P function P(semaphore sem) { disable_interrupt; if (sem.K == 0) { L.suivant = processus_courant; processus_courant.état = bloque; reordonnancement = vrai; } else { sem.K = sem.K-1; } enable_interrupt; }
  • 14.
    Operation V function V(semaphore sem) { disable_interrupt; sem.K = sem.K+1; if (not L.vide) { processus_réveillé = L.tête; processus_réveillé.état = prêt; reordonnancement = vrai; } enable_interrupt; }
  • 15.
    Les cas traitéspar les Sémaphores Producteur et consommateur Lecteur et écrivain Production Consommation Producteur Consommateur Ecriture Lecture Producteur LecteurEcrivain R R
  • 16.
  • 17.
    Producteur créer un documentD verrouiller F ajouter D à la fin de la file F déverrouiller F envoyer un signal au processus consommateur
  • 18.
    Consommateur répéter attendre signal deF tant que F n'est pas vide: pour chaque élément E de F: verrouiller F imprimer E supprimer E de F déverrouiller F fin pour fin tant-que attendre un signal d'un producteur fin répéter
  • 19.
    Contrôle de Laconcurrence « sans arbitrage » par le systèm La concurrence entre le Processus Pi et Pj. Ces algorithmes sont introduits au sein de Pi.
  • 20.
    Algorithme de Dekker /*i veut entrer en S.C. */ Etat[i] = 1; while (Etat[j] == 1) { if (tour == j) { Etat[i] = 0; /* attendre que l'autre sorte de SC */ while(tour == j) { }; Etat[i] = 1; } } /* debut de section critique */ ... ... /* fin de section critique */ tour = j; • Exclusion mutuelle garantie • Pas d'interblocage
  • 21.
    Algorithme de Peterson .../* i veut entrer en S.C. */ Etat[i] = 1; /* mais il laisse passer j, si j veut entrer */ tour = j; /* attendre que Pj sorte de SC */ while ((Etat[j] == 1) && (tour == j)) {}; /* debut de S.C. */ ... … /* fin de section critique */ Etat[i] = 0; ● Exclusion mutuelle garantie, ● pas d’interblocage ● attente limitée
  • 22.
  • 23.
  • 24.
    Pourquoi synchroniser lesprocessus ? Le nombre de ressources d'un système d'exploitation est limité. On trouve les processus en situation de concurrence (race) vis-à-vis des ressources. le But de la synchronisation est de contrôler la concurrence.
  • 25.
    Contrôler la concurrence ➔Organiserla compétition: ◆ Fournir des services de synchronisation indirecte par exclusion mutuelle : « Arbitrage », rôle du système. ◆ Ou au contraire, inclure la partie contrôle de concurrence au sein des programmes : « sans arbitrage » par le système. ➔Coordonner l’utilisation des ressources: ◆ Empêcher ou réparer des blocages ◆ Garantir l’équité ou absence de famine
  • 26.
    Section Critique Section Critique:Toute section de code (séquence d’instructions) manipulant de ressources communes (variables communes, …) Exclusion mutuelle ou Mutex: Il y a au plus une entité en section critique qui permet de réguler l’accès aux données.
  • 27.
    Exemple : accèsà une base de données. Remarque: Plusieurs processus peuvent la lire simultanément.
  • 28.
    Outils de synchronisation Matériels: emploi de Test and Set qui est basée sur l’utilisation d’une instruction permettant de lire et d’écrire le contenu d’un mot mémoire de manière indivisible. inhibition des interruptions (possible seulement dans le cas d'un processus se déroulant en mode privilégié). Logiciels : sémaphores (outils logiciels mis à la disposition des utilisateurs par le système d'exploitation) algorithmes de synchronisation.
  • 29.
    Masquage d ’interruptions(Monoprocesseurs) Solution brutale: seule l’interruption générée par la fin du quantum de temps nous intéresse. Le comportement des processus est décrit par le schéma suivant : while(1) { < Section Restante > Masquer les interruptions ; < Section Critique > Démasquer les interruptions ; }
  • 30.
    Test And Set(Multiprocesseurs: instruction indivisible) Cette solution est basée sur l’utilisation d’une instruction permettant de lire et d’écrire le contenu d’un mot mémoire de manière indivisible. ➔Instruction minimale permettant de bâtir de la synchronisation ➔Instruction atomique (garantie atomique par le scheduler et le hard) Le drapeau est partagé par plusieurs processus, il est initialisée à zéro. tas registre, drapeau ⇔ {registre ← drapeau; drapeau ← 1;} EntreeMutex: tas registre, drapeau cmp registre 0 jnz EntreeMutex ret
  • 31.
    Inconvénients de cettetechnique : ➔Attente active (busy waiting) ➔On ne sait pas qui va prendre la main. On peut avoir une solution pour l’attente active par la mise en sommeil en utilisant sleep(), awake(). Efficace mais (trop) complexe à mettre en œuvre !
  • 32.
    Sémaphores Un sémaphore estun type de donnée abstraite. Le sémaphore a été inventé par Edsger Dijkstra. Les sémaphores fournissent la solution la plus courante pour le fameux problème du « dîner des philosophes » Un sémaphore Sem associé à une ressource R est un objet composé : d'un compteur Sem.Ka qui indique le nombre d'éléments disponibles ou le nombre de processus en attente sur R d'une file d'attente Sem.L où sont chaînés les processus en attente sur la ressource R. Les trois opérations prises en charge par un sémaphore sont Init, P et V.
  • 33.
    Les operations P (Proberensignifie tester): elle teste la disponibilité d’une ressource, et elle alloue immediatement au processus courant. V (Verhogen signifie incrementer): elle libère la ressource après que le processus a terminé de l'utiliser. Init: Pour initialiser le sémaphore. Cette opération est utilisée une seule et unique fois.
  • 34.
    Operations Init function Init(semaphore sem, int val) { disable_Interrupt; sem.K = val; enable_interrupt; }
  • 35.
    Operation P function P(semaphore sem) { disable_interrupt; if (sem.K == 0) { L.suivant = processus_courant; processus_courant.état = bloque; reordonnancement = vrai; } else { sem.K = sem.K-1; } enable_interrupt; }
  • 36.
    Operation V function V(semaphore sem) { disable_interrupt; sem.K = sem.K+1; if (not L.vide) { processus_réveillé = L.tête; processus_réveillé.état = prêt; reordonnancement = vrai; } enable_interrupt; }
  • 37.
    Les cas traitéspar les Sémaphores Producteur et consommateur Lecteur et écrivain Production Consommation Producteur Consommateur Ecriture Lecture Producteur LecteurEcrivain R R
  • 38.
  • 39.
    Producteur créer un documentD verrouiller F ajouter D à la fin de la file F déverrouiller F envoyer un signal au processus consommateur
  • 40.
    Consommateur répéter attendre signal deF tant que F n'est pas vide: pour chaque élément E de F: verrouiller F imprimer E supprimer E de F déverrouiller F fin pour fin tant-que attendre un signal d'un producteur fin répéter
  • 41.
    Algorithme de Peterson .../* i veut entrer en S.C. */ Etat[i] = 1; /* mais il laisse passer j, si j veut entrer */ tour = j; /* attendre que Pj sorte de SC */ while ((Etat[j] == 1) && (tour == j)) {}; /* debut de S.C. */ ... … /* fin de section critique */ Etat[i] = 0; ● Exclusion mutuelle garantie, ● pas d’interblocage ● attente limitée
  • 42.