Prior to 2.5, or when CONFIG_PREEMPT 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 CONFIG_PREEMPT 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.
Bottom Half: for historical reasons, functions with
'_bh' in them often now refer to any software interrupt, e.g.
spin_lock_bh() 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.
Hardware interrupt request.
true in a hardware interrupt handler.
Not user context: processing a hardware irq or software irq.
Indicated by the
Symmetric Multi-Processor: kernels compiled for multiple-CPU machines. (CONFIG_SMP=y).
Software interrupt handler.
returns true. Tasklets and softirqs
both fall into the category of 'software interrupts'.
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).
A dynamically-registrable software interrupt, which is guaranteed to only run on one CPU at a time.
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).
Uni-Processor: Non-SMP. (CONFIG_SMP=n).
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 current macro.) Not to be confused with userspace. Can be interrupted by software or hardware interrupts.
A process executing its own code outside the kernel.