Kernel preemption is a method used mainly in monolithic and hybrid kernels where all or most device drivers are run in kernel space, whereby the scheduler is permitted to forcibly perform a context switch (i.e. preemptively schedule; on behalf of a runnable and higher priority process) on a driver or other part of the kernel during its execution, rather than co-operatively waiting for the driver or kernel function (such as a system call) to complete its execution and return control of the processor to the scheduler.
There are two main benefits to this method in monolithic and hybrid kernels, and answer one of the main criticisms of monolithic kernels from microkernel advocates, which is that:
- A device driver can enter an infinite loop or other unrecoverable state, crashing the whole system.
- Some drivers and system calls on monolithic kernels are slow to execute, and cannot return control of the processor to the scheduler or other program until they complete execution.
- "Preemption under Linux". kernelnewbies.org. 2009-08-22. Retrieved 2016-06-10.
- Jonathan Corbet (2003-02-24). "Driver porting: the preemptible kernel". LWN.net. Retrieved 2016-06-10.
- "FreeBSD Architecture Handbook, Chapter 8. SMPng Design Document, Section 8.3. General Architecture and Design". freebsd.org. Retrieved 2016-06-10.
- Robert Love (2002-05-01). "Lowering Latency in Linux: Introducing a Preemptible Kernel". Linux Journal. Retrieved 2016-06-10.