Pourquoi la désactivation des interruptions désactive le noyau de la préemption et comment verrou de rotation désactive la préemption

Je suis de lecture Noyau Linux Développement récemment, et j'ai quelques questions liées à la désactivation de préemption.

  1. Dans le "Contrôle d'Interruption" du chapitre 7, il est dit:

    En outre, la désactivation des interruptions désactive également le noyau de préemption.

    J'ai aussi lu dans le livre que le noyau de préemption peut se produire que dans des cas:

    Lorsqu'un gestionnaire d'interruption des sorties, avant de retourner à noyau de l'espace.

    Lorsque le code du noyau devient preemptible de nouveau.

    Si une tâche dans le noyau appelle explicitement schedule()

    Si une tâche dans ther noyau blocs (qui se traduit par un appel à l'annexe())

    Mais je ne peux pas raconter la désactivation des interruptions avec ces cas.

  2. Autant que je sache, un spinlock désactiver la préemption avec le preempt_disable() fonction.

    Le post Quelles sont exactement les "spin locks"?
    dit:

    Sur un seul core de la machine spinlock est tout simplement un "désactiver les interruptions" ou "raise IRQL qui empêche le fil de la planification complètement.

    Ne preempt_disable() désactiver la préemption par la désactivation des interruptions?

OriginalL'auteur feirainy | 2013-12-25