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