ARMv7 base states
1. Mode
ARM 架构的 A 和 R 配置文件提供了一组支持正常软件执行和处理异常的模式。 当前模式决定:
-
处理器可用的寄存器组;
-
执行软件的权限级别。
2. State
在 ARM 架构中,状态描述了以下不同的概念:
2.1 Instruction set state
ARMv7 提供四种指令集状态。 指令集状态确定正在执行的指令集,并且是ARM状态、Thumb状态、Jazelle状态或ThumbEE状态之一。 指令集状态寄存器 ISETSTATE 提供了有关这些状态的更多信息。
2.2 Execution state
执行状态由指令集状态和一些修改指令流解码方式的控制位组成。 有关详细信息,请参阅执行状态寄存器和程序状态寄存器 (PSRs)。
2.3 Security state
在 ARM 架构中,安全状态的数量取决于实现是否包含安全扩展:
-
包含安全扩展的实现提供两种安全状态:安全状态和非安全状态。 每个安全状态都有自己的系统寄存器和内存地址空间。
安全状态很大程度上独立于处理器模式。 这种安全状态和处理器模式独立性的唯一例外是:
-
Monitor模式,仅存在于Secure状态,支持Secure和Non-secure状态之间的转换;
-
Hyp模式是Virtualization Extensions的一部分,仅在Non-secure状态下存在,因为Virtualization Extensions只支持Non-secure状态的虚拟化。
某些系统控制资源只能从安全状态访问。
-
-
不包含安全扩展的实现仅提供单一安全状态。
在本手册中:
-
安全软件是指在安全状态下运行的软件;
-
非安全软件是指运行在非安全状态的软件。
2.4 Debug state
调试状态是指处理器因调试目的而停止,因为当处理器配置为停止调试模式时发生了调试事件。 请参阅侵入式调试。
当处理器不处于调试状态时,它被描述为处于非调试状态。
除非另有明确说明,本手册的 A 部分和 B 部分描述了非调试状态下的处理器行为和指令执行。 调试状态描述了调试状态的差异。
3. Privilege level
权限级别是软件执行的一个属性,在特定的安全状态下,由处理器模式决定,如下:
3.1 Secure state
在安全状态下有两个权限级别:
PL0
在用户模式下执行的软件在 PL0 处执行。
PL1
在用户模式以外的任何模式下执行的软件都在 PL1 上执行。
3.2 Non-secure state
在非安全状态下,有两个或三个权限级别:
PL0
在用户模式下执行的软件在 PL0 处执行。
PL1
在用户或 Hyp 模式以外的任何模式下执行的软件都在 PL1 上执行。
PL2
在包括虚拟化扩展的实现中,以 Hyp 模式执行的软件在 PL2 上执行。
PL0 上的软件执行有时被描述为非特权执行。 与特定特权级别PLn相关联的模式可以被描述为PLn模式。
Note
-
权限级别定义了访问当前安全状态下的资源的能力,并不意味着访问其他安全状态下的资源的能力。
-
不包含虚拟化扩展的实现不具有只能从 PL2 权限级别访问的非安全资源。
4. Exceptions
异常是改变程序中正常控制流的条件。 流程的改变将执行切换到异常处理程序,并且将异常发生时的系统状态呈现给异常处理程序。 呈现给处理程序的状态的一个关键组成部分是返回地址,它指示指令流中发生异常的点。
ARM 体系结构提供了许多不同的异常,如异常处理中所述。 该架构定义了每个异常采取的模式。 安全扩展和虚拟化扩展添加了可以确定异常发生模式的配置设置。
4.1 Terminology for describing exceptions
在本手册中,许多术语在描述异常时具有特定含义:
-
异常是通过以下方式之一生成的:
-
直接作为指令流的执行或尝试执行的结果。 例如,由于未定义的指令而生成异常。
-
间接地,由于系统状态中的某些因素。 例如,由于外设发出中断信号而生成异常。
-
-
处理器在导致程序中的正常控制流发生变化时发生异常。
发生异常之前立即使用的模式被描述为发生异常的模式。 处理异常时使用的模式被描述为处理异常的模式。
采取例外的模式由以下因素决定:
-
异常的类型;
-
获取异常的模式;
-
安全扩展和虚拟化扩展中的配置设置。
在不包括安全扩展的实现中,体系结构定义了每个异常发生的模式。 这称为该异常的默认模式。
-
-
如果满足以下两个条件,则异常被描述为同步:
-
异常是由于直接执行或尝试执行指令流而生成的;
-
提供给异常处理程序的返回地址保证指示引起异常的指令。
-
-
如果满足以下任一条件,则异常被描述为异步:
-
异常不是由于直接执行或尝试执行指令流而生成的;
-
不保证提供给异常处理程序的返回地址指示导致异常的指令。
-
Note
对于同步异常,异常是从生成异常的模式中获取的。 但是,对于异步异常,处理器模式可能会在异常生成之后和发生之前发生变化。
异步异常分为:
Precise asynchronous exceptions
提供给异常处理程序的状态保证与从中获取异常的执行流中可识别的指令边界处的状态一致。
Imprecise asynchronous exceptions
不保证提供给异常处理程序的状态与执行流中发生异常的任何点一致。
4.2 Exceptions, privilege, and security state
ARMv7 对于异常处理有以下安全状态和权限要求:
-
必须将例外处理为特权级别为 PL1 或更高的模式。
-
在特定的安全状态下:
-
必须将异常转移到特权级别大于或等于发生异常的模式的特权级别的模式;
-
异常返回必须是特权级别小于或等于异常处理程序正在执行的特权级别的模式。
在不包括安全扩展的实现中,此要求适用于处理器的单一安全状态。
-
-
在包含安全扩展的实现中:
- 可以从任何非安全模式(包括 Hyp 模式)到安全监控模式进行例外处理。
Note
在 ARMv7 中,每个安全状态中的特权级别都是独立定义的。 因此,关于特权级别的规则与从非安全模式到安全模式的例外无关。
- 永远不能从安全模式进入非安全模式。
这些要求的一个影响是,必须对非安全 Hyp 模式采取的例外是:
-
非安全 Hyp 模式;
-
安全 Monitor 模式.