* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download Interrupts and interrupt handlers - Washington University in St. Louis
Burroughs MCP wikipedia , lookup
Mobile operating system wikipedia , lookup
Copland (operating system) wikipedia , lookup
Spring (operating system) wikipedia , lookup
Unix security wikipedia , lookup
Security-focused operating system wikipedia , lookup
Process management (computing) wikipedia , lookup
Interrupts and Interrupt Handling David Ferry, Chris Gill CSE 522S - Advanced Operating Systems Washington University in St. Louis St. Louis, MO 63130 1 Why Interrupts? • Interrupts allow a currently executing process to be preempted • Without interrupts, a process could only be removed from the processor when it ended or voluntarily yielded Interrupt use cases: – The timer interrupt controls the scheduling frequency of a system – Peripheral devices use interrupts to request CPU attention – Processors use interrupts to communicate in multiprocessor systems (e.g. for load balancing or synchronization) CSE 522S – Advanced Operating Systems 2 Interrupt Mechanisms On the ARM architecture, there are three physical types of interrupts: – SWI: software interrupts (i.e. exceptions) – IRQ: regular hardware interrupts – FIQ: fast hardware interrupts Linux has three interrupt semantics: – Software interrupts routed via SWI table – Hardware interrupts routed via the IDT – Inter-processor interrupts CSE 522S – Advanced Operating Systems 3 Software vs Hardware Interrupts Software interrupts we saw before: – User mode initiates system calls with the SWI instruction (or on x86, the INT instruction) – Illegal instructions are trapped – Occurs synchronously with processor instructions Hardware interrupts are from devices: – Indicated by an electrical signal to a processor – On ARM, multiplexed by the Generic Interrupt Controller (GIC) – Asynchronous with instruction stream CSE 522S – Advanced Operating Systems 4 Hardware Interrupt Interface Register new handlers with request_irq(), three key attributes: – IRQ number – IRQ handler function – Whether the IRQ is shared Handler functions execute in interrupt context: – – – – Disables own interrupt line (optionally all interrupts) May be interrupted by other interrupts Does not need to be re-entrant Cannot sleep CSE 522S – Advanced Operating Systems 5 Hardware Interrupt Tension Handlers must be fast no matter what task requires: – Can preempt more important work – Disables own interrupt line (bad for shared lines), and may disable all lines – Must perform potentially large amounts of work to service hardware – Cannot sleep/block, so cannot call functions that can sleep/block (such as kmalloc()) Strategy: Service hardware immediately but defer as much work as possible till later. CSE 522S – Advanced Operating Systems 6 Top Half / Bottom Half Modern interrupt handlers are split into top half (fast) and bottom half (slow) components Top half: – Does minimum work to service hardware – Sets up future execution of bottom half – Clears interrupt line Bottom half: – Performs deferred processing Example: Network card – top half clears card buffer while bottom half processes and routes packets CSE 522S – Advanced Operating Systems 7 Bottom Half Mechanisms Softirqs (interrupt context) – Statically defined – Most concurrency / performance – Same softirq handler can execute concurrently on different processors Tasklets (interrupt context) – Should be your default choice over softirqs – Tasklet handlers of same type do not execute concurrently Work Queues (process context) – Defers work to generic kernel threads (kworker) – Can sleep – Replaces making your own deferred kernel thread CSE 522S – Advanced Operating Systems 8 Hardware Interrupt Implementation Sequence of events: – – – – – – – – Someone registers a handler on specific IRQ line Device raises interrupt line with GIC GIC de-multiplexes and interrupts CPU CPU jumps to interrupt descriptor table (IRQ table or FIQ table) in entry_armv.S via svn_entry and irq_handle C code starts at asm_do_irq() generic_handle_irq() (arch independent in kernel/irq/irqdesc.c) Proceeds to specific handlers from there Return after executing all handlers CSE 522S – Advanced Operating Systems 9 Inter-processor Interrupts (IPIs) Modern multi-core machines need a way for cores to communicate. – Start/stop/sleep/wakeup other cores – Request task migration – Request remote function call (synchronization) Implemented differently from traditional interrupts, see smp_cross_call() in arch/arm/kernel/smp.c CSE 522S – Advanced Operating Systems 10