Onyest dossier - Instructions spéciales atomiques Ajouter à mes favoris
Sommaire
Systèmes parallèles
Cours
Atomicité et processus
Exclusion mutuelle
Solution fondée sur des r/w atomiques
Instructions spéciales atomiques
Solution au problème : L. LAMPORT (1974)
Les sémaphores
Approche "langage"
TDs
TPs
Probabilités appliquées aux systèmes
Théorie des langages et compilation
VHDL
Suite : Solution au problème : L. LAMPORT (1974)

Instructions spéciales atomiques

On peut construire des algorithmes utilisant des instructions spéciales :

  • SWAP (x,y) qui échange les 2 valeurs x et y (x est un registre local et y un mot mémoire).
  • TAS (y) qui rend y en résultat et met y à 1 (y est un mot mémoire).

Exemple de processus avec SWAP
verrou = 0 est une variable partagée.
Exemple de processus avec TAS
verrou est une variable partagée.
Processus i
cléi = 1 ;
répéter SWAP (clei, verrou) jusqu’à (cléi = 0) ;
Section Critique
SWAP(cléi,verrou)
Invariant : Somme(clei) + verrou = nombre de processus.
Processus i
verrou :=0
tant que Tas(verrou) ne rien faire
Section Critique
verrou :=0

Programme équivalent :
verrou := faux
cléi :=vrai
tant que cléi faire cléi :=TAS(verrou)
Section Critique
verrou := faux

Dans ces deux exemples, on a la SURETE mais pas la vivacité : " FAMINE ". Pour le résoudre, deux solutions sont possibles ; logicielle ou matériel (instruction spéciale). Si on envisage la solution logicielle, il s’agit de placer les processus sur un anneau (priorité tournante). Il nous faut donc des drapeaux…

drap[1..n] de booléens initialisés à faux
Pi
drap[i] :=vrai ;
cléi :=vrai ;
tant que drap[i] et clei faire cléi :=TAS(verrou) ;
drap[i] :=faux ;
Section Critique
j := (i mod n ) + 1 ;
tant que j<>i et non drap[i] faire j := (j mod n) + 1
si j<>i alors drap[j] :=faux sinon verrou :=faux ;
Pour vérifier cette solution, on pourrait faire un graphe comme précédemment. Des logiciels le font très bien.

On peut déjà remarquer que l’on a un nombre fini de variables et un nombre fini d’états.

C’est un Algorithme à JETON.

  • FA(var, inc) qui rend var en résultat et qui fait var := var + inc (Fetch and Add).

Cette instruction permet de mettre en place un algorithme à ticket.
tour[i] =0 est une variable locale, numéro = 0 et suivant = 0 sont des variables partagées.

tour[i] := FA(numéro, 1) ; (a)
tant que tour[i]<>suivant attendre ; (b)
Section Critique (c)
suivant := suivant + 1 ; (d)
L’instruction (a) est équivalente à
tour[i] := numéro ; numéro := numéro +1 ,
il est important qu’elle soit atomique.

Par contre, ce n’est pas gênant que (d) ne le soit pas. On est en effet encore dans la section critique.

Suite : Solution au problème : L. LAMPORT (1974)
Onyest dossier - cours ingénieur informatique et électronique : SPAR, PAS, TLC, VHDL - http://www.onyest.free.fr/dossier/cours - webmaster : novis@chez.com

-