1. 前言
armv8(当前只有a系列,即armv8-a)架构,是arm公司为满足新需求而重新设计的一个架构,是近20年来,arm架构变动最大的一次。它引入的execution state、exception level、security state等新特性,已经和我们对旧的arm架构的认知,有很大差距了。
因此,本文从armv8-a产生的背景开始,对它进行一个简单的介绍,使大家从整体上,对armv8有一个简单的了解。
2. 背景
有一点是可以确定的,arm诞生时,对intel主导的pc市场,没有(也不敢有)一点点的非分之想。最初的armv4(arm7系列),到最近的armv7(cortex-a,-m,-r系列),都是针对功耗比较敏感的移动设备的,就性能而言,基于arm处理器的设备,始终无法和pc相提并论。
但从armv7开始,情况开始有些转变,arm的市场开始扩展到移动设备之外的其它领域,这也是armv7划分为a(application)、r(real-time)和m(microcontroller)三个系列的原因,其实质就是三个细分市场,其中的a系列,就是针对性能要求较高的应用。
特别是在cortex-a9之后,arm的处理性能有很大的提高,渐渐的吸引了一些pc用户。因此基于arm的类pc产品,如平板电脑,开始大量涌现。此时,arm的处理能力,已经有机会应用于其它领域了,如企业设备、服务器等,当然,其优势依然是低功耗。
与此同时,新的趋势正在酝酿,主要包括大内存(large memory)、虚拟化(virtualization)和安全(security)。virtualization在armv7上已经有简单的硬件实现,security也有可能基于当前架构扩展,唯有large memory的需求,有点棘手。
由于处理器性能越来越强,运行于其上的软件也来越复杂,复杂到单一应用对内存的需求可能超出32-bit架构所能支持的最大内存(4g),这就是large memory需求的起因。不过,后来的cortex-a15(armv7架构)通过large physical address extensions (lpae) 技术,可以支持高达40bits的物理地址空间。但受限于32-bit的指令集,虚拟地址空间依旧只有32bits(4g),如果有应用需要更大的虚拟内存,怎么办?只能定义一个新的架构,使用64-bit的指令集(也即我们常说的arm64)。
毫无疑问,在现阶段,需要超过4g虚拟内存的应用场景,是非常少的。但arm还是定义了一个新的架构--armv8,为什么呢?下面是arm的解释(只有伟大的公司才有伟大的理念!):
trends. that’s really what arm has to look at when defining a new architecture. that is the nature of our business, we need to look a long way forward, and plan.
当然,armv8并不仅仅是为了解决虚拟地址的问题,它也要解决现有架构的一些问题。不过,新的问题又来了:一个新的架构?用户为什么要使用新的架构?因此,armv8的定义,必须先满足如下前提条件:
1)对上兼容。
2)能解决现存架构的已知问题。
3)相比现存架构,必须具备优势明显的新特性,哪怕软件从来不使用这些新特性。
以上就是armv8-a产生的背景,也是armv8-a架构之所以是“这个”样子的直接原因。那么到底是什么样子呢?我们继续介绍。
3. armv8-a架构简介
基于上面的前提条件,armv8-a架构的主要特性包括:
1)新增一套64-bit的指令集,称作a64。
2)由于需要向前兼容armv7,所以同时支持现存的32-bit指令集,称作a32和t32(也即我们熟悉的arm和thumb指令集)。
3)定义aarch64和aarch32两套运行环境(称作execution state),分别执行64-bit和32-bit指令集。软件可以在需要的时候,切换execution state。
4)aarch64最大的改动,使用新的概念(exception level),重新解释了processor mode、privilege level等概念,具体可参考第4章的介绍。
5)在armv7 security extension的基础上,新增security model,支持安全相关的应用需求。
6)在armv7 virtualization extension的基础上,提供完整的virtualization框架,从硬件上支持虚拟化。
4. aarch64 exception level
exception level,是armv8-a引入的一个新概念,用于整合之前架构中processor mode和privilege level相关的功能。
4.1 armv7之前的实现
我们知道,以前的arm架构,处理器可以工作在多种模式(称作processor mode)下,包括user、fiq、irq、abort、undefined、system等,之所以存在不同的模式,主要有2个方面的考虑:
1)不同的处理器模式,有不同的硬件访问权限,称作privilege level。
主要有2个level,privilege和non-privilege。其中只有user模式属于non-privilege level,其它均是privilege level。
安全起见,大多数时候,软件都运行在user mode。一旦需要其它操作,则需要切换到相应的privilege模式下。这是最原始、最朴素的安全思想,当然,只防君子,不防小人。
2)这些处理器模式,除user模式外,其它模式基本上和各类异常一一对应。而不同的模式,都有一些自己独有的寄存器,例如r13(sp)、r14(lr)等等,可以使模式切换过程(也是异常处理过程)更为高效、便利。
4.2 armv7-a的实现
armv7-a基本保留了之前的设计,不同之处,将privilege level命名了,称作pl0和pl1(也许您猜到了,后来出现了pl2,用于虚拟化扩展(virtualization extension)。
另外,增加了两个模式:monitor和supervisor,分别用于security扩展和virtualization扩展。
4.3 armv8-a的实现
可能armv8-a的设计者觉得之前的设计有些啰嗦,就把processor mode的概念去掉(或者说淡化)了,取而代之的是4个固定的exception level,简称el0-el3。同时,也淡化了privilege level的概念。exception level本身就已经包好了privilege的信息,即eln的privilege随着n的增大而增大。类似地,可以将el0归属于non-privilege level,el1/2/3属于privilege level。
这些exception level的现实意义是(如下图,先忽略secure model有关的内容):
armv8-a exception level有关的说明如下:
1)首先需要注意的是,aarch64中,已经没有user、svc、abt等处理器模式的概念,但armv8需要向前兼容,在aarch32中,就把这些处理器模式map到了4个exception level。
2)application位于特权等级最低的el0,guest os(linux kernel、window等)位于el1,提供虚拟化支持的hypervisor位于el2(可以不实现),提供security支持的seurity monitor位于el3(可以不实现)。
3)只有在异常发生时(或者异常处理返回时),才能切换exception level(这也是exception level的命名原因,为了处理异常)。当异常发生时,有两种选择,停留在当前的el,或者跳转到更高的el,el不能降级。同样,异常处理返回时,也有两种选择,停留在当前el,或者调到更低的el。
注1:有关armv8-a异常处理的具体细节,会在其它文章中描述。
5. security model
armv8-a的security模型基本沿用了armv7 security extension的思路,主要目的保护一些安全应用的数据,例如支付等。它不同于privilege level等软件逻辑上的保护,而是一种物理上的区隔,即不同security状态下,可以访问的物理内存是不同的。
armv8-a架构有两个security state(参考上面图片),security和non-security。主要的功效是物理地址的区隔,以及一些system control寄存器的访问控制:
在security状态下,处理器可以访问所有的secure physical address space以及non-secure physical address space;
在non-security状态下,只能访问non-secure physical address space,且不能访问secure system control resources。
6. virtualization
硬件虚拟化包括指令集虚拟化、异常处理虚拟化、mmu虚拟化、io虚拟化等多个议题,比较复杂,这里先不描述了。
7. 总结
本文简单介绍了armv8-a中的一些概念,后续文章将会重点关注异常处理模型、security模型、virtualization模型。
物联网的定义,它与互联网的关系
USB Type-C身份验证程序将检测防止不兼容的连接器
谷歌的Med PaLM 2或将更擅长医疗保健对话
软件定义存储的实施是对的吗
局域网交换机的能源效率测试
ARM重新定义ARMv8新架构,ARMv8新架构特性解说
百度最新版本Apollo6.0发布,百度自动驾驶技术的更迭
MCU应用安全性
智造之眼®BTB连接器视觉应用
中国移动:2020年5G芯片整体成熟度有所提升
伦敦地铁2024年底将全覆盖4G网络
海南儋州市供电局今年将重点建设以儋州为中心的西部智能电网
数据线的功能远远超乎你的想象
红外遥控解码原理讲解
水资源可持续利用VR线上博览会的作用
UHF室内电视天线的制作
快递预约上门取件API免费接口
低延迟蓝牙耳机有哪些,高性价比的蓝牙耳机推荐
一款专门针对BTB连接器测试的模组—弹片微针模组
线束加工设备自动化升级路在何方