您好,欢迎来到尚车旅游网。
搜索
您的当前位置:首页ARM 处理器工作状态与工作模式 ARM 体系结构所支持的异常

ARM 处理器工作状态与工作模式 ARM 体系结构所支持的异常

来源:尚车旅游网
深入内核逻辑

一个宇宙通用的事实是:结构决定功能!

我们以典型的ARM嵌入式处理器内核的一般特征为例,,看看ARM设想的功能是如何被“构造”出来的。。。。

主要说两个内容:

• ARM处理器工作状态与工作模式 • ARM体系结构所支持的异常

基础概念

字(Word):在ARM体系结构中,字的长度为32位(在8位/16位处理器体系结构中,字的长度一般为16位)。

• 半字(Half-Word):在ARM体系结构中,半字的长度为16位,与8位/16位处理

器体系结构中字的长度一致。 • 字节(Byte):在ARM体系结构和8位/16位处理器体系结构中,字节的长度均为8

位。

问:计算机存储设备是按______ (A:字Word,B:半字Half-Word,C:字节Byte)编址的。

处理器工作状态

ARM状态:正在执行ARM指令的处理器的状态。 Thumb状态:正在执行Thumb指令的处理器的状态。

不同的状态下,代码密集度不同,, ARM状态按字(32位)存储代码, Thumb状态按半字(16位)存储代码,

这种特性有利于我们在必要的时候调整单位存储空间的代码容量,压缩代码占用空间。 这两个状态可以根据情况软件切换,,, 后面我们还会再次提到这个话题,,,

Note:对于ARM 32位处理器,两种状态下代码存储密集度不同,但在执行时仍是32位的! 这就是说,代码可以压缩,但执行效率并不会下降,CPU仍是按字执行的啊!

不过,Thumb状态下的指令的使用有某些限制,属于ARM状态下的指令的一个子集。。。

另外,调整代码密集度的优点在后来的ARM一些版本中可以自动切换,,,不需要程序员再过多费神,

这就是所谓Thumb2状态:一种混合型指令集,降低功耗 具有高代码压缩性

处理器工作模式

回顾,前面说过ARM内核采用了大量内部寄存器的特性,,以便有利于支持流水线技术,,, 那么这些“大量内部寄存器”如何运作?

工作模式本质上就是指内核中的这堆寄存器的功能分配和使用方法

ARM处理器内部寄存器

一起看,,这里一共有37个32位寄存器

• 其中,31个通用寄存器,包括程序寄存器(PC); • 6个状态寄存器:。。。 •

程序计数器R15

关于计数器R15,分析如下: 实际R15也就是个普通的寄存器

1) 只是把它约定为用来存放取指的地址,,,, 2) 由于处于指令流水线中,R15的取指地址与当前正在执行的指令有某种可以推算的关系,, 假定指令流水线为3级流水线(指令从取指到执行中间分3道工序同时进行:取指、译码、执行),

这时PC值(取指地址)与当前正在执行的那个指令的地址之间应是下图的关系

3)从指令地址特征来看,

因为ARM指令统一设计为占一个字长,,那么指令地址的末两位总是为0

问题, 为什么FIQ模式下相对来说可以加速处理速度?

注意,用户模式和系统模式公用R13和R14寄存器,,, 联想操作系统的用户态和内核态,,,这里就是为实现操作系统级别的管理提供硬件层面的支持的机制,,,

本质上R13、R14也是个通用寄存器,即一处能存放数据的空间,,只是处理器内核将R13一般用来作为堆栈指针,,将R14用作链接寄存器,,,

关于R14作为程序返回地址的作用的示意图

Note:

在程序发生跳转的同时,相应模式下的LR存储了发生跳转时的指令的下一条指令的地址,即程序返回地址。

当前程序状态寄存器CPSR和保存程序状态寄存器SPSR

程序状态寄存器CPSR的位功能

以上寄存器组从硬件层面支持的ARM典型的工作模式:

模式 用户(User) 快速中断(FIQ) 外部中断(IRQ) 管理(Supervisor) 数据访问中止(Abort) 系统(System) 未定义(Undifined)

模式描述 ARM处理器正常的程序执行状态 用于高速数据传输或通道处理 用于通用的中断处理 操作系统保护模式 实现虚拟存储器和存储器保护 运行特权操作系统任务 支持硬件协处理器的软件仿真

以上七种硬件支持的工作模式的改变 可能存在两种方式: 1)通过软件控制改变 2)外部中断或异常处理

问题:初始运行模式,和工作状态是什么?

怎样用软件控制改变工作模式,,在后面讲指令系统时还会提到。

异常种类与优先级

现在看导致模式转换的另一种可能:外部中断或异常处理

所谓异常 是由内部或外部资源产生引起的处理器处理的一个事件。。。。

其实,中断是属于异常的子集的,也就是说中断其实是异常其中的一种。

首先,看ARM支持的异常种类 ARM支持7中异常:

• 1. 复位

• 2. 数据中止 • 3. FIQ • 4. IRQ

• 5. 预取中止

• 6. 未定义指令,软件中断

异常发生时,处理器怎样处理? 每个异常都有固定的入口地址

即当异常事件发生时,处理器从一个固定的入口处执行指令

异常的响应

• A 数据入栈;将CPSR 拷贝到相应的SPSR; • B 根据异常情况设置CPSR 中模式位

• C 在合适的连接寄存器中保存下一条指令的地址 • D 根据异常向量设置PC,预取下一条指令

Note: 以上操作,并不是纯软件的顺序处理,而是硬件层面的支持,我们不去区分其实际上执行的先后,,而是在逻辑上认为 同时进行 相应的有

异常处理完成时

• A 恢复原来被保护的用户寄存器 • B 将SPSR 的值拷贝回CPSR

• C 将PC值恢复成相应异常下的断点地址,准备执行原来中断前的程序。 • D 如果在进入异常时设置了中断禁止位,离开时需要清除。

补充:

问:假设当有两种或多种异常同时发生,如何处理?

这引出异常优先级的问题:不同的中断处于不同的处理模式,具有不同的优先级 看下表:

一个特殊的异常处理过程:复位异常

当nRESET信号由低变为高电平时:

1 )强制CPSR中M[4:0]变为B10011(管理模式); 2) 置位CPSR中的I和F; 3) 清零CPSR中的T位;

4) 强制PC从地址0x00开始取指令; 5) 系统返回到ARM状态并恢复执行

最后,我们非标准地做如下总结,以助于理解,

我们可以发现arm的7种工作模式其实是和arm的异常向量表有着一定的对应关系的。 这就好像一个医务室,有普通门诊,有特殊处理间,, 一般情况下,普通门诊就可以应对(运行在用户模式下)

当发生特殊事件(外部事件引起中断)或内部运作中机制中产生的特殊情况(异常处理),需要进入相应的特殊处理间进行处理。。。 (每个特殊处理间的入口是固定的)

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- sceh.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务