中断处理--上下半部机制

Linux源代码阅读:request_irq() 本文尝试阅读Linux kernel 5.0 + ARM64上中断申请过程的源代码,但并非逐字逐句地解析,只是梳理一些关键点(在工作中经常可能会用到的知识点)。 为了提升Linux的实时性,kernel引入了中断线程化概念。其实就是将中断的下半部放在内核线程(FIFO,也称实时进程)中执行,这样可以减少中断对高优先级进程的饥饿感。因为传统的中断上半部执行完成后,需要通过tasklet,或者softirq来执行中断下半部,这些都属于中断上下文,会被内核优先处理,这样就会导致进程产生饥饿,即使是优先级比较高的 阅读详情

      首先需要了解一下中断的概念:一个“中断”仅仅是一个信号,当硬件需要获得处理器对它的关注时,就可以发送这个信号。内核维护了一个中断信号线的注册表,该注册表类似于I/O端口的注册表。

      模块在使用中断前要先请求一个中断通道(或中断请求IRQ),然后在使用后释放该通道。用到的API就是request_irq()以及free_irq()。注意在调用request_irq()和free_irq()的时机最好是在设备第一次打开和最后一次关闭之后。

    对于中断处理例程来讲,它的一个典型的任务就是:如果中断通知进程所等待的事件已经发生,比如新的数据到达就会唤醒在该设备上休眠的进程。无论是快速还是慢速处理例程,程序员都应该编写执行事件尽可能短的处理例程。如果需要执行一个长时间的计算任务,做好的办法就是使用上下半部处理机制,以便让工作在更安全的时间里调度计算任务。

     上半部的功能是响应中断。当中断发生时,它就把设备驱动程序中中断处理例程的下半部挂到设备的下半部执行队列中去,然后继续等待新的中断到来。这样一来,上半部的执行速度就会很快,它就可以接受更多它负责的设备所产生的中断了。上半部之所以快,是因为它是完全屏蔽中断的,如果它没有执行完,其他中断就不能及时地处理,只能等到这个中断处理程序执行完毕以后。所以要尽可能多的对设备产生的中断进行服务和处理,中断处理程序就一定要快。

    下半部的功能是处理比较复杂的过程。下半部和上半部最大的区别是可中断,而上半部却不可中断。下半部几乎完成了中断处理程序所有的事情,因为上半部只是将下半部排到了它们所负责的设备中断的处理队列中去,然后就不做其它的处理了。下半部所负责的工作一般是查看设备以获得产生中断的事件信息,并根据这些信息(一般通过读设备上的寄存器得来)进行相应的处理。下半部是可中断的,所以在运行期间,如果其它设备产生了中断,这个下半部可以暂时的中断掉,等到那个设备的上半部运行完了,再回头运行这个下半部。

         这上面大多数都是我们在查阅资料和听老师讲课获取的知识内容但是具体是如何实现的呢?

         也许我们也知道tasklet和work_queue。知道这两个是完成下半部的。在具体的过程中我们将如何实现呢?

        此处就是通过创建工作队列的方式我们把初始化的操作都放在irq之前完成,在irq_handler()中将具体的工作提交到工作队列中。使用的API为queue_work()。具体的细节问题希望读者能够查阅资料自行完成。

【Linux驱动编程】Linux中断上半部和下半部 前言   cpu在执行程序时,如果有外部中断触发时,如定时器中断、串行总线中断等,cpu停止当前任务从而转去响应中断处理。对于中断函数的处理,原则是尽快处理完事务并退出中断,这一点也比较好理解,尽快处理中断并返回,保证正常任务的执行,并q且能否响应其他事务的中断,保证实时性和并发性。   其实,在单片机逻辑编程中已经使用过Linux中断“上下部分”的思维,或者说,Linux中断“上下半... 阅读详情

相关推荐

中断的上半部和下半部——工作队列

中断的上半部和下半部——工作队列中断的上半部和下半部——工作队列

linux中断的上半部和下半部详解

linux中断的上半部和下半部详解

holly的专栏 2440

linux 中断的上半部和下半部

本文章是关于 linux 中断的上半部和下半部 的介绍。

Linux下按键设备驱动开发以及对中断的上半部分和下半部分详细介绍

中断处理程序通常被分为两个部分:顶半部分和底半部分,也称为上半部分和下半部分。我们在使用request_irq申请中断的中断服务函数属于中断处理的上半部,只要中断触发。那么中断处理函数就会执行。然而一些中断的产生之后需要较长的时间来处理,如由于网络传输产生的中断, 在产生网络传输中断后需要比较长的时间来处理接收或者发送数据,因为在linux下中断并不能被嵌套。

m0_51429770的博客 883

如何用Python爬取中国土地市场网2000-2023年土地出让数据(含经纬度)

本文详细介绍了如何使用Python爬取中国土地市场网2000-2023年的土地出让数据(含经纬度),提供了一套高效的技术方案。通过应对动态加载的反爬机制、优化地理编码数据存储和设计异常处理流程,帮助开发者建立自动化数据采集管道。方案已在商业地产分析项目中验证,可稳定采集超过50万条土地交易记录。

weixin_30566063的博客 172

EndNote20保姆级安装教程:从下载到汉化一步到位(附闪退解决方案)

本文提供EndNote20的详细安装与汉化教程,涵盖系统准备、分步安装、路径优化及闪退解决方案。针对科研人员的需求,特别优化了中文环境下的使用体验,确保文献管理工具的高效稳定运行。

weixin_30415113的博客 340

Linux 中断处理机制详解:上下半部、内核线程与中断线程化

1. GPIO 按键、简单 UART:→ 传统中断 + Tasklet2. I2C/SPI 传感器:→ 线程化中断 (request_threaded_irq)3. 网卡、块设备:→ 传统中断 + NAPI/Softirq4. 复杂后台任务:→ 工作队列 或 内核线程5. 实时性要求高:→ 传统中断 + 高优先级内核线程中断上半部:快速、不睡眠、禁止中断中断下半部:延迟、可睡眠(work queue)、允许中断Softirq:最底层机制,网络/块设备使用Tasklet。

huayidw的博客 1480

拉曼光谱仪的原理与应用——TFN 7G F660手持式拉曼光谱识别仪

拉曼光谱仪的原理与应用——TFN 7G F660手持式拉曼光谱识别仪

TFN_yzgd的博客 926

第10章:中断处理-9: Top and Bottom Halves

摘要:Linux内核通过将中断处理程序分为上半部和下半部来解决耗时任务与响应速度的矛盾。上半部快速完成关键操作(如保存数据)后立即退出,而下半部在中断启用状态下处理耗时任务。内核提供两种下半部实现机制:tasklet(原子操作,快速)和workqueue(可睡眠,适合长任务)。典型应用如网络中断处理,上半部接收数据,下半部进行协议处理。设计原则是上半部必须简洁快速,仅处理不可延迟的核心操作,将可延迟工作交给下半部。

图形/计算GPU的驱动与虚拟化技术分享园地 2230

AI训练加速30%!用numactl玩转多显卡绑核的隐藏技巧

本文深入探讨了如何利用Linux系统的numactl工具,通过精确的NUMA绑核策略优化多GPU AI训练性能。文章详细解析了NUMA架构对性能的影响,提供了从拓扑探查、命令实战到多卡脚本化部署的完整指南,并分享了性能验证与常见陷阱,帮助开发者实现高达30%的训练加速。

web99的专栏 448

PLCopen运动控制避坑指南:单轴功能块常见报错排查(基于SM3_Basic函数库)

本文深入解析PLCopen运动控制中单轴功能块的常见报错问题,基于SM3_Basic函数库提供实用排查指南。从功能块逻辑错误与硬件报错的甄别技巧到高频报错场景的解决方案,帮助工程师快速定位并解决运动控制系统中的稳定性问题,提升工业自动化设备的运行效率。

weixin_33686714的博客 316

Linux内核设计基础(一)之中断处理

如果让内核定期对设备进行轮询,以便处理设备,那会做很多无用功,如果能让设备在需要内核时主动通知内核,会是一个聪明的方式,这便是中断。

2418

【ArcGIS】07 ArcHydroTools对COM组件的调用返回了错误

在用Arc Hydro Tools提取流域时,在DEM Reconditioning时可能会遇到这个问题: 经过摸索,发现了问题产生的原因: 结果文件保存在了有中文的路径中。 解决的办法: 首先,把ArcGIS切换成英文版 搜索ArcGlS Administrator,以管理员方式打开 点击高级,选择语言为English 其次,新建mxd文档 删除原来的mxd文档,新建mxd文档,放置原来的图层文件。如果不这样做,最后一步的Map Name还会是“图层”这两个汉字。 最后,设置Arc Hydro T

记录专业模型开发、算法程序设计、软件学习笔记、生活日志。 4918

Linux内核——中断机制

中断机制 为什么需要中断? 如果让内核定期对设备进行轮询,以便处理设备,那会做很多无用功,因为外设的处理速度一般慢于CPU,而CPU不能一直等待外部事件。所以能让设备在需要内核时主动通知内核,会是一个聪明的方式,这便是中断。 中断处理程序 在响应一个特定中断时,内核会执行一个函数——中断处理程序。中断处理程序与其他内核函数的区别在于,中断处理程序是被内核调用来响应中断的,而它们运行于我们称

walkerkalr的专栏 3156

《UDS协议从入门到精通》系列——到底什么是DTC?

到底什么是DTC?看这里,深度图解DTC格式,详述DTC状态位、快照信息和扩展信息!!

车载系统攻城狮 1万+

微信小程序:errno: 1500104, errCode: 10008, errMsg: “writeBLECharacteristicValue:fail:system error, status

微信小程序errno: 1500104, errCode: 10008, errMsg: "writeBLECharacteristicValue:fail:system error, status: UNKNOWN (239)"微信小程序调用蓝牙API,wx.writeBLECharacteristicValue()报错,微信小程序蓝牙写入错误,在开发uniapp微信小程序蓝牙通信功能时报错,蓝牙开发设备控制核心api,微信小程序调用蓝牙API “wx.writeBLECharacteristicValu

✅ 精选推荐文章 3930

Linux中断上半部和下半部

tp-link联洲专业二面问题。在 Linux 内核中,中断处理被分为上半部(top half)和下半部(bottom half),这是为了提高系统效率并尽量减少中断处理对其他任务的干扰。

AlexiosQ的博客 640

android 蓝牙通讯demo

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

中断相关

上下半部机制   我们期望让中断处理程序运行得快,并想让它完成的工作量多,这两个目标相互制约,如何解决——上下半部机制。   我们把中断处理切为两半。中断处理程序是上半部——接收中断,他就立即开始执行,但只有做严格时限的工作。能够被允许稍后完成的工作会推迟到下半部去,此后,在合适的时机,下半部会被开终端执行。上半部简单快速,执行时禁止一些或者全部中断。(hy:linux设计与实现里的意思是,只关闭当前中断线上的中断,其他中断是打开的。)   下半部稍后执行,而且执行期间可以响应所有的中断。这种设计可以

u014426028的博客 248

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Linux-中断上下文底半部机制

【代码】Linux-中断上下文底半部机制。

Paper_Love的博客 331

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【Linux 驱动】第十章 中断处理

一,概念 1)什么是中断? 1>引入: 我们知道,处理器的处理速度比硬件来说要快上N个数量级,那么由处理器向硬件发出请求并等待回应的办法显然是不可取的,在这期间处理器浪费了大量的时间。这些时间应该被用来处理其他的事务。轮询可能是解决办法之一,但显然这样的办法也会让处理器做大量的无用功。 2>解决: 最好的办法,就是让硬件在需要的时候才向内核发出信号,然后处理器去响应...

小田的专栏 248

linux中断底半部机制

中断处理程序 ----中断处理程序ISR是在中断发生时被调用时用来处理中断的函数,在中断运行期间,不能 ----执行有可能引起睡眠测操作,不能同用户空间交换数据,不能调用schedule函数,实现 ----中断处理有一个原则,就是尽可能快处理并返回地,但是多数中断产生时要进行大量的 ----耗时处理,为了使中断处理尽可能短并完成后续大量工作,linux引入了一种底半部机制, ----分为顶半部(top half)和底半部(buttomhalf)。 底半部机制 ----Tasklet ----工作队列

rayylee 3176
上一篇: 触摸屏相关的一点拙见--以及android系统中linux内核部分的编译
下一篇: 文件系统简介
野-百-合
博客等级 码龄17年 308粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值