The standard UNIX kernel is a nonpreemptive kernel; it does
not allow a user process to preempt a process executing in
kernel mode. Once a running process issues a system call and
enters kernel mode, preemptive context switches are disabled
until the system call is completed. Although there are
context switches, a system call may take an arbitrarily long
time to execute without voluntarily giving up the processor.
During that time, the process that made the system call may
delay the execution of a higher-priority, runnable, realtime
process.
The maximum process preemption latency for a nonpreemptive
kernel is the maximum amount of time it can take for the
running, kernel-mode process to switch out of kernel mode
back into user mode and then be preempted by a
higher-priority process. Under these conditions it is not
unusual for worst-case preemption to take seconds, which is
clearly unacceptable for many realtime applications.