为什么linux(ARM)在异常处理期间总是切换到管理员模式?

时间:2011-10-27 11:31:34

标签: linux arm

在异常处理期间,Linux始终切换到管理员模式。这是什么原因?为什么不能在异常模式下继续执行?

3 个答案:

答案 0 :(得分:3)

当ARM发生异常时,处理器切换到中止状态。处于此状态时,处理器无法处理任何中断。这意味着屏幕和网络更新不会发生,也不会有任何先发制人。因此,永远不应该在中止状态下执行长时间运行操作。

可能发生的事情(我不是Linux内核专家),是记录异常并且只放置一个队列并且异常处理程序立即返回。内核现在可以重新启用中断并处理所有高优先级任务。然后,它以一种不会破坏其他任务的方式处理闲暇时的例外情况。

我还没有看过this article,但它似乎确实有你想要的那种细节。

答案 1 :(得分:2)

我可能会迟到在这篇文章中回答。 Linux内核实现已经这样做了,因此无论何时在第一级IRQ处理程序中发生任何中断,它都会将IRQ寄存器复制到SVC寄存器并将ARM切换到SVC模式。

这已经为两个主要的学生做了:

  1. 您不需要为IRQ模式单独的堆栈
  2. 通过将其移回SVC,您可以确保在SVC模式下获得其他中断时可以处理另一个中断。

答案 2 :(得分:0)

你仍然需要一个IRQ模式的堆栈,它只是堆栈非常小,因为我们只需要存储spsr和lr那里......但是你是对的,这将有助于支持neseted中断但是这不是唯一的方法。我们可以从中断模式切换到系统模式(使用用户模式寄存器),并且仍然支持嵌套中断