ARM有八种工作模式,有些处理器可能是七种,这个要看处理器的版本,早期的处理器如ARM9有七种工作模式,到了后来的Cortex系列新增了一种Secure Monitor模式。对工作模式的理解需要记住以下三点:
- 不同模式拥有不同的权限
- 不同模式执行不同的代码
- 不同模式完成不同的功能
目录
1、User
2、FIQ
3、IRQ
4、SVC
5、Abort
6、Undef
7、System
8、Monitor
1、User
User是用户模式,一般在执行上层的应用程序时,ARM处于该模式。
注意要区分之前了解的用户态和内核态,用户态和内核态指的是OS所处的状态,程序在执行正常运算操作时,OS处在用户态,当OS调用了系统接口的时候,就会由用户态切换为内核态。
2、FIQ
当一个高优先级中断产生后,ARM将进入这种模式。
中断可以简单理解为,CPU正在忙一件事,突然有意外发生了,CPU停下手里的活去处理意外,处理完了以后再继续忙之前的事。高优先级中断就可以理解为如果发生了多个意外,CPU会先处理优先级较高的意外。
3、IRQ
当一个低优先级中断产生后,ARM将进入这种模式。
这里就和FIQ相反了,因为优先级较低,如果当前存在多个中断,CPU会优先处理高优先级的中断
4、SVC
当复位或执行软中断指令后ARM将进入这种模式
当ARM刚上电的时候,ARM会进入SVC模式,直到OS正常运行进程或者应用的时候,ARM才会切换到User进程,这是一种情况。
还有一种情况就是软中断,软中断是相对于硬中断而言的,硬中断指的是硬件产生的中断,比如网卡收到消息了,就会给CPU发送一条指令,此时产生的就是硬中断。软中断指的是上层应用程序产生中断,这里就不作详细介绍。
5、Abort
当产生存取异常时ARM将进入这种模式。
比如CPU提供的地址,是一个空地址或者野指针,这个时候就会读取失败,然后进入Abort模式
6、Undef
当执行未定义的指令时ARM将进入这种模式。
ARM处理器可以识别哪些指令(二进制机器码)是由硬件设备决定的,比如处理器可以识别1100 为加法指令,如果提供了处理器无法识别的指令,ARM处理器就会进入Undefine模式。
7、System
使用和User模式相同寄存器集的特权模式。
System模式和User模式很类似,不同之处在于System模式的权限要比User模式更高。这里说的使用相同寄存器集指的是,每一种模式使用的寄存器数量是有限的,主要分为两类,一类是所有工作模式都可以共用的,一类是当前工作模式专属的。
8、Monitor
为了安全而扩展出的用于执行安全监控代码的模式。