ARMv8-AArch64简述

2023-05-16

ARMv8是ARM版本升级以来最大的一次改变,ARMv8的架构继承以往ARMv7与之前处理器技术的基础,除了现有的16/32bit的Thumb2指令支持外,也向前兼容现有的A32(ARM 32bit)指令集,扩充了基于64bit的AArch64架构,除了新增A64(ARM 64bit)指令集外,也扩充了现有的A32(ARM 32bit)和T32(Thumb2 32bit)指令集;

这里写图片描述

ARMv8拥有两种执行模式(two execution modes):
AArch64 :64-bit registers and memory accesses, new instruction set;
AArch32 : backwards compatible with ARMv7-A;



(一)A64新的指令和寄存器


  1. 固定大小32位操作码,清除基于5位寄存器说明符的解码表;
  2. 可以拥有32位或者64位参数;
  3. 地址设定为64位,主要针对LP64和LLP64数据模型;
  4. 比AArch32拥有更少的条件指令,条件指令有:分支,比较,选择;
  5. 没有LDM/STM(用于批量从内存中读取或者写入数据)指令,添加LDP/STP指令来操作以降低复杂性及功耗;
  6. 支持先进的SIMD(Single-Instruction,Multiple-Data:单指令多数据)和(FP浮点);
  7. 支持加密技术;
  8. 可随时访问31个通用的64位寄存器 (X0-X30),没有banked(banked是指一个寄存器不同模式下会对应不同的物理地址)的通用寄存器,堆栈指针(SP),PC不是通用寄存器,附加专用的零寄存器(Xzr);
  9. AArch32状态是使用CPSR来存储当前process执行状态,AArch64定义了一组PSTATE寄存器用以保存PE(Processing Element)状态;

AArch64 – Unbanked Registers:

这里写图片描述

左边的通用寄存器用于:32位或者64位的整数运算或者64位的寻址,右边的用于浮点运算;

AArch64 Banked Registers:

这里写图片描述

AArch64不在根据之前通过不同模式来区别banked寄存器,而是通过exception level;

下图为AArch32和AArch64通用寄存器对应关系:

这里写图片描述



(二)AArch64 Exception Model


AArch64 Exception Model:

这里写图片描述

Exception model nomenclature:

这里写图片描述

总共分为4 exception levels: EL3-EL0,在这种特权模式下EL0位权限最低模式,也就是用户模式,Monitor(EL3)和Supervisor(EL2),分别用于security扩展和virtualization扩展;;低level向高level切换通过exception的方式转换,有如下exceptions:

  1. Interrupts, page faults etc.
  2. SVC for transition to EL1 (system calls)
  3. HVC for transition to EL2 (hypervisor:超级监督者 calls)
  4. SMC for transition to EL3 (secure monitor call)
  5. Dedicated ELR register for the return address (banked at each EL);

而高level向低level则通过ERET指令;
低level的寄存器位宽不能大于高level:E.g. no 64-bit EL0 with 32-bit EL1;


对异常的处理:

1. Exception Link Register written on exception entry;
2. 异常有可能发生任何在exception level,EL1, EL2, and EL3有不同的向量表地址,之前的arm版本只有一个向量表地址;
3. 向量的区分是根据Exception type(synchronous, IRQ, FIQ or System Error)或者Exception origin (same or lower exception level) and register width;
4. Syndrome 寄存器提供了exceptions信息;

AArch32 and AArch64之间切换

这里写图片描述

AArch32和AArch64之间的切换只能通过发生异常或者系统Reset来实现,A32 -> T32之间是通过BX指令切换的;

不同level之间的组合:

这里写图片描述

AArch32 /AArch64 relationship

  1. Changes between AArch32 and AArch64 occur on exception/exception return only;
  2. Allows AArch32 applications under AArch64 OS Kernel;
  3. Allows AArch32 guest OS under AArch64 Hypervisor;
  4. Allows AArch32 Secure side with AArch64 Non-secure side



(二)AArch64 MMU Support


在ARMv8 64bit出现之前,我们用的都是32位寻址,每个地址单位对应内存一个字节单元(B),所以我们最大的寻址范围为2^32B = 4GB,但是实际当中,内存设备有可能远远大于4GB内存空间,以前是通过LPAE(大物理地址扩展)实现地址的扩展,可以支持最大2^40的地址寻址范围,ARMv8理论上最高可以提供提供了2^64个虚拟地址,但是超过16 Exabyte (2^4 * 2^60)意义并不大,所以选择跟x86一样,可以使用最大支持2^48虚拟地址的寻址范围就足够;

ARM 32bits下会用TTBR0存储User-Space行程所在的Page Table (也就是0xC0000000以下的存储空间),并用TTBR1存储Kernel Space所在的Page Table (也就是0xC0000000以上的存储空间).

这里写图片描述

在ARMv8 64bits架构下,会通过EL1的TTBR0 (ttbr0_el1, in /arch/arm64/mm/proc).存储User-Space行程所在的Page Table,与EL1的TTBR1存储Kernel Space所在的Page Table,并会依据Page Size与32/64bits行程而有不同的存储空间配置. 參考如下圖所示:

这里写图片描述

由于ARM 64bit Kernel分页大小为4kb和64kb两种,通过设置TASK_SIZE_64 (/arch/arm64/include/asm/memory.h)来设定,当分页大小为4KB的时候,决定TASK_SIZE_64大小的VA_BITS会等于39,也就是2^39大小的Task空间(=512GB),若分页大小为64KB时,则TASK_SIZE_64对应的VA_BITS等于 42,也就是2^42大小的Task空间(=4TB).

这里写图片描述

同时kernel空间也根据分页大小来划分内核空间,可以参考下面的图来区分:
这里写图片描述

参考资料:

ARM(V8) Architecture Reference Manual.pdf

ARMv8 Technology Preview.pdf

www.arm.com -cotex-A57介绍

Linux Support for ARM LPAE 分析

ARMv8 与 linux 的新手笔记

ARMv8 架构与指令集.学习笔记

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

ARMv8-AArch64简述 的相关文章

随机推荐

  • 计数器与定时器有何区别

    计数器是当你开始从0开始计数时一直不停的开始记数 除非你让他停下来要不他会不停的记下去 而定时器则是不一样的 是需要你自己先设定一个时间然后开始倒计时 当你的所定时间倒计完以后 他就自动停止下来了 懂了吗 至于用哪个就要看你干什么而定了 8
  • C++基础知识

    1 面向对象的程序设计思想是什么 xff1f 答 xff1a 把数据结构和对数据结构进行操作的方法封装形成一个个的对象 2 什么是类 xff1f 答 xff1a 把一些 具有共性的对象归类后形成一个集合 xff0c 也就是所谓的类 3 对象
  • 【开关电源】降压变换器(BUCK)的断续模式建模

    1 前言 在DCDC变换器中BUCK变换器是最基础的一类降压型变换器 xff0c 它可以将输入电压降低后输出 在连续模式CCM下 xff0c 输出和输入之间的比值是D xff08 D为占空比 xff09 这种开关变换器是一种通过电子开关周期
  • 变量命名规范

    本文转载于https blog csdn net ZCF1002797280 article details 51495229 是我见过的描述最精炼 最好懂的命名文档 xff0c 故收藏转载推荐 1 驼峰命名法 1 1 小驼峰法 除第一个单
  • C++实现websocket服务器握手协议(使用Qt)

    前提 xff1a 笔者在开发server程序时 xff0c 要求websocket与server连接 websocket的机制是在第一次连接时进行握手协议 xff0c 协议通过 xff0c 才可以进行正常的通信 xff0c 否则websoc
  • 00011__ARM和STM32的区别

    https blog csdn net qq 34385566 article details 79668280
  • linux中查看系统资源占用情况的命令

    size 61 large top size 主要参数 d xff1a 指定更新的间隔 xff0c 以秒计算 q xff1a 没有任何延迟的更新 如果使用者有超级用户 xff0c 则top命令将会以最高的优先序执行 c xff1a 显示进程
  • 关于PendSV异常和SVC异常

    这里先说什么是异常 xff0c 什么是中断 xff1f 请下这张图 颜色加深的表项为异常 xff0c 这些属于cm3内核自带的 其中 3 xff0c 2 xff0c 1异常的优先级固定 xff0c 是不可更改的 xff0c 其余的异常中断优
  • FreeRTOS学习4-任务创建和删除

    关于任务创建有3个函数 1 动态创建一个任务 可以自动分配任务堆栈和TCB FreeRTOSConfig h中 xff0c 需要定义 define configSUPPORT DYNAMIC ALLOCATION 1 支持动态内存申请 Ba
  • java里 equals和== 区别

    1 java中equals和 61 61 的区别 值类型是存储在内存中的堆栈 xff08 简称栈 xff09 xff0c 而引用类型的变量在栈中仅仅是存储引用类型变量的地址 xff0c 而其本身则存储在堆中 2 61 61 操作比较的是两个
  • VRPTW建模与求解—基于粒子群算法

    VRPTW建模与求解 基于粒子群算法 1 VRPTW简要描述 VRPTW xff08 Vehicle Routing Problem with Time Windows xff09 是指在经典VRP的前提上 xff0c 给每个客户增添时间窗
  • 伽马分布,指数分布,泊松分布的关系 -转自简书

    原文链接 xff1a https www jianshu com p 6ee90ba47b4a 伽马分布 xff0c 指数分布 xff0c 泊松分布的关系 thinkando 关注 2018 09 25 21 13 字数 714 阅读 29
  • 双轴驱动步进电机云台二自由度单片机控制程序PTU57

    高精度云台由两个电机驱动 xff0c 可控制方位角和高度角 xff0c 具有两自由度的机械电子设备 可用于机器视觉 摄影摄像 监控安防 天文观测 雷达扫描 DIY雕刻机 转盘转台 智能机械手臂 双轴跟踪太阳能定日镜等各类应用高精度云台的场合
  • php使用curl获取需要认证的https请求

    lt php php使用curl获取需要认证的https请求的方法 url 61 34 XXXXXX 34 arr header 61 34 Accept application json 34 arr header 61 34 Autho
  • i-vector本质剖析

    1 i vector的由来 基于因子分析理论 xff0c 句子h的超向量可以描述成 其中为ubm模型的均值超向量 xff0c 即为i vector 2 i vector的计算 2 1 T矩阵的估计 为句子h的观察特征 xff0c 可以对应于
  • C++程序设计基础实验-实验七 多态性

    实验七多态性 一 实验目的 掌握运算符重载的方法 xff1b 掌握使用虚函数的继承实现动态多态性 掌握纯虚函数及抽象类的使用 二 实验内容 设计复数类Complex xff08 请参照教材例题8 1的设计 xff09 xff0c 实现运算符
  • g2o_a_general_framework_for_graph_optimaization

    g2o A General Framework for Graph Optimization NONLINEAR GRAPH OPTIMIZATION USING LEAST SQUARES 机器人和计算机视觉中的许多问题都可以用下列方程的
  • P5644 [PKUWC2018]猎人杀

    P5644 PKUWC2018 猎人杀 题目大意 一开始有 n n n 个猎人 xff0c 第 i i i 个猎人有仇恨度
  • 【Linux基础系列之】platform虚拟总线

    linux当中大多数的设备都是以paltform虚拟总线挂载上去的 xff0c 这里以kernel drivers net dm9000 c为例子分析一下 xff0c platform设备挂在过程 xff1b xff08 1 xff09 d
  • ARMv8-AArch64简述

    ARMv8是ARM版本升级以来最大的一次改变 xff0c ARMv8的架构继承以往ARMv7与之前处理器技术的基础 xff0c 除了现有的16 32bit的Thumb2指令支持外 xff0c 也向前兼容现有的A32 ARM 32bit 指令