Service de noyau i_disable
Objectif
Désactive les priorités d'interruption.
Syntaxe
#include <sys/types.h>
#include <sys/errno.h>
#include <sys/intr.h> int new;
Paramètre
| Article | Descriptif |
|---|---|
| nouveau | Indique la nouvelle priorité d'interruption. |
Descriptif
Attention: The I_disable service has two side effects that result from the replaceable and pageable nature of the kernel. Tout d'abord, elle empêche la répartition des processus. Deuxièmement, elle garantit, dans les limites, que la pile de l'appelant est en mémoire. Les erreurs de page qui se produisent lorsque la priorité d'interruption n'est pas égale à INTBASE plantant le système.
Le service I_disable définit la priorité d'interruption vers une priorité d'interruption plus favorisée. La priorité d'interruption est utilisée pour contrôler les interruptions autorisées.
La valeur INTMAX est la priorité la plus favorisée et désactive toutes les interruptions. La valeur INTBASE est la moins favorisée et désactive uniquement les interruptions non utilisées. Le fichier /usr/include/sys/intr.h définit des priorités d'interruption valides.
La priorité d'interruption est modifiée uniquement pour sérialiser le code exécuté dans plusieurs environnements (c'est-à-dire les environnements de processus et d'interruption).
Par exemple, un pilote de périphérique relie généralement les demandes dans une liste lors de l'exécution dans le processus appelant. Le gestionnaire d'interruption du pilote d'unité utilise généralement cette liste pour lancer la requête suivante. Par conséquent, le pilote de périphérique doit sérialiser la mise à jour de cette liste avec les interruptions d'unité. Les services I_disable et I_enable offrent cette possibilité. Le service de noyau I_init contient une brève description des gestionnaires d'interruption.
Le service I_disable doit toujours être utilisé avec le service I_enable . Une routine doit toujours retourner avec la priorité d'interruption restaurée à la valeur qu'elle avait lors de l'entrée.
Le service Masque peut être utilisé lorsqu'une routine doit désactiver son périphérique dans une déclaration.
En raison de ces effets secondaires, l'appelant du service I_disable doit s'assurer que:
- Les paramètres de référence sont réservés.
- Le code exécuté au cours de l'opération de désactivation est bloqué.
- La quantité de pile utilisée pendant l'opération de désactivation est inférieure à 1KB.
- Les programmes appelés utilisent moins que 1KB de la pile.
En général, l'appelant du service I_disable doit également appeler uniquement les services qui peuvent être appelés par les gestionnaires d'interruption. Toutefois, les processus qui appellent le service I_disable peuvent appeler les services _sommeil, E_attente, E_sleepl, Verrouillageet Unlockl tant que le mot d'événement ou le mot de verrouillage est épingle.
Le gestionnaire d'interruption de premier niveau du noyau définit la priorité d'interruption d'un gestionnaire d'interruption avant d'appeler le gestionnaire d'interruption. La priorité d'interruption d'un processus est définie sur INTBASE lorsque le processus est créé et fait partie de l'état de chaque processus. Le répartiteur définit la priorité d'interruption sur la valeur associée au processus à exécuter.
Environnement d'exécution
Le service de noyau I_disable peut être appelé à partir de l'environnement Processus ou Interruption .
Valeur renvoyée
Le service I_disable renvoie la priorité d'interruption en cours qui est ensuite utilisée avec le service I_enable .