0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ARM重新定义ARMv8新架构,ARMv8新架构特性解说

454398 来源:蜗窝科技 作者:wowo 2020-10-08 17:02 次阅读

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模型。
编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19156

    浏览量

    229082
  • ARM
    ARM
    +关注

    关注

    134

    文章

    9043

    浏览量

    366768
  • ARMv8
    +关注

    关注

    1

    文章

    35

    浏览量

    14141
  • 虚拟内存
    +关注

    关注

    0

    文章

    70

    浏览量

    8052
收藏 人收藏

    评论

    相关推荐

    ARM技术是什么?国内有哪些ARM厂家呢?一起来了解一下!

    7 :2005年推出,支持多核心设计,引入了NEON指令集,进一步提升了处理器的多媒体处理能力和并行计算能力。 ARMv8 :2011年推出,采用64位架构,提供了更大的寻址空间和更高的性能。ARMv8
    发表于 11-18 16:35

    Armv9 CPU中SVE2的实际用例

    随着每一代新产品的推出,Arm CPU 都会实现代际性能提升,并引入架构改进,以满足不断演进的计算工作负载的需求。本文将重点介绍三个用例,以展示 Armv9 CPU 的架构
    的头像 发表于 10-21 09:54 251次阅读
    <b class='flag-5'>Armv</b>9 CPU中SVE2的实际用例

    如何学习ARM

    ARM 处理器架构: 学习 ARM 处理器的架构是学习的核心。ARM 架构有不同的版本,如
    发表于 10-11 10:42

    ARM MCU嵌入式开发 | 基于国产GD32F10x芯片+嵌入的开始

    架构选择,如ARMV8ARMV7等,均采用了RISC指令集,并通过Thumb和Thumb-2扩展指令集进一步优化了性能和存储效率。这些特点使得ARM
    发表于 09-09 14:48

    ARM CORE支持中断嵌套吗?GIC中断控制器支持中断嵌套吗?

    在默认情况下,本文讲述的都是ARMV8-aarch64架构,gicv3, linux kernel 5.14
    的头像 发表于 08-07 09:29 632次阅读
    <b class='flag-5'>ARM</b> CORE支持中断嵌套吗?GIC中断控制器支持中断嵌套吗?

    armv8在启动刚开始时调用了关中断,一直到切换第一个线程,在哪里开启的中断呢?

    例如当前使用的armv8芯片,在启动刚开始时调用了关中断,一直到切换第一个线程,在哪里开启的中断呢? int rtthread_startup(void
    发表于 07-04 07:00

    移动端芯片性能提升,Armv9架构新升级引发关注

    “数码博主”5月17日的最新爆料指出,联发科积极推进Armv9新一代IP BLACKHAWK“黑鹰”的架构设计,预计天玑9400芯片将采用这一架构,有望以“全大核”设计再度领跑移动SoC CPU性能榜单。
    的头像 发表于 05-17 16:51 955次阅读

    Arm Helium技术诞生的由来 为何不直接采用Neon?

    经过 Arm 研究团队多年的不懈努力,Arm 于 2019 年推出了适用于 Armv8‑M 架构Arm Cortex-M 矢量扩展技术
    的头像 发表于 02-29 17:01 1956次阅读
    <b class='flag-5'>Arm</b> Helium技术诞生的由来 为何不直接采用Neon?

    Arm v9芯片新架构揭秘

    从中长期来看,随着单芯片 ARM 核数增加、基于 ARM 架构芯片数量的上升以及ARM 应用场景的增加,公司仍将保持增长。据公司公告数据显示,2023 财年,高端芯片采用
    发表于 02-27 14:14 5304次阅读
    <b class='flag-5'>Arm</b> v9芯片新<b class='flag-5'>架构</b>揭秘

    arm架构和x86架构区别 linux是x86还是arm

    ARM架构和x86架构是两种不同的计算机处理器架构,它们在体系结构、指令集、应用领域等方面有着明显的区别。Linux操作系统则具有广泛的适配性,可以运行在各种
    的头像 发表于 01-30 13:46 1.7w次阅读

    Jailhouse原理及openEuler下的性能剖析

    Linux 和多 RTOS 的同时运行,使用 Cell 来配置 CPU 和设备资源,且 Cell 之间设备资源不可共用。硬件至少需要 2 个逻辑 CPU 支撑它的运行,支持 x86 架构支持 VMX、EPT、Preemption timer 与带有虚拟化扩展的 ARMv
    的头像 发表于 12-12 10:40 5172次阅读
    Jailhouse原理及openEuler下的性能剖析

    u-boot armv8链接脚本

    armv8中,u-boot使用arch/arm/cpu/armv8/u-boot.lds进行链接。 u-boot-spl和u-boot-tpl使用arch/arm/cpu/
    的头像 发表于 12-07 11:19 604次阅读

    armv8 u-boot的启动介绍

    先看arm官网提供的一张图: 上图详细概括了arm官方推荐的armv8的启动层次结构: 官方将启动分为了BL1,BL2,BL31,BL32,BL33阶段,根据顺序,芯片启动后首先执行BL1阶段代码
    的头像 发表于 12-07 11:09 1914次阅读
    <b class='flag-5'>armv8</b> u-boot的启动介绍

    SMP多核启动:armv8的安全扩展

    为了增强arm架构的安全性,aarch64一共实现了secure和non-secure两种安全状态。通过一系列硬件扩展,在cpu执行状态、总线、内存、外设、中断、tlb、cache等方面都实现了两种
    的头像 发表于 12-05 16:48 643次阅读
    SMP多核启动:<b class='flag-5'>armv8</b>的安全扩展

    Arm架构学习—开启Armv9时代

    在上一篇文章“从A76到A78——在变化中学习Arm架构”中,我们了解了Arm处理器微架构的基本组成,介绍了Armv8
    的头像 发表于 11-27 16:46 1211次阅读
    <b class='flag-5'>Arm</b>微<b class='flag-5'>架构</b>学习—开启<b class='flag-5'>Armv</b>9时代