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.

[modifica] Voci correlate

Strumenti personali
Altre lingue