Qu'est-ce que Interruption ?

Mécanisme du CPU qui suspend temporairement le traitement en cours, en réponse par exemple à une requête d'un périphérique, pour exécuter en priorité le traitement correspondant, puis reprend le traitement initial.

Nom japonais: 割り込み

« Interruption » apparaît dans 44 questions d'entraînement réparties sur 12 thèmes, dont Systèmes embarqués et firmware, Système d'exploitation et matériel, CPU et architecture.

Domaine: CPU et architecture

Ce qui se passe lors de la prise en compte d'une interruption

Lorsqu'un périphérique, un timer ou une autre source lève une interruption et que celle-ci est autorisée, le CPU sauvegarde dans des registres dédiés l'adresse de l'instruction suivante ainsi que des éléments d'état comme le mode de privilège et le bit d'autorisation des interruptions. Il obtient un numéro de vecteur correspondant à la cause, lit l'adresse de début du gestionnaire dans la table des vecteurs d'interruption mise en place par le système d'exploitation, et y saute. Le gestionnaire sauvegarde les registres qu'il utilise, sert le périphérique, acquitte la source d'interruption, restaure l'état et revient au moyen d'une instruction spéciale comme mret ou sret en RISC-V, qui restaure le mode et l'adresse de retour de manière atomique.

Interruptions, exceptions et scrutation

Les interruptions sont asynchrones : un tic d'horloge ou un paquet réseau arrive quelle que soit l'instruction en cours d'exécution. Les exceptions comme les défauts de page, la division par zéro ou un appel système volontaire (ecall en RISC-V) sont synchrones, causées par une instruction précise. La scrutation (polling), dans laquelle le CPU lit régulièrement l'état du périphérique, est l'alternative aux interruptions. Les interruptions sont préférables lorsque les événements sont rares ou que le CPU doit dormir, mais chacune coûte une sauvegarde d'état et un saut : à des fréquences d'événements très élevées, comme en réseau rapide, une scrutation par lots peut être plus efficace.

Priorités, masquage et latence

Un contrôleur d'interruptions arbitre les requêtes simultanées, souvent à l'aide d'un encodeur de priorité, et avec l'imbrication, une interruption plus prioritaire peut préempter un gestionnaire moins prioritaire, comme avec le NVIC des Arm Cortex-M. Le logiciel peut masquer les interruptions, mais une interruption non masquable (NMI) est réservée aux événements graves comme les erreurs mémoire non corrigeables ou l'expiration du chien de garde (watchdog). La latence d'interruption dans le pire cas est surtout fixée par la plus longue section exécutée avec les interruptions désactivées ; les systèmes d'exploitation scindent donc le traitement en une partie urgente courte et un travail différé, effectué plus tard avec les interruptions autorisées. Les périphériques PCI Express signalent leurs interruptions par des écritures en mémoire (MSI) au lieu de fils dédiés.

Pièges du code embarqué

Les gestionnaires doivent être courts : pas de printf ni de boucles d'attente, seulement le transfert de données vers un tampon ou le positionnement d'un indicateur pour la boucle principale. Les variables partagées avec un gestionnaire doivent être déclarées volatile, faute de quoi le compilateur risque de ne les lire qu'une seule fois. Une mise à jour en lecture-modification-écriture comme reg |= mask peut perdre un bit modifié entre-temps par un gestionnaire, et un microcontrôleur 8 bits qui lit un compteur 32 bits peut voir des octets à moitié mis à jour ; désactiver brièvement les interruptions règle les deux problèmes. Une interruption de timer périodique, par exemple 16 MHz divisé par 16 et compté jusqu'à 1000 pour obtenir 1 ms, fournit le tic système.

S'entraîner : questions sur Interruption

Comment appelle-t-on la pratique d'un fabricant d'équipements consistant à pouvoir s'approvisionner en produits équivalents auprès d'un autre fournisseur, en prévision d'une interruption de l'approvisionnement d'un semi-conducteur ?

  1. ASeconde source (approvisionnement multiple)
  2. BTape-out
  3. CShrink
Afficher la réponse et l'explication

Réponse : A. Seconde source (approvisionnement multiple)

La seconde source consiste à pouvoir s'approvisionner en composants de même fonction et de mêmes spécifications auprès de plusieurs fournisseurs. Même si l'approvisionnement d'un fournisseur s'interrompt à la suite d'un accident d'usine, d'une catastrophe ou d'une tension sur l'offre, la production peut continuer, et la position dans les négociations de prix est meilleure. Autrefois, les clients exigeant une seconde source, certains fabricants accordaient des licences de fabrication à d'autres sociétés. L'expérience de la pénurie de semi-conducteurs lui a redonné de l'importance.

Quelle est l’explication générale de la différence entre interruption et exception ?

  1. AL’interruption est provoquée uniquement par le logiciel, l’exception uniquement par les circuits matériels
  2. BL’interruption est due à une cause externe comme un périphérique, l’exception résulte de l’exécution d’une instruction
  3. CAprès une interruption, on ne peut pas revenir au traitement initial, alors qu’après une exception on y revient toujours
Afficher la réponse et l'explication

Réponse : B. L’interruption est due à une cause externe comme un périphérique, l’exception résulte de l’exécution d’une instruction

L’interruption est due à une cause externe sans rapport avec l’instruction en cours, comme une notification de fin d’entrée/sortie ou un timer, et survient à un moment imprévisible (asynchrone). L’exception résulte de l’exécution d’une instruction particulière, comme une division par zéro, une instruction illégale, un défaut de page ou une instruction d’appel système (synchrone). Dans les deux cas, on revient souvent au traitement initial après le gestionnaire ; ce n’est pas la possibilité de retour qui les distingue.

Questions fréquentes

Quelle est la différence entre une interruption et une exception ?

Une interruption est asynchrone et provient de l'extérieur du flot d'instructions, par exemple d'un timer ou d'un périphérique d'E/S. Une exception est synchrone, déclenchée par l'exécution d'une instruction particulière, comme un défaut de page, une instruction illégale ou un appel système.

Qu'est-ce qu'une table des vecteurs d'interruption ?

C'est une table, mise en place par le système d'exploitation ou le firmware, qui associe à chaque numéro d'interruption ou d'exception l'adresse de début de son gestionnaire. Le CPU l'utilise pour sauter vers la bonne routine selon la cause.

Pourquoi un gestionnaire d'interruption doit-il rester court ?

Pendant l'exécution d'un gestionnaire, les interruptions de priorité égale ou inférieure sont généralement retenues et le programme principal est suspendu : un gestionnaire long augmente donc la latence de tout le reste. Les traitements lourds sont reportés à une tâche ou à la boucle principale, qui s'exécutent avec les interruptions autorisées.

« Interruption » dans les explications

Questions mentionnant « Interruption » (44)

  1. Comment appelle-t-on la pratique d'un fabricant d'équipements consistant à pouvoir s'approvisionner en produits équivalents auprès d'un autre fournisseur, en prévision d'une interruption de l'approvisionnement d'un semi-conducteur ?
  2. Quelle est l’explication générale de la différence entre interruption et exception ?
  3. Quel est le déroulement général du traitement lorsque le CPU accepte une interruption ?
  4. Quel est le rôle de la table des vecteurs d’interruption ?
  5. Pourquoi divise-t-on le traitement d’un gestionnaire d’interruption en une partie courte exécutée immédiatement et une partie restante exécutée plus tard dans un contexte normal ?
  6. Pour revenir au programme initial après le traitement d’une interruption ou d’une exception, pourquoi utiliser une instruction de retour dédiée (sret, mret, etc. en RISC-V) plutôt que l’instruction de retour de fonction ordinaire ?
  7. Dans un système exigeant un comportement temps réel, quel facteur est le plus susceptible d’allonger le délai entre l’apparition d’une interruption et le démarrage du gestionnaire (latence d’interruption) ?
  8. Un temporisateur compte une horloge de 16 MHz divisée par 16 par le prédiviseur et déclenche une interruption tous les 1000 comptes. Quel est l'intervalle entre interruptions ?
  9. Lorsque le programme ci-dessus est compilé avec optimisation, led_on() peut ne pas être appelée même si l'interruption de temporisateur survient. Quelle combinaison de cause et de remède est correcte ?
  10. Sur un microcontrôleur 8 bits, une interruption de temporisateur incrémente une variable 32 bits ticks, et le traitement principal lit ticks pour calculer le temps écoulé. Quelle est la cause des valeurs parfois très erronées ?
  11. Parmi les méthodes de connaissance de l'état d'un périphérique, quelle différence entre scrutation (polling) et interruption est correcte ?
  12. Sur un microcontrôleur à interruptions hiérarchisées, une interruption de haute priorité survient pendant l'exécution du gestionnaire d'une interruption de faible priorité. Que se passe-t-il généralement (imbrication des interruptions autorisée) ?
  13. Dans quel cas la sortie d'une porte OR à 2 entrées vaut-elle 0 ?
  14. Lorsque plusieurs circuits à sortie à drain ouvert sont reliés à une même ligne de signal munie d'une résistance de pull-up, quel est le fonctionnement correct ?
  15. Quel mécanisme du processeur suspend temporairement le traitement en cours pour traiter en priorité une demande, par exemple d'un périphérique externe ?

Comparatifs incluant ce terme

Termes associés

Microcontrôleur Gestionnaire d'interruption RTOS (OS temps réel) Défaut de page (page fault) Appel système Adresse de retour Scrutation (polling) DMA (accès direct à la mémoire) Éditeur de liens (linker) Chien de garde (watchdog timer)

Retour au glossaire