Linux 中中断的重入

Linux 中中断的重入

我正在阅读“Linux 设备驱动程序,第三版”,但不完全理解描述中断处理程序的部分。我想澄清一下:

  • Linux 中的中断处理程序是不可抢占的吗?
  • Linux 中的中断处理程序是不可重入的吗?

我相信我很好地理解了上半部分/下半部分的模型,根据它,只要执行上半部分,中断就会被禁用,因此处理程序无法重新进入,对吗?

但是高优先级中断呢?它们仅受普通 Linux 或特定实时扩展支持吗?如果低优先级中断被高优先级中断打断,会发生什么情况?

答案1

Linux 内核是可重入的(与所有 UNIX 内核一样),这意味着 CPU 可以执行多个进程。他不必等到磁盘访问读取被极其缓慢的 HDD 控制器处理,CPU 可以处理其他一些东西,直到磁盘访问完成(如果是这样,它本身将触发中断)。

一般来说,一个中断可以被另一个中断打断(抢占),这称为“嵌套执行”。根据架构的不同,仍然有一些关键功能必须通过完全禁用中断来不间断地运行(非抢占式)。在 x86 上,这些是一些与时间相关的函数 ( time.chpet.c) 和一些xen东西。

关于中断只有两个优先级:“启用所有中断”或“禁用所有中断”,所以我猜你的“高优先级中断”是第二个。这是 Linux 内核唯一知道的有关中断优先级的行为,与实时扩展无关。

如果可中断中断(“低优先级中断”)被其他中断(“高”或“低”)中断,内核将保存被中断中断的旧执行代码并开始处理新中断。这种“嵌套”可以发生多次,因此可以创建多个级别的中断。之后,内核从旧中断重新加载保存的代码,并尝试完成旧中断。

答案2

不可抢占意味着这些处理程序不能被另一个中断中断。

对于非抢占式处理程序,重入不是问题,因为您一开始就无法中断它们。

至于内核是做什么的,只需查看wag的答案即可,我无法像他那样对这个话题发表评论。

相关内容