土法炼钢兴趣小组的算法知识备份

【操作系统百科】中断架构

文章导航

分类入口
os
标签入口
#interrupt#apic#msi#irq-desc#idt

目录

网卡收到包、磁盘完成 I/O、键盘按键——都通过中断通知 CPU。中断是 OS 与硬件对话的核心通道。

一、先看图

flowchart TD
    DEV[硬件设备] -->|MSI-X| APIC[Local APIC<br/>per-CPU]
    DEV -->|legacy INTx| IOAPIC[I/O APIC]
    IOAPIC --> APIC
    APIC --> IDT[IDT<br/>中断描述符表]
    IDT --> HANDLER[irq_desc → handler<br/>handle_irq]
    HANDLER --> HARDIRQ[hardirq 处理<br/>最小化工作]
    HARDIRQ --> SOFTIRQ[softirq / threaded<br/>延迟处理]

    classDef hw fill:#388bfd22,stroke:#388bfd,color:#adbac7;
    classDef sw fill:#3fb95022,stroke:#3fb950,color:#adbac7;
    class DEV,APIC,IOAPIC hw
    class IDT,HANDLER,HARDIRQ,SOFTIRQ sw

二、x86 中断路径

2.1 IDT(Interrupt Descriptor Table)

256 个条目:

2.2 Local APIC

每 CPU 一个 Local APIC:

2.3 I/O APIC

外部设备的 legacy 中断 → I/O APIC → 路由到目标 CPU 的 Local APIC。

三、MSI/MSI-X

现代设备(NVMe、网卡)使用 MSI/MSI-X:

优势:

四、irq_desc

struct irq_desc {
    struct irq_data irq_data;
    irq_flow_handler_t handle_irq;  // 控制器级 handler
    struct irqaction *action;        // 设备驱动 handler 链
    const char *name;
    // ...
};

每个 IRQ 号对应一个 irq_desc → 串联设备驱动注册的 handler。

五、中断处理流程

  1. 硬件触发 → APIC → CPU 跳转到 IDT entry
  2. 保存寄存器 → 调用 do_IRQ() / handle_domain_irq()
  3. 查找 irq_desc → 调用 handle_irq()(如 handle_fasteoi_irq
  4. 遍历 action 链 → 调用每个设备 handler
  5. handler 返回 IRQ_HANDLED / IRQ_WAKE_THREAD
  6. ACK 中断 → 恢复

六、IRQ affinity

# 查看 IRQ 分布
cat /proc/interrupts

# 设置 IRQ 23 只在 CPU 0-3 上处理
echo 0f > /proc/irq/23/smp_affinity

# irqbalance 自动平衡
systemctl status irqbalance

NVMe 多队列:每个 queue 绑定到不同 CPU → 避免跨核中断。

七、IPI

CPU 间通信用 IPI:

IPI 是最高优先级中断。

八、中断风暴

设备持续产生中断 → CPU 100% 在 hardirq 中 → 应用无法运行。

缓解:

九、ARM 中断

ARM 用 GIC(Generic Interrupt Controller):

设备树描述中断拓扑。

十、小结


参考文献

工具


上一篇形式化验证 下一篇softirq/tasklet/workqueue

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-05-06 · os

【操作系统百科】内核内存调试

内核内存 bug 是最难追的:UAF、OOB、double free、leak 都可能沉默数月。本文讲 KASAN 三种模式、KFENCE 生产采样、kmemleak、SLUB_DEBUG、UBSAN/KCSAN 联动。

2026-05-08 · os

【操作系统百科】VFS 四层抽象

Linux 的一切皆文件靠 VFS 实现——superblock、inode、dentry、file 四层抽象加 ops 表。本文讲 VFS 核心数据结构、dcache、inode cache、RCU lookup,以及文件系统如何插入 VFS。

2026-04-22 · os

操作系统百科

Linux 6.x 视角下的操作系统系列索引:110 篇覆盖调度、虚拟内存、文件系统与 I/O、并发、隔离、可观测性,按主题、阅读路径与关键问题三种入口组织。

2026-05-27 · os

【操作系统百科】用户态分配器:jemalloc vs tcmalloc

jemalloc 与 tcmalloc 都想解决多线程分配器的老问题:锁争抢、碎片、RSS 膨胀与回收抖动。但两者把优化重点放在了不同位置:tcmalloc 更激进地把热路径推到 per-CPU,jemalloc 则把 arena、extent、decay 和 profiling 做成了一套更完整的内存治理工具箱。


By .