中断 异常 陷阱

https://www.crifan.com/files/doc/docbook/interrupt_related/release/htmls/index.html

中断interrupt

单说中断一般指的是硬件中断,外部设备发生了某些事件,通知CPU,然后CPU跳转到相应的ISR(中断处理程序 interrupt service routine),执行完再回来执行下一条指令。

为什么要有中断

针对外设IO的场景:

因为外设IO要远慢与CPU的指令执行速度,CPU指令执行的速度是ns级别的,而外设IO的速度是ms级别的。

假如没有中断要操作外设,CPU一步步按指令顺序执行,CPU给外设发送一个指令,外设开始执行相应的动作,然后CPU开始读取外设的状态,因为CPU指令的执行很快,结果就是CPU执行了多次读取结果的指令(轮询),得到的结果都是外设IO未完成,浪费了CPU时间。

而中断是CPU该干嘛干嘛,不用轮询,等外设的活干完了,再自动发送一个中断给CPU。

轮询poll的含义是:循环等待事件完成

异常 exception

异常时当前指令做出了非法操作,不如除0,内存的非法访问

陷阱 trap

陷阱又叫软件中断,软件的含义是这种中断是由指令完成的,在x86系统中,就是对应的int指令。CPU执行了int指令,然后跳转到对应的软中断处理函数中,陷阱是软件本身的,是程序员故意实现的,常用用于调试。

广义的中断

广义的中断指种植打断正在执行的CPU,所以前面介绍的中断、异常、陷阱都可以叫中断。

Linux的中断

Linux将中断的处理过程分成了连个阶段:上半部和下半部

  • 上半部就是硬中断,直接处理硬件请求。快速执行
  • 下半部内核触发,软中断,以内核线程方式运行。

上半部会打断CPU的执行,立即处理中断处理程序。下半部每个CPU都对应一个软中断内核线程,比如叫ksoftirqd/0,0就是CPU编号。

/proc/softirqs 提供了软中断的运行情况;

/proc/interrupts 提供了硬中断的运行情况。

1
2
3
4
5
6
7
8
9
10
11
12
13

$ cat /proc/softirqs
CPU0 CPU1
HI: 0 0
TIMER: 811613 1972736
NET_TX: 49 7
NET_RX: 1136736 1506885
BLOCK: 0 0
IRQ_POLL: 0 0
TASKLET: 304787 3691
SCHED: 689718 1897539
HRTIMER: 0 0
RCU: 1330771 1354737 #RCU锁(read copy update),内核常用的锁之一

参考

https://www.modb.pro/db/101480

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×