The Linux kernel can work in the context of an interrupt or in the context of a process (user). A process context means that it runs on behalf of the process that caused the system call. The context of an interrupt means that it works on behalf of an interrupt (hardware interrupt, softirq, ...).
When you talk about proactive multitasking, it means that the kernel can decide to stop some task in order to start another task. When you talk about proactive kernels, this means that the kernel can decide to run another kernel code itself.
Now, before Linux becomes a proactive kernel, you can run the kernel code on multiple processors, and the kernel code can be interrupted by hardware interrupts (which may cause softirqs to run before returning ...). Anticipatory kernels mean that the kernel can also be excluded from the kernel code of the process context in order to avoid long latencies (anticipatory Linux appeared from the Linux real-time tree).
Of course, all this is best explained in Rusty Russell's Unreliable Kernel Hacking Guide and the Unreliable Kernel Lock Guide .
EDIT:
Or, trying to explain it better when a task calls a script on an unmanaged kernel, this task cannot be trained until syscall ends (possibly with EINTR, but it can take a long time). A proactive kernel eliminates this problem, which will lead to lower mid-term and worst-case latencies for other tasks awaiting completion.
source share