LV015-运行模型
以前的 ARM 处理器有 7 中运行模型: User、 FIQ、 IRQ、 Supervisor(SVC)、 Abort、 Undef 和 System,其中 User 是非特权模式,其余 6 种都是特权模式。但新的 Cortex-A 架构加入了 TrustZone 安全扩展,所以就新加了一种运行模式: Monitor,新的处理器架构还支持虚拟化扩展,因此又加入了另一个运行模式: Hyp,所以 Cortex-A7 处理器有 9 种处理模式,如表所示:
| 模式 | 描述 |
|---|---|
| User(USR) | 用户模式,非特权模式,大部分程序运行的时候就处于此模式。 |
| FIQ | 快速中断模式,进入 FIQ 中断异常 |
| IRQ | 一般中断模式。 |
| Supervisor(SVC) | 超级管理员模式,特权模式,供操作系统使用。 |
| Monitor(MON) | 这个模式用于安全扩展模式。 |
| Abort(ABT) | 数据访问终止模式,用于虚拟存储以及存储保护。 |
| Hyp(HYP) | 用于虚拟化扩展。 |
| Undef(UND) | 未定义指令终止模式。 |
| System(SYS) | 系统模式,用于运行特权级的操作系统任务 |
除了 User(USR)用户模式以外,其它 8 种运行模式都是特权模式。这几个运行模式可以通过软件进行任意切换,也可以通过中断或者异常来进行切换。所谓“运行模式”,可以这样简单理解:
(1)板子上电时, CPU 处于 SVC 模式,它用的是 SVC 模式下的寄存器。
(2)程序运行时发生了中断, CPU 进入 IRQ 模式,它用的 IRQ 模式下的寄存器。
(3)CPU 处理完中断,它切换回 SVC 模式,继续使用 SVC 模式下的寄存器。
(4)CPU 发生某种异常时,比如读取内存出错,它会进入 ABT 模式,使用 ABT 模式下的寄存器来处理错误。
大多数的程序都运行在用户模式,用户模式下是不能访问系统所有资源的,有些资源是受限的,要想访问这些受限的资源就必须进行模式切换。但是用户模式是不能直接进行切换的,用户模式下需要借助异常来完成模式切换,当要切换模式的时候,应用程序可以产生异常,在异常的处理过程中完成处理器模式切换。
当中断或者异常发生以后,处理器就会进入到相应的异常模式中,每一种模式都有一组寄存器供异常处理程序使用,这样的目的是为了保证在进入异常模式以后,用户模式下的寄存器不会被破坏。