linux – 当中断处理程序被另一个中断中断时,中断上下文如何“恢复”?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux – 当中断处理程序被另一个中断中断时,中断上下文如何“恢复”?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1819字,纯文字阅读大概需要3分钟。
内容图文
![linux – 当中断处理程序被另一个中断中断时,中断上下文如何“恢复”?](/upload/InfoBanner/zyjiaocheng/961/2d103f681920421e957a810409ee1d56.jpg)
我读了一些相关的帖子:
(1)来自Robert Love:http://permalink.gmane.org/gmane.linux.kernel.kernelnewbies/1791
You cannot sleep in an interrupt handler because interrupts do not have a backing
process context, and thus there is nothing to reschedule back into. In other
words, interrupt handlers are not associated with a task, so there is nothing to
"put to sleep" and (more importantly) "nothing to wake up". They must run
atomically.
(2)从Which context are softirq and tasklet in?开始
If sleep is allowed, then the linux cannot schedule them and finally cause a
kernel panic with a dequeue_task error. The interrupt context does not even
have a data structure describing the register info, so they can never be scheduled
by linux. If it is designed to have that structure and can be scheduled, the
performance for interrupt handling process will be effected.
所以在我的理解中,中断处理程序在中断上下文中运行,并且无法休眠,也就是说,不能像正常进程那样使用支持机制执行上下文切换.
但是中断处理程序可能被另一个中断中断.当第二个中断处理程序完成其工作时,控制流将跳回第一个中断处理程序.
如果没有正常的上下文切换,这种“恢复”是如何实现的?它是否像普通函数调用一样,所有寄存器和其他相关内容都存储在某个堆栈中?
解决方法:
简短的回答是,如果中断处理程序可以被中断中断,则中断处理程序的中断方式与中断中断的任何其他内容完全相同.
假设进程X正在运行.如果进程X被中断,则中断处理程序运行.在某种程度上存在上下文的情况下,它仍然处理X,尽管它现在在内核中运行中断代码(如果你愿意,可以将状态视为X->中断).如果发生另一个中断,则中断被中断,但仍然没有特殊的进程上下文.现在状态是X-> first_interrupt-> second_interrupt.当第二个中断结束时,第一个中断将恢复,就像第一个中断结束时X将恢复一样.但是,唯一的过程上下文是过程X.
您可以将它们描述为上下文切换,但它们与流程上下文切换不同.它们更类似于进入和退出内核 – 进程上下文保持不变,但执行级别和代码单元可能会发生变化.
内容总结
以上是互联网集市为您收集整理的linux – 当中断处理程序被另一个中断中断时,中断上下文如何“恢复”?全部内容,希望文章能够帮你解决linux – 当中断处理程序被另一个中断中断时,中断上下文如何“恢复”?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。