Esempio (con simulatore) di
realizzazione di Input/Output con interruzioni


Questa è una delle tante possibilità di avere I/O gestito da interruzioni nel livello ISA didattico del testo, IJVM. Ovviamente le cose non sono esattamente come nella realtà per ragioni di semplicità.
Alla macchina del nostro livello ISA supponiamo dipoter connettere fino a 8 "devices"(dispositivi, periferiche).

In questo esempio abbiamo una tastiera e una stampante

Supponiamo di utilizzare una politica di Memory Mapped I/O, cioè i registri relativi a dispositivi di I/O si possono leggere e scrivere con normali operazioni di lettura e scrittura in memoria (v. 3.7.2 del testo).
Nel nostro esempio supponiamo che l'elettronica di ogni device disponga di due registri di 16 bit (un Buffer Register (BR) ed un Control Status Register (CSR)). Questi, siccome abbiamo memory mapped I/O, pur appartenendo fisicamente al device, sono visti dalla macchina come due parole di memoria e come tali possono essere utilizzate dalla CPU.

Tastiera e controller tastiera

Quando un device necessita di "attenzione" da parte della CPU (vuoi per segnalare semplicemente un evento, vuoi perché desidera che la CPU svolga per conto del device alcune operazioni) questo pone ad uno il bit 0 del suo CSR (detto IP, Interrupt Pending), fa richiesta cioè di un'interruzione. L'hardware copierà il bit IP in OPC
Per fare richiesta metto 1 in IP
E' compito dell'interprete del linguaggio macchina accorgersi della presenza di richieste da parte dei vari devices. Se il linguaggio macchina (IJVM o un altro) è realizzato via software sopra Mic-1, sarà il codice del microinterprete Mic-1 a realizzare le operazioni da fare in presenza di segnali di interruzione. Vediamo come avviene la gestione delle interruzioni

La gestione delle interruzioni ---->