ARM系统模式和ARM监管模式有何不同?

7
为了将ARM处理器的模式与x86操作模式(ring0到ring3)进行比较,用户模式看起来很像ring3,即用户空间程序运行的环境。 但是我无法将ring0与系统模式或监管模式联系起来。根据信息来源,两种模式都可以很好地执行以特权模式运行内核的工作。 我能找到的两种模式之间唯一的区别如下:
1.在监管模式下,寄存器13和14被分组,而对于系统模式,所有15个寄存器都相同。 2.系统模式不能直接进入异常,而监管模式可以。 3.系统模式以某种方式防止链接寄存器的破坏。
您能否请解释一下这些模式之间的差异,使来自x86背景的人可以理解?
另外,这些模式之间微妙的架构差异,例如分组寄存器数量,如何使一个模式比另一个模式更优秀?

虽然你的问题很有意义,但回答只对编写ARM操作系统的人有用。在你能够编写和设计这样的操作系统之前,你需要阅读许多书籍。因此,虽然有人可以回答这个问题,但我会质疑回答对于提出这个问题的人的价值是什么?简而言之,模式不像“环”,在阅读关于ARM的资料时,请忘记那些知识/概念。去学习一些源代码并提问。如何使用这些模式是操作系统的设计选择,与上下文切换相关。你已经掌握了一些技术细节。 - artless noise
现在我正在对ARM的虚拟机监控程序进行文献调研,而在阅读其中一篇论文时,我偶然发现了这个概念。在线的ARM参考资料并没有提供太多信息。 - Sahil Singh
对于“hypervisor”,您需要在客户操作系统切换时保存/恢复所有banked寄存器;特别是如果没有进行para-virtualized。同样适用于[标签:trust-zone]。查阅关于'arm banked'的问题,也许这个答案这个问题对您的主题有用。 - artless noise
1
为了进一步解释为什么银行寄存器问题回答了这个问题,请考虑进行系统调用:在执行任何操作之前,需要一个堆栈来保存工作寄存器,但是您不能使用用户堆栈,因为a)它可能未映射到特权页表中,并且b)您无法盲目信任非特权地址,因此内核模式需要自己的私有堆栈。现在,假设内核需要在用户上下文中执行某些特权操作-它无法看到整个用户上下文,因为其银行寄存器挡住了道路!因此,每种模式都有其特定的目的,需要某种方法绕过它。 - Notlikethat
1个回答

4
我认为ARM ARM(如下所示)已经很清楚了,不要考虑X86,只需考虑这些处理器模式能否允许你做或者不能做什么。还有,在操作系统中你需要什么以及哪些模式是有用的或者无用的。
有用户模式和系统模式以及异常模式。它们的限制已经记录在文档中了。新一代的ARM处理器甚至有更多的特性/限制/保护等功能。
引自ARM ARM:
大多数应用程序在用户模式下执行。当处理器处于用户模式时,正在执行的程序无法访问某些受保护的系统资源或更改模式,除非通过引发异常来实现(请参见第A2-16页上的异常)。这使得适当编写的操作系统能够控制对系统资源的使用。除了用户模式之外的模式称为特权模式。它们可以完全访问系统资源并自由更改模式。其中五个称为异常模式: -FIQ -IRQ -监管者 -中止 -未定义。
当发生特定异常时,将进入这些模式。每个模式在异常发生时都有一些额外的寄存器,以避免在异常发生时破坏用户模式状态(有关详细信息,请参见页面A2-4上的寄存器)。
剩下的模式是系统模式,它不会被任何异常进入,并且具有与用户模式完全相同的可用寄存器。但是,它是一种特权模式,因此不受用户模式限制。它用于需要访问系统资源但希望避免使用与异常模式关联的其他寄存器的操作系统任务。避免这种使用可确保任务状态不会受到任何异常的影响。
监管者模式是在进行svc或sys调用(我认为它们使用了相同的指令,只是名称改变了)时要达到的模式。类似于DOS时代的int 21h,这就是您从没有权限的用户模式中询问操作系统做某事的方式。这将切换控制到监管者模式,然后一旦进入监管者模式,您就可以在那里处理它,或者切换模式等等...但一旦你转回用户模式,你就无法再切换出来。因此,例如如果您想设置用户堆栈,则不能在用户模式下轻松地执行此操作,然后返回到操作系统任务中。因此,您需要一个特权模式,即使没有其他内容也有用户寄存器访问权限。

你能否举出一些例子,说明在某些情况下我会严格优先选择其中一种模式。例如,如果在监管者模式下存在链接寄存器的损坏可能性,那么运行在该模式下的操作系统如何避免损坏?在进入监管者模式时,所有中断是否都被禁用? 此外,当系统模式下发生中断时会发生什么?前几个寄存器在所有模式下都是通用的,如果中断处理程序希望,它仍然可以写入这些寄存器,从而破坏任务状态。 - Sahil Singh
操作系统是可信的,因此如果存在漏洞或问题,则系统易受攻击或崩溃。我认为中断处理的工作方式是操作系统在该模式下记录中断,然后清理并在另一模式下调用处理程序,该程序可能首先位于操作系统中,但然后可以调用用户模式中的用户代码。 - old_timer
如果用户模式崩溃了它的寄存器,那没关系。如果监管模式担心的话,可以用自己的堆栈保存和恢复状态。如果用户模式因为执行未定义指令或超出允许的地址空间而导致错误,则会被处理程序捕获,并由操作系统处理,但这本身并不会使操作系统下线。 - old_timer
系统与用户?不确定。我需要更多地了解它们之间的区别。我认为,如果ARM的设计存在巨大的差距,那么几乎每个带电源开关或电池的设备都会受到影响,特别是我们的手机。 - old_timer

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