CPU软中断

2020-01-12  本文已影响0人  崔天浩

中断描述

中断是系统用来响应硬件设备请求的一直机制,它会打断进程的正常调度何执行,然后调用内核中的中断处理程序来响应设备的请求,只有收到中断信号,CPU才处理中断时间,没有收到信号时候,可以继续执行其它工作, 可以看出中断是一种一步的事件处理机制,由于中断处理程序会打断其它进程的运行,所以为了减少正常运行调度影响,中断处理程序需要尽可能快的运行,如果中断本身要做的事情不对,那么处理起来也不会太耗时,但是中断要处理的事情很多,中断服务程序就有可能执行很长时间,由于中断处理程序在响应中断时,还会临时关闭其它请求过来中断。着就会导致这个中断处理完成之前,其它中断都无法响应导致丢失

软中断

为了解决中断处理程序执行时间过长,导致其它中断请求丢失的问题,linux将中断处理过程分为两个阶段,上半部和下半部

网卡接收数据包例子:

网卡接受到数据包后,会通过硬件中断方式,通知内核有新的数据到了,这时,内核就应该调用中断处理程序来相应它

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

注意:软中断不只包括了上述的硬件设备中断处理程序的下半部,一些内核自定义的时间也属于软中断,比如内核调度和RCU锁(read-copy update的缩写,RCU是Linux内核中最常用的锁之一)等

查看软中断和内核线程

$ cat /proc/softirqs
                    CPU0
          HI:          1
       TIMER:   64325468
      NET_TX:        113
      NET_RX:    2203298
       BLOCK:          0
BLOCK_IOPOLL:          0
     TASKLET:         39
       SCHED:          0
     HRTIMER:          0
         RCU:   41173220

查看软中断线程

$ ps aux | grep softir
root         3  0.0  0.0      0     0 ?        S     2019   0:03 [ksoftirqd/0]

总结

中断处理分为上半部和下半部

上一篇 下一篇

猜你喜欢

热点阅读