前言
呵呵 中断机制 也是内核中很常见的机制了
中断机制是现代计算机系统中的基本机制之一,它在系统中起着通信网络的作用,以协调系统对各种外部事件的响应和处理,中断是实现多道程序设计的必要条件,中断是CPU 对系统发生的某个事件作出的一种反应。引起中断的事件称为中断源。中断源向CPU 提出处理的请求称为中断请求。发生中断时被打断程序的暂停点称为断点。CPU暂停现行程序而转为响应中断请求的过程称为中断响应。处理中断源的程序称为中断处理程序。CPU执行有关的中断处理程序称为中断处理。而返回断点的过程称为中断返回。中断的实现由软件和硬件综合完成,硬件部分叫做硬件装置,软件部分称为软件处理程序。
硬中断的处理
通过 ax 传递中断号, 获取对应的 irq_desc
然后 irq_desc 会有一系列 irq_action 来依次处理 当前中断
(initramfs) cat /proc/interrupts
CPU0
0: 2255 IO-APIC 2-edge timer
1: 9 IO-APIC 1-edge i8042
4: 2351 IO-APIC 4-edge serial
8: 1 IO-APIC 8-edge rtc0
9: 0 IO-APIC 9-fasteoi acpi
12: 3 IO-APIC 12-edge i8042
14: 178 IO-APIC 14-edge ata_piix
15: 38 IO-APIC 15-edge ata_piix
NMI: 0 Non-maskable interrupts
LOC: 19244 Local timer interrupts
SPU: 0 Spurious interrupts
PMI: 0 Performance monitoring interrupts
IWI: 0 IRQ work interrupts
RTR: 0 APIC ICR read retries
RES: 0 Rescheduling interrupts
CAL: 0 Function call interrupts
TLB: 0 TLB shootdowns
TRM: 0 Thermal event interrupts
THR: 0 Threshold APIC interrupts
DFR: 0 Deferred Error APIC interrupts
MCE: 0 Machine check exceptions
MCP: 2 Machine check polls
ERR: 0
MIS: 0
PIN: 0 Posted-interrupt notification event
PIW: 0 Posted-interrupt wakeup event
硬中断这部分处理是在 irq.do_IRQ 中进行处理的
ata_piix 对应的 handler 是 libata-sff.ata_bmdma_interrupt
serial 对应的 handler 是 8250_core.serial8250_interrupt
timer 对应的 handler 是 time.timer_interrupt
i8042 对应的 handler 是 i8042.i8042_interrupt
在哪里注册中断?
这部分中断通常来说是 系统启动 的时候注册的
ata_piix 对应的两个 硬中断
i8042 注册的两个 硬中断
serial 注册的一个硬中断
atta_piix 中断的处理
如下 硬件发出中断 会来到 中断处理层, 再到具体的 ata层, 再到 scsi 层
serial 中断的处理
如下 硬件发出中断 会来到 中断处理层, 再到具体的 串口层
timer中断的处理
i8042中断的处理
1 号中断
12 号中断
完