9
votes

Pourquoi les spinlocks sont utilisés dans les gestionnaires d'interruption

J'aimerais savoir pourquoi les serrures de spin sont utilisées à la place des sémaphores à l'intérieur d'un gestionnaire d'interruption.


0 commentaires

3 Réponses :


14
votes

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.


8 commentaires

@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 () 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.



2
votes

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).

Vous pouvez regarder une description jolie et détaillée des Spinocks à http: // www .Makelinux.net / LDD3 / CHP-5-SECT-5 .


0 commentaires

3
votes

Quel est le problème avec le sémaphore et le mutex. Et pourquoi Spinlock avait besoin?

  • Pouvons-nous utiliser le SEMAPHORE ou mutex dans Handlers d'interruption . La réponse est oui et non. Vous pouvez utiliser la up et déverrouiller , mais vous ne pouvez pas utiliser bas et verrouillage , car ils bloquent des appels qui placent le processus à dormir et nous ne sommes pas censés dormir dans des gestionnaires d'interruption.
  • 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.

    • bas () : Acquérir le sémaphore et mettre dans l'état non interruptible.

    • down_tryLock () : Essayez si le verrouillage est disponible, si le verrouillage n'est pas disponible, ne dormez pas.

    • up () : - c'est utile pour libérer le sémaphore
    • Donc, que si nous voulons atteindre la synchronisation dans les gestionnaires d'interruption? Utilisez spinlocks .

      ce que les spinlocks feront ?

      • spinlock est un verrou qui ne donne jamais.

      • similaire au mutex, il a deux opérations - verrouillage et déverrouillage.

      • 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 à mutex . Mais, Et si le verrou n'est pas disponible? ici, vient la différence intéressante. Avec mutex , le processus SLEEZ , jusqu'à ce que le verrouillage soit disponible. Mais,

        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

        .

        • C'est la partie tournante de la serrure de spin. Ceci a été conçu pour les systèmes multiprocesseurs. Mais, avec le noyau préemptible, même un système uniprocesseur se comporte comme un SMP.

0 commentaires