当前位置:首页>>Linux中断

Linux中断

  • Linux
  • 2022-03-10 13:05:48

Linux中断

  • Linux 内核将中断分为上半部和下半部的主要目的就是实现中断处理函数的快进快出,
  • 那些对时间敏感、执行速度块的操作可以放到中断处理函数中,也就是上半部。
  • 剩下的所有工作都可以放到下半部去执行,比如在上半部将数据拷贝到内存中,关于数据的具体处理就可以放到下半部去执行。
  • 参考点:
    • 如果要处理的内容不希望被其他中断打断,那么可以放到上半部。
    • 1.如果要处理的任务对时间敏感,可以放到上半部。
    • 2.如果要处理的任务与硬件有关,可以放到上半部。
    • 3.除了上述三点以外的其他任务,优先考虑放到下半部。
  • 下半部的处理方式:
    • 1.软中断
      -1. Linux 内核使用结构体 softirq_action 表示软中断, softirq_action结构体定义在文件 include/linux/interrupt.h 中。
      • 2.在 kernel/softirq.c 文件中一共定义了 10 个软中断
        static struct softirq_action softirq_vec[NR_SOFTIRQS];
      • 3.NR_SOFTIRQS 是枚举类型,定义在文件include/linux/interrupt.h 中
      • 4.softirq_action 结构体中的 action 成员变量就是软中断的服务函数
      • 5.数组 softirq_vec 是个全局数组,因此所有的 CPU(对于 SMP 系统而言)都可以访问到,每个 CPU 都有自己的触发和控制机制,并且只执行自己所触发的软中断。
      • 6.但是各个 CPU 所执行的软中断服务函数确是相同的,都是数组 softirq_vec 中定义的 action 函数。
      • 7.要使用软中断,必须先使用 open_softirq 函数注册对应的软中断处理函数。
      • 8.软中断必须在编译的时候静态注册!
      • 9.softirq_init 函数默认会打开 TASKLET_SOFTIRQ 和HI_SOFTIRQ。
    • 2.tasklet
      • tasklet 是利用软中断来实现的另外一种下半部机制,在软中断和 tasklet 之间,建议使用 tasklet。
    • 3.工作队列
      • 1.工作队列是另外一种下半部执行方式,工作队列在进程上下文执行,