DP の読み方: Kunpeng プロセッサのアーキテクチャとプログラミング (7) ARMv8-A アーキテクチャ


みなさん、こんにちは。私は DP です。最近プロセッサとサーバーの勉強を始めた初心者です。以下は、 Kunpeng プロセッサ アーキテクチャと ARMv8-A アーキテクチャのプログラミングの第 2 章を 読んでいるときのメモです。このアーキテクチャについての理解を深めていただければ幸いです。これは非常に低レベルの原則であり、多くのクラウド ネイティブ サーバーの基礎となるアーキテクチャでもあります。 ARM-ARMv8-A

1. ARMv8-A プロセッシング ユニット コア アーキテクチャ

2011 年 11 月、ARM は64 ビット命令セットをサポートする最初の新世代 ARMv8 プロセッサアーキテクチャをリリースし、一連の新機能を導入しました。これは、ARM がサーバー プロセッサ市場に参入するための技術的基盤となりました。
ARM は 2013 年以降、ARMv8 プロセッサ アーキテクチャの標準ドキュメント「ARM アーキテクチャ リファレンス マニュアル ARMv8: ARMv8-A アーキテクチャの説明(ARM ®アーキテクチャ リファレンス マニュアル ARMv8、ARMv8-A アーキテクチャ プロファイル用)」を順次リリースしてきました。 Arm ARM (以下、「 ARMv8-A アーキテクチャ仕様」と呼びます) については、このドキュメントの最新バージョン (記事作成時点) は 2023 年 6 月 30 日にリリースされました (Ja-02) ARM 公式 Web サイトのリンク

ARMv8-A アーキテクチャは 64 ビット プロセッサ アーキテクチャに属しており、ARMv7 との下位互換性があり、もちろん ARMv9 (リリースされてから 12 年も経っています) とも下位互換性があります。 ARMv8-A アーキテクチャは、引き続き ARMv7 アーキテクチャの 32 ビット A32 をサポートします。命令セット (以前は ARM 命令セットとして知られていました) は、 ARMv7 アーキテクチャのTrustZone テクノロジ、仮想化テクノロジ、および拡張SIMD (Neon)テクノロジのすべての機能を保持しています。 。ただし、A64 命令セットは、元の 32 ビット A32 命令セットをベースに直接追加された 64 ビット拡張テクノロジではなく、複雑さを軽減し、効率を向上させるために、ARMv8-A アーキテクチャ プロセッサが 64 ビット命令を実行する場合に使用されます。の場合、32 ビット命令は [動作を停止] になり、プロセッサが低消費電力状態で 64 ビットの計算を完了できるようになります。

1. ARMv8-A アーキテクチャのプロセッサ動作モード

ARMv8-A アーキテクチャでは、AArch64 (64 ビット ARM アーキテクチャ)、AArch32 (32 ビット ARM アーキテクチャ) の2 つの実行状態 (実行状態)が導入されています。

新しく導入された 64 ビット プロセッサ アーキテクチャ AArch64 は、64 ビット汎用レジスタ、64 ビット SP (スタック ポインタ) および 64 ビット PC (プログラム カウンタ) をサポートし、64 ビット データ処理と拡張仮想アドレスを可能にします。64 ビット A64 命令セットでも 32 ビット A32 命令セットでも、命令長は 32 ビット (4 バイト) です。プログラマの観点からは、レジスタ内のビット数のみが異なります。

AArch64 と AArch32 の両方の実行状態は、SIMD (単一命令複数日付、単一命令ストリーム、複数データ ストリーム)および浮動小数点演算命令をサポートします。また、拡張 SIMD 命令と浮動小数点演算命令は、**SIMD および浮動小数点レジスタ (SIMD&FP Register)** 上で動作できます。

AArch32 実行状態では、基本命令セット (ベース命令セット、拡張 SIMD 命令と浮動小数点命令を除く) の SIMD 命令は 32 ビット汎用レジスタ上で動作できます。

支持
支持
操作
支持
操作
AArch64 (64位ARM体系结构)
AArch32 (32位ARM体系结构)
SIMD指令集
浮点运算指令集
SIMD和FP寄存器
基本指令集

a. ARMv8-A 実行アーキテクチャ

A. AArch64 の実行ステータス

AArch64 実行状態は、ARMv8-A アーキテクチャで導入された 64 ビット実行状態です。ARM プロセッサのパフォーマンスとコード密度が向上します。

AArch64 実行状態では、ARMv8-A プロセッサは、より多くのレジスタ、より豊富なオペランド タイプ、およびより複雑な命令パイプラインを含む 64 ビット命令セットを使用できます。以前の 32 ビット ARM 実装状態 (AArch32) と比較して、AArch64 には次の機能があります。

1. 64 位寻址和数据处理:AArch64 执行状态支持 64 位寻址和数据处理能力,可以处理更大的地址空间和更大的数据。

2. 更多的通用寄存器:AArch64 提供了更多的通用寄存器,从 16 个增加到 31 个,这样可以提供更多的寄存器用于保存临时变量和计算结果,减少了内存访问次数,提高了性能。

3. 扩展指令集:AArch64 引入了新的指令集扩展,如 SIMD(Single Instruction, Multiple Data)和浮点指令集扩展,提供了更高效的并行计算能力和更强大的浮点运算能力。

4. 更好的代码密度:AArch64 的指令编码更为紧凑,能够在相同的指令数量下执行更多的操作,从而提高了代码密度,减少了存储空间的占用。

ARMv8-A アーキテクチャに AArch64 実行状態が導入されたことで、ARM プロセッサはより複雑で計算量の多いタスクを処理できるようになり、以前の 32 ビット ARM アプリケーションとの互換性を維持しながら、より高いパフォーマンスと電力効率を実現できます。このため、ARMv8-A プロセッサはモバイル デバイス、サーバー、モノのインターネットなどのさまざまな分野で広く使用されています。

64位寻址和数据处理
更多的通用寄存器
扩展指令集
更好的代码密度
AArch64 (64位ARM体系结构)
64位寻址和数据处理方式
31个通用寄存器
SIMD和浮点指令集扩展
更紧凑的指令编码

B. AArch32 の実行ステータス

AArch32 実行状態は、ARMv8-A アーキテクチャの 32 ビット実行状態です。これは、下位互換性のために ARMv8-A アーキテクチャによって保持されている古い 32 ビット実行状態です。

AArch32 実行状態では、ARMv8-A プロセッサは、以前の ARMv7-A アーキテクチャとの互換性を維持しながら、32 ビット命令セットを使用してアプリケーションを実行できます。AArch32 の実行状態には次の特徴があります。

1. 32 位寻址和数据处理:AArch32 执行状态使用 32 位地址和数据处理方式,与之前的 ARMv7-A 架构相同。它可以处理较小的地址空间和较小的数据类型。

2. 通用寄存器和指令集:AArch32 执行状态提供了 16 个通用寄存器,每个寄存器都是 32 位宽度。指令集包括 ARM 和 Thumb-2 指令集,其中 Thumb-2 是一种指令集压缩技术,可以提高代码密度。

3. 兼容性:AArch32 执行状态兼容以前基于 ARMv7-A 架构的软件和操作系统。这意味着现有的 32 位 ARM 应用程序可以在 ARMv8-A 架构上继续运行,而无需进行重写或修改。

AArch32 実行状態は、主にレガシー 32 ビット ARM アプリケーションを実行して下位互換性を確保するために使用されます。ARMv8-A アーキテクチャでは、より高性能な 64 ビット アプリケーションをサポートするために AArch64 実行状態が導入されましたが、AArch32 は依然として多くの組み込みシステムやモバイル デバイスで広く使用されている実行状態です。

32位寻址和数据处理
16个通用寄存器
ARM和Thumb-2指令集
兼容性
AArch32 (32位ARM体系结构)
ARMv7-A 架构
32位地址和数据处理方式
16个通用寄存器
ARM和Thumb-2指令集

b. ARMv8-A アーキテクチャでサポートされる命令セット

ARMv8-A アーキテクチャでサポートされる命令セットには次のものがあります。

  1. A64 (AArch64) 命令セット: これは、ARMv8-A アーキテクチャによって導入された 64 ビット命令セットであり、AArch64 実行状態とも呼ばれます。A64 命令セットは、より効率的なアドレス指定とデータ処理機能、より多くの汎用レジスターとより豊富なオペランド タイプを提供し、より複雑な命令パイプラインと並列コンピューティングをサポートします。

  2. A32 (AArch32) 命令セット: これは、ARMv8-A アーキテクチャの ARMv7-A アーキテクチャから継承された 32 ビット命令セットであり、AArch32 実行状態とも呼ばれます。A32 命令セットは、以前の ARMv7-A アーキテクチャと互換性があり、以前の 32 ビット ARM アプリケーションとの互換性を維持します。

  3. T32 (Thumb-2) 命令セット: これは、命令圧縮テクノロジを備えた 16 ビット/32 ビットのハイブリッド命令セットです。T32 命令セットは、より小さなコード スペースでより多くの命令を実行できるため、コード密度とストレージ スペースの使用率が向上します。Thumb-2 命令セットは、組み込みシステムやモバイル デバイスで広く使用されています。

除了上述指令集,ARMv8-A 架构还支持一些可选的指令集扩展,例如:

  • NEON SIMD(Single Instruction, Multiple Data)指令集扩展:提供了并行计算能力,用于加速图形处理、媒体处理和信号处理等应用。
  • FP(浮点)指令集扩展:提供了更强大的浮点运算能力,用于科学计算、图形渲染和数字信号处理等应用。
  • Cryptography 指令集扩展:提供了硬件加速的密码学功能,包括对称加密、哈希函数和公钥加密算法等。

这些指令集扩展可以根据具体的 ARMv8-A 架构实现进行配置,以满足不同领域和应用的需求。

支持
支持
可选
可选
可选
A64 指令集
A32 指令集
T32 指令集
NEON SIMD
浮点指令集
Cryptography指令集

c. ARMv8-A 支持的数据类型

ARMv8-A支持的数据类型包括以下几种:

  • 整数数据类型。在AArch32执行状态,通用寄存器文件包含32位寄存器,两个32位寄存器可以支持一个双字。在AArch64执行状态,四字整形数据类型(Quadword)仅适用于SIMP&FP寄存器文件。
  • 浮点数据类型。在AArch32执行状态,不支持浮点数据类型。在AArch64执行状态,浮点数据类型仅适用于SIMO&FP寄存器文件。
  • 矢量数据类型。在AArch64执行状态,SIMP&FP寄存器文件包含128位寄存器,可以保存一个或多个压缩元素,所有元素的大小和类型都相同。乘法指令必须区分整数和浮点数据类型。
32位寻址和数据处理
16个通用寄存器
ARM和Thumb-2指令集
兼容性
64位寻址和数据处理
更多的通用寄存器
扩展指令集
更好的代码密度
四字整形数据类型
浮点数据类型
矢量数据类型
AArch32 (32位ARM体系结构)
ARMv7-A 架构
64位地址和数据处理方式
31个通用寄存器
ARM和Thumb-2指令集
AArch64 (64位ARM体系结构)
SIMD和浮点指令集扩展
更紧凑的指令编码
四字整形数据类型 (适用于SIMD&FP寄存器文件)
浮点数据类型 (适用于SIMD&FP寄存器文件)
矢量数据类型 (SIMD&FP寄存器文件包含128位寄存器)

d. ARMv8-A 的异常等级与安全模型

ARMv8-A架构支持不同的异常级别,这些级别在体系结构中被称为异常级别(Exception Levels,EL) 。数字越高,异常等级越高。具体的异常级别包括EL0、EL1、EL2和EL3

EL0是最低的异常级别,大多数应用代码运行在这个级别。操作系统运行在EL1,而hypervisor运行在EL2。EL3是底层固件和安全代码所保留的级别。

ARMv8-A还提供了两种安全状态:Secure(Secure World)和Non-Secure(Normal World)。这种设计使得一个操作系统可以和一个可信赖的操作系统同时运行在同一个硬件上,并对软件或硬件的攻击提供保护。

Secure World 中,运行着Secure firmware和Trusted OS。这些组件提供安全的启动和执行环境,可以确保系统的可信性和安全性。

Non-Secure World 中,运行着Guest OS和Hypervisor。Guest OS是通过虚拟化技术运行的,相互之间并不知道对方的存在。Hypervisor则负责管理和运行多个guest OS,每个OS在各自的世界中运行,并且Hypervisor也提供了对虚拟化的支持。

Virtualization Support
Security and Firmware Services
EL0 (User/Application Mode)
EL1 (Kernel Mode/Supervisor Mode)
EL2 (Hypervisor Mode)
EL3 (Secure Monitor Mode/Firmware)
Secure World (Secure state)
Non-Secure World (Normal state)
Hypervisor
Secure Monitor
Trusted OS
Secure Firmware
Guest OS

这种安全模型的设计提供了对系统安全性的保护,特别是在涉及到虚拟化、多操作系统和系统安全性的场景中。

e. ARMv8-A的虚拟化架构

ARMv8-A的虚拟化架构包括以下关键组件:

  1. 虚拟化扩展(Virtualization Extensions):这一扩展提供了对虚拟化硬件的支持,包括虚拟机监视器(Hypervisor)和客户操作系统。虚拟化扩展使得Hypervisor可以创建和管理多个虚拟机,每个虚拟机运行一个客户操作系统。
  2. 嵌套虚拟化(Nested Virtualization):这是一种允许在虚拟机内运行其他虚拟机的技术。嵌套虚拟化在Hypervisor内部运行一个客户操作系统,该客户操作系统再在其内部运行另一个客户操作系统。
  3. 虚拟化异常处理(Virtualization Exception Handling):这一特性允许Hypervisor捕捉和处理虚拟机的异常事件,以确保虚拟机的安全和稳定运行。
  4. 虚拟化存储器一致性(Virtualization Storage Coherence):这一特性确保了在多级页表的虚拟化存储器管理下,不同虚拟机的内存访问的一致性。

这些组件共同构成了ARMv8-A的虚拟化架构,为Hypervisor和客户操作系统的运行提供了硬件支持。

ARMv8-A
虚拟化扩展
Nested Virtualization
虚拟化异常处理
虚拟化存储器一致性
Hypervisor
客户操作系统

f. ARMv8-A的调试支持

ARMv8-A架构支持两种调试类型:外部调试和self-hosted调试。在外部调试中,开发工具运行在主机上,而目标系统通过调试接口连接到主机。在self-hosted调试中,开发工具在目标系统上运行,不需要外部硬件。

ARMv8-A体系结构提供了一些调试特性,包括:

1. 侵入式和非侵入式调试:侵入式调试会暂停指令的执行,而让调试器检查和修改被调试系统的状态。非侵入式调试允许调试器在不停止目标系统的情况下访问和检查系统资源。
2. 硬件调试和软件调试:硬件调试通过特定的硬件接口进行调试操作,而软件调试通过运行在目标系统上的调试软件进行。
3. 断点和观察点:断点和观察点是常用的调试工具,它们允许开发人员在特定条件下暂停程序的执行,或者观察程序的运行状态。

总的来说,ARMv8-A的调试支持为开发人员提供了灵活和强大的工具,帮助他们进行应用程序的开发和调试。

2. ARMv8-A 架构的寄存器

ARMv8-A系统寄存器
AArch64状态下的通用寄存器
AArch64执行状态下的处理状态PSTATE寄存器
AArch64执行状态下的特殊功能寄存器

a. ARMv8-A系统寄存器

ARMv8-A架构包含多个系统寄存器,这些寄存器被用于控制和监控系统的各种特性和状态。以下是一些ARMv8-A系统寄存器的概述:

  1. 体系结构寄存器(Architectural Registers):这些寄存器定义了处理器的体系结构,包括指令集架构和处理器状态等。
  2. 程序计数器(Program Counter):程序计数器用于存储当前正在执行的指令的地址。
  3. 链接寄存器(Link Registers):链接寄存器用于保存返回地址,使得函数调用可以正确返回。
  4. 栈指针(Stack Pointer):栈指针用于指向栈顶的地址,用于存储和恢复堆栈中的数据。
  5. 状态寄存器(Status Registers):状态寄存器用于保存处理器的状态信息,如溢出标志、零标志、符号标志等。
  6. 控制寄存器(Control Registers):控制寄存器用于控制处理器的操作模式、异常处理和系统配置等。
  7. 调试寄存器(Debug Registers):调试寄存器用于支持调试操作,如设置断点、观察点等。
  8. 系统级控制寄存器(System Control Registers):这些寄存器用于控制系统的硬件特性,如内存控制器、电源管理、中断控制器等。

这些系统寄存器通过指令或特定的硬件操作进行访问和控制,为开发人员提供了管理和监控系统运行状态的机制。

体系结构寄存器
-指令集架构
-处理器状态
程序计数器
-当前指令地址
链接寄存器
-返回地址
栈指针
-栈顶地址
状态寄存器
-溢出标志
-零标志
-符号标志
控制寄存器
-操作模式
-异常处理
-系统配置
调试寄存器
-断点
-观察点
系统级控制寄存器
-内存控制器
-电源管理
-中断控制器

b. AArch64状态下的通用寄存器

在AArch64架构下,通用寄存器是指用于存储操作数、计算结果和临时数据的寄存器。AArch64架构提供了31个通用寄存器,每个寄存器的大小为64位。

通用寄存器的命名方式为Xn,其中n表示寄存器的编号,范围从0到30。

下面是AArch64状态下的通用寄存器列表:

  • X0 - X30: 用于存储操作数、计算结果和临时数据。
  • XZR (X31): 零寄存器,始终为零。
  • SP (Stack Pointer): 栈指针寄存器,用于指向栈的顶部。
  • PC (Program Counter): 程序计数器寄存器,用于存储下一条将要执行的指令的地址。

这些通用寄存器在程序中广泛用于存储、传递数据以及控制程序流程。需要注意的是,通用寄存器的使用需遵循架构规范,避免出现不合法、冲突的寄存器用法。

c. AArch64执行状态下的处理状态PSTATE

在AArch64执行状态下,处理状态PSTATE被用于控制处理器的操作模式和状态。PSTATE寄存器包含多个位字段,每个位字段对应于特定的状态标志或控制信号。

PSTATE的位结构如下:

PSTATE = (SPSel | DAIFSet | DAIFClr | ATS | SPAnded | nSX投 | nA Flag | nF Flag | nZ Flag | nC Flag)

其中,每个字段的含义如下:

  • SPSel:选择栈指针,0表示使用主栈指针,1表示使用辅助栈指针。
  • DAIFSet:设置异常掩码标志,该位设置为1时,异常不会被触发。
  • DAIFClr:清除异常掩码标志。
  • ATS:选择访问权规范标签,0表示使用当前的规范标签,1表示使用被访问的地址所关联的规范标签。
  • SPAnded:栈访问条件,0表示在堆栈边界上执行边界检查,1表示在堆栈内部执行边界检查。
  • nSX投:状态切换控制,该位控制处理器是否切换到特权执行状态。
  • nA Flag、nF Flag、nZ Flag、nC Flag:异常标志位,这些位用于存储算术、浮点、零、溢出异常的状态。

PSTATE寄存器中的这些位字段提供了对处理器操作模式的控制和异常处理机制的监控。通过设置或清除这些位字段,可以控制处理器的行为和操作模式。

d. AArch64 执行状态下的特殊功能寄存器

在AArch64架构下,**特殊功能寄存器(Special Purpose Registers)**是用于控制和管理系统的寄存器。这些寄存器承担着特定的功能,例如处理器状态、异常处理、存储器管理、定时器等。

以下是AArch64执行状态下的一些常见特殊功能寄存器:

  1. CPSR (Current Program Status Register): 当前程序状态寄存器,用于存储当前执行状态的标志位,如条件标志位、执行模式等。

  2. SPSR (Saved Program Status Register): 保存程序状态寄存器,用于在发生异常时保存先前的程序状态。

  3. ELR_ELx (Exception Link Register): 异常链接寄存器,用于保存异常返回地址,在异常处理程序完成后恢复执行。

  4. TTBRx (Translation Table Base Register): 用于存储虚拟地址到物理地址的转换表基址。

  5. TCR (Translation Control Register): 用于设置和控制内存访问的转换和保护属性。

  6. SP_ELx (Stack Pointer Exception Level): 用于存储不同异常级别下的栈指针。

  7. CNTPCT (Counter-timer Physical Count Register): 物理计数器寄存器,用于实现计时和定时器功能。

  8. CNTP_TVAL (Counter-timer Timer Value Register): 定时器值寄存器,用于设置定时器的初始值。

  9. CNTP_CTL (Counter-timer Control Register): 计时器控制寄存器,用于控制计时器的启动、停止和中断。

这些特殊功能寄存器的具体作用和用法在ARM体系结构手册中有详细的说明。在编程和系统调试过程中,合理使用这些寄存器可以实现对系统的控制和管理。注意,在访问特殊功能寄存器时,需要遵循架构规范和特权级别的要求。

3. ARMv8-A 架构的异常与中断

ARMv8-A架构具有丰富的异常和中断处理机制,用于响应和处理系统发生的异常和中断事件。以下是ARMv8-A架构中异常和中断的一般概述:

  1. 异常(Exceptions)

    • 异常是指在程序执行过程中发生的非预期事件,例如访问未授权的内存、除零错误等。
    • ARMv8-A架构定义了几种不同类型的异常,包括中断、陷阱、故障和系统调用等。
    • 异常处理是通过保存当前执行状态并切换到异常处理程序来进行的。
  2. 中断(Interrupts)

    • 中断是由外部设备发出的信号,用于通知CPU需要处理某个事件,例如定时器中断、外部设备请求等。
    • ARMv8-A架构支持多种类型的中断,如外部中断、软件中断等。
    • 中断处理是通过保存当前执行状态并切换到中断处理程序来进行的。

在ARMv8-A架构中,异常和中断的处理涉及到以下关键组件和机制:

  • 异常向量表(Exception Vector Table):存储异常和中断处理程序的入口地址。
  • 异常模式(Exception Modes):用于确定异常处理程序的运行环境,如处理器状态、特权级别等。
  • 异常处理程序(Exception Handling):负责处理异常和中断事件,并进行适当的处理和响应。
  • 异常处理器(Exception Handler):在异常发生时,负责切换到适当的异常处理程序,并保存或恢复相关状态。

ARMv8-A架构通过这些组件和机制,提供了强大的异常和中断处理能力,使得系统能够灵活地响应各种异常与中断事件,并保证数据的完整性和系统的可靠性。

二、ARMv8-A处理器单元的存储系统架构

ARMv8-A架构的内存模型

ARMv8-A架构的内存模型包括多种类型的内存访问和组织方式,以下是一些关键概念:

  1. 虚拟地址空间:ARMv8-A架构支持64位虚拟地址空间,这意味着可以访问的虚拟内存地址范围是[0x0000_0000_0000_0000到0xFFFF_FFFF_FFFF_FFFF]。虚拟地址空间被分为多个区域,每个区域具有不同的属性,如可读、可写、可执行等。
  2. 物理地址空间:物理地址空间是内存的实际映射,与虚拟地址空间不同。物理地址空间的大小取决于系统硬件的设计和实现。
  3. 内存访问权限:ARMv8-A架构支持多种内存访问权限级别,包括特权级别、用户级别和其他级别。不同的内存区域可以具有不同的访问权限级别,以确保数据安全和保护。
  4. 内存一致性模型:ARMv8-A架构采用了一种称为MESI(Modified, Exclusive, Shared, Invalid)的一致性模型,用于管理缓存和内存之间的数据一致性。MESI模型定义了四种状态,表示缓存行在不同的处理器之间共享时的状态。
  5. 缓存和TLB(Translation Lookaside Buffer):ARMv8-A架构包含一级和二级缓存,以及一个TLB(Translation Lookaside Buffer),用于加速内存访问和提高内存访问效率。缓存和TLB的设计和管理由硬件自动完成。
  6. 内存管理单元(MMU):ARMv8-A架构包含一个MMU(Memory Management Unit),用于实现虚拟地址到物理地址的转换和管理内存访问权限。MMU通过页表机制实现内存管理。

这些概念共同构成了ARMv8-A架构的内存模型,用于管理和控制对内存的访问,确保数据的一致性和安全性。

ARMv8A
+Virtual Address Space
+Physical Address Space
+Memory Access Permissions
+Memory Consistency Model
+Cache and TLB
+Memory Management Unit
VirtualAddressSpace
-Range
-Attributes
PhysicalAddressSpace
-Size
MemoryAccessPermissions
-Privilege Level
-Access Levels
MemoryConsistencyModel
-MESI Model
CacheAndTLB
-Level 1 Cache
-Level 2 Cache
-Translation Lookaside Buffer(TLB)
MemoryManagementUnit
-Translation
-Memory Access Control

ARMv8-A架构的系统存储管理单元

ARMv8-A架构的系统存储管理单元(System Memory Management Unit,SMMU) 是一种存储器管理单元,它控制着内存的访问和转换。

SMMU在处理器和内存之间插入了一个转换层,使得从处理器发出的虚拟地址可以被转换为物理地址。这样,多个进程可以同时访问物理内存,而不会发生地址冲突。

SMMU还提供了其他一些功能,如内存访问权限控制、缓存和TLB管理等。这些功能可以保护系统的内存安全,并提高内存访问效率。

在ARMv8-A架构中,SMMU是可选的,但推荐使用。SMMU通常被用于操作系统内核中,以便更好地管理内存访问。

三、ARMv8-A架构的服务器特性

ARMv8-A架构具备一些特性,使其在服务器领域得到广泛应用。以下是ARMv8-A架构的一些服务器特性:

1. 多核处理器:ARMv8-A架构支持多核处理器,这对于运行并发工作负载和提高服务器整体性能非常重要。

2. 虚拟化支持:ARMv8-A架构提供硬件虚拟化扩展,如Virtualization Host Extensions(VHE)和Nested
Virtualization。这些功能使ARMv8-A服务器能够同时运行多个虚拟机实例,实现更高的资源利用率和灵活的虚拟化部署。

3. 安全扩展:ARMv8-A架构引入了TrustZone技术,该技术通过硬件支持创建安全区域,以隔离敏感数据和保护系统免受恶意攻击。这对于服务器中处理敏感数据的场景非常重要。

4. 64位寻址和大内存支持:ARMv8-A架构支持64位寻址,使服务器能够访问更大的物理和虚拟内存空间。这对于处理大规模数据和运行内存密集型应用程序非常重要。

5. 高性能计算:ARMv8-A架构在服务器领域也取得了显著进展,通过提供高性能的处理器核心设计、大型缓存以及高带宽的内存接口,使得ARMv8-A服务器能够处理各种计算密集型工作负载。

6. 能耗效率:ARMv8-A架构在能耗效率方面表现出色,这对于数据中心和云计算环境非常重要。低能耗的设计使得ARMv8-A服务器能够降低功耗成本,并减少对散热和能源消耗的需求。

总而言之,ARMv8-A架构的服务器特性包括多核处理器、虚拟化支持、安全扩展、64位寻址和大内存支持、高性能计算以及能耗效率。这些特性使得ARMv8-A架构成为构建高效、灵活和安全的服务器解决方案的理想选择。

ARMv8-A 的服务器架构标准化

ARMv8-A的服务器架构标准化主要由ARM和其他相关组织共同推动和定义。以下是与ARMv8-A服务器架构标准化相关的一些重要组织和标准:

1. ARM:作为ARMv8-A架构的设计和拥有者,ARM在推动ARMv8-A服务器架构标准化方面起到了关键作用。ARM提供了广泛的技术支持和文档,帮助厂商和开发者实现符合ARMv8-A架构标准的服务器产品。

2. ARM Server Base System Architecture (SBSA):ARM SBSA是对基于ARMv8-A架构的服务器硬件和软件的标准化规范。该规范定义了服务器平台的基本要求,包括硬件配置、启动流程、操作系统接口等,以确保不同ARMv8-A服务器的兼容性和可移植性。

3. ARM Server Base Boot Requirements (SBBR):ARM SBBR是对基于ARMv8-A架构的服务器引导过程的标准化规范。该规范定义了服务器引导的基本要求,包括UEFI固件、ACPI、设备树等,以确保服务器引导过程的标准化和互操作性。

4. Linaro Enterprise Group (LEG):Linaro是一个由ARM及其合作伙伴组成的工程组织,致力于促进ARM架构的开源软件生态系统的发展。Linaro Enterprise Group专注于ARM服务器领域,推动ARMv8-A服务器的标准化和开源软件支持。

5. ServerReady:ServerReady是一个由软件和硬件厂商共同发起的倡议,旨在提供对符合ARMv8-A架构标准的服务器进行认证和验证的程序。通过ServerReady认证,厂商可以获得对其产品的认可,增强其市场竞争力。

这些组织和标准共同推动了ARMv8-A服务器架构的标准化工作,并为ARMv8-A架构的服务器产品提供了一致的硬件、软件和生态支持。这有助于提高ARMv8-A服务器的互操作性、可靠性和市场竞争力,并推动ARM架构在服务器领域的广泛应用。

ARMv8-A 的RAS拓展与PMU拓展

ARMv8-A的RAS拓展和PMU拓展都是为了增强ARM处理器的功能和性能而设计的。

  1. ARMv8-A的RAS拓展:

RAS扩展(RAS Extension) 是对ARMv8.2体系结构的强制扩展,也是对ARMv8.0和ARMv8.1体系结构的可选扩展。它主要被用于提高系统的可靠性、可用性和可服务性(RAS)。

RAS扩展提供了一组扩展寄存器,这些寄存器是ARMv8-A体系结构定义的一部分。通过这些寄存器,可以控制和监控系统的关键部分,如内存控制器和中断控制器。

在ARMv8-A中,可以使用一组特定的指令来访问RAS扩展寄存器。这些指令可以用于读取和修改扩展寄存器的值,从而控制系统的行为。

  1. ARMv8-A的PMU拓展:

PMU扩展(Performance Monitoring Unit Extension) 是ARMv8-A体系结构的一部分,主要用于监控系统性能。

PMU 拡張機能は、実行された命令の数、キャッシュ ヒット率など、プロセッサとメモリのパフォーマンス メトリクスを監視する方法を提供します。これらのメトリクスを使用すると、システムの状態をよりよく理解し、必要に応じてパフォーマンスを向上させるために調整を行うことができます。

PMU 拡張機能は、システム パフォーマンスを記録および監視するための強力なレジスタのセットを提供します。これらのレジスタは、さまざまなパフォーマンス メトリックを収集するために使用でき、実行時に読み取りおよび変更できます。

ARMv8-A では、特定の命令セットを使用して PMU 拡張レジスタにアクセスできます。これらの命令を使用してレジスタの値を読み取ったり変更したりすることで、システムのパフォーマンス監視機能を制御できます。

ARMv8A
+RAS Extension
+PMU Extension
RASExtension
+Registers
+Control and Monitoring
+Access Instructions
PMUExtension
+Registers
+Performance Monitoring
+Access Instructions

公式サイトマップ
PS: 公式ウェブサイト ARMv8-A がARM-A シリーズ公式ドキュメントをコーディネート

参考:

  1. Kunpeng プロセッサのアーキテクチャとプログラミング
  2. A プロファイル アーキテクチャの Arm アーキテクチャ リファレンス マニュアル: 既知の問題

おすすめ

転載: blog.csdn.net/m0_74037814/article/details/132336552