Eccezione (informatica)
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. Possono essere considerati simili a degli errori a run-time da parte di un programma eseguito dal processore.
Descrizione
modificaEccezioni hardware
modificaTradizionalmente, 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 a una funzione del sistema operativo, ad esempio per eseguire un'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 a 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
modificaPer 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 in caso di errore di run-time e propagare l'errore ad un livello più alto del programma stesso. Figurativamente, l'eccezione viene lanciata in basso, e 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- (EN) Mayan Moughdill e Stamatis Vassiliadis, Precise Interrupts, in 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, in Newsletter AICA "Affidabilità nei Sistemi di Elaborazione", n. 2, Scuola Superiore Guglielmo Reiss Romoli, maggio 1987. URL consultato il 25 novembre 2018.
- 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.