Consentitemi di espandere la bella risposta di @ Tymski.
Iniziamo con una revisione degli interrupt hardware.
Questi possono verificarsi in qualsiasi momento (presupponendo che siano abilitati) e sono quindi asincroni al flusso di esecuzione corrente. La CPU accetta gli interrupt hardware ascoltando le linee esterne in parallelo con l'esecuzione del flusso di istruzioni. Quando viene rilevata una richiesta di interruzione su queste linee esterne, il processore consente all'elaborazione di continuare ad avanzare fino a un buon punto di rottura. Ad esempio, un processore pipeline consentirà il completamento delle istruzioni già avviate, senza tuttavia avviare nuove istruzioni. Quando è pronto, la CPU avvierà l'elaborazione degli interrupt. Questo può essere un processo relativamente complesso, anche a volte, o alcune parti di esso, indicato come un interruttore di contesto. L'esecuzione della modalità utente cessa. Viene immessa la modalità privilegiata (ovvero il sistema operativo). Il contesto attuale viene salvato - i registri CPU conservano principalmente i valori della modalità utente; la posizione da salvare è di solito da qualche parte nel contesto privilegiato. Il processore fornisce quindi il flusso di controllo a un gestore di interrupt di basso livello. Il gestore di interrupt di contesto privilegiato determina quindi il flusso successivo da eseguire, ad esempio un gestore di interrupt di livello più alto appropriato.
Un interrupt software è molto simile nel meccanismo, con la differenza principale che si verifica con l'esecuzione di un'istruzione di interruzione software, a volte chiamata trappola. Quindi, questi si verificano in modo sincrono al flusso di istruzioni attualmente in esecuzione. Lo stesso contesto generale passa dalla modalità utente a quella privilegiata e viene eseguito prendendo in prestito lo stesso hardware, motivo per cui è chiamato interruzione. Questi trap vengono in genere utilizzati per il codice della modalità utente per effettuare chiamate di sistema.
Un'eccezione software può riferirsi alla stessa cosa, tranne che essere attivata dall'istruzione di interrupt software, viene attivata da condizioni anomale rilevate dalla CPU nell'esecuzione corrente del flusso di istruzioni, come la dereferenziazione del puntatore nullo o la divisione intera per zero .
Un'eccezione, il termine usato da solo, di solito si riferisce a un meccanismo del linguaggio di programmazione per rilevare e gestire gli errori sincroni nel thread corrente. Questi possono comportare un'eccezione software (ad es. Essere attivati dalla CPU per determinate istruzioni) oppure possono essere rilevati da test espliciti inseriti nel codice di esecuzione da un compilatore o JIT o da un software utente o di libreria che viene esplicitamente generato.
Come dice @Tymski, questi termini sono spesso scambiati, a volte erroneamente, ma a volte anche a causa del contesto.