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 a 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, a uso successivo da parte del programma che aveva
fatto la richiesta.
A 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
hanno bisogno 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.