ARMv8架构,引入了Execution State、Exception Level、Security State等新特性,是目前ARM架构变动最大的一次,具体来说: 1,A64:对于Large memory的需求也可通过Large Physical Address Extensions (LPAE) 技术,虽然可以支持高达40bits的物理地址空间,但受限于32-bit的指令集,虚拟地址空间依旧只有32bits(4G),定义64-bit的指令集(A64)。向前兼容32-bit指令集(A32和T32)。 2,安全:在ARMv7 security extension的基础上,兼容TrustZone架构,新增security model。它不同于privilege level等软件逻辑上的保护,而是一种物理上的区隔,即不同security状态下,可以访问的物理内存是不同的。在Security状态下,处理器可以访问所有的Secure physical address space以及Non-secure physical address space;在Non-security状态下,只能访问Non-secure physical address space。
3,虚拟化:在ARMv7 virtualization extension的基础上,提供完整的virtualization框架,从硬件上支持虚拟化。包括指令集虚拟化、异常处理虚拟化、MMU虚拟化、IO虚拟化。
4,EL:定义AArch64和AArch32两套运行环境(称作Execution state),分别执行64-bit和32-bit指令集。使用exception level,替代了processor mode、privilege level等概念。
ARMv8 定义了4 个 Exception level,简称 EL0-EL3。同时Exception level 包含了 privilege 概念。
AArch64中,已经没有User、SVC、ABT等处理器模式的概念,由于向前兼容,在AArch32中,就把这些处理器模式映射到了4个Exception level。如上图所示。
当异常发生时,有两种选择,停留在当前的EL,或者跳转到更高的EL,EL不能降级。同样,异常处理返回时,也有两种选择,停留在当前EL,或者调到更低的EL。应用位于特权等级最低的EL0,Guest OS(Linux kernel等)位于EL1,提供虚拟化支持的Hypervisor位于EL2(可以不实现),提供Security支持的Seurity Monitor位于EL3。这里面体现了安全防御的思想,即出现异常事件必须由逐级由上一级EL处理。
(ARM32、Thumb、ARM64位指令集之间的关系如上图)