Sémaphore -- Qu'est ce que c'est???
Résolu/Fermé
Spaki
Messages postés
45
Statut
Membre
-
abdi-samad -
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.
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.
A voir également:
- Sémaphore informatique
- Le code ascii en informatique - Guide
- Jargon informatique - Télécharger - Bureautique
- Que veut dire url en informatique - Guide
- Souris informatique - Guide
- Cpu en informatique - Guide
4 réponses
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 ?
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 ?
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 ?
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 ?
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
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
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????