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() ; ... ...