Implementing work-deferring mechanisms
Deferring is a method by which you schedule a piece of work to be executed in the future. It's a way to report an action later. Obviously, the kernel provides facilities to implement such a mechanism; it allows you to defer functions, whatever their type, to be called and executed later. There are three of them in the kernel, as outlined here:
- Softirqs: Executed in an atomic context
- Tasklets: Executed in an atomic context
- Workqueues: Executed in a process context
In the next three sections, we will learn in detail the implementation of each of them.
Softirqs
As the name suggests, softirq stands for software interrupt. Such a handler can preempt all other tasks on the system but the hardware IRQ handlers since it is executed with IRQs enabled. Softirqs are intended to be used for high-frequency threaded job scheduling. Network and block devices are the only two subsystems in the kernel that make direct use of softirqs...