CPU: la gestione delle interruzioni

23/02/21, Nicola Ibello | (la videolezione) Prima di descrivere come funzionano le interruzioni della CPU dobbiamo soffermarci qualche secondo, per capire bene di cosa è composta la Central Processing Unit. La CPU, ovvero Central Processing Unit, detta anche Processore è l’unita o sottosistema che ha il compito di gestire le funzionalità logiche di un dispositivo programmabile (l'esempio più semplice e classico di dispositivo in cui è presente la Central Processing Unit è il computer). La CPU è composta da vari tipi di sottosistemi, integrati a loro volta: l’unità di controllo CU (Control Unit), che preleva le istruzioni dalla memoria le decodifica e comanda un’unità aritmetico/logica chiamata ALU (Arithmetic Logic Unit), una serie di registri (con tempi di accesso nettamente minori rispetto a quelli della memoria) e un bus interno. La CPU ha dunque il compito di eseguire istruzioni relative ad un programma residente nella memoria centrale (ROM oppure RAM). Registri speciali particolarmente importanti, sempre presenti nella CPU, sono il registro IP, il registro dei Flag. Il registro IP (Instruction Pointer) o PC (Program Counter) contiene l’indirizzo di memoria dell'istruzione da eseguire subito dopo aver terminato quella corrente. E’ controllato dalla CU, che lo aggiorna in automatico. Il registro dei Flag, detto anche registro di stato (CCR, Condition Code Registrer), contiene informazioni non ordinarie chiamate Flag (tradotto dall’inglese letteralmente significa “bandiera”) legate strettamente agli stati di tutte le unita di calcolo e contiene alcuni informazioni provenienti da quest’ultima. Esempi di flag sono :

L’Overflow: indica che il risultato dell’operazione appena compiuta ha una dimensione troppo grande e non può essere valutata correttamente.

Zero: indica se il risultato dell’operazione appena eseguita è zero.

Carry: indica che il risultato dell’operazione appena eseguita ha superato la capacita di memorizzazione del registro interno.

Segno: indica se il risultato ottenuto dall’operazione appena compiuta ha segno positivo o negativo.

Interruzione: (in inglese Interrupt) se assume il valore 1 indica che la CPU ha smesso di servire le richieste di servizio esterno delle periferiche; se assume valore 0, vuol dire che c’è una periferica che sta richiamando l’attenzione della CPU.

La CPU inoltre ha, tra l'altro, il compito di gestire e controllare tutte le periferiche esterne di un dispositivo (es. tastiera, mouse, porte USB, …). Le periferiche però hanno bisogno di comunicare con la CPU quando succede qualcosa di inaspettato e la CPU deve capire quando e il momento di prestare attenzione a quella determinata periferica. Questo è possibile grazie alle interruzioni (Interrupt). L’interrupt è un segnale asincrono che indica il “bisogno di attenzione” da parte di una periferica esterna. Le periferiche sono collegare alla CPU tramite le linee di sistema IRQ (Interrupt Request): il sistema adottato dai componenti hardware per segnalare eventi inattesi. Il segnale inviato dalla periferica passa prima per un circuito integrato che ne classifica la priorità (chiamato PIC cioè Programmable Interrupt Controller) e quest'ultimo invia il segnale di interrupt alla CPU, che risponde con un segnale di riconoscimento dell'interruzione.
A quel punto, la CPU interrompe l’istruzione corrente e passa ad eseguire un programma di routine chiamato ISR (Interrupt Service Routine). Gli interrupt che non possono essere assolutamente ignorati si chiamano “non-maskable interrupt” o NMI. Ad esempio, nel caso della tastiera del computer, essendo essa un dispositivo di input (periferica) di elevata importanza per il controllo ed avendo un’elevata priorità sugli altri dispositivi, alla pressione di un tasto si avrà un NMI e la CPU interrompe immediatamente quello che sta facendo per servire la periferica esterna. Un'interruzione può anche avvenire per via software, mediante istruzioni in linguaggio macchina (o Assembly) di tipo INT xx o SYSCALL che spesso sono presenti a livello di sistema operativo.