<?xml version="1.0" encoding="ANSI_X3.4-1968" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968" /><title>Glossary</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><link rel="home" href="index.html" title="Unreliable Guide To Locking" /><link rel="up" href="index.html" title="Unreliable Guide To Locking" /><link rel="prev" href="ch12.html" title="Chapter 12. Thanks" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Glossary</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch12.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> </td></tr></table><hr /></div><div class="glossary" title="Glossary"><div class="titlepage"><div><div><h2 class="title"><a id="glossary"></a>Glossary</h2></div></div></div><dl><dt><a id="gloss-preemption"></a>preemption</dt><dd><p> Prior to 2.5, or when <span class="symbol">CONFIG_PREEMPT</span> is unset, processes in user context inside the kernel would not preempt each other (ie. you had that CPU until you gave it up, except for interrupts). With the addition of <span class="symbol">CONFIG_PREEMPT</span> in 2.5.4, this changed: when in user context, higher priority tasks can "cut in": spinlocks were changed to disable preemption, even on UP. </p></dd><dt><a id="gloss-bh"></a>bh</dt><dd><p> Bottom Half: for historical reasons, functions with '_bh' in them often now refer to any software interrupt, e.g. <code class="function">spin_lock_bh()</code> blocks any software interrupt on the current CPU. Bottom halves are deprecated, and will eventually be replaced by tasklets. Only one bottom half will be running at any time. </p></dd><dt><a id="gloss-hwinterrupt"></a>Hardware Interrupt / Hardware IRQ</dt><dd><p> Hardware interrupt request. <code class="function">in_irq()</code> returns <span class="returnvalue">true</span> in a hardware interrupt handler. </p></dd><dt><a id="gloss-interruptcontext"></a>Interrupt Context</dt><dd><p> Not user context: processing a hardware irq or software irq. Indicated by the <code class="function">in_interrupt()</code> macro returning <span class="returnvalue">true</span>. </p></dd><dt><a id="gloss-smp"></a><acronym class="acronym">SMP</acronym></dt><dd><p> Symmetric Multi-Processor: kernels compiled for multiple-CPU machines. (CONFIG_SMP=y). </p></dd><dt><a id="gloss-softirq"></a>Software Interrupt / softirq</dt><dd><p> Software interrupt handler. <code class="function">in_irq()</code> returns <span class="returnvalue">false</span>; <code class="function">in_softirq()</code> returns <span class="returnvalue">true</span>. Tasklets and softirqs both fall into the category of 'software interrupts'. </p><p> Strictly speaking a softirq is one of up to 32 enumerated software interrupts which can run on multiple CPUs at once. Sometimes used to refer to tasklets as well (ie. all software interrupts). </p></dd><dt><a id="gloss-tasklet"></a>tasklet</dt><dd><p> A dynamically-registrable software interrupt, which is guaranteed to only run on one CPU at a time. </p></dd><dt><a id="gloss-timers"></a>timer</dt><dd><p> A dynamically-registrable software interrupt, which is run at (or close to) a given time. When running, it is just like a tasklet (in fact, they are called from the TIMER_SOFTIRQ). </p></dd><dt><a id="gloss-up"></a><acronym class="acronym">UP</acronym></dt><dd><p> Uni-Processor: Non-SMP. (CONFIG_SMP=n). </p></dd><dt><a id="gloss-usercontext"></a>User Context</dt><dd><p> The kernel executing on behalf of a particular process (ie. a system call or trap) or kernel thread. You can tell which process with the <span class="symbol">current</span> macro.) Not to be confused with userspace. Can be interrupted by software or hardware interrupts. </p></dd><dt><a id="gloss-userspace"></a>Userspace</dt><dd><p> A process executing its own code outside the kernel. </p></dd></dl></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch12.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top">Chapter 12. Thanks </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>