In several operating systems
Linux,
Unix,
macOS,
Microsoft Windows,
z/OS,
DESQview and some other operating systems used in the pastinterrupt handlers are divided into two parts: the
First-Level Interrupt Handler (
FLIH) and the
Second-Level Interrupt Handlers (
SLIH). FLIHs are also known as
hard interrupt handlers or
fast interrupt handlers, and SLIHs are also known as
slow/soft interrupt handlers, or
Deferred Procedure Calls in Windows. A FLIH implements at minimum platform-specific interrupt handling similar to
interrupt routines. In response to an interrupt, there is a
context switch, and the code for the interrupt is executed. The job of a FLIH is to quickly service the interrupt, or to record platform-specific critical information which is only available at the time of the interrupt, and
schedule the execution of a SLIH for further long-lived interrupt handling. FLIHs cause
jitter in process execution. FLIHs also mask interrupts. Reducing the jitter is most important for
real-time operating systems, since they must maintain a guarantee that execution of specific code will complete within an agreed amount of time. To reduce jitter and to reduce the potential for losing data from masked interrupts, programmers attempt to minimize the execution time of a FLIH, moving as much as possible to the SLIH. With the speed of modern computers, FLIHs may implement all device and platform-dependent handling, and use a SLIH for further platform-independent long-lived handling. FLIHs which service hardware typically mask their associated interrupt (or keep it masked as the case may be) until they complete their execution. An (unusual) FLIH which unmasks its associated interrupt before it completes is called a
reentrant interrupt handler. Reentrant interrupt handlers might cause a
stack overflow from multiple
preemptions by the same
interrupt vector, and so they are usually avoided. In a
priority interrupt system, the FLIH also (briefly) masks other interrupts of equal or lesser priority. A SLIH completes long interrupt processing tasks similarly to a process. SLIHs either have a dedicated
kernel thread for each handler, or are executed by a pool of kernel worker threads. These threads sit on a
run queue in the operating system until processor time is available for them to perform processing for the interrupt. SLIHs may have a long-lived execution time, and thus are typically scheduled similarly to threads and processes. In Linux, FLIHs are called
upper half, and SLIHs are called
lower half or
bottom half. This is different from naming used in other Unix-like systems, where both are a part of
bottom half. == See also ==