【发布时间】:2011-10-27 11:31:33
【问题描述】:
在异常处理期间,Linux 总是切换到超级用户模式。这是什么原因?为什么它不能在异常模式下继续执行?
【问题讨论】:
在异常处理期间,Linux 总是切换到超级用户模式。这是什么原因?为什么它不能在异常模式下继续执行?
【问题讨论】:
当 ARM 上发生异常时,处理器会切换到中止状态。在这种状态下,处理器不能处理任何中断。这意味着屏幕和网络更新不能发生,也不能有任何先发制人。出于这个原因,永远不应该在中止状态下执行长时间运行的操作。
可能发生的情况(我不是 linux 内核专家)是异常被记录并仅放置一个队列,异常处理程序立即返回。内核现在可以重新启用中断并处理所有高优先级任务。然后,它会以不干扰其他任务的方式在闲暇时处理异常。
我没有读过this article,但它似乎确实有你正在寻找的那种细节。
【讨论】:
我可能会迟到在这篇文章中回答。 Linux 内核实现就是这样做的,因此每当第一级 IRQ 处理程序发生任何中断时,它都会将 IRQ 寄存器复制到 SVC 寄存器并将 ARM 切换到 SVC 模式。
这主要有两个目的:
【讨论】:
对于 IRQ 模式,您仍然需要一个堆栈,只是堆栈会非常小,因为本质上我们只需要在其中存储 spsr 和 lr...但是是的,您是对的,这将有助于支持嵌套中断,但是这不是这样做的唯一方法..我们可以从中断模式切换到系统模式(使用用户模式寄存器)并且仍然支持嵌套中断
【讨论】: