<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9"> <TITLE>The Unix and Internet Fundamentals HOWTO: Come funzionano i dispositivi di input e gli interrupt?</TITLE> <LINK HREF="Unix-Internet-Fundamentals-HOWTO-8.html" REL=next> <LINK HREF="Unix-Internet-Fundamentals-HOWTO-6.html" REL=previous> <LINK HREF="Unix-Internet-Fundamentals-HOWTO.html#toc7" REL=contents> </HEAD> <BODY> <A HREF="Unix-Internet-Fundamentals-HOWTO-8.html">Avanti</A> <A HREF="Unix-Internet-Fundamentals-HOWTO-6.html">Indietro</A> <A HREF="Unix-Internet-Fundamentals-HOWTO.html#toc7">Indice</A> <HR> <H2><A NAME="s7">7. Come funzionano i dispositivi di input e gli interrupt?</A></H2> <P>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 <EM>interrupt hardware</EM>. <P>È compito del sistema operativo stare attento a questi interrupt. Per ogni possibile tipo di interrupt c'è un <EM>gestore dell'interrupt</EM>, 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. <P>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. <P>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. <P>A ogni tipo di interrupt è associato un <EM>livello di priorità</EM>. 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. <P>Tra i messaggi d'avvio del vostro SO potete vedere dei riferimenti a numeri di <EM>IRQ</EM>. 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. <P>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. <P> <HR> <A HREF="Unix-Internet-Fundamentals-HOWTO-8.html">Avanti</A> <A HREF="Unix-Internet-Fundamentals-HOWTO-6.html">Indietro</A> <A HREF="Unix-Internet-Fundamentals-HOWTO.html#toc7">Indice</A> </BODY> </HTML>