Splitting interrupt handlers "Real" operating system had to face the IRQ mess problem "S": the CPU can serve a single interrupt at a time problem "P": interrupts disrupt predictable (and RT) reponse The first approach is splitting the interrupt handling A "top half" handler does thevery minimum stuff It communicates with hardware, and acknowledges the interrupt A "bottom half" handler deals with OS data structures This happens with interrupts enabled IRQ (irq disabled in CPU) _____ bottom half (irq enabled) / \____________ process context (enabled) _____/ \__________________ This mitigates problem S above, but not problem P And the bottom half still cannot sleep or schedule It runs in a privileged context, where the process is stalled