La tastiera è un dispositivo di input molto semplice: semplice perché genera piccole quantità di dati molto lentamente (per gli standard di un computer). Quando premete o rilasciate un tasto, il valore di questo evento viene segnalato attraverso il cavo della tastiera per far scattare un interrupt hardware.
È compito del sistema operativo stare attento a questi interrupt. Per ogni possibile tipo di interrupt c'è un gestore dell'interrupt, una parte del sistema operativo che immagazzina i dati ad esso associati (come il valore del vostro premere/rilasciare il tasto) finché può 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à rimane a disposizione per ispezione quando il sistema operativo passa il controllo al 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. Sopra abbiamo fatto il caso di un controller del disco che usa il bus per segnalare che una richiesta disco è stata ultimata. In realtà succede che il disco fa scattare un interrupt. Il gestore dell'interrupt del disco copia poi in memoria i dati ottenuti, ad uso successivo da parte del programma che aveva fatto la richiesta.
Ad ogni tipo 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 necessitano di essere processati rapidamente, in modo da mantenere fluida la risposta del computer.
Tra i messaggi d'avvio del vostro SO potete vedere dei riferimenti a numeri di IRQ. Forse sapete, 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.