ARM处理器模式切换

ARM 151浏览

参考:http://blog.csdn.net/xiruanliuwei/article/details/7908170

ARM体系的CPU有以下7种工作模式:

1、用户模式(usr):正常的程序执行状态

2、快速中断模式(fiq):

3、中断模式(irq):

4、管理模式(svc):操作系统使用的保护模式

5、系统模式(sys):运行具有特权的操作系统任务

6、数据访问终止模式(abt):数据或指令预取终止时进入该模式

7、未定义指令终止模式(und):未定义的指令执行时进入该模式

1、ARM处理器各个模式之间是如何切换的?

答:ARM处理器有7种模式。除用户模式外的其他6种模式称为特权模式特权模式中除了系统模式以外的其余5种模式称为异常模式;大多数程序运行于用户模式进入特权模式是为了处理中断、异常、或者访问被保护的系统资源;这些模式中,程序可以访问所有系统资源,也可以任意进行处理器模式的切换。处理器模式可以通过软件控制进行切换(直接设置CPSR寄存器的后五位就可以在6种特权模式之间互相切换),也可以通过外部中断或异常处理过程进行切换(示例,在USR模式下,发生中断后切换到IRQ模式)。用户模式切换到特权模式需要SWI。

2、ARM各个模式之间切换时,上下文的保存哪些是硬件在做?哪些是操作系统在做?

         答:CPU做的:

(1)把返回地址保存到相应模式的lr寄存器中,示例从usr模式切换到irq模式,CPU会将usr模式下的pc值,保存到irq模式下的lr寄存器中。

(2)保存CPSR到相应模式的SPSR寄存器中,还是上面的例子,CPU保存usr模式下的CPSR到irq模式下的SPSR中。

(3)将pc设置成相应模式下的某地址值继续执行。

操作系统做的(以从模式A切换到模式B为例):

操作系统所做内容需要根据情况而定,因为模式切换不一定伴随着进程之间的切换,有可能从A模式切换到B模式后,CPU执行的是同一个进程,这时不需要操作系统具体做什么。

当模式切换伴随着进程切换时,操作系统需要保存模式切换之前的上下文环境。也就是进程控制块,进程控制块包括标识符、用户可见寄存器、控制和状态寄存器、栈指针等等,这与普通的进程切换类似。

3.当异常发生,CPU进入相应的异常模式时,以下工作是由CPU自动完成的:

1、在异常模式的R14中保存前一工作模式的下一条即将执行的指令地址;

2、将CPSR的值复制到异常模式的SPSR中;

3、将CPSR的工作模式设为该异常模式对应的工作模式;

4、令PC值等于这个异常模式在异常向量表中的地址,即跳转去执行异常向量表中的相应指令;

从异常工作模式退回到之前的工作模式时,需要由软件来完成以下工作:

1、将异常模式的R14减去一个适当的值(4或8)后赋给PC寄存器;

2、将异常模式SPSR的值赋给CPSR;