首先是内核中断的分类,这里只是根据proc/interrupts下显示的中断进行分类,主要包含外部中断和IPI中断

cat proc/interruptsCPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU71:     107049     104452      77919     106593      17651       2993       2558       3417     GICv3  59 Level     r4p0_bcevt_timer2:     340336     310429     188422     253369      39242      16601       7743      12236     GICv3  30 Edge      arch_timer3:          0          0          0          0          0          0          0          0     GICv3  26 Edge      arch_timer5:          1          0          0          0          0          0          0          0     GICv3  35 Level     sprd_serial16:         18          0          0          0          0          0          0          0     GICv3  43 Level     70500000.i2c7:         54          0          0          0          0          0          0          0     GICv3  44 Level     70600000.i2c8:       8175          0          0          0          0          0          0          0     GICv3  46 Level     70800000.i2c9:        309          0          0          0          0          0          0          0     GICv3  47 Level     70900000.i2c11:          0          0          0          0          0          0          0          0     GICv3  82 Level     sprd_dma12:      60761          0          0          0          0          0          0          0     GICv3  92 Level     mmc013:          0          0          0          0          0          0          0          0     GICv3  89 Level     mmc114:          5          0          0          0          0          0          0          0     GICv3  90 Level     mmc215:       2608          0          0          0          0          0          0          0     GICv3  87 Level     musb-hdrc.0.auto17:          0          0          0          0          0          0          0          0     GICv3  52 Edge      sprd_codec_dp21:      21688          0          0          0          0          0          0          0     GICv3 153 Level     sprd_cpufreqhw23:      25726          0          0          0          0          0          0          0     GICv3  78 Level     DISPC24:       3114          0          0          0          0          0          0          0     GICv3  83 Level     GSP025:          0          0          0          0          0          0          0          0     GICv3  75 Level     VSP26:          0          0          0          0          0          0          0          0     GICv3  74 Level     JPG27:          0          0          0          0          0          0          0          0     GICv3  80 Level     DSI_INT028:          0          0          0          0          0          0          0          0     GICv3  81 Level     DSI_INT141:      15711          0          0          0          0          0          0          0     GICv3  71 Level     pvrsrvkm43:          0          0          0          0          0          0          0          0     GICv3  93 Level     pub0_dmc_mpu53:          0          0          0          0          0          0          0          0     GICv3 100 Level     sprd-mailbox_source54:      20246          0          0          0          0          0          0          0     GICv3 101 Level     sprd-mailbox_target55:          0          0          0          0          0          0          0          0     GICv3 151 Level     sprd-mailbox_target56:          0          0          0          0          0          0          0          0     GICv3 115 Edge      cptl57:         18          0          0          0          0          0          0          0     GICv3  70 Level     spi5.058:          1          0          7          0          0          0          0          0    spi5.0   7 Edge      chg_timer59:          0          0          0          0          0          0          0          0    spi5.0   1 Edge      sprd_rtc60:          1          0          6          0          0          0          0          0    spi5.0   4 Edge      41800000.spi:pmic@0:gpio-controller@28061:          1          0          2          0          0          0          0          0    spi5.0  10 Edge      typec62:          0          0          0          0          0          0          0          0    spi5.0   6 Edge      sprd_codec_ap63:          0          0          0          0          0          0          0          0    spi5.0   3 Edge      sprdfgu64:          0          0          0          0          0          0          0          0     GICv3 124 Level     aon-busmonitor65:          0          0          0          0          0          0          0          0     GICv3 119 Level     apcpu-busmonitor66:          1          0          2          0          0          0          0          0  irq-pmic-eic   0 Level     musb vbus dectect irq68:          1          0          0          0          0          0          0          0  irq-ap-eic   9 Edge      20300000.sdio cd69:     164020     149945     117589     145551      20421       4260       3483       6879  CustomIPI  13 Edge      trusty70:          0          0          0          0          0          0          0          0  SPRDSensor-dev1 Edge      SPRDSensor_consumer172:          0          0          0          0          0          0          0          0  irq-ap-gpio 124 Level     Volume Down Key73:          0          0          0          0          0          0          0          0  irq-pmic-eic  10 Level     Volume Up Key74:          0          0          4          0          0          0          0          0  irq-pmic-eic   1 Level     Power Key75:       2038          0          0          0          0          0          0          0  irq-ap-gpio 144 Edge      adaptive_ts-irq77:          0          0          0          0          0          0          0          0  irq-pmic-eic   9 Level     sprdbat_vbat_detect81:          0          0          0          0          0          0          0          0  irq-pmic-eic  13 Level     headset_detect82:          0          0          0          0          0          0          0          0  irq-pmic-eic   3 Level     headset_button
IPI0:    168450     167000     146626     128236      24290      12465       6847       9956       Rescheduling interrupts
IPI1:       823        883       1115       1182       1209       1255       1223       1255       Function call interrupts
IPI2:         0          0          0          0          0          0          0          0       CPU stop interrupts
IPI3:      2433       2672       2316       3222        909        212        215        240       Timer broadcast interrupts
IPI4:      9026       7987       2190       2279       1660       1189        128        179       IRQ work interrupts
IPI5:         0          0          0          0          0          0          0          0       CPU wake-up interrupts
Err:         38

外部中断

其中前面带编号的是外部中断,外部中断

网络数据包到达后,网卡向IOAPIC发起中断请求,IOAPIC查“中断重定向表”(Interrupt Redirection Table), 根据这个表的信息和数据包的信息,确定目标CPU,IOAPIC再把这个中断请求转发给目标CPU的LAPIC。目标CPU通过LAPIC收到数据包到达的中断请求,根据中断向量找到中断处理函数,处理中断请求。

IPI中断

下面的ID号是IPI开头的实际上是IPI中断,也可以叫做核间中断

IPI中断则比较简单:

在SMP系统中,每个cpu都有一个LAPIC,LAPC有两个重要的控制器 APIC_ICR 和 APIC_ICR2

APIC_ICR: 存储的是中断向量

APIC_ICR2:存储的是发送中断请求的目标

当CPU0 要给CPU1发送IPI中断时,CPU0只要把中断向量写入APIC_ICR,把中断请求目标写入APIC_ICR2,然后中断控制器就可以通过总线把中断请求发给CPU1的LAPIC。这样CPU1通过LAPIC就可以收到中断请求,并查中断向量表,找到中断处理函数,处理中断请求。

区别

在SMP系统中,每个cpu都有一个LAPIC,LAPC有两个重要的控制器 APIC_ICR 和 APIC_ICR2

APIC_ICR: 存储的是中断向量

APIC_ICR2:存储的是发送中断请求的目标

当CPU0 要给CPU1发送IPI中断时,CPU0只要把中断向量写入APIC_ICR,把中断请求目标写入APIC_ICR2,然后中断控制器就可以通过总线把中断请求发给CPU1的LAPIC。这样CPU1通过LAPIC就可以收到中断请求,并查中断向量表,找到中断处理函数,处理中断请求。

统计一段时间内的中断数的程序如下:

难点主要在数据是动态显示的,所以需要做动态处理:

https://github.com/feifeiyuan/features/blob/master/C/%E7%BB%9F%E8%AE%A1%E4%B8%80%E6%AE%B5%E6%97%B6%E9%97%B4%E7%9A%84%E4%B8%AD%E6%96%AD%E4%BF%A1%E6%81%AF/interrupts.c

【proc/interrupts】内核中断相关推荐

  1. linux内核看门狗关闭方法,linux内核中断之看门狗

    一:内核中断 linux内核中的看门狗中断跟之前的裸板的中断差不多,在编写驱动之前,需要线把内核自带的watch dog模块裁剪掉,要不然会出现错误:在Device Drivers /Watchdog ...

  2. Linux 内核中断内幕【转】

    转自:http://www.ibm.com/developerworks/cn/linux/l-cn-linuxkernelint/ 本文对中断系统进行了全面的分析与探讨,主要包括中断控制器.中断分类 ...

  3. [arm驱动]linux内核中断编程

    第一部分获取中断(开启硬件中断) 一.中断的申请注销: 1)中断的申请 1 2 int request_irq(unsigned int irq, irq_handler_t handler,     ...

  4. Linux驱动技术(六) _内核中断

    在硬件上,中断源可以通过中断控制器向CPU提交中断,进而引发中断处理程序的执行,不过这种硬件中断体系每一种CPU都不一样,而Linux作为操作系统,需要同时支持这些中断体系,如此一来,Linux中就提 ...

  5. Linux内核中断系统处理机制-详细分析

    原文地址::https://blog.csdn.net/weixin_42092278/article/details/81989449 相关文章 1.Linux中断管理 (1)Linux中断管理机制 ...

  6. 龙芯处理器内核中断讲解

    龙芯处理器内核中断讲解 这里以龙芯处理器ls2k1000为例讲解 1.和中断相关的协处理器 ① 原因寄存器(Cause) IP7-0指出等待的中断.该位将保持不变直到中断撤除.IP0~IP1 是软中断 ...

  7. linux内核中断详解

    linux内核中断详解 1.中断的硬件触发流程 外设:如果外设有操作或者有数据可用,那么就会产生一个电信号,这个电信号发送给中断控制器. 中断控制器:中断控制器接收到外设发来的电信号以后,进行进一步的 ...

  8. linux内核中断(一)

    一.中断简介 中断是指 CPU 在执行程序的过程中,出现了某些突发事件急待处理,CPU 必须暂停当前程序的执行, 转去处理突发事件,处理完毕后又返回原程序被中断的位置继续执行.由于中断的存在极大的提高 ...

  9. /proc/irq和/proc/interrupts详解

    本文转载于:https://blog.csdn.net/yiyeguzhou100/article/details/51746031 在/proc目录下面,有两个与中断子系统相关的文件和子目录,它们是 ...

最新文章

  1. git 从远程主服务器当中创建新分支
  2. .substr()在字符串每个字母前面加上一个1
  3. 人工智能改变生活的10种方式
  4. 台湾国立大学郭彦甫Matlab教程笔记(20) root finding(numeric)
  5. 递归算法学习系列之八皇后问题
  6. 才子佳人文学传统的戏拟与嘲仿
  7. oracle数据库集群日志,Oracle集群数据库中恢复归档日志
  8. 单峰数组找最大元素C语言,查找单峰数组中的第k个元素
  9. Error running app: Default Activity Not Found
  10. ie的lan设置无法保存_Bios 无法识别 M2硬盘
  11. python 保存视频流_[宜配屋]听图阁
  12. Jasperreports TextField自动换行
  13. poj - 2255 Tree Recovery
  14. 用SecureCRSecurePortable查看动态日志
  15. hypermesh中怎么设置支反力(反作用力)
  16. linux 命令下载jdk
  17. 如何将卫星影像按固定比例尺输出(1:5千,1:1万等)
  18. mongodb官网下载不了, MongoDB下载、安装、配置、使用,如何下载MongoDB数据库,MongoDB入门
  19. 纺织ERP_面料ERP_指点ERP系统
  20. 泼冷水!为什么说机器学习在很多方面被高估了? | 精选

热门文章

  1. 2023年清华大学五道口金融学院联合培养博士、普博招生简章之解读分析
  2. linux下那些服务可以禁用掉
  3. 深度分析射频电路的原理及应用
  4. 幽门螺杆菌来源于哪种食物?如何彻底根治?
  5. OJ:The Suspects(C++)
  6. 【附源码下载】推荐20个开源的Java项目
  7. drop table可以删除多张表吗_python全球疫情分析,告诉你海外疫情到底有多严峻 | 附290行代码...
  8. 游戏开发第一课:数字华容道
  9. 入职Salesforce乙方公司前, 需要了解什么?
  10. js拼装html单引号双引号,js、html中的单引号、双引号及其转义使用