66 lines
1.9 KiB
HTML
66 lines
1.9 KiB
HTML
<!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">Next</A>
|
|
<A HREF="KernelAnalysis-HOWTO-11.html">Previous</A>
|
|
<A HREF="KernelAnalysis-HOWTO.html#toc12">Contents</A>
|
|
<HR>
|
|
<H2><A NAME="s12">12. IRQ </A></H2>
|
|
|
|
<H2><A NAME="ss12.1">12.1 Overview</A>
|
|
</H2>
|
|
|
|
<P>IRQ is an asyncronous signal sent to microprocessor to advertise
|
|
a requested work is completed
|
|
<P>
|
|
<H2><A NAME="ss12.2">12.2 Interaction schema</A>
|
|
</H2>
|
|
|
|
<P>
|
|
<PRE>
|
|
|<--> IRQ(0) [Timer]
|
|
|<--> IRQ(1) [Device 1]
|
|
| ..
|
|
|<--> IRQ(n) [Device n]
|
|
_____________________________|
|
|
/|\ /|\ /|\
|
|
| | |
|
|
\|/ \|/ \|/
|
|
|
|
Task(1) Task(2) .. Task(N)
|
|
|
|
|
|
IRQ - Tasks Interaction Schema
|
|
|
|
|
|
</PRE>
|
|
<H3>What happens?</H3>
|
|
|
|
<P>A typical O.S. uses many IRQ signals to interrupt normal process
|
|
execution and does some housekeeping work. So:
|
|
<P>
|
|
<P>
|
|
<OL>
|
|
<LI>IRQ (i) occurs and Task(j) is interrupted</LI>
|
|
<LI>IRQ(i)_handler is executed</LI>
|
|
<LI>control backs to Task(j) interrupted
|
|
</LI>
|
|
</OL>
|
|
<P>Under Linux, when an IRQ comes, first the IRQ wrapper routine
|
|
(named "interrupt0x??") is called, then the "official" IRQ(i)_handler
|
|
will be executed. This allows some duties like timeslice preemption.
|
|
<P>
|
|
<HR>
|
|
<A HREF="KernelAnalysis-HOWTO-13.html">Next</A>
|
|
<A HREF="KernelAnalysis-HOWTO-11.html">Previous</A>
|
|
<A HREF="KernelAnalysis-HOWTO.html#toc12">Contents</A>
|
|
</BODY>
|
|
</HTML>
|