Svt les sphephores

2329 mots 10 pages
Les sémaphores et leur implémentation 1Rappel :Le concept de sémaphore
Un sémaphore est une variable entière partagée. Sa valeur est positive ou nulle et elle est uniquement manipulable à l’aide de deux opérations wait(s) et signal(s), où s est un identificateur désignant le sémaphore.
• wait(s) décrémente s si s > 0 ; si non, le processus exécutant l’opération wait(s) est mis en attente.
• signal(s) incrémente s. L’exécution de signal(s) peut avoir pour effet
(pas nécessairement
…afficher plus de contenu…

On y accède par le
“stub” suivant. h_stub: ST(r0, User, r31) | sauver
ST(r1, User+4, r31) | les registres
. . .
ST(r30, User+30*4, r31)
CMOVE(KStack, SP) | Charger le SP du système
BR(Svc_handler,LP) | Appel du Handler
LD(r31, User, r0) | restaurer
LD(r31, User+4, r1)
LD(r31, User+30*4, r30)
JMP(XP) | retour à l’application
Il faut noter que l’adresse sauvée dans XP est celle de l’instruction qui suit
SVC.
5Le handler de SVC (suite)
• Le programme Svc_handler identifie la nature de l’appel et passe la main à la routine
…afficher plus de contenu…

/* mémoire partagée */ int in, out = 0; int buf[N]; semaphore n = 0, e = N; append(int v)
{ wait(e); buf[in]= v; in = (in+1) % N; signal(n); } int take()
{ int v; wait(n); v = buf[out]; out = (out+1) % N; signal(e); return v;
}
20Le problème de la zone tampon :
Exclusion mutuelle des opérations
S’il y a plusieurs producteurs ou consommateurs, il faut encore assurer l’exclusion mutuelle des opérations de manipulation du tampon. Un sémaphore additionnel le permet.
/* mémoire partagée */ int in, out = 0; int buf[N]; semaphore n = 0, e = N, s = 1; append(int v)
{ wait(e); wait(s); buf[in] = v; in = (in+1) % N; signal(s); signal(n);
}
int take()
{ int v; wait(n); wait(s); v = buf[out]; out = (out+1) % N; signal(s); signal(e); return v;

en relation