Information Technology Reference
In-Depth Information
Réservation :
masquer_it; -- prélude de section critique
Si nbplace > 0
alors
réserver une place;
nbplace
=
nbplace - 1;
fsi
démasquer_it; -- postlude de section critique
Cependant, cette solution est moyennement satisfaisante car elle empêche l'exécu-
tion de tous les processus y compris ceux ne désirant pas accéder à la ressource
critique. De plus, le masquage et le démasquage des interruptions sont des opérations
réservées au mode superviseur et ne sont donc pas accessibles pour les processus
utilisateurs. Ce mode de réalisation d'une section critique est donc uniquement utilisé
dans des parties de code sensibles du système d'exploitation, comme par exemple, la
manipulation des files d'attente de l'ordonnanceur.
L'outil sémaphore
Une autre solution est d'utiliser un outil de synchronisation offert par le système
d'exploitation : les sémaphores .
Présentation de l'outil sémaphore
Un sémaphore sem est une structure système composée d'une file d'attente L de
processus et d'un compteur K, appelé niveau du sémaphore et contenant initialement
une valeur val. Cette structure ne peut être manipulée que par trois opérations P(sem),
V(sem) et init(sem, val). Ces trois opérations sont des opérations indivisibles c'est-
à-dire que l'exécution de ces opérations s'effectue interruptions masquées et ne peut
pas être interrompue. Un outil sémaphore peut être assimilé à un distributeur de jetons
dont le nombre initial est fixé par l'opération init. L'acquisition d'un jeton par un
processus donne le droit à ce processus de poursuivre son exécution. Sinon, le
processus est bloqué.
L'opération init
L'opération init a pour but d'initialiser le sémaphore, c'est-à-dire qu'elle met à vide
la file d'attente L et initialise avec la valeur val le compteur K. On définit ainsi le
nombre de jetons initiaux dans le sémaphore.
init(sémaphore sem, entier val)
debut
masquer_it;
sem.K : = val;
sem.L : = vide;
démasquer_it;
fin
 
Search WWH ::




Custom Search