Interrupt
Da Wikipedia, l'enciclopedia libera.
In informatica, un interrupt è un tipo particolare di istruzione della CPU che consente l'interruzione di un processo qualora si verifichino determinate condizioni oppure il processo in esecuzione debba effettuare una richiesta al sistema operativo. È come un segnale o messaggio, generalmente di natura asincrona, che arriva all'interno della CPU per avvisarla del verificarsi di un certo evento.
Ci sono due tipi di interrupt:
- Interrupt hardware generati da dispositivi esterni alla CPU, che hanno il compito di comunicare il verificarsi di eventi esterni, di solito dispositivi di Input/Output.
- Interrupt software che sono delle istruzioni assembly, tipo INT xx o SYSCALL, che possono essere assimilate alle chiamate di sottoprogrammi, ma che sfruttano il meccanismo delle interruzioni per passare il controllo dal programma chiamante a quello chiamato, e viceversa; vengono utilizzati per accedere direttamente alle risorse del sistema operativo.
Gli interrupt vengono utilizzati principalmente quando:
- un processo tenta di eseguire un'istruzione non valida, come una divisione per zero. In questi casi non è possibile proseguire con l'esecuzione del processo e l'interrupt consente di informare il sistema operativo di quanto avvenuto in modo da permettere la corretta gestione del problema.
- un processo richiede un'operazione di I/O al sistema operativo. Le CPU moderne prevedono la possibilità di utilizzare diversi livelli di privilegi che i processi in esecuzione hanno, per ragioni di sicurezza. Solo il sistema operativo può effettuare alcune operazioni, accedere ad alcune aree di memoria, gestire le periferiche.
- un dispositivo di I/O informa la CPU che è disponibile a ricevere o fornire dati. In questo caso viene avviata un'opportuna procedura del sistema operativo preposta ad occuparsi della relativa periferica. Questo tipo di interrupt necessita una gestione molto attenta, infatti è possibile che due dispositivi abbiano generato un'interrupt durante l' esecuzione di un processo, ed è necessario disporre di meccanismi che evitino conflitti e la perdita di informazioni, ad esempio decidendo quale interrupt ha maggiore priorità e deve essere eseguito per primo e ponendo in coda il secondo.
- il tempo massimo a disposizione per tale processo è raggiunto e lo scheduler deve riassegnare la CPU ad un altro processo in coda.
- viene effettuato il debugging di un'applicazione. Durante la fase di sviluppo di un programma è frequente la necessità di testare il funzionamento di quanto creato per scoprire e risolvere l'origine dei malfunzionamenti. Il debugging consente di seguire l'evoluzione del programma istruzione per istruzione, dando la possibilità di interrompere il processo in qualunque momento per verificare il valore di ogni parametro. Per effettuare questo è necessario che il codice sorgente sia compilato in maniera apposita, in questo caso se il programma viene eseguito sotto il controllo di un apposito programma, il debugger, ad ogni istruzione viene eseguito un interrupt che consente di verificare se in tale punto è richiesto l'interruzione del processo.
[modifica] Gestione degli interrupt
Nel momento in cui il processore riceve una richiesta di interrupt, vi è l'esigenza di determinare quale sia il dispositivo ad averla generata. Vi sono due sistemi principali per farlo
- scansione degli interrupt (polling)
- vettorizzazione degli interrupt
La scansione degli interrupt consiste nell'effettuare una scansione dei dispositivi, interrogando ognuno per un'eventuale conferma della richiesta di interrupt inviata. Quando il dispositivo che ha generato l'interrupt viene interrogato, invierà una conferma al processore e quest'ultimo avvierà la ISR relativa.
La vettorizzazione fa uso di un circuito integrato detto Programmable Interrupt Controller che ha in ingresso un certo numero di linee di interrupt request (IRQ), usate dai dispositivi per richiedere un'interruzione. Quando riceve una richiesta, il PIC si occupa di inviare a sua volta una richiesta di interrupt al processore e, dopo che quest'ultimo ha confermato la richiesta (cosa che potrebbe non avvenire se gli interrupt fossero disabilitati), deposita nel bus dati l'indice del vettore di interrupt relativo alla ISR che gestisce l'interazione con il dispositivo. I vettori sono contenuti in una tabella situata ad una determinata locazione in memoria, predefinita o meno, e chiamata interrupt vector table (interrupt descriptor table per 8086 e IA-32). Ogni vettore contiene i dati che permettono al processore di determinare l'indirizzo in memoria della ISR relativa al dispositivo che ha generato l'interrupt, e di gestire quindi l'operazione di I/O richiesta.
[modifica] Voci correlate
- Gestore di interrupt
- Interrupt request
- Interrupt Service Routine
- Programmable Interrupt Controller
- Advanced Programmable Interrupt Controller
- Non-Maskable interrupt