Vous êtes sur la page 1sur 6

Chapitre 5: Synchronisation des processus

 Conditions de Concurrence
 Sections Critiques
 Exclusion Mutuelle
 Sémaphores
 Producteurs et Consommateurs

L'accès simultané aux données partagées peut entraîner des incohérences de données. Le
maintien de la cohérence des données nécessite des mécanismes pour assurer l'exécution
ordonnée des processus coopérants.

5.1. Conditions de Concurrence

Les processus concurrents doivent parfois partager des données (fichiers ou mémoire
commune) et ressources

– On parle donc de tâches coopératives

Si l’accès n’est pas contrôlé, le résultat de l’exécution du programme pourra dépendre de


l’ordre d’entrelacement de l’exécution des instructions.

Un programme pourra donner des résultats différents et parfois indésirables

1
5.2. Sections Critiques

 Partie d’un programme dont l’exécution ne doit pas entrelacer avec autres
programmes
 Une fois qu’un processus y entre, il faut lui permettre de terminer cette section sans
permettre à autres processus de jouer sur les mêmes données
 Lorsqu’un processus manipule une donnée (ou ressource) partagée, nous disons qu’il
se trouve dans une section critique (SC) (associée à cette donnée)

5.3. Exclusion Mutuelle

L’exécution des sections critiques doit être mutuellement exclusive : à tout instant, un seul
processus peut exécuter une SC pour une variable donnée (même lorsqu’il y a plusieurs
processeurs).

Le problème de la section critique est de trouver un algorithme d`exclusion mutuelle de


processus dans l’exécution de leur Section Critiques afin que le résultat de leurs actions ne
dépendent pas de l’ordre d’entrelacement de leur exécution (avec un ou plusieurs
processeurs).

Ceci peut être obtenu en plaçant des instructions spéciales dans les sections d`entrée et
sortie.

Chaque processus doit donc demander une permission avant d’entrer dans une section
critique (SC)

La section de code qui effectue cette requête est la section d’entrée

La section critique est normalement suivie d’une section de sortie

Le code qui reste est la section restante (SR) : non-critique

2
5.4. Sémaphores

Un sémaphore S est un entier qui, sauf pour l'Initialisation, est accessible seulement par ces 2
opérations atomiques et mutuellement exclusives:

– wait(S)
– signal(S)

Il est partagé entre tous les processus qui s`intéressent à la même section critique

Les sémaphores seront présentés en deux étapes :

– sémaphores qui sont standards (busy waiting)


– sémaphores complexes qui utilisent des files d’attente

On fait distinction aussi entre sémaphores compteurs (toute valeur numérique) et sémaphores
binaires (seulement 0 et 1).

Sémaphores standards :

3
Sémaphores complexes :

Utilisation des sémaphores pour sections critiques

5.5. Producteurs et Consommateurs


Le problème des producteurs et des consommateurs est un exemple informatique de
synchronisation de ressources, qui peut s'envisager dans différents contextes de
programmation concurrente, notamment en environnement multi-thread.

Il s'agit de partager entre deux tâches, le producteur et le consommateur, une zone de


mémoire tampon utilisée comme une file.

Le producteur génère un élément de données, l'enfile sur la file et recommence ;


simultanément, le consommateur retire les données de file.

4
Implémentation :
L'implémentation d'un tel algorithme pose souvent de problème, surtout si la mémoire
partagée est de taille fixée, puisqu'il faut alors s'assurer que le producteur ne va pas ajouter
des données sur une file pleine et que le consommateur ne va pas essayer de retirer des
données d'une file vide3.
Différentes solutions peuvent être envisagées. Une solution courante est de modifier le
producteur afin qu'il retienne le nombre de places libres dans la file et se mettre en pause au
lieu d'écrire les données si la file est pleine.
Il faut alors que le consommateur réveille le producteur lorsqu'il a consommé des données et
que la file n'est plus pleine. On implémente également un comportement similaire pour le
consommateur, qui suspend son activité si la file est vide et est réveillé par le producteur si
elle ne l'est plus.
Cette solution peut être mise en place à l'aide de sémaphores ou de la communication inter-
processus.

Exemple
Soit un ensemble de producteurs, un consommateur et une file F . Le problème est de
synchroniser l'accès à une imprimante.
Le code exécuté par les producteurs est le suivant :

créer un document D
verrouiller F
ajouter D à la fin de la file F
déverrouiller F
envoyer un signal au consommateur

5
Le code exécuté par le consommateur :

répéter
attendre un 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

Vous aimerez peut-être aussi