在异常处理期间,Linux始终切换到管理员模式。这是什么原因?为什么不能在异常模式下继续执行?
答案 0 :(得分:3)
当ARM发生异常时,处理器切换到中止状态。处于此状态时,处理器无法处理任何中断。这意味着屏幕和网络更新不会发生,也不会有任何先发制人。因此,永远不应该在中止状态下执行长时间运行操作。
可能发生的事情(我不是Linux内核专家),是记录异常并且只放置一个队列并且异常处理程序立即返回。内核现在可以重新启用中断并处理所有高优先级任务。然后,它以一种不会破坏其他任务的方式处理闲暇时的例外情况。
我还没有看过this article,但它似乎确实有你想要的那种细节。
答案 1 :(得分:2)
我可能会迟到在这篇文章中回答。 Linux内核实现已经这样做了,因此无论何时在第一级IRQ处理程序中发生任何中断,它都会将IRQ寄存器复制到SVC寄存器并将ARM切换到SVC模式。
这已经为两个主要的学生做了:
答案 2 :(得分:0)
你仍然需要一个IRQ模式的堆栈,它只是堆栈非常小,因为我们只需要存储spsr和lr那里......但是你是对的,这将有助于支持neseted中断但是这不是唯一的方法。我们可以从中断模式切换到系统模式(使用用户模式寄存器),并且仍然支持嵌套中断