技术概述:ARMv8体系结构

news2024/9/21 20:53:01

John Goodacre, Director Program Management

ARM Processor Division, November 2011

背景:ARM体系结构

从ARM精简指令集体系结构提出到现在已经有20多年了;ARMv7系列处理器是在ARMv4基础上设计的,随着ARMv7系列处理器大量应用,ARM精简指令集体系结构才获得业界广泛认可。ARM一直致力于低功耗设计;最初的ARM处理器没有浮点部件,没有复杂的数学指令,没有SIMD,甚至都不支持两个整数类型的除法指令。到了2011年,ARM Cortex系列处理器都是基于ARMv7体系结构。

随着ARM处理器应用到移动设备之外的领域,ARMv7体系结构自身虽然具有一致性,依然分成三大类型:应用型A、实时型R和微控制器型M。

Cortex处理器迅速成为业界主流处理器。Cortex-A9处理器在Cortex-A8基础上研制的、支持SMP架构的、A型大处理器;而内部互连了嵌入式处理器ARM926的Cortex-A5处理器是低成本低功耗处理器方案。这些Cortex处理器拓展了ARM的很多新业务。2011年10月,Cortex-A7支持大小核提升能效管理,从而增强了电池使用寿命,已经成为智能手机入门级配置要求。

自从ARM引入ARMv7体系结构之后,随着软件生态和应用商店的发展,ARM体系结构的发展必须完全向后兼容。首先,新体系结构必须比先前体系结构有更大的优势;新体系结构还要支持先前体系结构上可运行的软件,即使该软件不使用任何新特性,也能正确运行在新体系结构之上。

一般说来,新体系结构都是在先前体系结构上增加新功能;然而,为了解决旧体系结构上的历史遗留错误,就会提出一个新的体系结构。这也是提出ARMv8体系结构的主要因素。

在最近几年,PC市场上已经有很多ARM处理器设备了。很多平板类设备都采用了Cortex-A9处理器,为各种主流PC用户提供低功耗方案;很多主流企业的设备和服务器为了提升单位功耗上的性能,也采用ARM处理器。

随着SoC集成度越来越高,亚纳米制造技术允许在一颗芯片封装内部集成很多功能模块。ARM设备性能越来越高,需要支持更多更复杂的应用软件,这些应用软件对内存的需求也越来越多;32位体系结构上的内存容量很可能不能满足这样的应用需求。

Cortex-A15处理器是遵循ARMv7体系结构,并引入了两个可选扩展功能来满足关键市场需求:大物理内存寻址扩展LPAE和虚拟化。为了在单一内存空间上集成更多设备,设备和设备之间的通信(共享内存)必须具有相同的地址映射。PC市场上的CPU和GPU具有不同的地址空间,与此不同的是,低功耗和低成本要求它们能共享内存空间。因此,LPAE就是一种解决方案;Cortex-A15支持一种新的页表格式,允许用4KB的页长度将多个32位虚拟地址空间映射最多到一个40位物理地址空间上。这种方案不仅解决了SoC高集成度与地址映射限制之间的矛盾,当前很多SoC设备都遇到地址映射限制;这种方案还解决了多个应用同时访问同一个设备的问题,与此同时针对最大访问4GB内存的应用,还不需要诸如硬盘的设备用于内存换出。绝大多数手机用户都不喜欢基于硬盘的内存换出方案。

Cortex-A15还引入了完整的虚拟化的硬件加速功能。虚拟化可以满足两个日益增长的需求:软件定义设备机制;分区机制,即将软件部署到可管理、独立的实体上。

既然ARMv7+LPAE可以突破4GB的限制,ARMv8又会带来什么优势呢?ARMv8是否需要支持全64位指令集体系结构和更大的虚拟地址空间呢?以当前ARM的市场来看,对大部分的应用而言4GB地址空间足够了。在定义新的体系结构时,ARM主要看重趋势。从商业发展来看,我们需要更长远的规划。ARMv8是ARM公司历史上经历的最大项目。创新和改变世界的能力是由软件来实现的。站在ARM角度,底层硬件平台就是赋能;ARM更重要的角色,就是赋能软件将体验和价值传递给消费者。

ARMv8体系结构的基础

此时,ARMv8体系结构还是围绕Cortex-A型处理器市场需求来定义的。ARMv7体系结构依然能够满足实时和微控制器市场上好几代的需求。事实上,Cortex-A15在扩展LPAE功能后,已经满足了A型处理器市场对“超32位”地址空间的需求。LPAE定义了一种页表格式,虚地址(这里仍然是32位的虚地址吗?)可以映射到40位物理地址空间上。我们也可以用一个更大虚拟和物理地址空间来满足上述应用需求。ARMv8定义了虚地址长度最大支持48位符号位扩展,物理地址长度最大支持48位;这样一来,ARMv8体系结构就能够最大地兼容Cortex-A15上运行的老软件。

ARMv8还定义了一个新的指令集A64;指令编码的设计目标之一就是,应用程序能够充分利用64位机。ARM引入了全新的指令集,没有通过扩展老指令集,从而支持64位体系结构;这主要基于几个方面的考虑。第一个显而易见的原因就是相比扩展老指令集,开发全新指令集可以实现更低的功耗设计。当然, ARMv8体系结构为了向前兼容而支持ARMv7机器上的老软件,但在运行全新的64位软件时,兼容ARMv7机器的硬件部件并没有被激活;这一点,与扩展老指令方式(在32位模式上简单扩展64位模式)实现的体系结构不同。新指令集借鉴了多年来不同微架构的开发经验,所以新处理器更容易实现低功耗操作的优化——从ARMv4机器(经典的低功耗ARMv7处理器就是在ARMv4基础上研发的)问世以来,这些优化开发经验自还没有真正实践过,这次正好可以在ARMv8上获得验证的机会。

全新ARMv8体系结构还优化了软件的异常模型,提高了硅片利用率,并进步一步降低了全系统的功耗。

显然,新的体系结构需要支持32位老软件。ARMv8体系结构只能在异常边界(即异常触发和异常响应之间的瞬时过程)上才能发生32/64位运行模式的切换;而在早期,传统ARM为了支持Thumb指令集,需要建立从传统ARMThumb的互连硬件部件。这样一来,ARMv8上的软件栈就是基于异常级(执行权限级)来构建了。

A64指令集

指令集A64定义了,每条指令长度固定为32位。对于硬件而言,最初的想法是延用早先的译码表,32位指令集和64位指令集可以共用一套译码器;但是这样的想法很快被摒弃了,因为这会导致操作数和立即数被迫分散在不连续的位域上,译码结构显得很凌乱。64位指令集采用全新译码表设计,不仅简化了译码表硬件设计,而且为JIT编译器提供了很重要的加速能力,这有助于web浏览器等应用领域的性能提升。全新设计的译码还有助于实现先进的分支预测技术。A64指令集增加了通用寄存器数量。Cortex-A9引入了虚拟重命名寄存器池化技术,硬件可以自动对小循环进行展开,但该技术并没有给编译器提供更多的可编程寄存器,主要考虑到可编程寄存器越多软件算法的实现就会越复杂。因此,A64指令集仅引入3164位通用寄存器。A64指令集在已有的指令集基础上进行了简化。对比ARM早期指令集,新的A64指令还删除了LDM/STM指令,这条指令耗时很长而且增加了内存系统实现的复杂度。考虑复杂度和性价比,A64指令集也减少了条件指令。

商用软件在使用浮点计算单元之前,一般都假定硬件浮点单元存在且有效,所以不会提前检测硬件浮点单元是否有效。因此,A64指令集提供了浮点计算指令。

A64指令集还提供了SIMD数据引擎指令集。SIMD提供了遵循IEEE754-2008标准的双精度数据计算指令。

异常级

AArch64的异常级和Cortex-A15处理器的一样,在操作系统内核态和TrustZone监控态之间增加了虚拟机监控HYP态。出于安全软件简单实现的考虑,安全世界依然只能支持一个操作系统实例。

异常层次结构还定义了32位操作模式和64位操作模式之间的切换的规则。当异常级提升时,操作模式的位宽要么保持,要么增大。当虚拟机监控HYP态为32位操作模式时,它是不可能支持64位的操作系统内核态的。

为了支持新型异常级模型,A64还引入了一个专门的异常链接寄存器ELR,在异常级入口该寄存器自动写入。如果从32位操作模式切换到64位操作模式,该寄存器的高32位会自动进行零扩展。在异常级入口,自动设置中断屏蔽。每个异常级都有自己的向量基地址寄存器,每个向量都对应到四种类型中的一个:同步、IRQFIQ或错误。每个向量都对应特定的触发异常原因,也可根据症状寄存器获得异常原因的详细信息。这样设计有一个特别有用的优点,就是支持IO设备虚拟化,即虚拟机一旦访问设备就会陷入到虚拟机监控态,虚拟机监控软件通过读取症状寄存器来获悉哪个操作被虚拟化了。

内存管理单元

在原理上,AArch64定义的内存管理单元和Cortex-A15的一样,增加了48位虚拟地址和物理地址支持。采用四级页表就能支持48位地址,这样的地址编码简化了硬件设计,还降低了验证的复杂度。实际上,AArch64支持4KB64KB两种最小页长度,如果采用42位地址长度方案,就只需要两级页表。

当然,32位的代码只能被限制在第一个4GB地址空间,硬件会自动用零扩展方式实现32位地址到64位地址转换。64位地址空间的虚拟地址分为三个地址范围:最底段地址范围(长度为232248字节)用于应用程序;最高段地址范围(长度为232248字节)用于操作系统内核;中间部分是空洞,参见上图。

Cortex-A15处理器中,ARMv8内存管理单元提供两阶段地址翻译:从应用虚拟地址VA,到中间物理地址IPA,然后再到内存总线的实际物理地址PA;虚拟机监控器负责IPAPA的地址翻译。IPAPA的地址长度实现为在32位到48位之间。

程序寄存器

汇编程序员或编译器开发者对A64指令集最大不同的感受是来自,30个通用寄存器。每个寄存器都是64位宽,寄存器名称为X0~X30;看上去是31个通用寄存器,但X30不是严格意义上的通用寄存器,而主要用作程序链接寄存器PLR

AArch32环境的每个操作状态都有一组专属的banked寄存器;与此不同,在AArch64中,只有堆栈指针寄存器SP,异常链接寄存器ELR和处理状态保存寄存器SPSRbanked寄存器,其他的寄存器都不是。与AArch32的当前处理器状态不同,AArch64PState分类相互独立访问,例如标志位NZCV,因此对寄存器中的某一位的读//修改几乎不需要用原子操作来实现。

X0-X7

X8-X5

X16-X23

X24-X30

0

R0

R8_usr

R14_irq

R8_fiq

1

R1

R9_usr

R13_irq

R9_fiq

2

R2

R10_usr

R14_svc

R10_fiq

3

R3

R11_usr

R13_svc

R11_fiq

4

R4

R12_usr

R14_abt

R12_fiq

5

R5

R13_usr

R13_abt

R13_fiq

6

R6

R14_usr

R14_und

R14_fiq

7

R7

R13_hyp

R13_und

No Register

因为64位和32位寄存器之间存在关联关系,即32位寄存器简单地映射到64位寄存器的低32位上,所以64OS或虚拟机监控软件可以支持32位代码的运行。

调试

ARMv7ARMv8调试架构使用的概念和原理是相同的。调试器可以直接发送指令给处理器去运行,处理器有其他通道可以提取已经执行过的指令。有两种侵入式调试方法:self-hosthaltARMv8调试与ARMv7设备中的调试类似,不同之处在于所有断点和观察点都已增长到64位地址长度,而且在调试状态下可直接执行的指令仅限于可用指令的一小部分。

然而,应该注意的是,halt调试视图与ARMv7目前支持的halt调试工具并不兼容,即使ARMv8处理器上仅运行32位代码;为了能正常调试ARMv8,必须更新调试器。但是对AArch32进行self-host调试不需要修改。

生态演变

显然,引入新指令集的主要挑战不是硬件开发,而是生态系统中工具和软件的迁移和支持。ARM拥有令人羡慕的生态系统,预计未来12个月将有100亿台ARM驱动的设备推向市场。

基于上述原因,ARM处理器要平滑支持现有32位软件,不能对生态系统造成冲击。只有部分核心软件才需要一开始就要基于A64指令进行扩展或修改;例如虚拟机监控器软件或安全监控器软件。Cortex-A15处理器首次引入了新硬件组件来提升虚拟化性能,例如Cortex-A15处理器支持了很多新的页表格式;因此,很多厂商可以接收虚拟机监控器软件的更新换代,而且已经开始进行了替换。

接下来需要考虑将操作系统升级为64位。ARMv8希望A型设备能够运行开源操作系统软件,这样的操作系统数量并不多。ARM及其合作伙伴已经工作数月,来扩展Linux和相关工具对64ARM的支持。在Linux上的工作包括相同文件系统同时支持32位和64位的应用程序。这也是一个可以实现的任务,因为大部分情况下的操作系统已经迁移到64位体系结构上了;所以迁移到64ARMv8也没什么风险。这样一来,绝大部分生态软件不需要修改。新的64位操作系统能够轻易高效地支持现存32位应用程序。另外,这样还能清晰地解决地址映射冲突问题和物理RAM限制问题。

如果应用对性能有要求,需要访问更大地址范围的RAM,或者需要获得更高效地执行,那么可以重新编译应用程序,如果有必要的话,可能需要将源代码移植到A64的指令集上。具体采用什么方案,还要看市场需求。

结束语

ARM为什么认为64位计算是趋势呢?下面我们从几个时间周期的角度来分析。从体系结构更新的时间周期来看,从某款芯片开始支持一个体系结构到符合该体系结构的最后一款设备之间,也就几年时间。在开源世界里,从Linux开始支持,到相关代码提交,最终进入生态圈,也需要花费几年时间。还存在设备开始生产制造到软件可用的过程,因此在芯片产品化之前就要将ARMv8体系结构公开并启动软件的移植工作。我们一边持续地做非常坚实的基础工作,包括制定规范,创建工具和模型,以及开展操作系统移植等;我们会有选择地公开新代码,或者提供新代码预览通道。然而,对于一些感兴趣的议题,我们会提供规范文档的预览通道,这样就能就技术进行公开讨论,我们也会回答讨论中的问题。

除非您是操作系统厂商或者虚拟机监控器软件厂商,现在你只需要考虑你们未来是否需要64位计算,其他的都不需要考虑。

当前,基于ARMv8体系结构研发处理器的工作主要是ARM及其关键伙伴来完成。面向各种市场领域,一些是新伙伴,一些是老伙伴;但一件事非常确定,未来不断向前发展,有了ARM您就拥有了任何技术中最大的支持和生态系统,随时可以支持任何需要的变革。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1361004.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

每天一杯羊奶,让身体更健康

每天一杯羊奶,让身体更健康 羊奶作为一种天然的健康饮品,越来越受到人们的关注和喜爱。它不仅口感醇厚,营养丰富,而且具有独特的保健功效。今天,小编羊大师带大家详细介绍一下每天喝一杯羊奶对身体的好处。 羊奶中的…

首发!全志T527第一款核心板,高性能8核处理器带AI NPU

今天,米尔电子联合战略合作伙伴全志科技,隆重发布第一款T527核心板及开发板。基于全志T527高性能可选AI功能MPU,配备八核A55高性能处理器,RISC-V协处理器,支持2Tops NPU,满足边缘智能AI加速应用&#xff1b…

“奶茶妹妹”章泽天被曝生双胞胎,偷拍照流出

♥ 为方便您进行讨论和分享,同时也为能带给您不一样的参与感。请您在阅读本文之前,点击一下“关注”,非常感谢您的支持! 文|猴哥聊娱乐 编辑|侯欢庭 去年九月的某一天,一位网友在国外的一家商场偶遇了章泽天和刘强东…

QT5.14 实现ModbusTCP客户端 Demo

本文在QT5.14平台,基于QModbusClientTcp类,实现了客户端对单个寄存器的读写,用ModbusSlave做服务器做测试。 1.界面 (1)更改读按钮的名称为bt_Read (2)更改写按钮的名称为bt_Write 2.修改pro文件的第三行 greaterThan(QT_MAJOR_VERSION, 4)…

13. 强化学习编程实验1-在格子世界中寻宝(1)

文章目录 1.实验目的2.任务描述3.任务分析3.1 待求问题是多步决策问题否3.2 问题求解过程是一个马尔科夫决策过程3.3 状态空间S的确定3.4 动作空间A的确定3.5 状态转移概率P的确定3.6 立即回报R的确定3.7 折扣 γ \gamma γ的确定 4. 编程架构4.1 程序中有哪些对象和类4.2 环境…

网络摄像机的网络连接

网络摄像机的网络连接 1. 网络连接2. 网络直通线和网络交叉线的制作方法References 1. 网络连接 网络摄像机完成安装后,需要进行功能的配置及参数的设置,您可以通过浏览器进行相关功能的配置。 有线网络连接 左侧为通过网络直通线连接的示意图&#x…

注水算法—功率分配

最近一直在学习一位学姐的知乎文章,文章链接放到下面了。 无线通信多用户MISO系统的发射功率最小化问题 这里面涉及到了注水算法,为了学习的更明白,写这篇博客方便以后能快速记起,如果内容有问题的地方,欢迎在评论区…

ref hook之useRef

一、useRef useRef函数: 1.一个参数:默认值 2.返回一个固定的对象(对象的地址是不会变化的),{current: 值} import React, { useState } from reactexport default function App() {const inpRef React.createRef(…

深入理解Vue3中的自定义指令

Vue3是一个流行的前端框架,它引入了许多新特性和改进,其中之一是自定义指令。自定义指令是一种强大的功能,可以让开发者在模板中直接操作 DOM 元素。本文将深入探讨 Vue3中的自定义指令,包括自定义指令的基本用法、生命周期钩子函…

C#,归并排序算法(Merge Sort Algorithm)的源代码及数据可视化

归并排序 归并算法采用非常经典的分治策略,每次把序列分成n/2的长度,将问题分解成小问题,由复杂变简单。 因为使用了递归算法,不能用于大数据的排序。 核心代码: using System; using System.Text; using System.Co…

用友U8 Cloud smartweb2.RPC.d XML外部实体注入漏洞

产品介绍 用友U8cloud是用友推出的新一代云ERP,主要聚焦成长型、创新型、集团型企业,提供企业级云ERP整体解决方案。它包含ERP的各项应用,包括iUAP、财务会计、iUFO cloud、供应链与质量管理、人力资源、生产制造、管理会计、资产管理&#…

PHPStudy快速搭建网站并结合内网穿透远程访问本地站点

文章目录 [toc]使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点,测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中,查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2…

第九节HarmonyOS 常用基础组件6-progress

1、描述 进度条组件用于显示内容加载或操作处理等进度。 2、接口 Progress(options:{value:number,total?Number, type?:ProgressType}) 参数: 参数名 参数类型 必填 参数描述 value number 是 指定当前进度值。设置小于0的数值时置为0,设置…

AWTK 开源串口屏开发(5) - MCU端 SDK 用法

AWTK 开源智能串口屏,不但开放了串口屏端全部源码,还提供了MCU 端 SDK,大大加快 MCU 软件的开发。本介绍一下 MCU 端 SDK 在不同平台上的用法。 完整示例可以参考下面的几个例子: 普通嵌入式系统 mcu/stm32/hmi_app/hmi_app.c 低…

java基于ssm框架的校园闲置物品交易平台论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本校园闲置物品交易平台就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据…

30、共空间模式CSP与白化矩阵

CSP算法和PCA降维都涉及到了白化,那白化的目的和作用到底是啥呢? 矩阵白化目的: 对于任意一个矩阵X,对其求协方差,得到的协方差矩阵cov(X)并不一定是一个单位阵。 下面介绍几个线代矩阵的几个概念: 1、…

小微企业在银行信贷相关产品和机器学习建模案例_论文科研_企业调研

各银行小微企业贷款业务 互联网的时代,大量新信息技术的涌现和网络的无处不在,想要抢占这片金融天地,必须重视小微金融业务,小微企业是一直具有重大潜力的客户,商业银行、消金公司发展小微信贷业务可以拓宽自身客户群…

数据结构OJ实验14-哈希查找

A. DS哈希查找—线性探测再散列 题目描述 定义哈希函数为H(key) key%11,输入表长(大于、等于11)。输入关键字集合,用线性探测再散列构建哈希表,并查找给定关键字。 输入 测试次数t 每组测试数据为: …

无心剑七绝《未晚斋》

七绝未晚斋 倏忽半世莫伤怀 醉爱夕阳未晚斋 汉韵唐风情不尽 东华曼舞咏云台 2024年1月6日 新韵四开平韵 《未晚斋》这首诗,作者无心剑以其独特的笔触,描绘出了一幅宁静、淡雅的画面。诗中表达了对生活的热爱和对美好时光的珍惜。 首句“倏忽半世莫伤…

解决Gitlab Prometheus导致的磁盘空间不足问题

解决Gitlab Prometheus导致的磁盘空间不足问题 用docker搭建了一个gitlab服务,已经建立了多个项目上传,但是突然有一天就503了。 df -TH查看系统盘,发现已经Used 100%爆满了。。。 💡Tips:/dev/vda1目录是系统盘目录。…