Si chiama “interrupt” un meccanismo hardware/software utilizzato nei
sistemi programmabili (ad esempio nei computer, micorprocessori, etc.)
per consentire di modificare il flusso normale di esecuzione delle operazioni
svolte dall’unità centrale (CPU) in seguito al verificarsi di un
evento: molte periferiche utilizzano questo meccanismo per chiedere l’attenzione
della CPU. Ad esempio ogni volta che si preme un tasto della tastiera
di un computer la circuiteria elettronica della tastiera invia un interrupt
alla CPU che interrompe le operazioni in corso, accetta il carattere digitato
mettendolo in una apposita area di memoria (buffer) e subito dopo riprende
le operazioni interrotte.
La gestione degli interrupt a livello di sistema operativo è
concettualmente assai semplice. Ad ogni periferica gestita in tale modo
viene assegnato un “indirizzo di interrupt” ovvero un numero che la contraddistingue.
Ogni qual volta la particolare periferica deve segnalare un interrupt
manda un apposito segnale sulla linea di interrupt e contemporaneamente
presenta il proprio indirizzo sulle linee di indirizzo di interrupt.
Quando la CPU riceve un segnale di interrupt salva in memoria lo stato
corrente di tutti i registri, legge il valore delle linee di interrupt
ed usa questo valore per indirizzare una tabella, detta tabella (o vettore)
di interrupt. Ad esempio se l’indirizzo di interrupt presentato dalla
periferica è 5, la CPU carica come indirizzo della successiva istruzione
da eseguire il valore contenuto nel quinto elemento del vettore di interrupt.
Naturalmente l’organizzazione del codice eseguibile è fatta in
modo che tale indirizzo corrisponda al codice necessario per effettuare
l’operazione che la periferica richiede; tale blocco di codice viene chiamato
normalmente “sottoprogramma di servizio dell’interrupt”.
L’ultima delle istruzioni di tale sottoprogramma è la particolare
istruzione “Ritorno da interrupt” che ripristina lo stato salvato al momento
dell’interrupt; poiché lo stato comprende anche il registro di
indirizzamento della istruzione successiva, la CPU riprende l’esecuzione
delle istruzioni esattamente dal punto in cui si era interrotta.
Il compito del Sistema Operativo, relativamente al meccanismo di gestione
degli interrupt, consiste essenzialmente nel predisporre i sottoprogrammi
di gestione degli interrupt per tutte le periferiche che devono essere
gestite e preparare in modo adeguato la tabella degli interrupt in modo
che ad ogni particolare interrupt corrisponda l’appropriato sottoprogramma.
Lo stesso meccanismo viene utilizzato per gestire particolari tipi di
errore. Ad esempio quando la CPU esegue una divisione con divisore zero,
viene generato un particolare tipo di interrupt (in questo caso viene
chiamato di solito “exception”) che, esattamente con il meccanismo spiegato
sopra, passa ad eseguire il sottoprogramma che genera il messaggio che
avvisa dell’errore e poi riprende il flusso delle operazioni.