Interruption vs polling : différences et cas d'utilisation

Un processeur dispose de deux moyens pour savoir qu'un périphérique a besoin d'attention. Avec le polling, le CPU vérifie en boucle l'état du périphérique. Avec les interruptions, le périphérique envoie un signal au CPU, qui suspend ce qu'il fait, exécute un petit gestionnaire puis reprend. Le polling est simple et prévisible mais fait perdre du temps ; les interruptions sont efficaces et réactives mais ajoutent un surcoût et rendent le programme plus difficile à analyser.

CritèrePollingInterruption
FonctionnementLe CPU lit de façon répétée un registre d'état pour savoir si le périphérique est prêtLe périphérique émet un signal ; le CPU suspend son travail et exécute un gestionnaire d'interruption (ISR)
Utilisation du CPU pendant l'attenteOccupé : le CPU consacre des cycles à la vérificationLibre : le CPU peut effectuer d'autres tâches ou se mettre en veille
Temps de réponseFixé par la fréquence de vérification de la boucle ; prévisibleRapide (quelques microsecondes), mais variable selon le masquage, la priorité et la sauvegarde du contexte
SurcoûtConstant, même lorsqu'il ne se passe rienUn coût par événement ; une fréquence d'événements très élevée peut submerger le CPU (tempête d'interruptions)
ComplexitéSimple à écrire et à déboguerPlus complexe : les gestionnaires doivent être courts, et les données partagées avec le code principal demandent des précautions (volatile, accès atomique)
ConsommationMaintient le CPU éveilléPermet une veille basse consommation jusqu'à ce qu'un événement réveille le CPU
Comportement temporelFacile à analyserDes bugs de concurrence sont possibles entre le gestionnaire et le code principal
Usages typiquesÉvénements très rapides ou continus, programmes simples, pilotes réseau haut débitTimers, boutons, événements de communication, alertes de capteurs, sortie de veille

Les valeurs indiquées sont des ordres de grandeur typiques et varient selon la génération de procédé et le produit.

Quand choisir l'un ou l'autre ?

Polling
Lorsque les événements sont fréquents ou la boucle simple, et qu'on veut une temporisation prévisible sans la complexité des gestionnaires.
Interruption
Lorsque les événements sont rares ou imprévisibles, qu'on veut une réponse rapide et une faible consommation, et que le CPU a d'autres tâches à effectuer.
Hybride
Certains systèmes les combinent : une interruption signale le premier événement, puis le pilote passe en polling tant que le trafic est intense, comme dans les pilotes réseau haut débit.

Questions fréquentes

Lequel est le meilleur, les interruptions ou le polling ?

Aucun ne l'est toujours. Les interruptions offrent une réponse rapide et permettent au CPU de se mettre en veille, tandis que le polling est simple et prévisible. Utilisez les interruptions pour les événements rares et le polling pour les événements très fréquents.

Que doit faire un gestionnaire d'interruption ?

Être court : faire le minimum, positionner un indicateur ou mettre le travail en file d'attente, puis rendre la main. Un travail long ou des appels bloquants dans un gestionnaire nuisent à la réactivité.

Qu'est-ce qu'une tempête d'interruptions ?

Une situation où les événements arrivent si vite que le CPU passe tout son temps à entrer dans les gestionnaires et à en sortir. Les pilotes réseau haut débit passent alors en polling.

Pourquoi les interruptions économisent-elles l'énergie ?

Le CPU peut rester en veille jusqu'à ce qu'un événement le réveille, au lieu de se réveiller constamment pour vérifier.

Vérifier vos connaissances

Parmi les méthodes de connaissance de l'état d'un périphérique, quelle différence entre scrutation (polling) et interruption est correcte ?

  1. AEn scrutation, le processeur vérifie l'état de façon répétée ; en interruption, le périphérique avertit le processeur lorsque l'état change
  2. BLa scrutation et l'interruption sont identiques
  3. CL'interruption est la méthode où le processeur vérifie l'état de façon répétée
Afficher la réponse et l'explication

Réponse : A. En scrutation, le processeur vérifie l'état de façon répétée ; en interruption, le périphérique avertit le processeur lorsque l'état change

La scrutation est simple et son intervalle de vérification fixe rend le comportement prévisible, mais le processeur vérifie en permanence même lorsque rien ne se passe, gaspillant temps et énergie. Avec les interruptions, le processeur ne réagit qu'en cas de changement et peut effectuer d'autres traitements ou se mettre en veille entre-temps. Toutefois, des interruptions très fréquentes alourdissent au contraire le traitement ; il faut donc choisir judicieusement.

Que convient-il le plus d'éviter dans un gestionnaire d'interruption ?

  1. AÉcrire 1 dans une variable drapeau pour avertir le traitement principal
  2. BEffacer le bit indiquant la cause de l'interruption
  3. CDes traitements longs, comme l'affichage d'une longue chaîne par printf ou une boucle d'attente jusqu'à un événement
Afficher la réponse et l'explication

Réponse : C. Des traitements longs, comme l'affichage d'une longue chaîne par printf ou une boucle d'attente jusqu'à un événement

Pendant qu'un gestionnaire d'interruption s'exécute longuement, les autres interruptions ne sont pas servies et le traitement principal est également arrêté. printf met du temps à terminer l'affichage et peut lui-même utiliser des interruptions ; il est donc particulièrement dangereux. Le gestionnaire se limite au strict minimum, comme recevoir une donnée dans un tampon ou lever un drapeau, et confie les traitements lourds au traitement principal ou à une tâche. Il ne faut pas non plus oublier d'effacer le bit de cause.

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

  1. ALe gestionnaire de faible priorité est interrompu, celui de haute priorité s'exécute, puis l'exécution reprend dans le gestionnaire de faible priorité
  2. BL'interruption de haute priorité est ignorée jusqu'à la fin du gestionnaire de faible priorité
  3. CLes deux gestionnaires s'exécutent simultanément, en parallèle, sur le même processeur
Afficher la réponse et l'explication

Réponse : A. Le gestionnaire de faible priorité est interrompu, celui de haute priorité s'exécute, puis l'exécution reprend dans le gestionnaire de faible priorité

Avec des priorités d'interruption, une interruption urgente est traitée même pendant l'exécution d'un autre gestionnaire. Par exemple, en donnant une priorité élevée à la détection de surintensité d'un moteur et une priorité faible à la réception de communications, la surintensité est traitée immédiatement même pendant une réception. Le NVIC des Cortex-M d'Arm, entre autres, dispose de ce mécanisme. Les interruptions de priorité égale ou inférieure attendent la fin du gestionnaire en cours.

  1. 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 ?
  2. Pendant que le traitement principal manipule un bit de registre par « reg |= mask; » (lecture-modification-écriture), si un gestionnaire d'interruption modifie un autre bit du même registre, quelle combinaison de problème possible et de remède est correcte ?
  3. 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 ?

Questions d'entraînement sur Systèmes embarqués et firmware

Termes clés expliqués

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.
Scrutation (polling)
Méthode où le CPU interroge de façon répétée l'état d'un périphérique pour en détecter les changements. Simple, mais elle consomme du temps et de l'énergie même lorsque rien ne se passe.
Gestionnaire d'interruption
Routine exécutée par le CPU lorsqu'une interruption ou une exception survient. Elle sauvegarde l'état du traitement interrompu, effectue le traitement selon la cause, puis reprend le traitement initial. En principe, elle doit être aussi courte que possible.

Comparatifs associés