Interrupt
In questa pagina 6
In questa pagina 3
Un'interruzione sospende il programma in esecuzione per far eseguire una routine di servizio (interrupt handler), poi lo fa riprendere come se nulla fosse successo.
| Classe | Causa |
|---|---|
| I/O | un modulo segnala la fine di un'operazione o una richiesta |
| timer | allo scadere di un intervallo (base per il multitasking del sistema operativo) |
| guasto hardware | errore di parità della memoria, calo di alimentazione |
| programma (eccezioni) | overflow, divisione per zero, istruzione non valida, accesso a memoria protetta, page fault (vedi Memoria virtualeIndirizzi virtuali e fisici, pagine e frame; traduzione con la tabella delle pagine e calcolo dei campi; page fault e sostituzione delle pagine; TLB e tempo di accesso effettivo; protezione e condivisione; confronto con la cache.Memoria virtuale →), chiamata esplicita al sistema operativo (SVC in ARM) |
I/O guidato da interrupt
Invece dell'attesa attiva (vedi Moduli di input-output e input-output programmatoPerché servono i moduli di I/O; funzioni del modulo (controllo, comunicazione, buffer, errori) e registri di stato, controllo e dati; I/O mappato in memoria e isolato con esempi; I/O programmato con attesa attiva e suo costo; confronto delle tre tecniche.Moduli di input-output e input-output programmato →): la CPU dà il comando al modulo e prosegue con altro lavoro; quando il dispositivo è pronto il modulo attiva la linea di richiesta di interrupt e la CPU trasferisce il dato nella routine di servizio. La CPU fa ancora il trasferimento parola per parola, ma non aspetta.
Sequenza di gestione
Hardware:
- il dispositivo invia la richiesta;
- la CPU finisce l'istruzione corrente (il controllo delle interruzioni è l'ultima fase del Ciclo fetch-executeRegistri PC, IR, MAR e MBR; ciclo dell'istruzione diviso in fetch ed execute; i quattro tipi di operazioni; diagramma degli stati del ciclo con calcolo degli indirizzi degli operandi e controllo delle interruzioni; esempio su una macchina ad accumulatore.Ciclo fetch-execute →);
- la CPU controlla se ci sono richieste abilitate e invia la conferma (acknowledge);
- salva sullo stack (o in registri dedicati) PC e PSW;
- carica nel PC l'indirizzo della routine di servizio.
Software (routine di servizio):
- salva gli altri registri che userà;
- serve il dispositivo;
- ripristina i registri;
- esegue l'istruzione di ritorno da interruzione, che ripristina PSW e PC.
Esempio: lo stack pointer vale e il programma è all'istruzione di indirizzo . All'interruzione si salvano PC (che vale già , l'istruzione successiva) e PSW: . Se la routine salva altri registri, . Al ritorno lo stack torna a e il programma riprende da .
Identificare la sorgente
Con più dispositivi:
- linee di interrupt multiple: una linea per dispositivo (le linee sono poche);
- polling software: un'unica routine interroga i registri di stato di tutti i moduli (lento);
- daisy chain (polling hardware): il segnale di conferma passa da un modulo all'altro in catena; il primo che ha una richiesta pendente lo blocca e mette sul bus il proprio vettore (un numero che identifica la routine);
- arbitraggio del bus: il modulo deve ottenere il bus prima di richiedere l'interrupt.
Con il vettore la CPU salta direttamente alla routine giusta attraverso una tabella dei vettori in memoria.
Priorità
- Disabilitare le interruzioni durante la routine: le richieste restano pendenti e vengono servite dopo, in ordine. Semplice, ma un dispositivo urgente aspetta.
- Priorità: una routine può essere interrotta da una richiesta di priorità più alta (interruzioni annidate). Esempio: una stampante (priorità bassa), un disco (media), una linea di comunicazione che perde dati se non servita in fretta (alta).
Eccezioni in ARM
Ogni eccezione ha un modo del processore (IRQ, FIQ per le interruzioni veloci, Supervisor per SVC, Abort per gli accessi non validi, Undefined) e un indirizzo fisso nella tabella dei vettori. All'ingresso l'hardware copia il CPSR nello SPSR del modo, salva l'indirizzo di ritorno nel LR del modo (registro banked), disabilita le IRQ e salta al vettore. Il ritorno ripristina insieme PC e CPSR (es. SUBS pc, lr, #4 per le IRQ). Vedi L'architettura ARMARM a 32 bit come caso di studio: registri r0-r15 con SP, LR e PC, registro di stato CPSR con flag NZCV, modi del processore, architettura load/store, istruzioni condizionate, secondo operando flessibile, Thumb; differenze principali con ARMv8 a 64 bit.L'architettura ARM →.
Errori tipici
- Pensare che l'interruzione arrivi a metà di un'istruzione: la CPU la riconosce solo tra un'istruzione e l'altra (le eccezioni di programma invece sono causate dall'istruzione stessa).
- Dimenticare che la routine deve salvare tutti i registri che modifica: il programma interrotto non sa di essere stato interrotto.
Versione ripasso
Un'interruzione sospende il programma per una routine di servizio, poi lo riprende. Classi: I/O, timer, guasto, programma (overflow, divisione per zero, page fault in Memoria virtualeIndirizzi virtuali e fisici, pagine e frame; traduzione con la tabella delle pagine e calcolo dei campi; page fault e sostituzione delle pagine; TLB e tempo di accesso effettivo; protezione e condivisione; confronto con la cache.Memoria virtuale →, SVC in ARM). Con l'I/O a interrupt la CPU prosegue e la routine trasferisce il dato a dispositivo pronto (Moduli di input-output e input-output programmatoPerché servono i moduli di I/O; funzioni del modulo (controllo, comunicazione, buffer, errori) e registri di stato, controllo e dati; I/O mappato in memoria e isolato con esempi; I/O programmato con attesa attiva e suo costo; confronto delle tre tecniche.Moduli di input-output e input-output programmato →).
Sequenza
Hardware: 1. richiesta del dispositivo; 2. la CPU finisce l'istruzione corrente (ultima fase del Ciclo fetch-executeRegistri PC, IR, MAR e MBR; ciclo dell'istruzione diviso in fetch ed execute; i quattro tipi di operazioni; diagramma degli stati del ciclo con calcolo degli indirizzi degli operandi e controllo delle interruzioni; esempio su una macchina ad accumulatore.Ciclo fetch-execute →); 3. acknowledge; 4. salva PC e PSW sullo stack; 5. carica nel PC l'indirizzo della routine. Software: 6. salva gli altri registri; 7. serve il dispositivo; 8. ripristina; 9. ritorno (ripristina PSW e PC). Esempio: , programma a : si salvano PC () e PSW, ; con registri in più ; al ritorno , ripresa da .
Sorgente e priorità
- Linee multiple; polling software (lento); daisy chain (il primo modulo con richiesta mette sul bus il proprio vettore, che indica la routine nella tabella dei vettori); arbitraggio del bus.
- Disabilitare le interruzioni (richieste pendenti) oppure priorità con interruzioni annidate (stampante bassa, disco media, comunicazione alta).
ARM
Modi IRQ, FIQ, Supervisor (SVC), Abort, Undefined con vettore fisso: CPSR SPSR, ritorno in LR del modo (banked), IRQ disabilitate; ritorno SUBS pc, lr, #4 (L'architettura ARMARM a 32 bit come caso di studio: registri r0-r15 con SP, LR e PC, registro di stato CPSR con flag NZCV, modi del processore, architettura load/store, istruzioni condizionate, secondo operando flessibile, Thumb; differenze principali con ARMv8 a 64 bit.L'architettura ARM →).
Errori tipici: l'interruzione arriva solo tra due istruzioni (le eccezioni di programma sono causate dall'istruzione); la routine salva tutti i registri che modifica.