问答

问: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. 3D打印攻破无人车激光雷达,这个奇怪的盒子它看不见
  3. java中pc寄存器的作用是什么_既然有PC寄存器,栈帧里的返回地址的作用是什么?...
  4. 2015!我来了,你在哪里?今年第一篇
  5. 推荐10款来自极客标签的超棒前端特效[第五期]
  6. sourcetree克隆一直不成功_Git神器| SourceTree安装使用教程
  7. jar包是什么意思_为什么越来越多的开发者选择使用Spring Boot?
  8. 【初学】python执行系统命令四种方法比较
  9. Redo丢失的4种情况及处理方法
  10. SunnyOS准备4
  11. 12月上旬全球域名总量新增1.8万 环比减少84%
  12. 推荐阅读啃饼随笔的《玩聚网的案例分析》
  13. YoungTalk-STM32入门100步-回顾总结与展望(98-100)
  14. Flutter 竖线 垂直分割线
  15. 100个开源C/C++项目中的bugs(一)数组和字符串处理的错误
  16. 解决Windows 10控制面板里原本的索引选项变成Indexing Option Control Panel (32-bit)及空白图标的问题
  17. 时钟程序设计java_Java数字时钟实现代码详解
  18. lisp画弯箭头_在CAD中直接用命令画箭头
  19. 关于spoolsv.exe 报错,并打印服务停止的问题
  20. [J2EE][shiro][授权和认证框架]

热门文章

  1. (并查集)~APTX4869(fzu 2233)
  2. mysql下的常用操作
  3. 浅谈WebService的版本兼容性设计
  4. 黑马程序员——农夫过河问题
  5. LCS最长公共子序列——动态规划
  6. 实战篇-六十六行完成简洁的Rss输出类
  7. MapXtreme2004的Web选择控件(三)
  8. mysql修改最大连接数笔记
  9. 谈谈如何用eoLinker管理各类API接口
  10. 32位电脑ODBC连接