Linux是否使用嵌套中断?
我的意思是例如在从任何设备提供中断时,可以允许在此例程中进一步中断?或者它是上半部分还是下半部分?
修改
如果Linux使用嵌套中断,那么如何关注他们的堆栈?
答案 0 :(得分:3)
是的,Linux中断是可重入的。 https://unix.stackexchange.com/a/7172/40346
Linux内核是可重入的(与所有UNIX内核一样),这意味着CPU可以执行多个进程。他不必等到致命的慢速HDD控制器处理磁盘访问读取,CPU可以处理其他一些东西,直到磁盘访问完成(如果是这样,它本身会触发中断)。
通常,中断可以被其他中断(抢占)中断,这被称为“嵌套执行”。根据体系结构的不同,仍有一些关键功能必须通过完全禁用中断来不间断地运行(非抢占式)。在x86上,这些是一些与时间相关的函数(time.c,hpet.c)和一些xen的东西。
中断只有两个优先级:'启用所有中断'或者'禁用所有中断',所以我猜你的"高优先级中断"是第二个。这是Linux内核了解中断优先级的唯一行为,与实时扩展无关。
如果可中断的中断(您的"低优先级中断")被另一个中断("高"或"低")中断,内核将保存中断中断的旧执行代码并开始处理新中断。这个"嵌套"可以多次发生,因此可以创建多级中断的中断。然后,内核从旧中断重新加载保存的代码并尝试完成旧的中断。