An interrupt handler, also known as an interrupt service routine (ISR), is a
callback subroutine in an
operating system or
device driver whose execution is triggered by the reception of an
interrupt. Interrupt handlers have a multitude of functions, which vary based on the reason the interrupt was generated and the speed at which the Interrupt Handler completes its task.
See more at Wikipedia.org...
<
software> A routine which is executed when an
interrupt occurs. Interrupt handlers typically deal with low-level events in the hardware of a computer system such as a character arriving at a
serial port or a tick of a
real-time clock. Special care is required when writing an interrupt handler to ensure that either the interrupt which triggered the handler's execution is masked out (inhibitted) until the handler exits, or the handler is
re-entrant so that multiple concurrent invocations will not interfere with each other.
If interrupts are masked then the handler must execute as quickly as possible so that important events are not missed. This is often arranged by splitting the processing associated with the event into "upper" and "lower" halves. The lower part is the interrupt handler which masks out further interrupts as required, checks that the appropriate event has occurred (this may be necessary if several events share the same interrupt), services the interrupt, e.g. by reading a character from a
UART and writing it to a
queue, and re-enabling interrupts.
The upper half executes as part of a user process. It waits until the interrupt handler has run. Normally the
operating system is responsible for reactivating a process which is waiting for some low-level event. It detects this by a shared
flag or by inspecting a shared queue or by some other synchronisation mechanism. It is important that the upper and lower halves do not interfere if an interrupt occurs during the execution of upper half code. This is usually ensured by disabling interrupts during
critical sections of code such as removing a character from a queue.
(2002-07-24)