Virtual Linux Kernel Threads
Bottom Half
globally serialized; running at 1) schedule(), bad idea, now tq_scheduler, and softirq with kernel lock; 2)ret_from_syscall/interrupt
problems: 1) 32; 2) only one handler; 3)spin_lock held, no block
Tasklets
dynamically-registrable software interrupt
only run on one CPU at a time, serialized wrt itself
Softirq
32 enumerated software interrupts ;No shared variables, all the data are CPU local
It is multithreaded and does not require any global serialization
Software Interrupt
running when a hardware interrupt returns, or schedule happens, or return to user space
Tasklets, softirqs and bottom halves (timer is a slow irq, but not interruptted), not trap
Interrupt Context, User Context
in_interrupt(), in_irq(), in_softirq(), current()