问答

问: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的响应:

  1. 从IRQ HANDLER返回中断底半部的SOFTIRQ
  2. 从IRQ HANDLER返回一个线程上下文

从1大家可以看出,SOFTIRQ里面是可以响应中断的。

关于中断是否可以套嵌?相关推荐

  1. 基于R利用if语句套嵌进行多重条件判断

    我们知道在R中if语句可以帮助我们进行条件判断,常用于修改变量,做出条件选择等等,对于条件为二分类的判断非常有帮助, 比如我们想判断学生的成绩是否及格,60分以上算是及格 ifelse(n>60 ...

  2. ViewPager套嵌RecyclerView出现滑动条目时滑不动原因

    ViewPager套嵌RecyclerView出现滑动条目时滑不动原因 在滑动条目时,在有TextView地方滑不动,在条目其他空白地方却可以滑动,去除 android:singleLine=&quo ...

  3. mysql存储过程套嵌_mysql存储过程套嵌

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  4. 视频融合云服务EasyCVR平台iframe视频套嵌出现滚动条是什么原因?

    EasyCVR视频融合云平台不仅支持国标GB28181.RTSP/Onvif.RTMP.海康Ehome.海康SDK.大华SDK等接入方式,还具有丰富的视频功能,包括视频监控直播.云端录像.云存储.录像 ...

  5. oracle套嵌游标写法,PL/SQL Challenge 每日一题:2017-1-18 嵌套游标

    最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析.讨论也可获得纪念章一枚. 每两周的优胜者可获得itpub奖励的技术图书一本. 以往 ...

  6. 中星6B卫星发生故障, 共150套电视节目全部中断, 专家分析中星6B卫星故障原因 可能为境外干扰

    央视网消息:本台刚刚收到的消息: 记者从国家广电总局获悉,2月9号10时59分56秒,由于中星6B卫星发生故障,导致在该卫星进行传输的中央电视台.中国教育电视台,和23个省的卫视等共150套电视节目全 ...

  7. linux内核响应,读书笔记——Linux内核源代码情景分析——3.4  中断的响应和服务...

    CPU响应中断 CPU从中断控制器取得中断向量,然后根据具体的中断向量从中断向量表IDT中找到对应的表项,而该表项应该是一个中断门.这样,CPU就根据中断门的设置而到达了该通道的总服务程序入口. 由于 ...

  8. windowsCE异常和中断服务程序初探

    windowsCE异常和中断服务程序初探 ---------by nasiry 转载请说明出处 1.中断/异常相量的装入和执行方式. 中断和异常都是异步发生的事件,当该事件发生,系统将停止目前正在执行 ...

  9. windowsCE异常和中断服务程序初探(=)

    继续上次的内容,在上次的分析中我们已经对SWI,FIQ,IRQ的流程有了一个大概的认识,下面继续对DataAbort和PrefetchAbort以及公共分发程序CommonHandler进行一下认识, ...

  10. windowsCE异常和中断服务程序初探(-)

    1.中断/异常相量的装入和执行方式. 中断和异常都是异步发生的事件,当该事件发生,系统将停止目前正在执行的代码转而执行事件响应的服务程序.而事件服务程序的入口点就是中断/异常向量所在的位置.arm的中 ...

最新文章

  1. 你哪来这么多事(五):职工信息插入
  2. javafx官方文档学习之二Scene体系学习一
  3. 遗传和基因突变对神经网络训练的好处
  4. 法官老爷爷在20年的一次判决,竟然彻底改变了一个年轻人的一生!
  5. Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8
  6. QCustomplot基础应用
  7. VTK:Shaders之MarbleShaderDemo
  8. 数据结构——各排序算法的比较
  9. 中科院研究员:教给孩子的数学浅得让人想哭
  10. Vue的基础认知一---构建环境/v指令的使用
  11. 在Linux中实现https访问站点
  12. python可以读取excel文档吗_python打开excel文件【python读取excel文件如何进行】
  13. Flume+Kafka+Spark Streaming+MySQL实时日志分析
  14. 推荐一款MD神器吧:重度MD用户必备神器
  15. hdfs命令,hadoop基本常用命令
  16. EasyRecovery14免费版文件数据恢复还原软件
  17. python模拟别人说话的声音_现在你可以通过深度学习用别人的声音来说话了
  18. linux服务器什么意思,linux中的“/”和“./”是什么意思
  19. pb+api实际应用
  20. 链表实现c语言通讯录管理系统,C++链表实现通讯录管理系统

热门文章

  1. android apk 在线分析,apkanalyzer
  2. JDK和CGLIB生成动态代理类的区别
  3. Netty4.0学习笔记系列之五:自定义通讯协议
  4. SortedList 用法
  5. uni-app 自定义loading 自定义toast 兼容小程序APP
  6. python 之selectors 实现文件上传下载
  7. 阅读go语言程序设计
  8. keepalived实现双机互备
  9. 一道面试题,设计电路,set,reset
  10. 迷你博客突然走红 至今尚无商业模式