为什么ARM有7种工作模式?
ARM工作模式
一、ARM为什么有7种工作模式
很多初学者从开始学习ARM,到进入开发岗位,也没有弄清楚为什么ARM有7种工作模式,甚至连这个问题也没有提出来。
ARM为什么有7种工作模式呢?首先这个问题是由操作系统(Linux)决定的。在ARM诞生前,操作系统已经存在了,ARM为了满足操作系统对资源的调度和保护而设计了7种工作模式。
操作系统为什么要设计这么多工作模式呢?主要是为了计算机安全考虑、计算机资源调度和管理、人机接口等外界事件的响应等等而设计的。
ARM启动从上电开始,进入SVC即管理模式,引导bootloader运行,bootloader引导Linux内核运行,内核运行时,运行用户态init程序,进入用户模式,用户模式下对硬件资源访问受限,达到保护内核的目的。外部中断模式响应外部事件、当ARM遇到不认识的指令时,进入未定义模式、当用户非法访问硬件资源时ARM进入终止模式、当需要访问硬件资源时,ARM进入系统模式。
综上所述,ARM只有迎合操作系统的需要而这样设计,才能满足操作系统的要求,同时,操作系统这样设计,也是为了安全、合理的使用硬件资源,并不是说一方为了迎合另外一方的要求而设计。
二、ARM的工作模式介绍
(1)用户模式(user)
用户模式是用户程序的工作模式,它运行在操作系统的用户态,这种模式下程序没有权限去操作其它硬件资源,只能执行和处理自己的数据,也不能切换到其它模式下,要想访问硬件资源或切换到其它模式只能通过软中断或产生异常。
(2)系统模式(system)
系统模式是特权模式,不受用户模式的限制。用户模式和系统模式共用一套寄存器,操作系统在该模式下可以方便的访问用户模式的寄存器,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。
用户模式与系统模式两者使用相同的寄存器,都没有SPSR(Saved Program Statement Register,已保存程序状态寄存器),但系统模式比用户模式有更高的权限,可以访问所有系统资源。
(3)普通中断模式(IRQ)
普通中断模式用于处理一般的中断请求,通常在硬件产生中断信号之后自动进入该模式,该模式为特权模式,可以自由访问系统硬件资源。
(4)快速中断模式(FIQ)
快速中断模式是相对一般中断模式而言,它是用来处理对时间要求比较紧急的中断请求,主要用于高速数据传输及通道处理中。
(5)管理模式(Supervisor,SVC)
管理模式是CPU上电后默认模式,因此在该模式下主要用来做系统的初始化,软中断处理也在该模式下。当用户模式下的用户程序请求使用硬件资源时,通过软件中断进入该模式。
系统复位或开机、软中断时进入到SVC模式下。
(6)终止模式(abort,abt)
中止模式用于支持虚拟内存或存储器保护,当用户程序访问非法地址,没有权限读取的内存地址时,会进入该模式,linux下编程时经常出现的segment fault通常都是在该模式下抛出返回的。
(7)未定义模式(undefined,und)
未定义模式用于支持硬件协处理器的软件仿真,CPU在指令的译码阶段不能识别该指令操作时,会进入未定义模式。
Arm的工作模式切换
被动切换:arm运行时产生的一些异常或者中断,导致模式切换。
主动切换:通过软件设置特定的寄存器进行arm的模式切换。