Eccezione (informatica)
Da Wikipedia, l'enciclopedia libera.
In informatica, il termine eccezione è usato per descrivere l'occorrenza di diversi tipi di condizioni che alterano il normale flusso di controllo ed esecuzione di un microprocessore programmabile o di un programma.
Indice |
[modifica] Eccezioni hardware
Tradizionalmente, il termine si applica a condizioni individuate dall'hardware: per esempio, una divisione per zero causa un'eccezione hardware che interrompe l'esecuzione del programma. Generalizzando, si può affermare che un'eccezione è il risultato di una qualunque causa che impedisca al processore di eseguire un'istruzione.
Le eccezioni si possono dividere nei seguenti tipi:
- trap: accesso non consentito in memoria, divisione per 0, disconnessione dalla rete, errore di trasferimento dati a stampante;
- interrupt: richiesta spesso asincrona e di provenienza esterna al microprocessore che forza il sistema operativo a interrompere il programma in esecuzione;
- system call: chiamate di un programma ad una funzione del sistema operativo, ad esempio per eseguire una operazione su un file o su un processo.
Le eccezioni possono essere quindi inattese, previste o addirittura volute dal programmatore. Al verificarsi di un'eccezione, il processore sospende l'esecuzione del programma corrente e passa ad una routine predefinita del sistema operativo. Tale routine può avere compiti speciali (ad esempio, un interrupt è spesso usato per ricevere dati dalle periferiche), o può anche terminare il programma nel caso non possa fare nulla per risolvere il problema, come nel caso classico della divisione per zero.
[modifica] Eccezioni software
Il termine eccezione è stato riutilizzato in molti linguaggi di programmazione ad alto livello, come per esempio Ada, C++ e Java.
In questo contesto, un'eccezione è un meccanismo per interrompere l'esecuzione di un sottoprogramma e propagare l'errore ad un livello più alto del programma stesso. Figurativamente, l'eccezione viene generata in basso, e trappata, o catturata più in alto.
Ciò permette di scrivere il codice assumendo che tutto fili liscio, demandando a routine specializzate il compito di risolvere eventuali problemi incontrati durante il percorso. In contrasto con l'approccio di linguaggi meno evoluti come il C standard, dove in pratica ogni condizione di errore deve essere controllata "sul posto", si ottiene un codice più chiaro e una gestione più logica degli errori. Nel caso di linguaggio ad oggetti, le eccezioni sono degli oggetti come tutti gli altri ed è possibile quindi usarle per memorizzare una notevole mole di informazioni riguardo all'errore occorso.
Normalmente il programmatore deve prevedere esplicitamente quali condizioni di errore possono generare un'eccezione e come risolverle. Trascurare di catturare un'eccezione fa sì che essa venga propagata al livello più alto possibile, cioè al sistema operativo, che tipicamente termina il programma.
[modifica] Bibliografia
- (EN) Mayan Moughdill e Stamatis Vassiliadis, Precise Interrupts, IEEE Micro, 1996, pp.58–67. Ristampa liberamente disponibile (PDF).
- Contiene una descrizione dettagliata dei diversi tipi di eccezioni e degli usi impropri ma diffusi del termine.

