ARM架构介绍

2023-11-02

概览

Arm 架构为处理器或内核(称为处理单元PE)的设计提供了基础。

Arm架构已经集成到许多片上系统 (SoC) 设备中,比如智能手机、微型计算机、嵌入式设备、服务器甚至超级计算机。

Arm架构为软件开发人员提供了通用指令集和工作流程,也称为编程模型。这保证ARM架构的不同实现之间的互操作性,以便软件可以在不同的 Arm 设备上运行。

关于ARM架构

Arm架构是世界上最流行的处理器架构之一,每年有数十亿台基于 Arm架构的设备出货。

下表描述了ARM的三种系列架构:A,R,M。

A系列(应用) R系列(实时) M系列(微控制器)
高性能 针对有实时要求的系统 小型、高能效设备
设计用于运行复杂的操作系统,例如 Linux 或 Windows 网络设备和嵌入式控制系统 物联网设备

这三个系列允许 Arm 架构根据不同的需求进行定制,同时仍然有一些共性。

下图展示了基于 Arm 系统的示例。

关于ARM架构

这个智能手机的例子包括以下处理器类型:

  • A‑profile 处理器作为主CPU,运行Android 等丰富的操作系统
  • 基于R-profile处理的蜂窝调制解调器,提供网络连接
  • 多个M系列处理器,用于处理系统电源管理等操作
  • SIM卡使用SecurCore,这是一款具有附加安全功能的M系列处理器。SecurCore 处理器通常用于智能卡。

在本篇指南中,我们只关注A系列架构的两个最新版本:Armv8-A和Armv9-A 。

什么是架构?

当提及术语架构时,我们指的是功能规范。但就 Arm 架构而言,指的是处理器的功能规范。架构指定处理器的行为方式,例如它有哪些指令以及这些指令的作用。

你可以认为架构是硬件和软件之间的契约。该架构描述了软件可以依赖硬件来提供哪些功能。正如我们在架构和微架构中解释的那样,某些功能是可选的。 该架构指定:

项目 描述
指令集 每条指令的功能;指令在内存在内存中如何表示(编码)
寄存器组 有多少个寄存器;寄存器的大小;寄存器的功能;初始状态
异常模型 不同级别的特权;异常的类型;发生异常或者从异常返回会发生什么
内存模型 内存访问的顺序如何;缓存的行为方式、软件必须何时以及如何执行显式维护
调试、跟踪和分析 如何设置和触发断点;跟踪工具可以捕获哪些信息以及以什么格式捕获

系统架构

系统不只是包含处理器核心。ARM还提供了规范来描述处理器系统的要求,如下图所示。

ARM架构的发展

规范是软件兼容性的基础。根据规范构建硬件意味着可以编写与之匹配的软件。按照规范编写软件意味着它可以在兼容的硬件上运行。ARM架构是第一层,其通过指令集架构(ISA)兼容性为软件提供通用编程模型。

基本系统架构(BSA)规范描述了系统软件可以依赖的硬件系统架构。 BSA 涵盖处理器和系统架构的各个方面,
例如中断控制器、定时器和操作系统所需的其他常见设备。这为标准操作系统、虚拟机管理程序和固件提供了可
靠的平台。

BSA 广泛适用于不同的市场和场景。其他标准可以建立在 BSA 的基础上,为特定市场提供标准。例如,服务器基础系统架构(SBSA)是针对服务器BSA 的补充。 SBSA 描述了服务器操作系统的硬件和功能要求。该规范是一套文档,随着 CPU 架构的发展,越来越详细地记录硬件功能。

基本启动需求 (BBR) 规范涵盖了操作系统和虚拟机管理程序可以依赖的系统要求。该规范创建了固件接口要求,例如 PSCI、SMCCC、UEFI、ACPI 和 SMBIOS。

BBR还提供了针对特定用例的方法,如下。

  • SBBR:提出用于启动通用的和现有的操作系统和虚拟机的UEFI、ACPI 和 SMBIOS 要求,如Windows,VMware,RHEL,Oracle Linux和Amazon Linux。SBSR还支持其他操作系统,如 Debian、Fedora、CentOS、SLES、Ubuntu、openSUSE、FreeBSD 和 NetBSD。
  • EBBR:与 EBBR 规范一起指定 UEFI 启动通用、现有操作系统的要求,如Debian、Fedora、Ubuntu、openSUSE,并为垂直集成的操作系统平台提供优势。
  • LBBR:指定 LinuxBoot 固件的潜在要求,以便启动超大规模应用程序使用。

架构和微架构

架构不会告诉您处理器是如何构建的或者它是如何工作的。处理器的构建和设计称为微架构。微架构会告诉您处理器是如何工作的。

微架构包括:

  • 流水线速度和布局
  • cache的个数和大小
  • 各个指令集的周期
  • 实施了哪些可选功能

例如,Cortex‑A53和Cortex‑A72都是Armv8‑A架构的实现。这意味着它们具有相同的架构,但它们的微架构却截然不同,如下图和表格所示:

ARM Cortex-A53 A72芯片

架构 Cortex-A53 Cortex-A72
目标 针对电源效率进行优化 针对性能进行优化
流水线 5级流水线、有序 15+级流水线、乱序
Cache L1 I cache:8KB-64KB
L1 D cache:8KB-64KB
L2 cache: 可选,最大2MB
L1 I cache:固定48KB
L1 D cache:固定32KB
L2 cache: 强制,最大2MB

架构上兼容的软件可以在 Cortex‑A53 或 Cortex‑A72 上运行,而无需修改。这是因为它们都实现相同的架构。

ARM架构的开发

Arm 架构随着时间的推移不断发展,每个版本都建立在之前的基础上。

您通常会看到这样的架构:

Armv8-A

这意味着A系列架构的第8个版本。

或者,简而言之:

v8-A

Armv8-A

Armv8‑A 于 2011 年发布,是 Arm 架构的第一个 64 位版本。基于 Armv8‑A 的设备已部署在从手机到超级计算机的各种设备中。

Armv9-A

Armv9‑A 是 A系列架构的最新版本。 Armv9‑A 基于 Armv8‑A 构建并添加了新功能,包括:

  • 可伸缩矢量扩展,版本 2 (SVE2)
  • 事务内存扩展(TME)
  • 分支记录缓冲区扩展(BRBE)
  • 内嵌跟踪扩展(ETE)
  • 跟踪缓冲区扩展(TRBE)

另外,Armv8‑A 中的一些可选功能在 Armv9‑A 中是强制性的。

年度迭代升级

Arm 每年都会发布架构更新,添加新的指令和功能。 Armv9.0‑A 与 Armv8.5‑A 保持一致,继承了 Armv8.5‑A 的所有功能并添加了新功能。 Armv9‑A首次发布后,Armv8‑A和Armv9‑A一起更新。 Arm将布Armv9‑A的新功能,并将继续更新和维护Armv8‑A。下图显示了并行版本:

ARM发布版本

您可以在Understanding the Armv8.x extensions中找到有关每次年度更新中添加内容的更多信息。

其他ARM架构

Arm 架构是最著名的 Arm 规范,但并不是唯一的规范。 Arm 对于构成当今片上系统 (SoC) 的许多组件都有类似的规范。

互连图

  • 通用中断控制器:通用中断控制器(GIC) 规范是与Armv7‑A/R 和Armv8‑A/R 配合使用的标准化中断控制器。

  • 系统内存管理单元:系统内存管理单元(SMMU 或有时是IOMMU)为非处理器主机提供转换服务。

  • 通用定时器:通用定时器为所有定时器提供通用参考系统计数。这些计时器用于操作系统调度程序滴答计数等功能。通用定时器是 Arm 架构的一部分,但系统计数器是系统组件。

  • 服务器基础系统架构和可信基础系统架构:服务器基础系统架构(SBSA) 和可信基础系统架构(TBSA) 为SoC 开发人员提供系统设计指南。

  • 先进微控制器总线架构:先进微控制器总线架构(AMBA)总线协议系列定义控制基于 Arm 系统中组件的连接方式以及这些连接上的协议 。

了解ARM文档

Arm 为开发人员提供了大量文档。在本指南的这一部分中,我们将解释在哪里可以找到有关在 Arm 上进行开发的文档和其他信息。

文档在哪里

你可以从Arm developer website下载ARM架构和处理器手册。

您可以提出开发问题,并查找Arm community中 Arm 专家针对特定主题的文章和博客。

哪个文档描述了什么

以下是不同类型文档的简短描述:

  • 每份Arm 架构参考手册都描述了一个架构规范。Arm 架构参考手册与该架构的实现相关。
  • 每个Arm Cortex 处理器都有一份技术参考手册(TRM)。 TRM描述了该处理器特有的功能。一般来说,TRM不会重复Arm架构参考手册中给出的任何信息。
  • 每个Arm Cortex 处理器还具有配置和集成手册(CIM)。 CIM 描述了如何将处理器集成到系统中。一般来说,此信息仅与 SoC 设计人员相关。

那么,这对我意味着什么

如果您正在寻找有关某个处理器的信息,可能需要参考几个不同的文档。如果你打算使用Cortex‑A75 处理器,以下可能是你需要的各种文档:

架构文档

Cortex‑A75 实现了 ARMv8.2‑A、GICv4 CPU 接口和 AMBA 总线接口,因此你必须参考每部分的单独文档。你还必须参考微架构的相关文档。

如果使用现有的SoC,你必须参考SoC制造商提供的文档,通常是以datasheet的形式,其给出的信息只针对该SoC。

我可以从每个文档中获取什么信息

下表展示了在不同类型文档中可以获取到的信息(X表示具有)。

- 架构 - - 微架构 微架构 -
Arm架构参考手册 GIC规范 AMBA规范 TRM CIM SoC Datasheet
指令集 X
指令周期时序 X
架构寄存器 X X
处理器寄存器 X
内存模型 X
异常模型 X
可选功能 X X(有些是一起选)
cache/TLB大小 X
电源管理 X
总线接口 X X
所有合法总线事务 X
处理器生成的总线事务 X
内存表 X
外设 X
SoC引脚排列 X

参考手册和用户指南之间的差异

目前为止,我们查看的文档(Arm 架构参考手册、TRM 和 CIM)都是参考手册。这意味着他们不提供有关处理器的使用指南。例如,Arm 架构参考手册中没有关于如何打开 MMU的说明。

这种结构是经过深思熟虑的,这是为了在参考手册中找到架构所需的技术细节与提供更一般指导的文档(例如
本指南)之间保持清晰的界限。一般性指导文档将介绍概念,而其他文档则提供您需要遵循的说明。

常用架构术语

该架构使用了几个术语,通常在文档中以小写字母书写,它们具有非常具体的含义。 Arm 架构参考手册定义了每个术语。在本节中,我们将介绍最常见的术语,并为编程者提供需要的附加信息。

PE处理单元

处理单元(PE)是 Arm 架构实现的通用术语。您可以将 PE 视为具备程序计数器并可以执行程序的任何东西。例如,Arm 架构参考手册指出:

决定 PE 如何运行的状态,包括当前的异常级别和安全状态,以及在 AArch32 状态下的 PE 模式。

手册使用通用术语PE,因为有不同的微架构。例如,Arm Cortex‑A 处理器 可以采用下面的微架构:

  • Cortex‑A8 是单核、单线程处理器,整个处理器就是一个PE。
  • Cortex‑A53 是一个多核处理器,每个核心都是一个线程。每个核心都是一个PE。
  • Cortex‑A65AE 是多核处理器,每个核心有两个线程。每个线程都是一个PE。

通过使用术语 PE,架构与不同处理器中的设计决策保持分离开。

IMPLEMENTATION DEFINED

实施定义(简称IMP DEF)的功能是由特定的微架构定义的。实现必须呈现一致的行为或值。

例如,缓存的大小是IMP DEF。该架构为软件提供了一种定义的机制来查询缓存大小,但缓存的大小取决于处理器设计者。

同样,对密码指令的支持是 IMP DEF。同样,有寄存器允许软件确定指令是否存在。

在这两个示例中,选择都是静态的。也就是说,给定的处理器要么支持,要么不支持这些功能和指令。该功能不能在运行时更改支持。

对于 Cortex‑A 处理器,一些 IMP DEF 选择将被修复,一些将是综合选项。例如,在 Cortex‑A57 上,L1 缓存的大小是固定的,L2 缓存的大小是综合选项。然而,L2 缓存的大小是在设计时决定的。它在运行时仍然是静态的。

IMP DEF 选项的完整详细信息记录在处理器的技术参考手册 (TRM) 中。

UNPREDICTABLE and CONSTRAINED UNPREDICTABLE

UNPREDICTABLE 和CONSTRAINED UNPREDICTABLE用于描述软件不应该做的事情。

当某些事情不可预测或受约束不可预测时,软件不能依赖处理器的行为。如果软件多次执行非法操作,处理器也可能表现出不同的行为。

例如,提供未对⻬的转换表是受限且不可预测的。这代表了糟糕的软件。糟糕的软件意味着违反翻译表应遵守的架构规则。

与 IMP DEF 行为不同,技术参考手册 (TRM) 通常不会描述所有不可预测的行为。

Deprecated

有时我们会从架构中删除某个功能。发生这种情况的原因有多种,例如性能或因为该功能不再常用且没有必要。但是,可能仍然有一些旧版软件依赖于该功能。

因此,在完全删除某个功能之前,我们首先将其标记为“已弃用”。例如,Arm 架构参考手册指出:

出于性能原因,不推荐使用IT指令以及CP15DMB、 CP15DSB和CP151SB屏障指令。

DEPRECATED 是向开发人员发出的警告:某个功能将来会被删除,他们应该开始从代码中删除它。

通常,一个控件会同时添加到架构中,从而允许禁用该功能。该控件允许开发人员测试遗留代码中该功能的使用情况。

RES0和RES1

RES0表示保留,应为零。 RES1表示Reserved,应该是1。

RES0和RES1用于描述未使用且对处理器功能没有影响的字段。

保留字段可能会在架构的某些未来版本中使用。在这种情况下, RES0/ RES1 字段值如果为 1 将表示新的行为。

RES0字段并不总是读取为 0,RES1 字段也不总是读取为 1。RES0和RES1 仅告诉您该字段未使用。

有时RES0和 RES1 字段必须是有状态的。有状态意味着该字段读到的是最后写入的值。

检查你学的知识

以下问题将帮助您检查您所学的知识:

  1. 如果您在某个文档中看到 Armv7‑R,指的是该架构的哪个版本和系列?

    版本7,R系列

  2. 在哪个版本的 Arm 架构中,A系列添加了对于 64 位的支持?

版本8(Armv8-A)

  1. 指令编码、cache大小和内存序这三项分别是架构还是微架构?

    • 指令编码:架构
    • cache大小:微架构
    • 内存序:架构
  2. 什么是PE

    PE 是一个处理单元:实现 Arm 架构的machine。

相关信息

以下是与本指南中相关的一些资源:

其他Arm架构

后续步骤

本指南介绍了 Arm 架构的基本原理、它是如何发展的、它的系列及其应用。这些知识有助于为您进一步了解 Arm 技术奠定基础。

我们讨论了一些对于理解 Arm 架构至关重要的常见术语和概念,以及 Arm 架构的不同系列。我们描述了架构、系统架构和微架构的功能,以及 Arm 架构术语和概念是如何出现在 Arm 架构参考手册和其他 Arm 文档和资源中。我们还了解了 Arm 架构和其他 Arm 架构的不同系列。

本系列中的其他指南详细介绍了 Arm 架构的各个方面,并提供了示例和说明。

要继续了解 Arm 架构,请参阅我们的Learn the Architecture series of guides

欢迎关注“安全有理”微信公众号。

安全有理

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ARM架构介绍 的相关文章

  • 为什么推荐编程初学者学习C(C++)/Python?

    人类走进信息化时代 掌握计算机编程是一项不错的技能 培养逻辑思维 解决现实中实际问题的能力 学会将计算机作为人类思想和能力的延展性工具 计算机行业寒冬 但AI和互联网仍然是未来发展的大趋势 学习C语言和Python的区别在哪 为什么选这俩

随机推荐

  • (CVPR2019)图像语义分割(18) DANet-集成双路注意力机制的场景分割网络

    论文地址 Dual Attention Network for Scene Segmentation 工程地址 github链接 1 介绍 该论文提出新型的场景分割网络DANet 利用自注意力机制进行丰富语义信息的捕获 在带有空洞卷积的FC
  • 详解BGP 双平面

    拓扑描述 上平面为A 面 AS1 下平面为B 面 AS2 左边用户群 AS3 右边用户群 AS4 组成两个平面的原因 两个城市之间的数据交互 分为业务流量和办公流量 于此同时 希望业务流量走 上面 办公流量走下面 流量的组成会很清晰 同时两
  • 用windows系统做服务器配置,windows系统做服务器配置

    windows系统做服务器配置 内容精选 换一换 迁移前 您需要设置目的端服务器 该目的端用来接收源端的数据 同时您也可以使用该目的端进行迁移测试和启动目的端 只有 迁移阶段 gt 迁移实时状态 为时才可设置目的端 进入 主机迁移服务 页面
  • Windows10神州网信政府版的配置修改

    Windows10神州网信政府版初始安装完成后 在有些界面上呈现 某些设置已隐藏或由你的组织管理 这就意味着有很多属性并不能由使用者修改 这对用户来说很不不方便 下面是经常用到的一些属性修改 1 修改屏幕保护属性 按Win键 R键调出运行框
  • 排序算法之分治排序

    归并排序是基于分治法实现的 归并排序将待排序的元素序列分为两个长度相等的子序列 为每一个子序列排序 然后再将它们合并成一个序列 合并两个子序列的过程称为两路归并 在执行两路归并算法时 先把待归并元素序列L1复制到辅助数组L2中 再从L2归并
  • Selenium隐藏浏览器特征

    Selenium隐藏浏览器特征 Selenium特征 1 CDP 2 stealth min js 3 undetected chromedriver 4 操作已开启的浏览器 4 常见的隐藏Selenium特征的方法 4 1 修改navig
  • hadoop集群优化(四):开启历史任务服务器

    文章目录 说明 分享 操作 修改配置 同步配置 启动历史服务器 查看jobHistory 总结 说明 hadoop支持历史服务器功能 默认关闭 开启后 通过web可查看完成运行的MapReduce做的的信息记录 如Map和Reduce使用情
  • Python进阶学习(一)

    背景 在编程语言的大背景下 Python普遍被认为是一门易上手的脚本语言 而随着Python的应用越来越广泛 仅仅停留在会跑Python程序是不够的 本篇专栏主要记录一些高阶的用法以及Python语言的一些机制 Python语言掌握需要具备
  • matlab改进秃鹰算法IBES 可直接运行 包括23个测试函数 提供与原算法对比~Matlab

    文章目录 效果一览 文章概述 部分源码 参考资料 效果一览 文章概述 matlab改进秃鹰算法IBES 可直接运行 包括23个测试函数 提供与原算法对比 Matlab 部分源码 清空环境变量 warning off 关闭报警信息 close
  • 威联通qnap SMB速度慢 只有30M、50M的解决方法

    首先 保证NAS与电脑处于千兆以上的局域网中 其次 然后就没有然后了 mmp 研究了一晚上 客服一问三不知 补充一下 有可能这个方法改完无效 这时候你先把 限制匿名用户访问 选择启动 默认是启动严格 然后把否决文件再勾上 然后再取消掉 目前
  • GESP C++ 四级样题卷

    一 单选题 每题 2 分 共 30 分 1 在 C 中 指针变量的大小 单位 字节 是 A 2 B 4 C 8 D 与编译器有关 答案 D 解析 在大多数现代的 32 bit 和 64 bit 的 C 编译器中 指针变量的大小通常是 4 字
  • iOS进阶—Runtime源码解析:动态方法解析

    GitHub参考 PS 参考GitHub分享的objc runtime master代码 及Runtime003代码 iOS进阶 目录 接上文iOS进阶 Runtime源码解析 消息发送 查看Runtime源码 No implementat
  • JS 统计字符串

    function getLength val var str new String val var bytesCount 0 for var i 0 n str length i lt n i var c str charCodeAt i
  • 用watch监听this.$store数据的变化

    如监听this store state username的值 在watch对象中写 watch store state username 你需要执行的代码
  • ES版本升级后出现Trying to create too many scroll contexts. Must be less than or equal to: [500]异常

    从一个异常说起 I O dispatcher 79 WARN RestClient request POST http xx xx xxx xxx 8080 index search scroll 600s returned 1 warni
  • C++13-STL模板-栈stack

    C 13 STL模板 栈stack 在线练习 http noi openjudge cn https www luogu com cn 大纲要求 3 算法模板库中的函数 min max swap sort 4 栈 stack 队列 queu
  • 在线代理检测网站

    20210203 很久之前 写代理的代码的时候 记录过几个测试代理的网站 后来也就直接放在书签里吃灰了 这里直接把这个几个网站记录在这里 http www xdaili cn monitor http proxies site digger
  • C++封装篇 类对象的定义

    1 对象的实例化 在c 中类是一个模板 对象的实例化其实就是计算机根据一个类的设计制造出多个对象的过程 对象实例化有两种方式 从栈实例化 从堆实例化 2 从栈实例化 class TV public char name 20 电视机的铭牌 i
  • 完整的模糊推理系统介绍以及matlab中从零实现(下篇)

    模糊推理系统从零实现 在完整的模糊推理系统介绍以及matlab中从零实现 上篇 中 我们对一个完整的模糊推理系统所涉及到的知识点做了一个细致地展述 进而 我们可以根据实际需要设计一个属于自己的模糊推理系统 主要涉及到以下几个方面的参数设置
  • ARM架构介绍

    概览 Arm 架构为处 器或内核 称为处 单元PE 的设计提供了基础 Arm架构已经集成到许多片上系统 SoC 设备中 比如智能手机 微型计算机 嵌入式设备 服务器甚至超级计算机 Arm架构为软件开发人员提供了通用指令集和工作流程 也称为编