Eccezione (informatica)

Da Wikipedia, l'enciclopedia libera.

In informatica, il termine eccezione è usato per descrivere l'occorrenza di diversi tipi di condizioni o eventi che alterano il normale flusso di controllo ed esecuzione di un microprocessore programmabile o di un programma.

Descrizione[modifica | modifica wikitesto]

Eccezioni hardware[modifica | modifica wikitesto]

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.

Eccezioni software[modifica | modifica wikitesto]

Per quanto riguarda il software, termine eccezione è stato riutilizzato in molti linguaggi di programmazione ad alto livello, come per esempio Ada, C++, Java e Python.

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 lanciata in basso, e trappata, o catturata più in alto.

Ciò permette di scrivere il codice sorgente assumendo che non vi siano malfunzionamenti, 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.

Bibliografia[modifica | modifica wikitesto]

  • (EN) Mayan Moughdill e Stamatis Vassiliadis, Precise Interrupts, IEEE Micro, 1996, pp. 58 – 67.
Contiene una descrizione dettagliata dei diversi tipi di eccezioni e degli usi impropri ma diffusi del termine.
  • Gian Carlo Macchi, Le condizioni eccezionali e la loro gestione, Newsletter AICA "Affidabilità nei Sistemi di Elaborazione", n. 2, Scuola Superiore Reiss Romoli - STET, maggio 1987.
Contiene una descrizione di che cos'è un'eccezione software, degli usi impropri del termine, dei modelli realizzativi e dei meccanismi di cattura e di gestione.

Voci correlate[modifica | modifica wikitesto]