• Aucun résultat trouvé

Principe général rende o s Principe général : rendez-vous

N/A
N/A
Protected

Academic year: 2022

Partager "Principe général rende o s Principe général : rendez-vous"

Copied!
17
0
0

Texte intégral

(1)

Synchronisation

Synchronisation

(2)

Principe général rende o s Principe général : rendez-vous

Une tâche doit pouvoir :

• activer une autre tâche ;

• activer une autre tâche ;

• se bloquer (attendre) ou éventuellement bloquer une autre tâche ;

• débloquer une ou même plusieurs tâches.

Caractérisation des mécanismes de synchronisation

• déblocages mémorisés ou non ; g

• mécanismes directs ou indirects.

(3)

Mécanismes de s nchronisation Mécanismes de synchronisation

Mécanismes directs

bloque(tâche) endort la tâche désignée bloque(tâche) endort la tâche désignée

dort() endort la tâche qui l’exécute é ill ( â h ) é ill l tâ h dé i é

réveille(tâche) réveille la tâche désignée

Mécanismes indirects Mécanismes indirects

• Synchronisation par objets communs, à travers des primitives protégeant les accès concurrents

primitives protégeant les accès concurrents

• Synchronisation par sémaphores privés

1 seule tâche peut exécuter acquire sur ce sémaphore ;

– 1 seule tâche peut exécuter acquire sur ce sémaphore ;

– il est initialisé à 0 pour être toujours bloquant.

(4)

Synchronisation par événements

Un événement a deux états : arrivé ou non_arrivé

M i l ti d i iti

Manipulation par deux primitives :

• signaler (e) : indique que l'événement est arrivé

tt d ( ) bl l tâ h j 'à l'é é t i

• attendre (e) : bloque la tâche jusqu'à ce que l'événement arrive

Ces deux primitives sont exécutées en EXCLUSION MUTUELLE

(5)

Synchronisation par événements

Evénements mémorisés : association d'un booléen et d'une file d'attente

type Evénement = structure procédure signaler(modifié e:Evénement) type Evénement structure

arrivé : booléen;

file : file d'attente;

fin structure;

p g ( )

début

e.arrivé

Å

vrai;

Réveiller toutes les tâches en attente fin structure; Réveiller toutes les tâches en attente

dans e.file fin signaler;

procédure r_a_z(modifié e:Evénement) début

procédure attendre(modifié e:Evénement) début

i i é l

e.arrivé

Å

faux;

fin r_a_z;

si non e.arrivé alors

Mettre la tâche dans e.file dort();

finsi

fin attendre;

(6)

Synchronisation par événements

Evénements non mémorisés : simple file d'attente

procédure signaler(modifié e:Evénement) type Evénement = file d'attente;

p g ( )

début

Débloquer toutes les tâches en attente dans e

dans e fin signaler;

procédure attendre(modifié e:Evénement) début

M tt l tâ h d fil Mettre la tâche dans e.file dort();

fin attendre;

Note : attendre est toujours bloquante

(7)

Rende o s par é énements Rendez-vous par événements

Comment écrire RDV ? procédure RDV();

Comment écrire RDV ?

i : un entier;

p ()

début

i Å i + 1;

si i < n alors e : un Evénement; {Mémorisé}

Initialisation :

si i n alors

attendre(e) sinon {i = n}

signaler(e);

Initialisation :

i Å 0;

r_a_z (e);

signaler(e);

finsi fin RDV;

Pb : accès concurrent à i !

(8)

Rende o s par é énements Rendez-vous par événements

Comment écrire RDV ?

procédure RDV();

début

Comment écrire RDV ?

i : un entier;

début

aquire(mutex) i Å i + 1;

si i < n alors e : un Evénement; {Mémorisé}

mutex : sémaphore

si i < n alors

release(mutex) attendre(e)

i {i }

Initialisation :

i Å 0;

r a z (e);

sinon {i = n}

release(mutex) signaler(e);

r_a_z (e);

init_semaphore(mutex,1) finsi

fin RDV;

(9)

Les monite rs Les moniteurs

Module avec des propriétés particulières

• on n’a accès qu’aux primitives externes (publiques), pas aux variables (privées) ;

l éd t é té l i t ll t

• les procédures sont exécutées en exclusion mutuelle et donc les variables internes sont manipulées en exclusion mutuelle.

mutuelle.

• on peut bloquer et réveiller des tâches. Le blocage et le

réveil s’expriment au moyen de conditions.

(10)

Les monite rs Les moniteurs

Conditions = variables manipulables avec : Conditions variables, manipulables avec :

procédure attendre (modifié c : condition);

début

Bloque la tâche qui l’exécute et l’ajoute dans la file d’attente associée à c Bloque la tâche qui l exécute et l ajoute dans la file d attente associée à c Fin attendre;

fonction vide (c : condition) Æ un booléen;

début

si la file d’attente associée à c est vide alors renvoyer(VRAI)

sinon sinon

renvoyer(FAUX) finsi

Fin vide;

procédure signaler (modifié c : condition);

début

si non vide(c) alors si non vide(c) alors

extraire la première tâche de la file associée à c la réveiller

finsi Fi i l Fin signaler;

(11)

Rendez-vous avec un moniteur

Moniteur RDV;

Point d’entrée Point d’entrée

Arriver Lexique

procédure Arriver();

début

i Å i + 1;

Lexique

n : un entier constant = ??

i : un entier;

i Å i + 1;

si i < n alors

attendre(tous_là);

fi i tous_là : une condition;

Déb t {I iti li ti }

finsi

signaler(tous_là); {Réveil en cascade}

fin Arriver;

Début {Initialisations}

i Å 0;

Fin RDV;

(12)

Communication entre tâches

Partage de mémoire commune + exclusion mutuelle

Modèle général : producteur / consommateur

Producteur Æ Données Æ Consommateur Producteur Æ Données Æ Consommateur

• La communication est en général asynchrone : une des deux tâches travaille en général plus vite que l’autre

travaille en général plus vite que l autre.

• Pour limiter les effets de l’asynchronisme, on insère un tampon entre le producteur et le consommateur :

le producteur et le consommateur :

(13)

Producteur/Consommateur

avec tampon

(14)

Producteur/Consommateur avec tampon

Moniteur Tampon; {Suppose Taille et Message connus}

Points d’entrée déposer, retirer;

Lexique

nb : entier; {Nbre d’élt. dans le tampon (0..Taille)}

non plein non vide : conditions; {Pour le blocage et le réveil}

non_plein, non_vide : conditions; {Pour le blocage et le réveil}

tamp : tableau[0..Taille-1] de Messages;

tête, queue : entier; {O..Taille-1} procédure retirer (consulté m:Message) début

si nb 0 alors procédure déposer (consulté m:Message)

début

si nb = Taille alors

attendre(non plein)

si nb = 0 alors

attendre(non_vide) finsi

{ Enlever m du tampon } attendre(non_plein)

finsi

{Ajouter m au tampon}

nb ‡ nb + 1;

t [ ]

{ p }

m

‡

tamp[tête];

tête

‡

(tête+1) mod Taille;

nb

‡

nb - 1;

tamp[queue] ‡ m;

queue ‡ (queue+1) mod Taille;

signaler(non_vide);

fin déposer;

nb nb 1;

signaler(non_plein);

fin retirer;

Déb t

p ;

Début

nb ‡ 0; tête ‡ 0; queue ‡ 0;

Fin Tampon;

(15)

Démo en ja a

Démo en java…

(16)

Le problème des philosophes qui mangent et pensent…

• 5 philosophes qui mangent et pensent

pensent

• Pour manger il faut 2

fourchettes, droite et gauche

• On en a seulement 5 ! On en a seulement 5 !

• Un problème classique de h i ti

synchronisation

• Illustre la difficulté d’allouer

ressources aux tâches tout en

évitant interblocage et famine

(17)

Références

Documents relatifs

La Commune de Schaerbeek tient à apporter son aide aux associations œuvrant dans le domaine de l’aide aux personnes en situation de handicap.. Elle s’est, pour

Ce principe dépend essentiellement de la conservation des forces vives ; d'après laquelle les vitesses sont déterminées uniquement par les positions des points, sans que les

Attendu que les parties s’entendent pour que la reconnaissance, la confirmation et la continuation des droits ancestraux, y compris le titre aborigène, des Premières Nations de

Disclaimer: layout of this document may differ from the published version. 1

Fixer les supports de plancher (excentrique ou QF) sur la joue (pour meuble entre montants)2. Installer le dos dans les rainures, la séparation, le plafond

Autrement dit: la nature est ainsi faite qu’il est logiquement possible d’établir des lois si fortement définies que seules des constantes susceptibles d’une

Les bornes sont ouvertes si l’inégalité formant l’inéquation est stricte, si la borne correspond à un infini ou à une valeur interdite. Dans tous les autres cas, les bornes

3)L’étudiant tire les 3 questions l’une après l’autre avec remise Calculer la probabilité des événements A, B et C... 2) Même question pour le tirage successif de trois