Linux2.6软中断分析

关于软中断和系统调用的一点分析 感觉之前对于软中断一直有一些误解。   软中断的定义: 软中断是利用硬件中断的概念,用软件方式进行模拟,实现宏观上的异步执行效果。很多情况下,软中断和“信号”类似。同时,软中断又是和硬中断相对应的,“硬中断是外部设备对CPU的中断”,“软中断通常是硬件中断服务程序对内核的中断”   作为系统调用而言,对于i386则是通过软中断int80实现 对于其它的软中断,则是在硬件中断之后触发的软 阅读详情

Linux2.6的软中断框架与2.4相比有了一些不同:2.2之前的传统bottom half已经几乎没有了,任务队列被取消,软中断的调用时机也有所不同。下面分析一下2.6软中断的框架。

2.6中软中断还是由函数do_softirq调用,但异常和系统调用返回、调度时不再执行软中断,执行时机变为以下3个:

l         硬件处理完一个中断之后(irq_exit函数)

l         内核线程ksoftirqd

l         显式调用do_softirq的地方(比如net子系统中)

do_softirq会遍历所有的softirq_vec,依次调用其中的action函数。系统预定义的软中断有:

enum

{

       HI_SOFTIRQ=0,                       

       TIMER_SOFTIRQ,                           

       NET_TX_SOFTIRQ,                         // 网络发送底半部(网卡中不一定要使用,2.6中也可以用work queue),NAPI中用到。

       NET_RX_SOFTIRQ,                         // 网络接收底半部

       BLOCK_SOFTIRQ,                            // block子系统专用软中断

       TASKLET_SOFTIRQ,                        // 公共的tasklet使用

       SCHED_SOFTIRQ,                           

#ifdef CONFIG_HIGH_RES_TIMERS

       HRTIMER_SOFTIRQ,

#endif

       RCU_SOFTIRQ,   /* Preferable RCU should always be the last softirq */

};

 

l         TASKLET_SOFTIRQ:       tasklet_schedule函数实现了公共的tasklet机制,这个函数内部所做的就是把一个tasklet挂到CPU的tasklet链表,然后标记TASKLET_SOFTIRQ软中断。

l         HI_SOFTIRQ :          tasklet_hi_schedule函数实现另一个tasklet队列实例,这个函数内部是把tasklet挂到CPU的索引为tasklet_hi_vec的软中断链表,然后标记软中断。处理方式与TASKLET_SOFTIRQ相同。

l         TIMER_SOFTIRQ:    实现定时器操作,内核中的msleep函数由这个软中断实现(注意这里实现的是msleep,不是udelay和mdelay)。另外内核定时器也通过此软中断实现。

l         HRTIMER_SOFTIRQ:       高精度时钟,实现itimers,POSIX timers,nanosleep,precise in-kernel timing.

l         SCHED_SOFTIRQ:    用于CPU的load balance

 

软中断不能嵌套,也不能在硬中断服务程序中执行,但多个软中断能在多个CPU上并发。

由于软中断的调用时机中,有一个是处理完硬件中断之后,实现中断的底半部机制。所以软中断中不能阻塞。

 

linux内核网络链路层相关代码分析总结 目前在网络世界TCP/IP占统治地位。linux由于其开源特性发展很快。现在在做研究的时候需要用到这方面的知识,于是边学习边总结,由于研究的内容主要集中在TCP/IP的底层,所以在这里主要分析底层的实现。        我在这里研究的代码主要是如下图所示(图片来源于网络) 阅读详情

相关推荐

用Verilog在FPGA上做个电子琴:从矩阵键盘到蜂鸣器的完整实现(附代码)

本文详细介绍了如何使用Verilog在FPGA上实现一个完整的电子琴系统,涵盖矩阵键盘扫描、音调生成和蜂鸣器驱动等核心模块。通过模块化设计和PWM调制技术,开发者可以构建一个可交互的音乐播放器,项目代码完整且易于扩展,适合FPGA初学者和数字逻辑设计爱好者实践。

weixin_29191669的博客 403

软中断/tasklet/工作队列

《深入理解Linux内核》笔记4:软中断/tasklet/工作队列2009年06月02日 星期二 10:48软中断、tasklet和工作队列并不是Linux内核中一直存在的机制,而是由更早版本的内核中的“下半部”(bottom half)演变而来。下半部的机制实际上包括五种,但2.6版本的内核中,下半部和任务队列的函数都消失了,只剩下了前三者。本文重点在于介绍这三者之间

gchen_nj的专栏 854

Frida+Objection保姆级教程:从环境搭建到实战Hook(含Wallbreaker插件使用)

本文提供了一份从零开始的Frida与Objection移动安全动态分析实战指南。详细讲解了Python环境配置、Frida-Server部署、Objection核心命令使用以及Wallbreaker插件安装与应用。通过实战案例演示如何Hook网络请求(如HttpURLConnection和OkHttp3),帮助安全研究人员快速掌握应用运行时行为分析与漏洞挖掘技能。

weixin_28318011的博客 104

Linux软中断原理浅析

构成软中断机制的核心元素包括:   1、  软中断状态寄存器soft interrupt state(irq_stat) 2、  软中断向量表(softirq_vec) 3、  软中断守护daemon

fivedoumi的专栏 4579

基于docker进行安装部署seata,解决Seata的版本与Nacos的版本不匹配

本文分享了在Docker环境下部署Seata时遇到Nacos 3.x API不兼容问题的解决方案。由于Seata 2.0.0内置的nacos-client 1.4.2无法调用Nacos 3.x重构后的接口,导致注册失败。通过下载Seata 2.6.0源码自行构建Docker镜像,并调整启动方式(直接执行Java命令绕过Shell脚本),最终成功实现与Nacos 3.x的集成。关键步骤包括:创建自定义Dockerfile、配置application.yml、处理启动脚本兼容性问题,最终采用java直接运行方案

Dd52698的博客 410

ChatGPT Plus完整开通指南:从账号注册到稳定使用全流程

自然语言处理(NLP)技术通过深度学习模型实现对人类语言的理解与生成,其核心原理是基于Transformer架构的大规模预训练。GPT-4作为当前最先进的生成式AI模型,在代码编写、文档分析等场景展现出显著的技术价值。在实际应用中,稳定的网络环境和合规的支付方式是确保AI助手持续服务的关键因素。针对ChatGPT Plus的开通,需要系统性地解决账号验证、虚拟信用卡支付等工程实践问题,才能实现工作流的高效整合。

weixin_34239592的博客 429

Linux kernel 软中断机制之软中断处理时机

local_bh_enable_ip    local_bh_enable        |      |        -------------------    irq_exit         |        |   netif_rx_ni   _local

星空探索 2138

基于YOLOv11的军事目标识别系统设计与实现(坦克、舰船检测)

DOTA-v2.0(包含多种军事装备的航拍图像)图片数量:11,268类别:18类,包括坦克、舰船、战斗机等分辨率:800×800~4000×4000HRSC2016(高分辨率舰船检测数据集)图片数量:1,061类别:舰船及子类特点:包含多种视角和复杂背景图片数量:5,000+类别:22种军用飞机标注:精确边界框自建数据集建议收集来源:公开军事演习视频、卫星图像、模拟游戏截图数据增强:模拟不同天气、遮挡、低光照等战场环境。

YOLO 450

Linux-2.6 内核软中断(softirq)执行分析

今天无意中看了眼 2.6 内核的软中断实现,发现和以前我看到的大不相同(以前也是走马观花,不大仔细),能说改动非常大。连 softirq 的调用点都不相同了,以前是三个调用点,今天搜索了一下原始码,发目前多出了ksoftirqd 这个东西后,softirq 在系统中的调用点仅是在 ISR 返回时和使用了 local_bh_enable() 函数后被调用了。网卡部分的显示调用,我觉得应

lkqboy2599的专栏 4226

TIA博途中通过UDT实现IO地址映射到DB块中的具体方法

TIA博途中通过UDT实现IO地址映射到DB块中的具体方法

Robot_PLC_HMI_Automation 1万+

KingSCADA3.8保姆级安装教程

大家好,我是雷工!最近开始学习KingSCADA,今天这篇详细记录安装KingSCADA3.8的过程。首先下载需要的安装版本,此处以从官网下载的最新版本KingSCADA3.8为例,双击:Setup.exe;

做有价值的事,积累有价值的笔记! 1万+

Linux 2.6 内核软中断(softirq)执行分析

今天无意中看了眼 Linux 2.6 内核的软中断实现,发现和以前我看到的大不相同(以前也是走马观花,不大仔细),能说改动非常大。连 softirq 的调用点都不相同了,以前是三个调用点,今天搜索了一下原始码,发目前多出了ksoftirqd 这个东西后,softirq 在系统中的调用点仅是在 ISR 返回时和使用了 local_bh_enable() 函数后被调用了。网卡部分的显示调用,我觉得应该

ZYX的专栏 477

Pointnet++改进90:2025最新改进模块-EVA模块

本教程提出了一种改进PointNet++特征提取模块的方法,通过在PointNetSetAbstraction模块中加入NAMAttention注意力机制,显著提升了模型性能。具体改进包括:1)新建eva.py文件,实现了包含SDLSKA、CKS等关键组件的EVA模块;2)在pointnet2_utils.py中添加Conv和PointNetSetAbstractionAttention类,整合注意力机制;3)修改pointnet2_sem_seg.py模型结构。这种改进方法降低了实现难度,同时保持了33F

AIcurator的博客 361

Linux 内核软中断(softirq)执行分析

http://blog.csdn.net/leopard_ray/archive/2007/11/08/1874148.aspx     今天无意中看了眼 2.6 内核的软中断实现,发现和以前我看到的大不相同 (以前也是走马观花,不大仔细),可以说改动很大。连 softirq 的调用 点都不一样了,以前是三个调用点,今天搜索了一下源代码,发现在多出了 ksoftirqd 这

tomny_zou的专栏 1162

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Linux 2.6中断下半部机制分析

http://blog.csdn.net/yicao821/article/details/6670683   Linux 2.6中断下半部机制分析 作者:流星 摘要    本文主要从使用者的角度对Linux 2.6内核的下半部机制softirq、tasklet和workqueue进行分析,对于这三种机制在内核中的具体实现并未进行深入分析,倘若读者有兴趣了解,可以直接阅读Linux内核

cjsycyl的专栏 446

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

softirq

本文对 Linux 内核软中断的执行流程进行了分析,并尽可能的结合当前运行环境详细地写出我的理解,但这并不表明我的理解一定正确。这本是论坛里的一篇帖子,发出来是为了抛砖引玉,如果您在阅读本文时发现了我的错误,还望得到您的指正。 今天无意中看了眼 2.6 内核的软中断实现,发现和以前我看到的大不相同(以前也是走马观花,不大仔细),可以说改动很大。连 softirq 的调用点都不一样了,以前是三

jincm的专栏 906

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Linux内核网络协议栈TCP/IP分析之二:链路层

一 链路层协议 1.1 概述  在TCP/IP协议族中,数据链路层主要有三个目的: (1)为IP模块发送和接收IP数据报; (2)为ARP模块发送ARP请求和接收ARP应答; (3)为RARP模块发送RARP请求和接收RARP应答; TCP/IP支持多种不同的链路层协议,这取决于网络所使用的硬件,如以太网,令牌环网,FDDI(光纤分布式数据接口)及RS-232串行线路等。 下面主要讨论以太网链路层...

wenze123的博客 677

【转】Linux内核进程调度以及定时器实现机制

Linux内核进程调度以及定时器实现机制http://blog.csdn.net/joshua_yu/archive/2006/02/02/591038.aspx 【摘要】本文简单介绍了任务的各种状态和PCB的结构,分析了几种任务调度策略,详解了schedule,并分析了如何进行进程上下文切换;随后分析了2.6内核如何优化了任务调度算法;最后介绍了内核定时器的实现机制和系统调用

Sailor_forever 6270

内核进程调度以及定时器实现机制2008-06-01

一、2.6版以前内核进程调度机制简介 Linux的进程管理由进程控制块、进程调度、中断处理、任务队列、定时器、bottom half队列、系统调用、进程通信等等部分组成。进程调用分为实时进程调度和非实时进程调度两种。前者调度时,可以采用基于动态优先级的轮转法(RR),也可以采用先进现出算法(FIFO)。后者调度时,一律采用基于动态优先级的轮转法。某个进程采用何种调度算法由改进程的进程控制块中的某些

261
上一篇: The journey of a packet through the linux 2.4 network stack
下一篇: linux2.6定时器的时间轮算法分析
walkingman321
博客等级 码龄20年 130粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值