Come funzionano i dispositivi di input e gli interrupt?

La propria tastiera è un dispositivo di input molto semplice; semplice perché genera piccole quantità di dati molto lentamente (per gli standard di un computer). Quando si preme o si rilascia un tasto, questo evento viene segnalato attraverso il cavo della tastiera per far scattare un interrupt hardware.

È compito del sistema operativo fare attenzione a questi interrupt. Per ogni possibile tipo di interrupt, ci sarà un gestore di interrupt, una parte del sistema operativo che immagazzina ogni dato ad esso associato (come il valore del proprio premere/rilasciare il tasto) affinché possa essere processato.

Quello che effettivamente fa il gestore dell'interrupt della vostra tastiera è mettere il valore del tasto in un'area di sistema vicino al fondo della memoria. Là rimarrà disponibile per ispezione quando il sistema operativo passa il controllo a qualsiasi programma che ritiene stia attualmente leggendo dalla tastiera.

Dispositivi di input più complessi come i dischi o le schede di rete funzionano in modo simile. Precedentemente, mi sono riferito a un controller del disco che usa il bus per segnalare che una richiesta disco è stata completata. Quello che in realtà succede è che il disco fa scattare un interrupt. Il gestore dell'interrupt del disco poi copia in memoria i dati ottenuti, a uso successivo da parte del programma che aveva fatto la richiesta.

Ad ogni specie di interrupt è associato un livello di priorità. Gli interrupt con priorità più bassa (come gli eventi della tastiera) devono dare la precedenza agli interrupt con priorità più alta (come i tick dell'orologio o gli eventi del disco). Unix è progettato per dare alta priorità al tipo di eventi che hanno bisogno di essere processati rapidamente, in modo da mantenere fluida la risposta del computer.

Nei messaggi d'avvio del proprio sistema operativo, si possono vedere dei riferimenti a numeri di IRQ. Forse si sa, senza capirne esattamente il perché, che uno dei modi più comuni di configurare male l'hardware è avere due dispositivi diversi che cercano di usare lo stesso IRQ.

Ecco la spiegazione. IRQ è l'abbreviazione di "Interrupt Request" (richiesta di interrupt). Il sistema operativo ha bisogno di sapere al momento dell'avvio quali interrupt numerati verranno usati da ciascun dispositivo hardware, in modo da poter associare a ciascuno il gestore appropriato. Se due dispositivi diversi cercano di usare lo stesso IRQ a volte gli interrupt verranno notificati al gestore sbagliato. Questo di solito provocherà quantomeno il blocco del dispositivo, ma può a volte confondere il SO a tal punto da farlo diventare instabile oppure mandarlo in crash.