Allocation de ressources (priorités)C’est le principe client/serveur, on dispose d’une ressource à accès exclusif. On utilise donc un sémaphore mutex initialisé à 1. Celui ci entoure la section critique : P(mutex) ; SC ; V(mutex). Dans le cas d'un fonctionnement en FIFO, le sémaphore est dit fort.
Si maintenant l'on désire réaliser une allocation de ressource avec priorité mais sans préemption (celui qui arrive est plus prioritaire que celui qui possède la ressource, ce dernier la garde), un seul sémaphore ne suffit pas. Il faut que chaque processus appelle les procédures demander(i) et liberer. Entre ces deux appel, il pourra utiliser la ressource. i sert à calculer la priorité.
demander(i) |
structures |
liberer |
P(mutex) si occupe alors bloque[i] := vrai V(mutex) P(b[i]) sinon occupe := vrai V(mutex) finsi |
occupe booleen init faux mutex séma init 1 b[1..n] séma init 0 bloque[1..n] booleen init faux |
P(mutex) si il existe un b[j] bloque alors soit k le processus bloque prioritaire, bloque[k] := faux V(b[k]) sinon occupe := faux finsi | |