Architecture des systèmes informatiques

Transcription

Architecture des systèmes informatiques
1/17
7:
Synchronisation
I. Ait Sadoune
Architecture des systèmes informatiques
Chapitre 7 : Synchronisation de processus
concurrents
Problèmes de
processus
concurrents
Solutions
Le sémaphore
Idir AIT SADOUNE
CentraleSupélec - Département Informatique
3, rue Joliot-Curie, 91192 Gif-sur-Yvette cedex
<[email protected]>
Année scolaire 2015-2016, Séquence 5
Outline
7:
Synchronisation
I. Ait Sadoune
Problèmes de
processus
concurrents
Solutions
Problèmes de processus concurrents
Solutions
Le sémaphore
2/17
Le sémaphore
Problème de la variable partagée (1)
3/17
7:
Synchronisation
I. Ait Sadoune
solde := 10
Problèmes de
processus
concurrents
Solutions
Le sémaphore
Problème de la variable partagée (2)
4/17
7:
Synchronisation
I. Ait Sadoune
solde := 10
Problèmes de
processus
concurrents
Solutions
Le sémaphore
Problèmes de synchronisation
5/17
7:
Synchronisation
I. Ait Sadoune
Problèmes de synchronisation
I Communication entre processus
I partage de variables, de zones mémoire
I envoi de messages ("boîtes à lettres")
I Partage de ressources
I périphérique (ex : scanner, imprimante)
I fichier
Problèmes de
processus
concurrents
Solutions
Le sémaphore
Problèmes de synchronisation
7:
Synchronisation
I. Ait Sadoune
Problèmes de synchronisation
I Communication entre processus
I partage de variables, de zones mémoire
I envoi de messages ("boîtes à lettres")
I Partage de ressources
I périphérique (ex : scanner, imprimante)
I fichier
Solution par processus dédié
I La ressource n’est pas directement accessible : il faut passer par un
processus dédié
I
I
Serveur d’affichage
Serveur d’impression
I Ne résout pas le problème de la communication entre processus
I N’est pas adaptée aux ressources « de bas niveau »
5/17
Problèmes de
processus
concurrents
Solutions
Le sémaphore
Partage de ressources
6/17
7:
Synchronisation
I. Ait Sadoune
Propriétés nécessaires pour le partage de
ressources
Problèmes de
processus
concurrents
Solutions
I Sûreté : au plus un seul processus utilise la ressource à un moment
donné
I Vivacité :
I
I
un processus obtient l’accès immédiat à une ressource disponible
un processus obtient l’accès à la ressource au bout d’un temps fini
I Efficacité : un processus en attente d’une ressource n’utilise pas le
processeur (il est bloqué)
Le sémaphore
Partage de ressources
7:
Synchronisation
I. Ait Sadoune
Propriétés nécessaires pour le partage de
ressources
Problèmes de
processus
concurrents
Solutions
I Sûreté : au plus un seul processus utilise la ressource à un moment
donné
I Vivacité :
I
I
un processus obtient l’accès immédiat à une ressource disponible
un processus obtient l’accès à la ressource au bout d’un temps fini
I Efficacité : un processus en attente d’une ressource n’utilise pas le
processeur (il est bloqué)
Définitions
I Ressource critique : ressource qui ne doit pas être accédée par
plusieurs processus simultanément
I Section critique : partie du code accédant à une ressource critique
I Exclusion mutuelle : mécanisme gérant l’accès à une section critique
6/17
Le sémaphore
Solutions
7:
Synchronisation
I. Ait Sadoune
Problèmes de
processus
concurrents
Solutions
Le sémaphore
Mauvaise solution 1 : variable verrou
Processus i
while (true) {
while (verrou) ; /* wait */
verrou = true ;
section_critique() ;
verrou = false ;
section_non_critique() ;
}
7/17
I Sûreté non respectée !
I Vivacité non respectée
I Efficacité non respectée
(attente active)
Solutions
7:
Synchronisation
I. Ait Sadoune
Problèmes de
processus
concurrents
Mauvaise solution 2 : alternat
Processus 1
while (true) {
while (tour != 1) ; /* wait */
section_critique() ;
tour = 2 ;
section_non_critique() ;
}
Processus 2
while (true) {
while (tour != 2) ; /* wait */
section_critique() ;
tour = 1 ;
section_non_critique() ;
}
8/17
Solutions
Le sémaphore
I Sûreté OK
I Vivacité non respectée
I Efficacité non respectée
(attente active)
I Utilisation non optimale des
ressources si un processus
est bien plus lent que l’autre
Quelles contraintes ?
9/17
7:
Synchronisation
I. Ait Sadoune
Problèmes de
processus
concurrents
Assurer l’efficacité
I Un processus en attente de ressources doit être bloqué
I Nécessité d’une prise en charge par le système d’exploitation
Solutions
Le sémaphore
Quelles contraintes ?
7:
Synchronisation
I. Ait Sadoune
Problèmes de
processus
concurrents
Assurer l’efficacité
I Un processus en attente de ressources doit être bloqué
I Nécessité d’une prise en charge par le système d’exploitation
Assurer la sûreté
I Faire un test sur une variable et la modifier de façon non interruptible =
atomique = non préemptible
I Nécessité d’une prise en charge par le système d’exploitation (qui
décide ce qui est préemptible...)
I Ou d’un support matériel (instruction TSL : Test and Set Lock)
9/17
Solutions
Le sémaphore
Mécanisme classique : le sémaphore
10/17
7:
Synchronisation
I. Ait Sadoune
Problèmes de
processus
concurrents
Solutions
Le sémaphore
Utilisation des sémaphores
7:
Synchronisation
I. Ait Sadoune
Définition
Un sémaphore est un compteur de ressources
disponibles
11/17
Problèmes de
processus
concurrents
Solutions
Le sémaphore
Utilisation des sémaphores
7:
Synchronisation
I. Ait Sadoune
Définition
Un sémaphore est un compteur de ressources
disponibles
Problèmes de
processus
concurrents
Solutions
Le sémaphore
Example
I
Accès à un parc de N imprimantes
I
I
11/17
sémaphore I initialisé à N :
I = new Semaphore(N, true) ;
/* Notation Java pour I.init(N)
Demande une gestion équitable de la file d’attente
(FIFO)*/
utilisation d’une imprimante :
I.acquire() ;
//utilisation
I.release() ;
Demi rendez-vous
12/17
7:
Synchronisation
I. Ait Sadoune
I
Un processus produit une information, un autre la
consomme
I
Le consommateur attend le producteur
Problèmes de
processus
concurrents
Solutions
Le sémaphore
Demi rendez-vous
7:
Synchronisation
I. Ait Sadoune
I
Un processus produit une information, un autre la
consomme
I
Le consommateur attend le producteur
Example
Semaphore info = new Semaphore(0, true) ;
12/17
Producteur
Consommateur
produit_info() ;
...
info.release() ;
info.acquire() ;
...
utilise_info() ;
...
...
Problèmes de
processus
concurrents
Solutions
Le sémaphore
Rendez-vous
13/17
7:
Synchronisation
I. Ait Sadoune
I
Deux processus souhaitent synchroniser leur
exécution
Problèmes de
processus
concurrents
I
Ils s’attendent l’un l’autre (le premier arrivé attend le
second)
Solutions
Le sémaphore
Rendez-vous
7:
Synchronisation
I. Ait Sadoune
I
Deux processus souhaitent synchroniser leur
exécution
Problèmes de
processus
concurrents
I
Ils s’attendent l’un l’autre (le premier arrivé attend le
second)
Solutions
Example
Semaphore p1 = new Semaphore(0, true) ;
Semaphore p2 = new Semaphore(0, true) ;
13/17
Processus 1
Processus 2
p1.release() ;
p2.release() ;
p2.acquire() ;
p1.acquire() ;
...
...
Le sémaphore
Variable partagée
14/17
7:
Synchronisation
I. Ait Sadoune
I
Une variable est modifiée par plusieurs processus
I
–> section critique vis-à-vis de la variable –>
exclusion mutuelle
Problèmes de
processus
concurrents
Solutions
Le sémaphore
Variable partagée
7:
Synchronisation
I. Ait Sadoune
I
Une variable est modifiée par plusieurs processus
I
–> section critique vis-à-vis de la variable –>
exclusion mutuelle
Problèmes de
processus
concurrents
Solutions
Le sémaphore
Example
Semaphore mutex = new Semaphore(1, true) ;
14/17
Processus 1 (crédit)
Processus 2 (débit)
mutex.acquire() ;
mutex.acquire() ;
solde = solde + 30 ;
solde = solde - 30 ;
/* LDA solde
/* LDA solde
ADD #30
SUB #25
STA solde */
STA solde */
mutex.release() ;
mutex.release() ;
Sémaphore d’exclusion mutuelle : Mutex
15/17
7:
Synchronisation
I. Ait Sadoune
Problèmes de
processus
concurrents
Solutions
I
Sémaphore qui représente un jeton d’accès à un
ensemble de sections critiques
I
Initialisé à 1 : 1 jeton disponible au maximum
Le sémaphore
Sémaphore d’exclusion mutuelle : Mutex
7:
Synchronisation
I. Ait Sadoune
Problèmes de
processus
concurrents
Solutions
15/17
I
Sémaphore qui représente un jeton d’accès à un
ensemble de sections critiques
I
Initialisé à 1 : 1 jeton disponible au maximum
Entrée dans une section
critique
Sortie d’une section
critique
obtenir le jeton
rendre le jeton
–> mutex.acquire()
–> mutex.release()
Le sémaphore
Autre mécanisme
7:
Synchronisation
I. Ait Sadoune
Les moniteurs (Hoare, 1974)
16/17
I Un moniteur est un module constitué de :
I variables inaccessibles de l’extérieur
I fonctions en exclusion mutuelle (au plus une en cours d’exécution
à un moment donné)
I Nécessite un support du langage de programmation
I mot-clé "synchronized" en Java
Problèmes de
processus
concurrents
Solutions
Le sémaphore
Autre mécanisme
7:
Synchronisation
I. Ait Sadoune
Les moniteurs (Hoare, 1974)
I Un moniteur est un module constitué de :
I variables inaccessibles de l’extérieur
I fonctions en exclusion mutuelle (au plus une en cours d’exécution
à un moment donné)
I Nécessite un support du langage de programmation
I mot-clé "synchronized" en Java
Variable partagée en Java (moniteurs)
class Compte {
private int solde = 0 ;
public synchronized void credit(int montant) {
solde = solde + montant ;
}
public synchronized void debit(int montant) {
solde = solde - montant ;
}
}
16/17
Problèmes de
processus
concurrents
Solutions
Le sémaphore
Interblocage (deadlock)
7:
Synchronisation
I. Ait Sadoune
Problèmes de
processus
concurrents
Solutions
Un rendez-vous mal écrit
Le sémaphore
Semaphore p1 = new Semaphore(0, true) ;
Semaphore p2 = new Semaphore(0, true) ;
17/17
Processus 1
Processus 2
p1.acquire() ;
p2.acquire() ;
p2.release() ;
p1.release() ;
...
...