Comment régler les problèmes de synchronisation? P-A. Champin



Documents pareils
Cours de Systèmes d Exploitation

Problèmes liés à la concurrence

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

On appelle variable condition une var qui peut être testée et

Les processus légers : threads. Système L3, /31

École Polytechnique de Montréal. Département de Génie Informatique et Génie Logiciel. Cours INF2610. Contrôle périodique.

INTRODUCTION À LA PROGRAMMATION CONCURRENTE

Gestion des processus

Chapitre 4 : Exclusion mutuelle

Série TD 3. Exercice 4.1. Exercice 4.2 Cet algorithme est destiné à prédire l'avenir, et il doit être infaillible! Exercice 4.3. Exercice 4.

Cours 2: Exclusion Mutuelle entre processus (lourds, ou légers -- threads)

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig

L exclusion mutuelle distribuée

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

1 Mesure de la performance d un système temps réel : la gigue

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

Introduction à la programmation concurrente

Cours Bases de données 2ème année IUT

Synchro et Threads Java TM

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Guide de démarrage rapide Centre de copies et d'impression Bureau en Gros en ligne

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

Programmation Objet - Cours II

Programmation C++ (débutant)/instructions for, while et do...while

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

REALISATION d'un. ORDONNANCEUR à ECHEANCES

gestion des processus La gestion des processus

Bases de données avancées Concurrence d'accès et reprise

Exercices INF5171 : série #3 (Automne 2012)

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Systemes d'exploitation des ordinateurs

Introduction aux Systèmes et aux Réseaux

Trousse de sécurité d'alarme - NVR

Définition du compte courant

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE

Cours Programmation Système

Guide d'utilisation du Serveur USB

Exécutif temps réel Pierre-Yves Duval (cppm)

Les diagrammes de modélisation

Chapitre 1 : Introduction aux bases de données

1. Contexte général page Le compte auprès de la BCGE...page La procuration 2.2 Les accès e-banking 2.3 Le bon de retrait 2.

Projet gestion d'objets dupliqués

Messages d'erreurs. Redémarrez votre PC en cliquant sur Démarrer, en sélectionnant ensuite Arrêter puis en cochant Redémarrer

CEG4566/CSI4541 Conception de systèmes temps réel

Gestion des transactions et accès concurrents dans les bases de données relationnelles

Algorithmique et Programmation, IMA

Création d'un questionnaire (sondage)

Systèmes Répartis. Mr. Mehrez Boulares, Mr. Nour Ben Yahia

Recherche dans un tableau

I. Introduction aux fonctions : les fonctions standards

Traitement de texte : Quelques rappels de quelques notions de base

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Ordonnancement temps réel

Logiciel SCRATCH FICHE 02

1. Création d'un état Création d'un état Instantané Colonnes Création d'un état Instantané Tableau... 4

Cours de Base de Données Cours n.12

Le chiffre est le signe, le nombre est la valeur.

Introduction : les processus. Introduction : les threads. Plan

Algorithmique avec Algobox

Le langage C. Séance n 4

Partie 7 : Gestion de la mémoire

Module SMS pour Microsoft Outlook MD et Outlook MD Express. Guide d'aide. Guide d'aide du module SMS de Rogers Page 1 sur 40 Tous droits réservés

Chapitre 4 Pierre, papier, ciseaux

Algorithmique et structures de données I

Algorithmes de recherche

LES TOUT PREMIERS PAS

Utiliser Subversion (SVN) avec Tortoise

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

Service Info Destinataires... Centres agréés Date... 7 septembre 2012 Produit/système... Chronotachygraphe numérique DTCO Page...

EXTRACTION ET RÉINTÉGRATION DE COMPTA COALA DE LA PME VERS LE CABINET

CHAPITRE VIII : Les circuits avec résistances ohmiques

CPLN 20/08/2009 MBO Service ICT et Pédagogie

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

TRUECRYPT SUR CLEF USB ( Par Sébastien Maisse 09/12/2007 )

Définition des Webservices Ordre de paiement par . Version 1.0

La sauvegarde (backup) de votre comptabilité a pour but de vous permettre de retrouver vos données si un incident est survenu.

Correction TD algorithmique

Plateforme PAYZEN. Définition de Web-services

Chap III : Les tableaux

P our appeler : Décrochez le combiné et composez le numéro OU Composez le numéro et décrochez le combiné

TP3 : Manipulation et implantation de systèmes de fichiers 1

Cours d Informatique

UTILISATION DE LA BORNE PAR LE CLIENT

Vers l'ordinateur quantique

Bases de programmation. Cours 5. Structurer les données

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Cours 1 : Qu est-ce que la programmation?

Les différents types de données et leurs opérations de base

Le module Supply Chain pour un fonctionnement en réseau

LE PROBLEME DU PLUS COURT CHEMIN

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Réplication des données

DAns un système d exploitation multiprogrammé en temps partagé, plusieurs

Timy. Programme Doublage ("Backup") Français

Transcription:

S y s t è m e d ' e x p l o i t a t i o n S é a n c e 5 Comment régler les problèmes de synchronisation? P-A. Champin Département Informatique IUT A Université Claude Bernard Lyon 1 2009 S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 1

P r o b l é m a t i q u e s Ressource critique Problème des producteurs/consommateurs Problème des lecteurs/rédacteurs Problème des philosophes Exclusion mutuelle au sein du SE S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 2

P r o b l é m a t i q u e s Ressource critique Problème des producteurs/consommateurs Problème des lecteurs/rédacteurs Problème des philosophes Exclusion mutuelle au sein du SE S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 3

R e s s o u r c e c r i t i q u e E x e m p l e s a n s p r o b l è m e tâche 1 (compte += 1000) tâche 2 (compte -= 500) ressources compte r1 r2 charger (r1, compte) charger (r2, 1000) ajouter (r1, r2) écrire (r1, compte) sauvegarde contexte 2000 2000 0 2000 2000 1000 2000 3000 1000 3000 3000 1000 3000 1000 restauration contexte 0 0 charger (r1, compte) 3000 3000 0 charger (r2, 500) 3000 3000 500 soustraire (r1, r2) 3000 2500 500 écrire (r1, compte) 2500 2500 500 S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 4

R e s s o u r c e c r i t i q u e E x e m p l e a v e c u n p r o b l è m e tâche 1 (compte += 1000) tâche 2 (compte -= 500) ressources compte r1 r2 charger (r1, compte) 2000 2000 0 charger (r2, 1000) 2000 2000 1000 ajouter (r1, r2) 2000 3000 1000 commutation de contexte 0 0 charger (r1, compte) 2000 2000 0 charger (r2, 500) 2000 2000 500 soustraire (r1, r2) 2000 1500 500 écrire (r1, compte) 1500 1500 500 commutation de contexte 3000 1000 écrire (r1, compte) 3000 3000 1000 S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 5

D é f i n i t i o n s a u t o u r d e l a n o t i o n d e r e s s o u r c e c r i t i q u e Une ressource est dite ressource critique lorsque des accès concurrents à cette ressources peuvent résulter dans un état incohérent On parle aussi de situation de compétition (race condition) pour décrire une situation dont l'issue dépend de l'ordre dans lequel les opérations sont effectuées Une section critique est une section de programme manipulant une ressource critique S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 6

D é f i n i t i o n : E x c l u s i o n m u t u e l l e Une section de programme est dite atomique lorsqu'elle ne peut pas être interrompue par un autre processus manipulant les mêmes ressources critiques c'est donc une atomicité relative à la ressource Un mécanisme d'exclusion mutuelle sert à assurer l'atomicité des sections critiques relatives à une ressource critique en anglais : mutual exclusion, ou mutex S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 7

E x c l u s i o n m u t u e l l e M i s e e n o e u v r e entier compte proc entrer_sc_compte () proc sortir_sc_compte () afficher («Ajout de 1000») entrer_sc_compte () compte += 1000 sortir_sc_compte () afficher («Ajout effectué») afficher («Retrait de 500») entrer_sc_compte () compte -= 500 sortir_sc_compte () afficher («Retrait effectué») S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 8

E x c l u s i o n m u t u e l l e C r i t è r e s d ' é v a l u a t i o n Exclusion : deux tâches ne doivent pas se trouver en même temps en SC Progression : une tâche doit pouvoir entrer en SC si aucune autre ne s'y trouve Équité : une tâche ne devrait pas attendre indéfiniment pour entrer SC L'exclusion mutuelle doit fonctionner dans un contexte multi-processeurs S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 9

E x c l u s i o n m u t u e l l e P r i n c i p e d ' u n e s o l u t i o n On associe à la ressource un jeton, que les processus peuvent prendre et reposer Seul le processus possédant le jeton devrait manipuler la ressource Donc, si un processus souhaite manipuler la ressource et que le jeton est pris, il doit d'abord attendre que le jeton redevienne disponible Utilisation d'un sémaphore initialisé à 1 S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 10

E x c l u s i o n m u t u e l l e E x e m p l e int compte = 2000; sem_t mutex_compte = sem_open("/compte", flags, mode, 1); printf ("Ajout de 1000 \n"); sem_wait (mutex_compte); compte += 1000; sem_post (mutex_compte); printf ("Ajout effectué\n"); printf ("Retrait de 500 \n"); sem_wait (mutex_compte); compte -= 500; sem_post (mutex_compte); printf ("Retrait effectué\n"); S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 11

R e m a r q u e s s u r l e p r o b l è m e d e r e s s o u r c e c r i t i q u e Certaines opérations sur la ressource critiques ne nécessitent pas forcément d'exclusion mutuelle exemple : lecture de la valeur du compte (si on accepte que la valeur lue devienne rapidement invalide...) Le mécanisme d'exclusion mutuelle n'est pas une protection, mais une convention entre les processus souhaitant utiliser la ressource sans la corrompre il est toujours possible de manipuler la ressource sans «prendre le jeton» S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 12

R e m a r q u e s u r l e s s e c t i o n s c r i t i q u e s ( 1 ) Les sections critiques sont un mal nécessaire : un mal, parce qu'elles empêches le parallélisme qu'on a eu tant de mal à mettre en place... elles réduisent donc les performances nécessaire, parce qu'elles garantissent l'intégrité des ressources critiques Conséquence : lorsqu'on peut les éviter, il faut le faire (structures de données toujours cohérentes) S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 13

R e m a r q u e s u r l e s s e c t i o n s c r i t i q u e s ( 2 ) Étant donné qu'un processus en section critique est susceptible d'en bloquer d'autres, il est souhaitable qu'il reste le moins longtemps possible en section critique, et surtout qu'il ne s'y bloque pas. // n'écrivez pas : sem_wait (mutex_compte); printf ("Ajout de 1000 \n"); compte += 1000; sem_post (mutex_compte); // mais écrivez : printf ("Ajout de 1000 \n"); sem_wait (mutex_compte); compte += 100; sem_post (mutex_compte); S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 14

D é f i n i t i o n : I n t e r - b l o c a g e Un interblocage (deadlock) esr une situation ou deux processus (ou plus) sont bloqués en attente d'un événement qui doit être produit par l'autre sem_wait (mutex_a); utiliser_ressource(a); sem_wait (mutex_b); utiliser_ressources(a,b); //... sem_wait (mutex_b); utiliser_ressource(b); sem_wait (mutex_a); utiliser_ressources(a,b); //... S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 15

I n t e r - b l o c a g e S o l u t i o n p o s s i b l e Une manière d'éviter les inter-blocages consiste à toujours réclamer les ressources dans le même ordre (quitte à libérer une ressource avant de la réclamer à nouveau) sem_wait (mutex_a); utiliser_ressource(a); sem_wait (mutex_b); utiliser_ressources(a,b); //... sem_wait (mutex_b); utiliser_ressource(b); sem_post (mutex_b); sem_wait (mutex_a); sem_wait (mutex_b); utiliser_ressources(a,b); //... S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 16

P r o b l é m a t i q u e s Ressource critique Problème des producteurs/consommateurs Problème des lecteurs/rédacteurs Problème des philosophes Exclusion mutuelle au sein du SE S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 17

P r o d u c t e u r s - c o n s o m m a t e u r s S c é n a r i o Un ensemble de processus, divisé en deux catégories, partage une zone mémoire Les premiers (producteurs) remplissent la mémoire partagée, avec des éléments la mémoire ne peut contenir qu'un nombre d'éléments limité et connu à l'avance Les seconds (consommateurs) utilisent ces éléments et les retirent de la mémoire Exemple : file d'impression S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 18

P r o d u c t e u r s - c o n s o m m a t e u r s I l l u s t r a t i o n P1 P2 a b Zzz... C1 S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 19

P r o d u c t e u r s - c o n s o m m a t e u r s I l l u s t r a t i o n P1 Zzz... P2 b a Zzz... C1 S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 20

P r o d u c t e u r s - c o n s o m m a t e u r s I l l u s t r a t i o n P1 P2 c a b Zzz... C1 S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 21

P r o d u c t e u r s - c o n s o m m a t e u r s I l l u s t r a t i o n Zzz... P1 P2 c d a b C1 S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 22

P r o d u c t e u r s - c o n s o m m a t e u r s I l l u s t r a t i o n P1 P2 d a c b C1 S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 23

P r o d u c t e u r s - c o n s o m m a t e u r s I l l u s t r a t i o n P1 P2 e a c d b C1 S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 24

P r o d u c t e u r s - c o n s o m m a t e u r s I l l u s t r a t i o n Zzz... P1 P2 e f a c d b C1 S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 25

P r o d u c t e u r s - c o n s o m m a t e u r s P r o b l è m e Un producteur doit se bloquer lorsque la mémoire partagée est pleine Un consommateur doit se bloquer lorsque la mémoire partagée est vide S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 26

P r o d u c t e u r s - c o n s o m m a t e u r s S o l u t i o n p r i n c i p e ( 1 ) Utilisation de deux sémaphores, implémentant les deux critères de blocage l'un représente le nombre de cases libres l'autre représente le nombre de cases occupées Analogie : deux piles de jetons, avec une quantité de jetons constante les jetons passent d'une pile dans une autre lorsqu'une case change d'état S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 27

P r o d u c t e u r s - c o n s o m m a t e u r s S o l u t i o n p r i n c i p e ( 2 ) Si les opérations sur la zone mémoire partagée ne sont pas atomiques, il faut les protéger par une section critique troisième sémaphore S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 28

P r o d u c t e u r s - c o n s o m m a t e u r s S o l u t i o n A l g o r i t h m e sémaphore pleines(0), vides(n), mutex (1) élément tab[n] proc Producteur : tant que VRAI: élément e produire() sem_wait(vides) sem_wait(mutex) ajouter(e, tab) sem_post(mutex) sem_post(pleines) proc Consommateur : tant que VRAI: sem_wait(pleines) sem_wait(mutex) élément e retirer(tab) sem_post(mutex) sem_post(vides) consommer(e) S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 29

P r o d u c t e u r s - c o n s o m m a t e u r s R e m a r q u e s Dans l'algorithme précédent, l'ordre dans lequel les sémaphores sont utilisés est primordial, sans quoi on risque un inter-blocage Les opérations de production et de consommation à proprement parler doivent être en dehors des sections critiques sans quoi seul un processus pourrait s'exécuter à un moment donné De même, elles doivent être en dehors du «passage de jeton» entre pleines et vides S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 30

P r o b l é m a t i q u e s Ressource critique Problème des producteurs/consommateurs Problème des lecteurs/rédacteurs Problème des philosophes Exclusion mutuelle au sein du SE S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 31

L e c t e u r s - r é d a c t e u r s S c é n a r i o Un ensemble de processus, divisé en deux catégories, partage une zone mémoire Certains processus (les lecteurs) font des accès en lecture seule à cette zone D'autres processus (les rédacteurs) modifient le contenu de cette zone NB : on parle parfois d'écrivains plutôt que de rédacteurs S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 32

L e c t e u r s - r é d a c t e u r s P r o b l è m e Lorsqu'un rédacteur accède à la mémoire partagée, aucune autre processus (qu'il soit lecteur ou rédacteur) ne doit y avoir accès problème d'exclusion mutuelle classique En revanche, les lecteurs peuvent être plusieurs à utiliser la zone en même temps, cela ne pose pas de problème S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 33

L e c t e u r s - r é d a c t e u r s S o l u t i o n - P r i n c i p e On protège la mémoire partagée par une exclusion mutuelle, mais... les lecteurs n'ont besoin de cette exclusion mutuelle que si aucun autre lecteur n'utilise la mémoire ; pour le vérifier, ils utilisent un compteur (nombre de lecteurs en train d'utiliser la zone), lui aussi protégé par une exclusion mutuelle S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 34

L e c t e u r s - r é d a c t e u r s S o l u t i o n A l g o r i t h m e sémaphore mutex_m(1), mutex_c(1) entier c // nombre de lecteurs proc Rédacteur : sem_wait(mutex_m) écrire() sem_post(mutex_m) proc Lecteur : sem_wait(mutex_c) si c = 0 alors sem_wait(mutex_m) c c + 1 sem_post(mutex_c) lire() sem_wait(mutex_c) si c = 1 alors sem_post(mutex_m) c c - 1 sem_post(mutex_c) S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 35

L e c t e u r s - r é d a c t e u r s R e m a r q u e s Le lecteur qui prend le jeton de mutex_m n'est pas forcément celui qui le rend On note que les lecteurs peuvent parfois se bloquer dans la section critique du compteur c. Cela peut-il créer des inter-blocages? L'algorithme proposé fonctionne, mais n'assure pas l'équité : un rédacteur peut attendre indéfiniment avant d'avoir accès à la mémoire (famine) Comment le modifier pour assurer l'équité? S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 36

P r o b l é m a t i q u e s Ressource critique Problème des producteurs/consommateurs Problème des lecteurs/rédacteurs Problème des philosophes Exclusion mutuelle au sein du SE S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 37

P r o b l è m e d e s p h i l o s o p h e s S c é n a r i o ( D i j k s t r a ) Cinq philosophes passent leur vie à penser et manger autour d'une table Pour manger, ils ont besoin de deux fourchettes, mais il n'y a que cinq fourchettes Illustration : Benjamin Esham http://en.wikipedia.org/wiki/image:dining_philosophers.png S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 38

P r o b l è m e d e s p h i l o s o p h e s P r o b l è m e Proposer un algorithme qui évite : les inter-blocages la famine Mauvaise solution : chaque philosophe, lorsqu'il a faim, prend la fourchette de gauche, puis celle de droite, mange, puis les repose S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 39

P r o b l è m e d e s p h i l o s o p h e s S o l u t i o n - P r i n c i p e Chaque philosophe a trois états : «je pense», «j'ai faim», «je mange» par lesquels il passe toujours dans cet ordre Lorsqu'il a faim, un philosophe ne peut manger que si ses deux voisins ne mangent pas, sinon attend Lorsqu'il termine de manger, le philosophe réveille ses voisins et se remet à penser S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 40

P r o b l è m e d e s p h i l o s o p h e s S o l u t i o n - A l g o r i t h m e proc CommenceManger(id) : sem_wait(mutex) états[id] FAIM ok état[id-1] MANGE et état[id+1] MANGE si ok alors état[id] MANGE sem_post(mutex) sinon sem_post(mutex) sem_wait(réveils[id]) sémaphore mutex(1), réveils[n] // init 0 entier états[n] // init PENSE proc FinitManger(id) : sem_wait(mutex) états[id] PENSE si état[id-1] = FAIM et état[id-2] MANGE alors état[id-1] MANGE sem_post(réveils[id-1]) // idem pour i+1 et i+2 sem_post(mutex) S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 41

P r o b l è m e d e s p h i l o s o p h e s R e m a r q u e s L'algorithme proposé prévient les inter-blocages, mais pas la famine Pour l'améliorer, une solution consiste à ne réveiller un voisin que si son autre voisin (id±2) n'est pas dans l'état FAIM depuis trop longtemps / depuis plus longtemps que lui S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 42

P r o b l é m a t i q u e s Ressource critique Problème des producteurs/consommateurs Problème des lecteurs/rédacteurs Problème des philosophes Exclusion mutuelle au sein du SE S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 43

B e s o i n Les appels systèmes manipules de nombreuses structures Exemple : PCB, table des fichiers ouverts, descripteur de fichier ouvert, table de pages, etc... Dans un système multi-processeurs, plusieurs appels systèmes peuvent s'exécuter en même temps nécessité d'exclusion mutuelle au sein des appels systèmes S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 44

P r o b l è m e ( 1 ) Implémentation naïve d'un sémaphore Problème : les deux algorithmes sont des sections critiques pour le compteur c et la file d'attente des processus bloqués proc sem_wait(sem) : si sem.c = 0 alors bloquer le processus finsi sem.c sem.c - 1 proc sem_post(sem) : sem.c sem.c + 1 si un processus est bloqué en attente du sémaphore alors débloquer ce processus finsi S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 45

P r o b l è m e ( 2 ) Protection de la section critique par une exclusion mutuelle : il faut utiliser autre chose qu'un sémaphore! proc sem_wait(sem) : entrer_en_sc() si sem.c = 0 alors sortir_de_sc() bloquer le processus sinon sem.c sem.c - 1 sortir_de_sc() finsi proc sem_post(sem) : entrer_en_sc() sem.c sem.c + 1 si un processus est bloqué en attente du sémaphore alors débloquer ce processus sem.c sem.c - 1 finsi sortir_de_sc() S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 46

A t t e n t e a c t i v e Attente active : le processeur est occupé à attendre par opposition à un processus bloqué, qui n'utilise pas le processeur Implémentation naïve de l'exclusion mutuelle n'assure pas l'exclusion... proc enter_sc() : tant que verrou faire <rien> fintant verrou VRAI global booléen verrou = FAUX proc sortir_sc() : verrou FAUX S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 47

S o l u t i o n m a t é r i e l l e L'instruction processeur TEST_AND_SET consulte et change une variable en une seule action (atomique) si la variable est à 1, elle retourne 1 si la variable est à 0, elle la met à 1 et retourne 0 Supprime la situation de compétition entre le test de la boucle et l'affectation du verrou proc enter_sc() : tant que TEST_AND_SET(verrou) faire <rien> fintant S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 48

S o l u t i o n s l o g i c i e l l e s Il existe des solutions purement logicielles (i.e. qui ne nécessitent pas l'existence d'instruction atomique pour tester et modifier une variable) algorithme de Peterson algorithme de la Boulangerie Mécanismes plus complexe qu'un simple verrou, pour ne rien avoir à faire après l'attente active tableau de verrous notion de tour S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 49

I m p l é m e n t a t i o n e f f e c t i v e d u s é m a p h o r e ( 1 ) proc sem_wait(sem) : entrer_en_sc() si sem.c = 0 alors sortir_de_sc() bloquer le processus sinon sem.c sem.c - 1 sortir_de_sc() finsi proc sem_post(sem) : entrer_en_sc() sem.c sem.c + 1 si un processus est bloqué en attente du sémaphore alors débloquer ce processus sem.c sem.c - 1 finsi sortir_de_sc() S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 50

I m p l é m e n t a t i o n e f f e c t i v e d u s é m a p h o r e ( 2 ) proc sem_wait(sem) : entrer_en_sc() si sem.c = 0 alors masquer_interruption() sem.f.ajouter(processus) processus.état BLOQUÉ sortir_de_sc() dé-masquer_interruption() rendre_la_main() sinon sem.c sem.c - 1 sortir_de_sc() finsi proc sem_post(sem) : entrer_en_sc() sem.c sem.c + 1 si non f.est_vide() alors p sem.f.retirer() p.état ÉLIGIBLE sem.c sem.c - 1 finsi sortir_de_sc() S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 51

E n c o n c l u s i o n Les sémaphores permettent de régler de nombreux problèmes de synchronisation entre processus Problèmes classiques Au sein du système d'exploitation, des mécanismes de synchronisation «bas niveau» sont également nécessaires : attente active avec TEST_AND_SET S5 - Comment régler les problèmes de synchronisation? - P-A. Champin - IUT A - 2007 52