5.1.8.4Tasklets
Tasklets are dynamically linked and built on top of softirq mechanisms. Tasklets differ from softirqs in that a tasklet is always serialized with respect to itself. In other words, a tasklet cannot be executed by two CPUs at the same time. However, different tasklets can be executed concurrently on several CPUs.
5.1.8.5Work queue
The work queue mechanism was introduced in the 2.6 Linux kernel. Work queues execute in process context, as opposed to the interrupt context of softirqs and tasklets. Work queues defer work to kernel threads, which are schedulable, and can therefore sleep. Thus, work queues provide an interface to create kernel threads to handle work queued from other operations. The work queue infrastructure allows a device driver to create its own kernel thread or use generic worker threads, one per processor, provided by the kernel.
5.1.9Processor interrupts
A symmetrical multiprocessing (SMP) system sets slightly different requirements to interrupt handling by hardware and software than an ordinary uniprocessing (UP) system. Distributed handling of hardware interrupts has to be implemented to take advantage of parallelism, and an efficient mechanism for communicating between CPUs must be provided.
• | send_IPI_all() | Sends an IPI to all CPUs (including the sender) |
• | send_IPI_allbutself() | Sends an IPI to all CPUs except the sender |
• | send_IPI_self() | Sends an IPI to the sender CPU |
• | send_IPI_single() | Sends an IPI to a single, specified CPU |
On a multiprocessor system, Linux defines the following five types of IPIs:
•CALL_FUNCTION_VECTOR(vector 0xfb) Used to call functions with a given argument on other CPUs like flush tlb_all_ipi() and stop_this_cpu(). Handler: smp_call_function_interrupt().
•RESCHEDULE_VECTOR(0xfc) Used at least when the best CPU for the woken up task is not this CPU. Handler: smp_reschedule_interrupt().
•INVALIDATE_TLB_VECTOR(VECTOR 0xfd) Used when the TLBs of the other CPU need to be invalidated. Handler: smp_invalidate_interrupt().
•ERROR_APIC_VECTOR(vector 0xfe) This interrupt should never occur.
•SPURIOUS_APIC_VECTOR(vector 0xff) This interrupt should never occur.
5.1.10Machine check
A machine check exception is an imprecise
54