ARM有8个基本工作模式
1. User : 用户模式
非特权模式,大部分任务执行在这种模式,运行在操作系统的用户态,没有权限去操作其他硬件资源,只能执行处理用户自己的数据,也不能切换到其他模式,要访问硬件资源或切换到其他模式,只能通过软中断或者产生异常。
2. FIQ : 快速中断
当一个高优先级(fast) 中断产生时将会进入这种模式,用于高速数据处理及通道处理。
3. IRQ : 中断
当一个低优先级(normal) 中断产生时将会进入这种模式,硬件产生中断信号之后就自动 都进入这种模式。
4. Supervisor: svc管理模式
当复位【reset重启】或软中断【swi】指令执行时将会进入这种模式。
5. Abort : 终止模式
当存取异常时将会进入这种模式比如:segment fault,用于支持虚拟内存或者存储器保护,当用户访问非法地址的时候就进入这个模式。
6. Undef: 未定义模式
当执行未定义指令时会进入这种模式,用于支持硬件协处理器的软件仿真,cpu在指令译码阶段不能识别的指令操作时,进入未定义模式。
7. System : 系统模式
使用和User模式相同寄存器集的特权模式
8. Cortex-A特有模式:
Monitor : 监测模式
是为了安全而扩展出的用于执行安全监控代码的模式;
说明1:除了User模式其他模式都是特权模式,在特权模式下所有硬件资源都可以访问。
说明2:
linux:
用户模式,---------- cpu 处于 user模式
内核模式 ----------- 特权模式
用户要进入内核模式,可以通过系统调用或者进入异常模式
1. 系统调用比如调用open、read 、write等系统函数,进入到内核模式,此时cpu处于svc Supervisor
2. 异常,除了user的其他工作模式