Pourquoi les spinlocks sont utilisés dans les gestionnaires d’interruptions

J’aimerais savoir pourquoi les verrous de rotation sont utilisés à la place des sémaphores dans un gestionnaire d’interruptions.

Les sémaphores entraînent la suspension des tâches en attente, ce qui est inacceptable pour les gestionnaires d’interruption. Fondamentalement, pour une tâche aussi courte et rapide (traitement des interruptions), le travail effectué par le sémaphore est excessif. De plus, les spinlocks ne peuvent pas être tenus par plus d’une tâche.

Le problème est que les gestionnaires d’interruption (IH) sont déclenchés de manière asynchrone et de manière imprévisible, hors du champ de toute autre activité exécutée dans le système. En fait, les IH sont hors du domaine des threads et de la planification. Pour cette raison, toutes les primitives d’exclusion mutuelles qui dépendent du planificateur sont inacceptables. Parce qu’ils utilisent dans l’IH peut considérablement augmenter les latences de traitement des interruptions (dans le cas d’IH s’exécutant dans un contexte de thread peu prioritaire) et peut produire des blocages (dans le cas d’IH s’exécutant dans un contexte de thread qui maintient le verrou).

Vous pouvez consulter la description détaillée des spinlocks à l’ adresse http://www.makelinux.net/ldd3/chp-5-sect-5 .

Quel est le problème avec le sémaphore et le mutex. Et pourquoi spinlock nécessaire?

  • Peut-on utiliser le semaphore ou le mutex dans les gestionnaires d’interruptions . La réponse est oui et non. vous pouvez utiliser le haut et le déverrouillé , mais vous ne pouvez pas utiliser le bas et le verrou , car ce sont des appels bloquants qui mettent le processus en sleep et nous ne sums pas censés dormir dans des gestionnaires d’interruption.
  • Notez que sémaphore n’est pas une technique SystemV IPC, c’est juste une technique de synchronisation. Et il y a trois fonctions pour acquérir le sémaphore.

    • down () : acquiert le sémaphore et le met dans un état non interruptible.

    • down_trylock () : essayez si le verrou est disponible, si le verrou n’est pas disponible, ne dormez pas.

    • up () : – son utile pour libérer le sémaphore
  • Alors, que se passe-t-il si nous voulons réaliser la synchronisation dans les gestionnaires d’interruptions? Utilisez des spinlocks .

Que feront les spinlocks ?

  • Spinlock est un verrou qui ne cède jamais.

  • Semblable à mutex, il a deux opérations – verrouiller et déverrouiller.

  • Si le verrou est disponible, le processus l’acquiert et continue dans la section critique et le déverrouille, une fois que c’est fait. Ceci est similaire au mutex . Mais que se passe-t-il si le verrou n’est pas disponible? Voici la différence intéressante. Avec mutex , le processus sleep jusqu’à ce que le verrou soit disponible. Mais,

en cas de spinlock, il passe dans la boucle étroite, où il vérifie continuellement le locking, jusqu’à ce qu’il soit disponible

.

  • C’est la partie tournante du verrou de rotation. Ceci a été conçu pour les systèmes multiprocesseurs. Mais, avec le kernel préemptible, même un système à un seul processeur se comporte comme un SMP.