当前位置: 首页 > Linux

linux中断可以嵌套吗?

时间:2023-04-06 20:22:06 Linux

本文转载,版权归作者所有。商业转载请联系作者授权,非商业转载请注明出处。来源:微信公众号linux代码阅读领域(id:linuxdev)Q&A问:linux中断可以嵌套吗?答:以前可以嵌套,现在不行了!在之前版本的Linux内核中,中断分为两种:快速中断,在申请时被标记为IRQF_DISABLED,在IRQHANDLER中不允许有新的中断;慢速中断,申请时没有标上IRQF_DISABLED,在IRQHANDLER允许嵌套新的其他中断。在旧的Linux内核中,如果一个中断服务程序不想被其他中断打断,我们可以看到这样的代码:request_irq(FLOPPY_IRQ,floppy_interrupt,\-IRQF_DISABLED,"floppy",NULL)Nowin2010thefollowingcommitIn,IRQF_DISABLED已过时:https://git.kernel.org/pub/sc...它的提交日志清楚地解释了中断嵌套可能引入的一些风险,例如堆栈溢出。也就是说,从这次commit开始,实际的Linux不再支持中断的嵌套,也没有快慢中断的概念,IRQF_DISABLED标志也失效了。在IRQHANDLER中,无论是否设置中断IRQF_DISABLED,内核都不会使CPU响应中断:这个过时的IRQF_DISABLED标志在内核中没有任何意义。后来这个标志本身也在内核中被删除,成为过去式:硬件中断发生后,一般硬件会自动屏蔽CPU响应中断,而在软件层面,中断会在IRQHANDLER完成之前不会被重新启用。.例如对于ARM处理器,当异常进来时,硬件会自动屏蔽中断:即当ARM处理器接收到中断时,进入中断模式,同时CPSR的IRQ位ARM处理器的寄存器将由硬件设置以屏蔽IRQ。Linux内核会在以下两次重新开启CPSR对IRQ的响应:SOFTIRQ从IRQHANDLER返回中断的bottomhalf从IRQHANDLER返回线程上下文从1可以看出SOFTIRQ可以响应中断。更多精彩更新来袭……欢迎关注微信公众号:linux代码阅读田(id:linuxdev)