J'aimerais savoir pourquoi les serrures de spin sont utilisées à la place des sémaphores à l'intérieur d'un gestionnaire d'interruption. P>
3 Réponses :
Semaphores Cause des tâches de dormir sur la conflit, ce qui est inacceptable pour interrompre les gestionnaires. Fondamentalement, pour une telle tâche rapide et rapide (manipulation d'interruption), les travaux effectués par le sémaphore sont surchargés. En outre, les spinlocks ne peuvent pas être détenus par plus d'une tâche. P>
@MFUKAR Je connais la raison mais je n'ai pas compris pourquoi la double acquisition d'impasse peut se produire à cause de dormir et non tout en utilisant des serrures de spin
Aussi je voudrais savoir pourquoi spin_tryLock () est nécessaire?
@Mousey: Double-acquisition Deadlocks ne peut pas se produire avec des spinlocks, car si un spinock est partagé avec un gestionnaire d'interruption, tous les casiers de Spinlock doivent utiliser la variante d'interruption-désactivation de la fonction de verrouillage.
@CAF qui partage Spin Lock avec un gestionnaire d'interruption? Pouvez-vous s'il vous plaît expliquer. De même, les mautexs peuvent être faits de la même manière. Nous pouvons désactiver toutes les interruptions.
@mousey: spin_trylock () code> est couramment utilisé lorsque la section critique est facultative et peut être ignorée.
@Mousey: Quelqu'un partage une serrure de spin avec un gestionnaire d'interruption s'ils accèdent aux mêmes données partagées que le gestionnaire d'interruption fait. Les mutiles ne peuvent pas désactiver les interruptions, car si vous désactivez les interruptions et dormir, vous ne vous réveillerez jamais!
@caf maintenant je l'ai eu. Merci beaucoup.
Semblait avoir manqué le point que lorsqu'une interruption utilise un spinlock, il est nécessaire de répondre au cas où le logiciel s'exécute sur un autre processeur - le gestionnaire d'interruptions s'élève tandis que l'autre processeur termine son accès à la ressource et les versions surveillées. le spinlock. Si un gestionnaire d'interruption - courir avec des interruptions désactivées - frappe un spinock verrouillé maintenu par un fil sur le même processeur, vous avez une impasse. Comme mentionné ci-dessus, le mutex entre un thread et un gestionnaire d'interruptions sur le même processeur est géré par les interruptions invalidantes du fil.
Le problème est que les gestionnaires d'interruption (IH) sont déclenchés de manière asynchrone et imprévisible, hors de la portée de toute autre activité exécutée dans le système. En fait, la SII est à l'écart du concept de threads et de planification du tout. En raison de la part de toutes les primitives d'exclusion mutuelle qui dépendent du planificateur sont inacceptables. Parce qu'elles utilisent dans l'IH, peuvent augmenter considérablement les latences de traitement des interruptions (en cas d'exécution de l'IH dans le contexte du fil à faible priorité) et est capable de produire des blocages (dans le cas d'IH en cours d'exécution dans le contexte du thread). p>
Vous pouvez regarder une description jolie et détaillée des Spinocks à http: // www .Makelinux.net / LDD3 / CHP-5-SECT-5 . P>
Quel est le problème avec le sémaphore et le mutex. Et pourquoi Spinlock avait besoin? Strong> P>
Notez que le sémaphore n'est pas une technique Systemv IPC, ses techniques de synchronisation juste. Et il y a trois fonctions pour acquiert le sémaphore. P>
bas () strong>: Acquérir le sémaphore et mettre dans l'état non interruptible. P> li>
down_tryLock () strong>: Essayez si le verrouillage est disponible, si le verrouillage n'est pas disponible, ne dormez pas. P> LI>
Donc, que si nous voulons atteindre la synchronisation dans les gestionnaires d'interruption? Utilisez spinlocks forts>. P> li>
ul>
spinlock est un verrou qui ne donne jamais. p> li>
similaire au mutex, il a deux opérations - verrouillage et déverrouillage. p> li>
Si le verrouillage est disponible, le processus l'acquérira et continuera dans la section critique et le déverrouille, une fois que c'est fait. Ceci est similaire à En cas de spinlock, il passe dans la boucle serrée, où elle
vérifie en continu une serrure, jusqu'à ce qu'elle soit disponible p>
blockQuote>
. p>
SEMAPHORE code> ou
mutex code> dans Handlers d'interruption fort>. La réponse est oui et non. Vous pouvez utiliser la
mutex code>. Mais, Et si le verrou n'est pas disponible? Em> ici, vient la différence intéressante. Avec
mutex code>, le processus
SLEEZ CODE>, jusqu'à ce que le verrouillage soit disponible. Mais, p> li>
ul>