ARM模式及其多样性的原因是什么?

10

我目前正在阅读/学习ARM架构…… 我想知道为什么有这么多模式(FIQ,用户,系统,监督员,IRQ等)。

我的问题是我们为什么需要这么多模式?只有用户和系统不就足够了吗?

谢谢您的提前帮助。

2个回答

11

这只是一种架构决策。多种模式的主要优点在于它们有一些银行寄存器。这些额外的寄存器允许您编写更简单的异常处理程序。

如果只选择两个模式,则仅使用 USR 和 SYS 可能是任何选择的好选择,但当您遇到异常时会发生什么情况?常规的 ARM 模型是进入异常模式,将该异常模式的银行链接寄存器设置为指向您想要在解决异常后返回的指令,将处理器状态保存在异常模式的 SPSR 寄存器中,然后跳转到异常向量。USR 和 SYS 共享所有寄存器-使用此模型,每次处理中断时都会清除您的函数返回地址(在 LR 中)!

特别是 FIQ 模式比其他异常模式具有更多的银行寄存器。这些额外的寄存器符合 FIQ 的 "F" 部分 - 它代表 "快速"。在软件中不需要保存和恢复更多的处理器上下文,这将加速您的中断处理程序。


5
没有太多可以补充卡尔的回答。不确定你所说的ARM处理器是哪个系列/架构,所以我会根据你的问题(FIQ、IRQ等)来做出假设,即你在谈论ARM7/9/11。我不会列举每种ARM架构变体中每种模式之间的每个区别。
除了卡尔所说的内容外,各种模式有不同的优势,如下:
- 例如,在FIQ中,你不必立即分支,可以继续执行。对于其他例外来说,你必须立即分支。 - 使用不同的模式,你可以自然地支持单独的堆栈。如果你在多任务处理(例如RTOS)中,在中断模式下没有单独的堆栈,那么你必须为每个任务堆栈内置额外的空间,以应对最坏情况下的中断。 - 使用不同的模式,某些寄存器(例如CPSR、MMU regs等---这取决于架构)是限制访问的。同样的事情也发生在某些指令上。你不希望让用户代码修改特权寄存器,是吧?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接