L’interruzione è un segnale emesso dall’hardware o dal software quando un processo o un evento richiede attenzione immediata. Avverte il processore di un processo ad alta priorità che richiede l’interruzione del processo in corso. Nei dispositivi I/O una delle linee di controllo del bus è dedicata a questo scopo ed è chiamata Interrupt Service Routine (ISR).
Quando un dispositivo solleva un interrupt al processo i, il processore prima completa l’esecuzione dell’istruzione i. Poi carica il Program Counter (PC) con l’indirizzo della prima istruzione dell’ISR. Prima di caricare il Program Counter con l’indirizzo, l’indirizzo dell’istruzione interrotta viene spostato in una posizione temporanea. Pertanto, dopo aver gestito l’interrupt il processore può continuare con il processo i+1.
Mentre il processore sta gestendo gli interrupt, deve informare il dispositivo che la sua richiesta è stata riconosciuta in modo che smetta di inviare il segnale di richiesta di interrupt. Inoltre, salvare i registri in modo che il processo interrotto possa essere ripristinato in futuro, aumenta il ritardo tra il momento in cui viene ricevuto un interrupt e l’inizio dell’esecuzione dell’ISR. Questo è chiamato Interrupt Lattency.
Hardware Interrupts:
In un interrupt hardware, tutti i dispositivi sono collegati alla Interrupt Request Line. Una singola linea di richiesta è usata per tutti gli n dispositivi. Per richiedere un interrupt, un dispositivo chiude il suo interruttore associato. Quando un dispositivo richiede un interrupt, il valore di INTR è l’OR logico delle richieste dei singoli dispositivi.
Sequenza di eventi coinvolti nella gestione di un IRQ:
- I dispositivi sollevano un IRQ.
- Il processore interrompe il programma in esecuzione.
- Il dispositivo viene informato che la sua richiesta è stata riconosciuta e il dispositivo disattiva il segnale di richiesta.
- L’azione richiesta viene eseguita.
- L’interruzione viene abilitata e il programma interrotto viene ripreso.
Gestione di dispositivi multipli:
Quando più di un dispositivo solleva un segnale di richiesta di interruzione, allora sono necessarie informazioni aggiuntive per decidere quale dispositivo deve essere considerato per primo. I seguenti metodi sono utilizzati per decidere quale dispositivo selezionare: Polling, Vectored Interrupts, e Interrupt Nesting. Questi sono spiegati come segue.
- Polling:
Nel polling, il primo dispositivo incontrato con il bit IRQ impostato è il dispositivo che deve essere servito per primo. Viene chiamato l’ISR appropriato per la manutenzione dello stesso. È facile da implementare, ma si perde molto tempo interrogando il bit IRQ di tutti i dispositivi. - Interruzioni vettoriali:
Negli interrupt vettoriali, un dispositivo che richiede un interrupt si identifica direttamente inviando un codice speciale al processore attraverso il bus. Questo permette al processore di identificare il dispositivo che ha generato l’interrupt. Il codice speciale può essere l’indirizzo iniziale dell’ISR o dove l’ISR si trova in memoria, ed è chiamato il vettore dell’interrupt. - Interrupt Nesting:
In questo metodo, il dispositivo I/O è organizzato in una struttura di priorità. Pertanto, la richiesta di interruzione da un dispositivo a priorità più alta è riconosciuta, mentre la richiesta da un dispositivo a priorità più bassa non lo è. Per implementare questo ogni processo/dispositivo (anche il processore). Il processore accetta interrupt solo da dispositivi/processi che hanno una priorità maggiore di lui.
La priorità dei processori è codificata in alcuni bit di PS (Process Status register). Può essere cambiata da istruzioni di programma che scrivono nel PS. Il processore è in modalità supervisionata solo durante l’esecuzione di routine OS. Passa alla modalità utente prima di eseguire programmi applicativi.
Attenzione lettore! Non smettere di imparare ora. Impara tutti i concetti importanti di teoria CS per le interviste SDE con il corso di teoria CS ad un prezzo adatto agli studenti e diventa pronto per l’industria.