Linux软中断

  • 1、软中断介绍
  • 2、软中断的使用
    • 2.1、注册软中断处理函数
    • 2.2、触发软中断

1、软中断介绍

Linux 内核使用结构体 softirq_action 表示软中断, softirq_action结构体定义在文件include/linux/interrupt.h 中,内容如下:

在 kernel/softirq.c 文件中一共定义了 10 个软中断:

static struct softirq_action softirq_vec[NR_SOFTIRQS];
中断 含义
HI_SOFTIRQ=0 高优先级软中断
TIMER_SOFTIRQ 定时器软中断
NET_TX_SOFTIRQ 网络数据发送软中断
NET_RX_SOFTIRQ 网络数据接收软中断
BLOCK_SOFTIRQ 块设备的软中断
BLOCK_IOPOLL_SOFTIRQ 支持IO轮询的块设备软中断
TASKLET_SOFTIRQ tasklet 软中断
SCHED_SOFTIRQ 调度软中断
HRTIMER_SOFTIRQ 高精度定时器软中断
RCU_SOFTIRQ RCU 软中断
NR_SOFTIRQS 软中断数,为10

一共有 10 个软中断,因此 NR_SOFTIRQS 为 10,因此数组 softirq_vec 有 10 个元素。 softirq_action 结构体中的 action 成员变量就是软中断的服务函数,数组 softirq_vec 是个全局数组,因此所有的 CPU(对于 SMP 系统而言)都可以访问到,每个 CPU 都有自己的触发和控制机制,并且只执行自己所触发的软中断。但是各个 CPU 所执行的软中断服务函数确是相同的,都是数组 softirq_vec 中定义的 action 函数。

2、软中断的使用

2.1、注册软中断处理函数

使用 open_softirq 函数注册对应的软中断处理函数:

void open_softirq(int nr, void (*action)(struct softirq_action *))

参数及其含义:

参数 含义
nr 要开启的软中断,在上面10个中选一个
action 软中断对应的处理函数

2.2、触发软中断

注册好软中断以后需要通过 raise_softirq 函数触发, raise_softirq 函数原型如下:

void raise_softirq(unsigned int nr)
参数 含义
nr 要开启的软中断,在上面10个中选一个

软中断必须在编译的时候静态注册! Linux 内核使用 softirq_init 函数初始化软中断,softirq_init 函数定义在 kernel/softirq.c 文件里面,函数内容如下:

void __init softirq_init(void)
{int cpu;for_each_possible_cpu(cpu){per_cpu(tasklet_vec, cpu).tail =&per_cpu(tasklet_vec, cpu).head;per_cpu(tasklet_hi_vec, cpu).tail =&per_cpu(tasklet_hi_vec, cpu).head;}open_softirq(TASKLET_SOFTIRQ, tasklet_action);open_softirq(HI_SOFTIRQ, tasklet_hi_action);
}

softirq_init 函数默认会打开 TASKLET_SOFTIRQ 和HI_SOFTIRQ。

Linux内核笔记--软中断相关推荐

  1. Linux内核笔记--内存管理之用户态进程内存分配

    内核版本:linux-2.6.11 Linux在加载一个可执行程序的时候做了种种复杂的工作,内存分配是其中非常重要的一环,作为一个linux程序员必然会想要知道这个过程到底是怎么样的,内核源码会告诉你 ...

  2. linux内核自旋锁解释,LINUX内核笔记:自旋锁

    目录 1.自旋锁作用与基本使用方法? 与其他锁一样,自旋锁也用于保护临界区,但是自旋锁主要是用于在SMP上保护临界区.在SMP上,自旋锁最多只能被一个可执行线程持有,如果一个线程尝试获得一个被争用的自 ...

  3. Linux内核笔记006 - 交换分区

    本文转自网络文章,内容均为非盈利,版权归原作者所有. 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除. 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com ...

  4. linux内核笔记-内核同步

    linux内核就相当于不断对请求进行响应的服务器,这些请求可能来自CPU,可能来自发出中断的外部设备.我们将内核看作两种请求的侍者. (1)老板提出请求,侍者如果空闲,为老板服务.(系统调用或异常) ...

  5. linux 内核笔记之watchdog

    一.概要 watchdog简而言之,watchdog是为了保证系统正常运行,或者从死循环,死锁等一场状态退出的一种机制. 看门狗分硬件看门狗和软件看门狗.硬件看门狗是利用一个定时器电路,其定时输出连接 ...

  6. 深入理解LINUX内核 笔记 第四章 中断和异常

    中断和异常处理程序的嵌套执行 https://blog.csdn.net/denglin12315/article/details/121703669 一.历史 早前的Linux内核版本,中断分为两种 ...

  7. linux 2.6.36代码构架,Linux 内核笔记(2.6.36)(二)

    C语言基础 链表 linux内核代码中大量使用链表,为了提高效率,内核采用了一套通用的,一般的,可以用到各种不同数据结构的队列操作.在include/linux/ list.h中,有如下申明: 点击( ...

  8. Linux内核笔记之DMA_BUF

    内存管理始终是底层软件的核心部分,尤其是对于音视频的解码显示功能.本文将通过编写一个实例驱动程序,同内核中的i915显卡驱动进行内存方面的交互来剖析 Linux内核中的通用子系统DMA_BUF. DM ...

  9. linux 内核线程 软中断,Linux性能优化实战:系统的软中断CPU使用率升高,我该怎么办?(10)...

    一.坏境准备 1.拓扑图 2.安装包 在第9节的基础上 在VM2上安装hping3依奈包 wget http://www.tcpdump.org/release/libpcap-1.9.0.tar.g ...

最新文章

  1. Bean装配之Aware接口
  2. [转]pragma comment的使用
  3. python queue 多线程_Python如何实现并行的多线程?
  4. Matlab R2018a版离线使用帮助文档方法
  5. Android libcutils库中整数溢出导致的堆破坏漏洞的发现与利用
  6. AI驱动的超分辨技术落地实践
  7. sklearn的简单使用
  8. 开放下载!《OSS运维基础实战手册》
  9. Android 摇一摇(二)
  10. STM32F103C8T6单片机IAP升级
  11. 如何保留小数点后任意一位数
  12. 如何清除/删除终端中的当前行?
  13. 【图像分割】基于matlab直觉模糊C均值聚类图像分割IFCM【含Matlab源码 120期】
  14. php mysql 嵌套查询_MYSQL数据库MySQL嵌套查询实例详解
  15. 好课推荐|云安全领域的新宠CCSK
  16. rpc调用和http调用有什么区别
  17. 安卓开发者模式中将最小dp调得太高导致无法开机的解决方法
  18. 【数据结构与算法分析1.2】编写一个程序求解字谜游戏问题
  19. html校验邮箱格式,正则验证邮箱格式
  20. java计算机毕业设计红色主题旅游网站源码+mysql数据库+系统+lw文档+部署

热门文章

  1. MindSpore 使用 GradCAM
  2. 区块链软件开发公司 区块链技术对市场的意义
  3. Flash 存储器接口标准:CFI和JEDEC
  4. 零起点学VB做外挂(一)
  5. D3D渲染技术之纹理
  6. quest3d q.LoadChannelGroupDQ的详解
  7. 辽宁师范大学本科毕业论文答辩PPT模板
  8. iPhone浏览器会把类似手机号或者电话号的一串数字的样式字体改为灰色
  9. 计算机表白那个视频教程,表白软件制作_表白软件制作教程_表白软件制作视频教程 _课课家...
  10. WinDbg基本使用