42
Synchronisation sous systeme Linux

Synchronisation sous systeme linux

Embed Size (px)

Citation preview

Page 1: Synchronisation sous systeme linux

Synchronisation sous systeme Linux

Page 2: 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.

Page 3: Synchronisation sous systeme linux

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

Page 4: Synchronisation sous systeme linux

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.

Page 5: Synchronisation sous systeme linux

Exemple : accès à une base de données.

Remarque: Plusieurs processus peuvent la lire simultanément.

Page 6: Synchronisation sous systeme linux

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.

Page 7: Synchronisation sous systeme linux

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 ;}

Page 8: Synchronisation sous systeme linux

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

Page 9: Synchronisation sous systeme linux

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 !

Page 10: Synchronisation sous systeme linux

SémaphoresUn 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.

Page 11: Synchronisation sous systeme linux

Les operationsP (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.

Page 12: Synchronisation sous systeme linux

Operations Initfunction Init (semaphore sem, int val) { disable_Interrupt; sem.K = val; enable_interrupt; }

Page 13: Synchronisation sous systeme linux

Operation Pfunction 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; }

Page 14: Synchronisation sous systeme linux

Operation Vfunction 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; }

Page 15: Synchronisation sous systeme linux

Les cas traités par les SémaphoresProducteur et consommateur

Lecteur et écrivain

Production ConsommationProducteur Consommateur

Ecriture LectureProducteur LecteurEcrivain

R

R

Page 16: Synchronisation sous systeme linux

Producteur et consommateur

Page 17: Synchronisation sous systeme linux

Producteurcréer un document Dverrouiller F ajouter D à la fin de la file Fdéverrouiller Fenvoyer un signal au processus consommateur

Page 18: Synchronisation sous systeme linux

Consommateurré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 producteurfin répéter

Page 19: Synchronisation sous systeme linux

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.

Page 20: Synchronisation sous systeme linux

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; Etat[i] = 0;

• Exclusion mutuelle garantie• Pas d'interblocage

Page 21: Synchronisation sous systeme linux

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

Page 22: Synchronisation sous systeme linux

Réalisé par :Fadwa Gmiden

Page 23: Synchronisation sous systeme linux

Synchronisation sous systeme Linux

Page 24: 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.

Page 25: Synchronisation sous systeme linux

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

Page 26: Synchronisation sous systeme linux

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.

Page 27: Synchronisation sous systeme linux

Exemple : accès à une base de données.

Remarque: Plusieurs processus peuvent la lire simultanément.

Page 28: Synchronisation sous systeme linux

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.

Page 29: Synchronisation sous systeme linux

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 ;}

Page 30: Synchronisation sous systeme linux

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

Page 31: Synchronisation sous systeme linux

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 !

Page 32: Synchronisation sous systeme linux

SémaphoresUn 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.

Page 33: Synchronisation sous systeme linux

Les operationsP (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.

Page 34: Synchronisation sous systeme linux

Operations Initfunction Init (semaphore sem, int val) { disable_Interrupt; sem.K = val; enable_interrupt; }

Page 35: Synchronisation sous systeme linux

Operation Pfunction 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; }

Page 36: Synchronisation sous systeme linux

Operation Vfunction 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; }

Page 37: Synchronisation sous systeme linux

Les cas traités par les SémaphoresProducteur et consommateur

Lecteur et écrivain

Production ConsommationProducteur Consommateur

Ecriture LectureProducteur LecteurEcrivain

R

R

Page 38: Synchronisation sous systeme linux

Producteur et consommateur

Page 39: Synchronisation sous systeme linux

Producteurcréer un document Dverrouiller F ajouter D à la fin de la file Fdéverrouiller Fenvoyer un signal au processus consommateur

Page 40: Synchronisation sous systeme linux

Consommateurré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 producteurfin répéter

Page 41: Synchronisation sous systeme linux

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

Page 42: Synchronisation sous systeme linux

Réalisé par :Fadwa Gmiden