在以前的ARMv6架构下,处理器有7种模式,如图 1所示:
图 1他们分别是:
User(USR):用户模式,非特权模式,大部分程序运行的时候就处于此模式。
FIQ:快速中断模式,进入 FIQ 中断异常
IRQ:一般中断模式。
Supervisor(SVC):超级管理员模式,特权模式,供操作系统使用。
Abort(ABT):数据访问终止模式,用于虚拟存储以及存储保护。
Undef(UND):未定义指令模式。
System(SYS):系统模式,用于运行特权级的操作系统任务
Cortex-A7属于ARM V7的架构,它的模式在ARMv6的基础上又增加了两个,所以一共支持9种模式,如图 2所示:
从上图可以看到Cortex-A7增加了Monitor和Hyp亮膜模式。
Monitor用于用户安全扩展模式(trustzone)。
Hyp用户虚拟化扩展。
在这9种模式中,除了User(USR)用户模式外,其它8种模式都是特权模式。这几个模式可以通过软件进行任意切换,也可以通过中断或异常进行切换。大部分程序都是工作在用户模式,在用户模式下不能访问系统的所有资源,有些资源是受限的,如果要访问这些受限的资源,需要进行模式切换。用户模式不能直接切换,需要借助异常来完成。当要切换模式的时候,应用程序可以产生异常,在异常处理中实现模式切换。当中断或者异常发生后处理器就会进入到相应的异常模式,每一种模式都有一组寄存器供异常处理程序使用,这样的目的是为了保证在进入异常模式以后,用户模式下的寄存器不会被破坏。