Gestore di interrupt: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
+F |
unito testo da Interrupt Service Routine |
||
Riga 1:
{{F|informatica|febbraio 2013}}
Un '''gestore di interrupt''' è
È l'evoluzione di una Interrupt Service Routine (ISR), una [[Funzione (informatica)|funzione]] informatica, di tipo [[callback]], che viene avviata dal [[sistema operativo]] in risposta a un [[Interrupt (informatica)|interrupt]].
Quando arriva un interrupt, la [[CPU]] deve mandare in esecuzione l'ISR predisposta ad hoc dal programmatore per quel particolare interrupt.
Affinché il meccanismo dell'interruzione funzioni correttamente, è necessario che tutte le azioni svolte dall'ISR siano trasparenti rispetto al programma interrotto, cioè che al termine venga ripristinato tutto come era prima dell'interrupt, in altre parole, che la ISR sia perfettamente [[Codice rientrante|rientrante]] (attraverso l'istruzione ''Return''). Per fare ciò bisogna che la CPU, prima di mandare in esecuzione l'ISR, faccia una [[commutazione di contesto]], ovvero salvi tutto quello che stava facendo (cioè il suo ''contesto attuale''), ed alla fine dell'ISR lo ripristini com'era.
L'interrupt va gestito rapidamente, e quindi non va perso tempo per salvare tutto il contesto attuale (variabili, stato del programma, l'immagine sullo schermo ecc..) ma solo quello che effettivamente verrà modificato dall'ISR. D'altra parte la CPU non sa esattamente che cosa modificherà l'ISR e quindi non può conoscere a priori cosa salvare.
Quindi quando si verifica un'interruzione l'hardware deve provvedere ad effettuare la commutazione di almeno la seguente porzione del contesto:
* Il registro PC ([[Program counter]])
* Il registro che definisce lo stato dell'interrompibilità del processore
Nei moderni sistemi i gestori di interrupt sono divisi in due parti:
Line 9 ⟶ 20:
Il gestore SLIH rimane nella [[coda pronti]] del sistema operativo finché, quando si rende disponibile tempo macchina del [[CPU|processore]], arriva il suo turno di esecuzione, e può essere eseguito il codice per gestire l'evento che ha innescato l'interrupt.
==Voci correlate==
|