linux软中断原理,Linux软中断原理浅析

linux软中断原理,Linux软中断原理浅析软中断原理浅析 Linux 中的软中断机制用于系统中对时间要求最严格以及最重要的中断下半部进行使用 在系统设计过程中 大家都清楚中断上下文不能处理太多的事情 需要快速的返回 否则很容易导致中断事件的丢失 所以这就产生了一个问题 中断发生之后的事务软中断原理浅析 Linux 中的软中断机制用于系统中对时间要求最严格以及最重要的中断下半部进行使用 在系统设计过程中 大家都清楚中断上下文不能处理太多的事情

软中断原理浅析Linux中的软中断机制用于系统中对时间要求最严格以及最重要的中断下半部进行使用。在系统设计过 程中,大家都清楚中断上下文不能处理太多的事情,需要快速的返回,否则很容易导致中断事件的丢失,所以这就产生了一个问题:中断发生之后的事务

软中断原理浅析

Linux中的软中断机制用于系统中对时间要求最严格以及最重要的中断下半部进行使用。在系统设计过 程中,大家都清楚中断上下文不能处理太多的事情,需要快速的返回,否则很容易导致中断事件的丢失,所以这就产生了一个问题:中断发生之后的事务处理由谁来 完成?在前后台程序中,由于只有中断上下文和一个任务上下文,所以中断上下文触发事件,设置标记位,任务上下文循环扫描标记位,执行相应的动作,也就是中 断发生之后的事情由任务来完成了,只不过任务上下文采用扫描的方式,实时性不能得到保 证。在Linux系统和Windows系统中,这个不断循环的任务就是本文所要讲述的软中断daemon。在Windows中处理耗时的中断事务称之为中 断延迟处理,在Linux中称之为中断下半部,显然中断上半部处理清中断之类十分清闲的动作,然后在退出中断服务程序时触发中断下半部,完成具体的功能。

在Linux中,中断下半部的实现基于软中断机制。所以理清楚软中断机制的原理,那么中断下半部的实现也就非常简单了。通过上述的描述,大家也应该 清楚为什么要定义软中断机制了,一句话就是为了要处理对时间要求苛刻的任务,恰好中断下半部就有这样的需求,所以其实现采用了软中断机制。  www.cit.cn

构成软中断机制的核心元素包括:

1、  软中断状态寄存器soft interrupt state(irq_stat)

2、  软中断向量表(softirq_vec)

3、  软中断守护daemon

www.cit.cn

软中断的工作工程模拟了实际的中断处理过程,当某一软中断时间发生后,首先需要设置对应的中断标记位,触发中断事务,然后唤醒守护线程去检测中断状 态寄存器,如果通过查询发现某一软中断事务发生之后,那么通过软中断向量表调用软中断服务程序action()。这就是软中断的过程,与硬件中断唯一不同 的地方是从中断标记到中断服务程序的映射过程。在CPU的硬件中断发生之后,CPU需要将硬件中断请求通过向量表映射成具体的服务程序,这个过程是硬件自 动完成的,但是软中断不是,其需要守护线程去实现这一过程,这也就是软件模拟的中断,故称之为软中断。

一个软中断不会去抢占另一个软中断,只有硬件中断才可以抢占软中断,所以软中断能够保证对时间的严格要求。

Linux中软中断实现分析

在Linux中最多可以注册32个软中断,目前系统用了6个软中断,他们为:定时器处理、SCSI处理、网络收发处理以及Tasklet机制,这里的tasklet机制就是用来实现下半部的,

描述软中断的核心数据结构为中断向量表,其定义如下:

struct softirq_action

{

void (*action)(struct softirq_action *); /* 软中断服务程序 */

void *data;                                         /* 服务程序输入参数 */

www.cit.cn

};

软中断守护daemon是软中断机制的实现核心,其实现过程也比较简单,通过查询软中断状态irq_stat来判断事件是否发生,如果发生,那么映 射到软中断向量表,调用执行注册的action函数就可以了。从这一点分析可以看出,软中断的服务程序的执行上下文为软中断daemon。在Linux中 软中断daemon线程函数为do_softirq()。

触发软中断事务通过raise_softirq()来实现,该函数就是在中断关闭的情况下设置软中断状态位,然后判断如果不在中断上下文,那么直接唤醒守护daemon。

常用的软中断函数列表如下:

1、  Open_softirq,注册一个软中断,将软中断服务程序注册到软中断向量表。2、  Raise_softirq,设置软中断状态bitmap,触发软中断事务。

Tasklet机制实现分析

Tasklet为一个软中断,考虑到优先级问题,分别占用了向量表中的0号和5号软中断。

www.cit.cn

当tasklet的软中断事件发生之后,执行tasklet-action的软中断服务程序,该服务程序会扫描一个tasklet的任务列表,执行该任务中的具体服务程序。在这里举一个例子加以说明:

当用户读写USB设备之后,发生了硬件中断,硬件中断服务程序会构建一个tasklet_struct,在该结构中指明了完成该中断任务的具体方法 函数(下半部执行函数),然后将tasklet_struct挂入tasklet的tasklet_struct链表中,这一步可以通过 tasklet_schedule函数完成。最后硬件中断服务程序退出并且CPU开始调度软中断daemon,软中断daemon会发现tasklet发 生了事件,其会执行tasklet-action,然后tasklet-action会扫描tasklet_struct链表,执行具体的USB中断服务 程序下半部。这就是应用tasklet完成中断下半部实现的整个过程。

www.cit.cn

Linux中的tasklet实现比较简单,其又封装了一个重要数据结构tasklet_struct,使用tasklet主要函数列表如下:

1、  tasklet_init,初始化一个tasklet_struct,当然可以采用静态初始化的方法,宏为:DECLARE_TASKLET。

2、  tasklet_schedule,调度一个tasklet,将输入的tasklet_struct添加到tasklet的链表中。

Linux中的软中断机制就是模拟了硬件中断的过程,其设计思想完全可以在其他嵌入式OS中得以应用。

作者 llg

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230655.html原文链接:https://javaforall.net

(0)
上一篇 2026年2月10日 下午6:01
下一篇 2026年2月10日 下午6:22


相关推荐

  • robotium android,Robotium 测试Android apk安装包

    robotium android,Robotium 测试Android apk安装包介绍要测试apk程序必须和我们编写的测试程序拥有相同的签名(signature)。如果没有apk程序的签名秘钥,就要去除apk程序的签名,然后再使用自己的key对其签名(这一步中,我们可以使用debugkey),已经有现成的工具可用,下载地址re-sign.jar,这个工具可以去掉apk程序的原签名,然后使用我们自己的debugkey对其签名。详细编写测试用例之前,我们需要知道apk程序的包名…

    2022年7月25日
    12
  • 基于爬山算法求解TSP问题(JAVA)

    基于爬山算法求解TSP问题(JAVA)一 TSP 问题 TSP 问题 TravellingSa 即旅行商问题 又译为旅行推销员问题 货郎担问题 是数学领域中著名问题之一 假设有一个旅行商人要拜访 n 个城市 他必须选择所要走的路径 路径的限制是每个城市只能拜访一次 而且最后要回到原来出发的城市 路径的选择目标是要求得的路径路程为所有路径之中的最小值 TSP 问题是一个组合优化问题 该问题可以被证明具有 NP

    2026年3月19日
    2
  • 5分钟商学院之个人篇–时间管理和学习能力

    1.时间管理1.1时间成本时间成本,就是如果把这个时间用于做别的事情,可以获得的收益懂得计算时间成本,可以帮助我们做出理性决策,比如一件事是自己做合适还是花钱请别人做合适1.2GTD(G

    2021年12月30日
    40
  • 腾讯七大事业群_腾讯pcg事业群难进吗

    腾讯七大事业群_腾讯pcg事业群难进吗企业发展事业群(CorporateDevelopmentGroup,简称CDG)意如其名,企业发展事业群CDG在腾讯内部担当战略规划、投资者关系维护、业务孵化和投资并购等角色。众所周知的微信、财付通、QQ邮箱等业务均属CDG,诸多投资工作也由CDG负责,比如国内外投资并购、海外市场推广等工作,有志于股权投资、创新业务、国际化并拥有专长的同学可格外关注!互动娱乐事业群(I

    2025年11月13日
    4
  • 5分钟接入量化信号:QuantToGo MCP Server实战教程

    5分钟接入量化信号:QuantToGo MCP Server实战教程

    2026年3月15日
    2
  • 华为三层交换机配置vlanif_华为三层交换机查看路由表

    华为三层交换机配置vlanif_华为三层交换机查看路由表实验拓扑实验需求1、C1与C3属于VLAN10,C2与C4属于VLAN20,在SW1上创建VLAN100做上行VLAN2、在SW1上终结所有VLAN3、在所有VLAN成员使用DHCP获取IP4、全网互通IP规划VLAN10:192.168.10.0/24VLAN20:192.168.20.0/24VLAN100:192.168.100.10/24R1G0/0/0:192…

    2025年11月30日
    27

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号