Tutorial →
Appunti scolastici → Appunti sparsi →
Interrupt
L'interruzione hardware (hardware interrupt) è il modo utilizzato da un generico
processore per gestire eventi asincroni, cioè che avvengono indipendentemente
dall'esecuzione del programma principale.
Per cominciare, un'analogia:
- Sto facendo un lavoro
- Arriva una telefonata (evento esterno e asincrono rispetto a quello
che sto facendo)
- Sospendo il lavoro per rispondere, memorizzando a che punto del
lavoro sono arrivato
- Quando la telefonata termina, riprendo il lavoro che stavo facendo,
da dove lo avevo lasciato
Ovviamente posso decidere di non essere disturbato da telefonate,
staccando il telefono; posso anche decidere di ignorare le telefonate non
urgenti. O anche decidere se una telefonata urgente può interrompere una
telefonata meno urgente. E devo
sperare/imporre che la telefonata non sia troppo lunga, altrimenti il lavoro
non procede...
Qualche dettaglio più tecnico:
- Il lavoro principale è per esempio svolto dalla funzione
main()
- Il codice eseguito all'arrivo di una interruzione è quello
contenuto in una o più funzioni, indicate come Interrupt Service
Routine - ISR
- I segnali di interruzione devono poter essere attivati o
disattivati in funzione di quanto il codice principale sia più o meno
critico e urgente. In particolare devo decidere se è possibile l'interruzione di
una isr
- Devo stabilire quali periferiche possono generare interruzioni e
quali no, anche in modo dinamico
- Devo riconoscere quale periferica ha generato l'interruzione
- Devo soprattutto essere in grado di riprendere il lavoro principale al termine
della isr, ritrovando tutti le variabili come erano all'istante di
interruzione. In genere si usa il meccanismo dello
stack oppure
l'uso di due banchi di registri
Questa tecnica permette ad un singolo processore di gestire (quasi)
contemporaneamente più attività:
- Una principale, codificata nella funzione
main()
- Una o più eseguite direttamente su richiesta di una periferica. Il codice
corrispondente è quello presente nella funzione (o nelle funzioni) ISR
Alcune pagine che mostrano codice specifico basato su questi
concetti:
La descrizione del concetto di interrupt qui fatta è in realtà è un po'
limitata e non comprende altri significati:
- Richiesta da parte di un generico processo di un servizio al sistema
operativo (interrupt software o anche trap)
- Interruzione di un processo da parte del sistema operativo per
l'invio di un segnale (per esempio scadenza del tempo a disposizione)
- Evento causato dall'esecuzione di un'istruzione illegale
(per esempio: divisione per zero)
Per un approfondimento:
http://it.wikipedia.org/wiki/Interrupt.
Da approfondire - Un atroce dubbio, anzi due:
- Interrupt va tradotto? Per ora uso entrambe le forme, come
capita
- Interrupt è maschile o femminile? Tendenzialmente uso il
maschile (come la wikipedia) anche se, a volte, pensando alla traduzione
italiana...
Ultima modifica di questa pagina: 28 marzo 2016