踏踏实实积累,不要浮躁

1:理解中断

Linux中断是操作系统的自我保护机制,可以保证硬件的交互过程不被意外打断,所以短时间内的中断是正常的。

 

2:为什么要有中断

中断其实是一种异步的事件处理机制,可以提高系统的并发能力。

比如你订了一份外卖,不确定外卖啥时候能送到,为了确保外卖不丢你必须得一直处于等待状态。但是如果你跟外卖员约定好外卖送到后给你打电话,你接到电话之后停止手中的事情开始去拿外卖。

 

3:中断丢失

由于中断会打断其他进程的运行,为了减少对其他进程调度的影响中断处理程序需要尽可能快的运行。所以需要保证中断程序短小精悍

用外卖的例子来说明就是:你同时订了两份外卖,第一份外卖到了在打电话的过程中,第二份外卖也到了电话占线就会出现外卖丢失的情况。

 

4:软中断

Linux将处理中断的过程分为两部分 上半部下半部

上半部 用来快速处理中断,它在中断禁止模式下运行,主要处理跟硬件密切相关的或时间铭感的工作

下半部 用来延迟处理上半部未完成的工作,通常以内核线程的方式运行  比如上面送外卖的例子中,第一个外卖员打电话来及时挂断电话,表示自己知道了,其他工作等见面后谈。

网卡接收数据包的例子:当网卡接收到数据包后,会通过硬件中断的方式,通知内核有新的数据到了,这时候内核就调用相应的程序来处理数据,在这个例子中 上半部就是把网卡的数据读入到内存中,然后更新硬件寄存器的状态(表示数据已经读好),再发送一个软中断信号通知下半部作进一步处理,下半部接收到处理信号之后需要从内存中读取网络数据,再按照网络协议栈,对数据进行逐层解析和处理直到把数据送给应用程序通俗的理解就是

上半部:直接处理硬件请求,也就是我们所说的硬中断,特点是快速执行

下半部:由内核触发也就是我们所说的软中断,特点是延迟执行

实际上上半部会打断CPU正在执行的任务,然后立即执行中断处理程序。而下半部以内核线程的方式执行每个CPU都对应一个软中断内核线程,名字为ksoftirqd/CPU编号,比方说0号CPU对应内核线程名字为ksoftirqd/0

 

5:查看系统中的软中断

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

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

上面两个文件中的参数具体含义有待我进一步学习,内容比较多先写到这里

 

 

 

 

 

Logo

更多推荐