En informatique, une interruption est un arrêt temporaire de l'exécution normale d'un programme informatique par le microprocesseur afin d'exécuter un autre programme (appelé routine d'interruption).
Dans son acception la plus stricte, le terme ne désigne que des interruptions dont l'exécution est provoquée par des causes externes au programme: avancement d'une horloge, signalisation de la complétion d'un transfert de données, etc. Cependant, on l'utilise aussi pour désigner des exceptions, c'est-à-dire des arrêts provoqués par une condition exceptionnelle dans le programme (instruction erronée, accès à une zone mémoire inexistante, calcul arithmétique incorrect, appel volontaire au système d'exploitation...). On parle alors parfois d'interruptions asynchrones pour désigner celles provoquées par un événement externe, et d'interruptions synchrones pour désigner les exceptions. Ces dernières étaient nommées déroutements en terminologie CII-Honeywell-Bull.
Lors d'une interruption, le microprocesseur sauve tout ou partie de son état interne, généralement dans la pile système, et exécute ensuite une routine d'interruption, généralement en suivant les directive d'une table indiquant pour chaque type d'interruption, le sous programme à exécuter.
Une fois le traitement de l'interruption terminé, la routine se finit normalement par une instruction de retour d'interruption, qui restaure l'état sauvé et fait repartir le processeur de l'endroit où il avait été interrompu. Dans certains cas, la routine d'interruption modifie les adresses de retour, notamment pour effectuer des commutations de tâches.
Lors du fonctionnement de certaines parties du système d'exploitation, il peut être nécessaire de ne pas permettre les interruptions, soit parce que celles-ci perturberaient un compte serré du temps, soit parce que des structures de données sont en cours de modification (on réalise ainsi une sorte de verrou d'exclusion mutuelle dans un système mono-processeur). Aussi, on peut généralement bloquer (on dit souvent masquer) les interruptions. Dans la plupart des systèmes, les interruptions bloquées sont accumulées, c'est-à-dire qu'elles sont exécutées dès qu'elles sont démasquées. Cependant, pour chaque type d'interruption, le compteur d'interruptions en attente se réduit souvent à un simple drapeau; si cela peut ne pas être gênant si l'interruption signale des données en attente sur un périphérique, cela peut cependant occasionner des mauvais comptes si l'interruption déclenche l'incrémentation d'une horloge, si les interruptions sont bloquées pour une durée supérieure à la période de l'horloge.
Sur certains systèmes, il existe une interruption non masquable, généralement dédiée au signalement d'une erreur catastrophique pour le système (par exemple, détection d'une erreur mémoire par code correcteur d'erreurs).
Les interruptions peuvent par ailleurs être hiérarchisées suivant des priorités. Une interruption de priorité supérieure est prise en compte lors du traitement d'une autre interruption, mais une interruption de priorité inférieure est mise en attente.
De façon tout à fait contre-intuitive, c'étaient dans les premiers systèmes les périphériques les plus lents qui étaient affectés des priorités d'interruption les plus hautes. En effet :
Les priorités étaient attribuées en ordre décroissant ainsi : pupitre de commande, lecteur de cartes, imprimante, disque.
Les interfaces graphiques n'ont plus permis que le traitement de l'écho d'un caractère soit traité par une routine de haute priorité (le positionnement de cet écho, en multifenêtrage et avec des polices de taille variable, nécessite en effet plusieurs dizaines de milliers d'opérations), et rendent paradoxalement ces interfaces bien moins réactives dans les situations de forte charge machine, en dépit de l'usage de processeurs considérablement plus puissants.
Les interruptions ont au départ représenté un énorme progrès par rapport au polling de périphériques : en effet, l'unité centrale n'était pas obligée de perdre du temps dans des boucles de polling et n'était sollicitée par les différents périphériques que lorsque quelque chose était à faire.
L'apparition de périphériques très rapides comme les disques SSD qui demandent des dizaines de milliers d'interventions par seconde a sensiblement changé la donne : les sollicitations de l'unité centrale deviennent si nombreuses que les sauvegardes d'états nécessitées par les interruptions deviennent elles-mêmes une source de contre-performance ! Le noyau 2.6.32 de Linux permet donc de basculer lorsque nécessaire du mode interruption au mode polling pour ce type de périphérique.