In the base environment, each hardware interrupt vector in the processor IDT points to a small assembly language stub that saves a standard trap frame (10.8.1), disables and acknowledges the hardware interrupt, and calls a designated high-level handler routine specified in the base_irq_handlers table (10.12.2). Initially, all the entries in this table point to base_irq_default_handler (10.12.5). Custom interrupt handlers can be installed by changing the appropriate entry in the table. The default action for all interrupts can be changed by overriding base_irq_default_handler.
The base environment also includes support for a single ``software interrupt.'' A software interrupt is delivered after all pending hardware interrupts have been processed but before returning from the interrupt context. A software interrupt can be posted at any time with base_irq_softint_request (10.12.7) but will only be triggered upon return from a hardware interrupt; i.e., processing of a software interrupt requested from a non-interrupt context is deferred until a hardware interrupt occurs. The software interrupt handler is base_irq_softint_handler (10.12.8) which can be replaced by a custom version provided by the kernel.