架构arm架构 arm的架构是什么意思
文章目录一、什么是架构二、ARM架构分类Arm-A架构Armv7-A(1)指令集(2)处理器模式(3)通用寄存器(4)特殊寄存器Armv8-A寄存器指令集异常模型及处理器模式一、什么是架构“架构”(Architecture)指的是功能规范,ARM架构即是ARM处理器的功能规范,包括以下主要内容:
指令集:每条指令的功能,指令在存储器中的表示方法(编码);寄存器集:寄存器的数量、大小、功能,以及寄存器的初始状态;异常模型:不同特权级、异常类型,以及采纳异常和从异常返回时的处理动作;存储器模型:存储器的访问顺序,当软件必须执行准确维护时,缓存的行为;调试、跟踪和统计:如何设置和触发断点,跟踪工具可以捕获的信息和采用的方式。“架构”没有直接说明如何构建处理器并工作,它只是提供了一种软件和硬件之间行为规范,具体的处理器的构建和设计称为“微架构”Micro-Architecture,微架构包括:
流水线的长度和布局缓存的数量和大小单个指令的周期数(一条指令周期对应几个时钟周期)其它可选特性二、ARM架构分类ARM提供了三种架构概要:
A-Profile(应用):用于复杂得计算应用领域,如服务器、移动电话、汽车主机;R-Profile(实时):用于需要实时响应的地方,如安全关键应用或需要确定性响应的应用,如医疗设备、车辆转向、制动和信号等;M-Profile(微控制器):用于能效、功耗、尺寸有较强需求的地方,如深度嵌入式芯片、小型传感器、通信模块、智能家居产品等。处理器的构建和设计称为“微架构”,微架构定义处理器的工作原理,包括:流水线的长度和布局,缓存的数量和大小,单个指令的周期数以及其它可选特性。
Arm-A架构Armv7-A(1)指令集ARMv7-A架构是32位处理器架构,也是load/store架构,即数据处理指令操作在通用寄存器完成,只有load/store指令可以访问内存。此外ARM指令集还有一大特点,就是ARM指令集几乎所有的指令都可以增加条件码。ARM指令集可以归为一下四类:
数据处理操作(ALU操作例如ADD);内存操作(load/store);控制流(循环,跳转,条件码等);系统(协处理器,debug,模式切换等等)。Armv7-A支持Arm(A32)和Thumb(T32)数据集。ARMcore只能在寄存器上执行数据处理,而不能直接在内存上执行。数据操作指令一般由一个目标寄存器和两个源操作数组成,所有ARM数据处理指令都可以加后缀(Suffix),并影响状态标志(CPSR)。其基本格式如下:Operation{cond}{S}Rd,Rn,Operand2Operation:指令助记符;cond:执行条件;S:后缀,是否影响CPSR寄存器状态位;Rd:目标寄存器;Rn:第一个操作数寄存器;Operand2:第二个操作数;{}:可选。(2)处理器模式ARMv7架构支持安全扩展,如果使能了安全扩展,ARMv7-A架构分为安全模式(SecureState)和非安全模式(Non-secureState)两个世界。
在非安全模式下,存在三种运行特权PL0,PL1和PL2(privilegelevel)。
特权等级
描述
PL0
PL0运行在用户模式(User),用于运行应用程序。该模式程序受限访问系统资源。对应Linux用户态。
PL1
PL1运行非用户模式和Hyp模式外的所有模式。Linux内核运行在PL1。包含了ARMv6架构中的System,SVC,FIQ,IRQ,UNDEF及Abort模式。此外,安全模式中的Montior也运行在PL1等级,管理安全模式和非安全模式的切换。
PL2
PL2用于虚拟化。虚拟化超级管理程序(Hypervisor)运行在PL2。
处理器模式:
User:用户模式,运行再PL0这个特权等级上,也就是没有特权等级,他是OS上运行应用程序时候的等级,他不可以访问系统资源(MMU等),在这个模式下,无法主动切换模式,除非遇到中断或者异常(诸如SWI触发系统调用);FIQ:快中断模式,发生FIQ快中断的时候处理器模式;IRQ:中断模式,发生IRQ快中断的时候处理器模式;Supervisor:管理员模式,复位后的默认模式,运行再PL1特权等级,可以通过SWI(SVC)系统调用呼叫产生SupervisorCall异常,进入Supervisor模式,操作系统常用的模式;Monitor:监视模式,针对Security扩展,不详细讨论;Abort:停止模式,当发生DataAbortexception或者PrefetchAbortexception异常时候进入这个模式;Hyp:当支持虚拟化扩展的时候模式,不详细讨论;Undefined:这是执行和指令相关的模式,当企图执行UNDEFINED指令的时候进入这个模式;System:系统模式,也是PL1特权等级,和Supervisor的区别是,System模式具有和User模式一样的寄存器,目前大多数系统未使用;(3)通用寄存器ARMv7-A处理器有16个通用寄存器:R0~R15,其中:
R13:通常用做堆栈指针SP;R14:通常用作链接寄存器LR;R15:通常用作程序计数器PC;对于每种特权等级访问系统资源的权限不一样,而处理器又有几种模式,每种模式对应的特权等级有一定区别;每一种处理器模式对应的寄存器也有一定区别:
R0~R7,PC是所有模式下共享的;FIQ模式下,R8-R12、SP、LR都是有专门的寄存器,有的材料上,称之为“影子寄存器”,什么意思呢?这个模式下,有他专用的R8~R12、SP、LR;同样道理,Supervisor、Abort、Undefined、IRQ等,都有他们自己模式下专用的SP和LR,也就是说,从其他模式进来的时候,不需要针对这两个寄存器进行恢复现场;FIQ之所以称之为FIQ,从软件上也看得出来,他专用的寄存器要多于IRQ的,所以也的确是要Fast一些;(4)特殊寄存器ARMv7-A还有一个特殊寄存器叫:程序状态寄存器CPSR(CurrentProgramStatusRegister),再进入异常之前,当前的CPSR被保存到SPSR(SavedProgramStatusRegister)中;
CPRS在用户层叫做APSR,APSR只是CPSR寄存器中被截取的一部分,因为在用户层,并不是所有的CPSR的位都可以访问;
Field
作用
N
ALU返回运算结果是否为负数
Z
ALU返回运算结果是否为0
C
ALU运算是否发生进位
V
ALU运算是否发生溢出
Q
cumulativesaturation
J
ARM是否处于Jazelle状态
E
控制load/store字节序,E=1表示大端模式,E=0表示小端模式
A
disablesasynchronousaborts,User模式不能操作
I
使能/禁能IRQ,User模式不能操作,I=1表示禁止IRQ,I=0表示使能IRQ
F
使能/禁能FIQ,User模式不能操作,F=1表示禁止FIQ,I=0表示使能FIQ
T
ARM和Thumb状态标志位
GE
用于某些SIMD(SingleInstruction,MultipleData)指令
M[4:0]
处理器模式:FIQ,IRQ,ABT,SVC,UND,MON,HYP。User模式不能操作
IT[7:0]
IT7:2:和IT1:0一起组成IT[7:0],表示IF-THEN指令的执行状态
[28-31]:条件码M[4:0]:处理器模式的Encoding
Armv8-AArmv8-A架构是针对应用框架的最新一代Arm架构。ARMv8架构继承了ARMv7与之前处理器技术的基础,除了对现有的16/32bit的Thumb2指令支持外,也向前兼容了现有的A32(ARM32bit)指令集,基于64bit的AArch64架构,除了新增A64(ARM64bit)指令集外,也扩充了现有的A32(ARM32bit)和T32(Thumb232bit)指令集,另外还新增加了CRYPTO(加密)模块支持。
寄存器为了向前兼容Armv7,Armv8-A支持两种ExecutionState,分别是AArch32和AArch64,两种ExecutionState有如下区别:
AArch32
AArch64
提供13个32bit通用寄存器R0-R12,一个32bitPC指针(R15)、堆栈指针SP(R13)、链接寄存器LR(R14)
提供31个64bit通用寄存器X0-X30(W0-W30),其中X30是程序链接寄存器LR
提供一个32bit异常链接寄存器ELR,用于Hypmode下的异常返回
提供一个64bitPC指针、堆栈指针SPx、异常链接寄存器ELRx
提供32个64bitSIMD向量和标量floating-point支持
提供32个128bitSIMD向量和标量floating-point支持
提供两个指令集A32(32bit)、T32(16/32bit)
定义ARMv8异常等级ELx(x