CPU: la gestione delle interruzioni

23/02/21, Nicola Ibello | (la videolezione) Un'interruzione è un segnale che comunica alla CPU il verificarsi di un evento, per esempio la richiesta di attenzione di una periferica. Un'interruzione può essere provocata da:

  • dispositivi esterni che richiedono un servizio
  • dal processore stesso in seguito a particolari condizioni interne (eccezioni)
  • dal software con istruzioni del tipo int n 
Le Interruzioni provocate dall'hardware esterno possono essere di tue tipi:
  • mascherabili
    • possono essere ignorate dalla CPU
    • agiscono sul pin INTR del processore

  • non mascherabili
    • non possono essere ignorate dalla CPU
    • agiscono sul pin NMI del processore

Al verificarsi di un’interruzione la CPU interrompe il programma in esecuzione ed esegue un sottoprogramma, chiamato routine di interrupt, allocato ad uno specifico indirizzo di memoria. Terminata la routine d'interrupt, la CPU torna al programma precedentemente interrotto e ne prosegue l'esecuzione. Vediamo in dettaglio come si svolge questo processo.

Ricevuto il segnale di interrupt la CPU completa l'esecuzione dell'istruzione corrente e salva nello stack il registro di flag e l'indirizzo logico dell'istruzione successiva del programma corrente.Quindi legge un codice di 8 bit che è compito della periferica inviare sul bus dati (gli 8 bit meno significativi). Questo codice si chiama vettore d'interruzione e viene utilizzato dalla CPU come un indice per accedere ad una tabella in memoria, la tabella delle interruzioni (Interrupt Vector Table), contenente gli indirizzi delle routine d'interrupt.Ogni vettore d'interruzione punta ad un sottoprogramma allocato in determinato segmento di memoria. 

Se l'interruzione è mascherabile, la CPU, prima di iniziare le operazioni descritte, invia alla periferica il segnale INTA con cui comunica che l'interruzione è stata accettata. A questo punto la periferica deve inviare il vettore d'interruzione. In assenza di tale segnale la richiesta viene considerata non accolta.
L'abilitazione o meno delle interruzioni dipende dal flag IF del registro di flag del processore. Se  IF=1 le interruzioni sono abilitate, se IF=0 sono disabilitate.
Occorre comunque tenere presente che la CPU resetta IF automaticamente dopo l'accettazione di un interruzione. Il compito di riabilitare le interruzioni quindi spetta al programmatore che dovrà inserire in un punto opportuno della sua routine d'interrupt l'istruzione STI.

La gestione delle interruzioni mascherabili comporta due problemi:

  • si devono collegare più periferiche al singolo ingresso INTR della CPU
  • la CPU deve riconoscere la periferica che ha richiesto l'interruzione

Entrambi i problemi vengono risolti interponendo fra le periferiche e la CPU un componente programmabile che controlla le interruzioni.