<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9"> <TITLE>KernelAnalysis-HOWTO: IRQ </TITLE> <LINK HREF="KernelAnalysis-HOWTO-13.html" REL=next> <LINK HREF="KernelAnalysis-HOWTO-11.html" REL=previous> <LINK HREF="KernelAnalysis-HOWTO.html#toc12" REL=contents> </HEAD> <BODY> <A HREF="KernelAnalysis-HOWTO-13.html">Avanti</A> <A HREF="KernelAnalysis-HOWTO-11.html">Indietro</A> <A HREF="KernelAnalysis-HOWTO.html#toc12">Indice</A> <HR> <H2><A NAME="s12">12. IRQ </A></H2> <H2><A NAME="ss12.1">12.1 Introduzione</A> </H2> <P>L'IRQ e' un segnale asincrono mandato al microprocessore per avvertirlo che un lavoro e' stato completato o che si e' verificato un errore. <H2><A NAME="ss12.2">12.2 Schema di Interazione</A> </H2> <P> <PRE> |<--> IRQ(0) [Timer] |<--> IRQ(1) [Device 1] | .. |<--> IRQ(n) [Device n] _____________________________| /|\ /|\ /|\ | | | \|/ \|/ \|/ Task(1) Task(2) .. Task(N) Schema di interazione Tasks-IRQ </PRE> <H3>Cosa accade?</H3> <P>Un O.S. tipico utilizza molti segnali IRQ per interrompere la normale esecuzione di un processo e gestire del lavoro relativo ad un device. Lo schema e' il seguente: <P> <OL> <LI>Arriva un IRQ (i) e il Task(j) viene interrotto</LI> <LI>Viene eseguito il relativo IRQ(i)_handler</LI> <LI>Il controllo torna al Task(j) precedentemente interrotto</LI> </OL> <P>In particolare Linux, quando arriva un IRQ esegue prima di tutto la funzione di incapsulazione IRQ (chiamata "interrupt0x??"), e soltanto dopo l'IRQ(i)_handler ufficile. Questo permette di eseguire alcune operazioni comuni a tutti gli IRQ come la gestione del TimeSlice. <HR> <A HREF="KernelAnalysis-HOWTO-13.html">Avanti</A> <A HREF="KernelAnalysis-HOWTO-11.html">Indietro</A> <A HREF="KernelAnalysis-HOWTO.html#toc12">Indice</A> </BODY> </HTML>