Interrupt vs Exception
In qualsiasi computer, durante la normale esecuzione di un programma, potrebbero verificarsi eventi che possono causare l'arresto temporaneo della CPU. Eventi come questo sono chiamati interrupt. Gli interrupt possono essere causati da errori hardware o software. Gli interrupt hardware vengono chiamati (semplicemente) Interrupt, mentre gli interrupt software sono chiamati Exceptions. Una volta generato un interrupt (software o hardware), il controllo viene trasferito a una subroutine speciale chiamata ISR (Interrupt Service Routine) in grado di gestire le condizioni generate dall'interrupt.
Cos'è l'interruzione?
Il termine Interruzione è solitamente riservato agli interrupt hardware. Sono interruzioni di controllo del programma causate da eventi hardware esterni. Qui, esterno significa esterno alla CPU. Gli interrupt di solito provengono da molte fonti diverse come il timer chip, periferiche (tastiere, mouse, ecc.), Porte I / O (seriali, parallele, ecc.), Unità disco, orologio CMOS, schede di espansione (scheda audio, video carta, ecc.). Ciò significa che le interruzioni hardware non si verificano quasi mai a causa di alcuni eventi correlati al programma in esecuzione. Ad esempio, un evento come una pressione di un tasto sulla tastiera da parte dell'utente o un timeout del temporizzatore hardware interno può sollevare questo tipo di interruzione e informare la CPU che un determinato dispositivo richiede una certa attenzione. In una situazione del genere, la CPU si fermerà su qualsiasi cosa stia facendo (cioè mette in pausa il programma corrente), fornisce il servizio richiesto dal dispositivo e tornerà al normale programma. Quando si verificano interruzioni hardware e la CPU avvia l'ISR, gli altri interrupt hardware sono disabilitati (ad esempio in macchine 80 × 86). Se occorrono altri interrupt hardware mentre l'ISR è in esecuzione, è necessario farlo esplicitamente cancellando il flag di interrupt (con l'istruzione sti). Nelle macchine 80 × 86, la cancellazione del flag di interrupt influisce solo sugli interrupt hardware.
Che cosa sono le eccezioni?
L'eccezione è un interrupt software, che può essere identificato come una routine di handler speciale. L'eccezione può essere identificata come una trappola che si verifica automaticamente (una trappola può essere identificata come un trasferimento di controllo, che viene avviato dal programmatore). Generalmente, non ci sono istruzioni specifiche associate alle eccezioni (le trap vengono generate utilizzando un'istruzione specifica). Pertanto, si verifica un'eccezione a causa di una condizione "eccezionale" che si verifica durante l'esecuzione del programma. Ad esempio, divisione per zero, l'esecuzione di un codice operativo o di un errore relativo alla memoria potrebbe causare eccezioni. Ogni volta che viene sollevata un'eccezione, la CPU sospende temporaneamente il programma che stava eseguendo e avvia l'ISR. ISR conterrà cosa fare con l'eccezione. Può correggere il problema o, se non è possibile, può abortire il programma con grazia stampando un messaggio di errore adatto. Sebbene un'istruzione specifica non causi un'eccezione, un'eccezione sarà sempre causata da un'istruzione. Ad esempio, l'errore di divisione per zero può verificarsi solo durante l'esecuzione dell'istruzione di divisione.
Qual è la differenza tra Interruzione ed Eccezione?
Gli interrupt sono interruzioni hardware, mentre le eccezioni sono interruzioni software. Le occorrenze di interrupt hardware di solito disabilitano altri interrupt hardware, ma questo non è vero per le eccezioni. Se è necessario disabilitare gli interrupt hardware finché non viene pubblicata un'eccezione, è necessario cancellare esplicitamente il flag di interrupt. E in genere il flag di interrupt sul computer influisce sugli interrupt (hardware) anziché sulle eccezioni. Ciò significa che cancellare questo flag non impedirà le eccezioni.