Sémaphore -- Qu'est ce que c'est??? [Résolu/Fermé]

Signaler
Messages postés
38
Date d'inscription
mardi 9 mars 2010
Statut
Membre
Dernière intervention
23 septembre 2011
-
 abdi-samad -
Bonjour,

Je n'arrive pas à comprendre c'est quoi une sémaphore??A quoi sa sert?? Qu'est ce que
signifie les champs P() et V()? Comment s'en servir????

J'ai bientot un examen sur ça , mais je ne comprends rien. Meme les exos basiques, j'arrive pas à les comprendre . Quelqu'un pourrait-il m'aider à répondre à ces questions???
J'ai fait des recherches sur le net , mais ça ne m'aide pas trop.

De plus, est ce que vous pouvez m'expliquer ce exercice:
il y a une imprimante sur le réseau. Elle est accessible directement. Le papier est à déroulement continue , on peut imprimer une ligne geâce à la procédure ImprimeLigne() et passer à la page suivante grâce à NouvellePage().
1 ) Ecrire un prog qui imprime un fichier donnée.


voici la réponse:
Init(Mutex,1);
P(Mutex);
Repeter :
ImprimeLigne();
NouvellePage();
V(Mutex);

C quoi Mutex ?? Pourquoi on place P(Mutex) avant d'imprimer et V(Mutex ) après l'impression?? A quoi ils servent??

Merci de m'éclaircir sur ce sujet , car ce exo est le plus simple, et je n'y arrive pas. J'ai des exos encore plus difficile.




4 réponses

Messages postés
1928
Date d'inscription
vendredi 21 avril 2006
Statut
Membre
Dernière intervention
5 août 2015
117
Un sémaphore (Mutex en anglais pour MUTual EXclusive) est un objet permettant de protéger l'accès à une ressource.

Par exemple ton imprimante. Si plusieurs utilisateurs ou processus envoient des données à l'imprimante en même temps, l'impression risque de ne pas être lisible !.

Pour éviter cela on met en place un sémaphore. Un processus teste le sémaphore avant d'imprimer : fonction P(mutex). Si le sémaphore est libre, alors P(mutex) lève le sémaphore et rend la main, si le sémaphore est levé, alors P(mutex) attend que le sémaphore soit libre, lève le sémaphore et rend la main.

Charge à toi de libérer le sémaphore avec V(mutex) après ton impression, sinon plus personne ne pourra imprimer, tu vas te faire appeler Arthur !

Compris ?
24
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
38
Date d'inscription
mardi 9 mars 2010
Statut
Membre
Dernière intervention
23 septembre 2011
2
Doncci g compris , le sémaphore permet à un processus à la fois d'accéder à la ressource .

Ainsi on initialise le sémaphore à 1 car on a 1 seul imprimante.
Ensuite le processus teste le sémaphore, s'il est à 1 , alors il est libre donc on peut imprimer. Sinon on attend que la sémaphore soit libre. Mais comment on sait que le sémaphore est libre???
Une fois le sémaphore utilisé , on doit le libérer. C sa???

Une autre question mais si on a 4 imprimante alors comment faire????
Messages postés
67
Date d'inscription
mardi 4 décembre 2007
Statut
Membre
Dernière intervention
28 mai 2010
10
Bonjour,

Je reprend ce qu'a dit tatou en reformulant :

P(Mutex) décrémente la valeur de la variable Mutex jusqu'à atteindre 0.

En d'autres termes, initialement,
Mutex = 1

Suite à P(Mutex), Mutex = Mutex - 1 et donc 0
si un autre processus vient et trouve la valeur de Mutex égale à Zéro, il se bloque et attend que Mutex > 0

L'opération V(Mutex) incémente Mutex, donc si Mutex = 0, après V(Mutex), Mutex = 1.
et donc le processus bloqué auparavant va pouvoir passer.
(et s'il y'a plusieurs processus qui viennent et se bloquent par P(Mutex), ils se placent en file d'attente)

Donc avant tout opération d'accès exclusif, on place P(Mutex), ainsi si la ressource est libre (ressource est libre équivaut à Mutex > 0), le processus va pouvoir la réserver pour lui grace à P(Mutex).
Une fois qu'il a terminé son travail, il dit que la ressource à libre en incrémentant Mutex avec V(Mutex).

Voila.
C'est clair ?
Merci beaucoupp
Merciiiiiii
Très très clair, merci énormément.
C'est très claiiiiiiiiiiiiiiir,Thanks!
Merci frére
Messages postés
1928
Date d'inscription
vendredi 21 avril 2006
Statut
Membre
Dernière intervention
5 août 2015
117
Le sémaphore est unique et accessible à tous les processus voulant imprimer au travers des fonctions P(Mutex) et V(Mutex).

Initialement le Mutex est libre.

Pour le fonctionnement, relis ma première réponse qui était claire je pense.

En interne de P(Mutex) est de la forme :

P(Mutex) {
Si Mutex Libre alors
je marque le mutex
je sors
Sinon
J'attends que le mutex soit libre
je marque le mutex
je sors
fin
}

et V(Mutex)

V(Mutex) {
Je libère le mutex
}

Avec cela s tu n'as pas compris, je te conseille de changer d'orientation :=)

PS : Je ne suis pas 24H/24 sur mon micro pour te répondre !


tatou_38
Angers
Merci pour les explications, vos explications m'ont beaucoup aider à comprendre!
Messages postés
38
Date d'inscription
mardi 9 mars 2010
Statut
Membre
Dernière intervention
23 septembre 2011
2
Quelqi'un pourrait maider???