Linux Interrupt(中断)
是指处理器接收到来自硬件或软件
的信号,提示发生了某个事件应该被注意,这种情况就称为中断。
分类
- 硬中断:接收到来自外围硬件(相对于中央处理器和内存)的异步信号,导致处理器通过一个执行
信息切换(context switch)
来保存执行状态(以程序计数器
和程序状态字
等寄存器
信息为主)
- 软中断:接受来自软件的同步信号,通常作为CPU指令集中的一个指令,以可编程的方式直接指示这种执行
信息切换
,并将处理导向一段中断处理代码
其中,发出中断的信号称为进行中断请求(interrupt request,IRQ)
特点
- 硬中断服务函数不能传递参数和返回值,软中断可以
- 中断通常用来处理比较紧急的事情
- 响应及时,如果数据量较小,则不会占用太多的CPU事件
中断上半部分和下半部分
- 上半部分:中断处理程序是上半部分。上半部分在收到中断后立即运行,仅执行对时间要求严格的工作,例如确认收到中断或重置硬件
- 下半部分:可以在以后执行的工作推迟到下半部分。下半部分将在更方便的时间运行,并启用所有中断
相关文件
- /proc/interrupts : 系统中断信息
- /proc/irq/ : 查看指定进程的irq的信息
cat /proc/interrupts
CPU0 CPU1
0: 131 0 IO-APIC-edge timer
1: 13 0 IO-APIC-edge i8042
8: 1 0 IO-APIC-edge rtc0
9: 0 0 IO-APIC-fasteoi acpi
12: 16 0 IO-APIC-edge i8042
14: 0 0 IO-APIC-edge ata_piix
15: 115907 0 IO-APIC-edge ata_piix
16: 189 0 IO-APIC-fasteoi vmwgfx
17: 7091 2638 IO-APIC-fasteoi ioc0
19: 37 180949 IO-APIC-fasteoi ens33
24: 0 0 PCI-MSI-edge PCIe PME, pciehp
...
NMI: 0 0 Non-maskable interrupts
LOC: 4319054 4488832 Local timer interrupts
SPU: 0 0 Spurious interrupts
PMI: 0 0 Performance monitoring interrupts
IWI: 128419 131150 IRQ work interrupts
RTR: 0 0 APIC ICR read retries
RES: 452676 472036 Rescheduling interrupts
CAL: 4007 6384 Function call interrupts
TLB: 54125 50163 TLB shootdowns
TRM: 0 0 Thermal event interrupts
THR: 0 0 Threshold APIC interrupts
DFR: 0 0 Deferred Error APIC interrupts
MCE: 0 0 Machine check exceptions
MCP: 398 398 Machine check polls
ERR: 0
MIS: 0
PIN: 0 0 Posted-interrupt notification event
NPI: 0 0 Nested posted-interrupt event
PIW: 0 0 Posted-interrupt wakeup event
$ ls /proc/irq/1/
affinity_hint i8042 node smp_affinity smp_affinity_list spurious