2013年,ARM发布了64位ARMv8架构,这是自2007年的ARMv7架构以来,ARM架构的第一次主要改变。
ARMv8包含32位执行状态和64位执行状态。
AArch64用来描述64位执行状态。
AArch32用来描述32位执行状态,其基本上和ARMv7一样。
GNU和Linux的文档,有时将AArch64称为ARM64.
ARMV8-A的许多基本概念和ARMv7-A相同。
Cortex-A系统包含ARMv8-A和ARMv7-A
Cortex-A5/7/8/9/15/17为ARMv7-A架构。
Cortex-A53/57为ARMv8-A架构
ARMv8处理器通过AArch32执行环境仍然支持ARMv7-A软件(除了一些例外)。
64位处理器有一些性能提升:
- 支持通过寄存器传递8个参数。
- 64位寄存器
- 更大的虚拟地址空间。
ARMv8-A是用于Application Profile的最新一代ARM架构。
Large physical address
64-bit virtual addressing
Automatic event signaling
可实现power-efficient和高性能spinlocks。
Larger register files
31个64位通用寄存器
Efficient 64-bit immediate generation
Large PC-relative addressing range
+/- 4GB的地址范围,共享库和位置无关代码的寻址更大了。
Additional 16KB and 64KB translation granules
减小了TLB miss的几率和page walk的深度。
New exception model
减小了OS和hypervisor的复杂性。
Efficient cache management
Hardware-accelerated cryptography
Load-Acquire, Store-Release instructions
为C++11, C11, Java内存模型设计,通过产生显式的内存屏障指令提高线程安全代码的性能。
NEON double-precision floating-point advanced SIMD
Cortex-A53 processor
中等,低功耗处理器,可以有1到4核,每个核有一个L1 cache。可选的L2 cache。
A53可以和A57组成big.LITTLE配置。
A53具有下列特性
- In-order, 8 stage pipeline
...
Cortex-A57 processor
A57用于手机和商业电脑应用。
具有以下特性:
Out-of-order, 15+ stage pipeline
有4个Exception levels,EL决定privilege level。
EL0 Normal user applications.
EL1 Operating system kernel typically described as priviledged.
EL2 Hypervisor.
EL3 Low-level firmware, including the Secure Monitor.
ARMv8-A提供两种security states:Secure和Non-secure。Non-secure状态也被称为为Noraml World。
ARMv8-A也提供虚拟化支持,但是只在Normal world支持。
ARMv8有两种执行状态:AArch64和AArch32。
在AArch64状态,执行64位指令。在AArch32状态,执行A32或T32指令。
ARMv7 processor mode
AArch64,处理器模式映射到exception levels。
异常等级改变有下列规则
1 移到更高的异常等级意味着更高的执行权限。
2 异常不能使等级变低。
3 EL0没有异常处理。
4 异常引起程序流的改变,异常包括:
中断,内存异常,未定义指令,系统调用,secure monitor或者hypervisor traps
5 结束异常,返回到之前的异常等级通过执行ERET指令实现。
6 从一个异常返回,可以留在同一个异常等级或更低的异常等级,不能移到更高的异常等级。
7 改变异常等级不改变安全状态,除了从EL3返回到非安全状态。
为了改变同一个异常等级下的执行状态,需要切换到更高的异常等级,然后切回来。
只有在改变异常等级时,才能切换执行状态。EL3不能切换到更高的异常等级,所以不能改变执行状态,只有通过reset才能改变。
总结:
改变到AArch32要求降低异常等级。
改变到AArch64要求提高异常等级。
产生一个异常,或者从异常返回,如果异常等级不变,则执行状态不能改变。
当ARMv8处理器在一个异常等级运行AArch32状态。它有和ARMv7相同的异常模型。