关于中断是否可以套嵌?
问答
问:Linux的中断可以嵌套吗?
答:以前是可以嵌套的,现在不可以!
历史
早前的Linux内核版本,中断分为两种:
快中断,申请的时候带IRQF_DISABLED标记,在IRQ HANDLER里面不允许新的中断进来;
慢中断,申请的时候不带IRQF_DISABLED标记,在IRQ HANDLER里面允许新的其他中断嵌套进来。
老的Linux内核中,如果一个中断服务程序不想被别的中断打断,我们能看到这样的代码:
request_irq(FLOPPY_IRQ, floppy_interrupt,\
- IRQF_DISABLED, "floppy", NULL)
现在
在2010年如下的commit中,IRQF_DISABLED被作废了:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e58aa3d2d0cc
它的commit log清晰地解释中断嵌套可能引入的一些risk,比如stack溢出等。也就是说,从这个commit开始,实际Linux已经不再支持中断的嵌套, 也没有快慢中断的概念了,IRQF_DISABLED标记也作废了。在IRQ HANDLER里面,无论一个中断设置还是不设置IRQF_DISABLED, 内核都不会开启CPU对中断的响应:
这个作废的IRQF_DISABLED标记,在内核已经没有任何的意义了。后来,这个标记本身,在内核里面也被删除了,彻底成为过往:
硬件
中断发生后,一般硬件会自动屏蔽CPU对中断的响应,而软件层面上,直到IRQ HANDLER做完,才会重新开启中断。比如,对于ARM处理器而言,exception进来的时候,硬件都会自动屏蔽中断:
也就是说,当ARM处理器收到中断的时候,它进入中断模式,同时ARM处理器的CPSR寄存器的IRQ位会被硬件设置为屏蔽IRQ。
Linux内核会在如下2个时候重新开启CPSR对IRQ的响应:
- 从IRQ HANDLER返回中断底半部的SOFTIRQ
- 从IRQ HANDLER返回一个线程上下文
从1大家可以看出,SOFTIRQ里面是可以响应中断的。
关于中断是否可以套嵌?相关推荐
- 基于R利用if语句套嵌进行多重条件判断
我们知道在R中if语句可以帮助我们进行条件判断,常用于修改变量,做出条件选择等等,对于条件为二分类的判断非常有帮助, 比如我们想判断学生的成绩是否及格,60分以上算是及格 ifelse(n>60 ...
- ViewPager套嵌RecyclerView出现滑动条目时滑不动原因
ViewPager套嵌RecyclerView出现滑动条目时滑不动原因 在滑动条目时,在有TextView地方滑不动,在条目其他空白地方却可以滑动,去除 android:singleLine=&quo ...
- mysql存储过程套嵌_mysql存储过程套嵌
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- 视频融合云服务EasyCVR平台iframe视频套嵌出现滚动条是什么原因?
EasyCVR视频融合云平台不仅支持国标GB28181.RTSP/Onvif.RTMP.海康Ehome.海康SDK.大华SDK等接入方式,还具有丰富的视频功能,包括视频监控直播.云端录像.云存储.录像 ...
- oracle套嵌游标写法,PL/SQL Challenge 每日一题:2017-1-18 嵌套游标
最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析.讨论也可获得纪念章一枚. 每两周的优胜者可获得itpub奖励的技术图书一本. 以往 ...
- 中星6B卫星发生故障, 共150套电视节目全部中断, 专家分析中星6B卫星故障原因 可能为境外干扰
央视网消息:本台刚刚收到的消息: 记者从国家广电总局获悉,2月9号10时59分56秒,由于中星6B卫星发生故障,导致在该卫星进行传输的中央电视台.中国教育电视台,和23个省的卫视等共150套电视节目全 ...
- linux内核响应,读书笔记——Linux内核源代码情景分析——3.4 中断的响应和服务...
CPU响应中断 CPU从中断控制器取得中断向量,然后根据具体的中断向量从中断向量表IDT中找到对应的表项,而该表项应该是一个中断门.这样,CPU就根据中断门的设置而到达了该通道的总服务程序入口. 由于 ...
- windowsCE异常和中断服务程序初探
windowsCE异常和中断服务程序初探 ---------by nasiry 转载请说明出处 1.中断/异常相量的装入和执行方式. 中断和异常都是异步发生的事件,当该事件发生,系统将停止目前正在执行 ...
- windowsCE异常和中断服务程序初探(=)
继续上次的内容,在上次的分析中我们已经对SWI,FIQ,IRQ的流程有了一个大概的认识,下面继续对DataAbort和PrefetchAbort以及公共分发程序CommonHandler进行一下认识, ...
- windowsCE异常和中断服务程序初探(-)
1.中断/异常相量的装入和执行方式. 中断和异常都是异步发生的事件,当该事件发生,系统将停止目前正在执行的代码转而执行事件响应的服务程序.而事件服务程序的入口点就是中断/异常向量所在的位置.arm的中 ...
最新文章
- 你哪来这么多事(五):职工信息插入
- javafx官方文档学习之二Scene体系学习一
- 遗传和基因突变对神经网络训练的好处
- 法官老爷爷在20年的一次判决,竟然彻底改变了一个年轻人的一生!
- Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8
- QCustomplot基础应用
- VTK:Shaders之MarbleShaderDemo
- 数据结构——各排序算法的比较
- 中科院研究员:教给孩子的数学浅得让人想哭
- Vue的基础认知一---构建环境/v指令的使用
- 在Linux中实现https访问站点
- python可以读取excel文档吗_python打开excel文件【python读取excel文件如何进行】
- Flume+Kafka+Spark Streaming+MySQL实时日志分析
- 推荐一款MD神器吧:重度MD用户必备神器
- hdfs命令,hadoop基本常用命令
- EasyRecovery14免费版文件数据恢复还原软件
- python模拟别人说话的声音_现在你可以通过深度学习用别人的声音来说话了
- linux服务器什么意思,linux中的“/”和“./”是什么意思
- pb+api实际应用
- 链表实现c语言通讯录管理系统,C++链表实现通讯录管理系统