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 架构与指令集.学习笔记

ARMv8-AArch64简述相关推荐

  1. linux 内核flush,armv8(aarch64)linux内核中flush_dcache_all函数详细分析

    /* *  __flush_dcache_all() *  Flush the wholeD-cache. * Corrupted registers: x0-x7, x9-x11 */ ENTRY( ...

  2. 一篇文章读懂Armv8 AArch64

    Armv8是Armv7之后的一个重要架构更新.其中一个主要的变化是引入了64的架构,即AArch64.AArch64状态只有在Armv8架构中才有.而且在AArch64状态下执行的代码只能使用A64指 ...

  3. ARMv8(aarch64)指令集特性

    有了之前mips系统架构的基础,再了解arm64就相对轻松多了.所谓体系架构,核心就是寄存器.指令集和abi(即寄存器和指令集的使用规范).下面就分这几方面展开做的学习笔记. 目录 一.armv8概览 ...

  4. x86-64、amd64、arm、aarch64 都是些什么?

    参考 X86和X86_64和AMD64的由来 关于x86.x86_64.x64.amd64和arm64.aarch64 下载软件时的amd64.x86.x86-64是什么,该怎么选? 简述 架构 指令 ...

  5. [register]-ARMV8系统中通用寄存器和系统寄存器的介绍和总结

    ★★★ 个人博客导读首页-点击此处 ★★★ . 说明: 在默认情况下,本文讲述的都是ARMV8-aarch64架构,linux kernel 64位 . 自制ARMv8 aarch64 registe ...

  6. ARMv8体系结构基础02:搭建实验环境

    目录 1 实验环境概述 1.1 实验环境种类 1.2 树莓派4b简介 2 实验代码分析 2.1 实验代码结构 2.2 Makefile文件分析 2.3 linker.ld文件分析 2.4 程序流程分析 ...

  7. 【优化系列】汇编优化技术(六):ARM架构64位(AARCH64)汇编优化及demo

    DATE:2021.8.15 文章目录 1.arm架构64位优化基础知识 2.ARMv8/AArch64 neon指令格式 3.ARM相关编译参数 4.查看状态标记位NZCV的方法 5.A64指令集特 ...

  8. ARMv8 Linux内核head.S源码分析

    ARMv8Linux内核head.S主要工作内容: 1. 从el2特权级退回到el1 2. 确认处理器类型 3. 计算内核镜像的起始物理地址及物理地址与虚拟地址之间的偏移 4. 验证设备树的地址是否有 ...

  9. ARMv8与linux的新手笔记

    ARMv8 與 Linux的新手筆記 by loda hlchou@gmail.com 從iPhone 5S採用ARMv8處理器架構後,對於ARMv8 64bits的相關討論很多,也受到大家關注,Go ...

  10. ARMv8 與 Linux的新手筆記

    ARMv8 與 Linux的新手筆記 by loda hlchou@gmail.com 從iPhone 5S採用ARMv8處理器架構後,對於ARMv8 64bits的相關討論很多,也受到大家關注,Go ...

最新文章

  1. blog摘录--测试感触
  2. 【科普】为什么985大学在大一上C语言课??
  3. 传统I/O 数据拷贝
  4. HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。...
  5. 40 个 SpringBoot 常用注解:让生产力爆表!
  6. (递归7)生成可重集的排列
  7. 4,GIL全局解释器锁,event事件,信号量
  8. (转)投资AI的核心标准是场景和数据
  9. (转)谭志勇、赵微:区块链技术在中国商品交易市场的应用与发展
  10. html 安卓解锁,【华为手机解账户锁教程】手撕篇3 完美解锁华为EMUI8.0,8.1,8.2系统...
  11. S7-200SMART与昆仑通态触摸屏以太网通信的具体方法和步骤(图文)
  12. mysql bootstrap pxc_MYSQL PXC
  13. EasyGUI-5:文本显示
  14. 高翔视觉slam十四讲习题(1)
  15. 阿布扎比有一个“智慧港口”
  16. IOT数据采集的转换器的设计和实现
  17. MySQL索引底层实现原理 MyISAM非聚簇索引 vs. InnoDB聚簇索引
  18. 【Hive】Hive练习题(二)
  19. 地理国情监测类毕业论文文献都有哪些?
  20. 51单片机控制小舵机

热门文章

  1. 为html添加footbar,foobar2000界面组件添加设置方法
  2. Microcontent - 微内容
  3. 用GIF图片来告诉大家程序猿的真实生活 ————“你熬了一整夜、耗了一整天,开始调试代码时:” 那张最有感觉了,你们感受一下。。。
  4. 减少杠杆炒股风险的5种方法
  5. 什么是PHP?它的擅长领域是什么?它的工作原理是什么?
  6. 主成分分析PCA并给出解释百分比
  7. 为什么辞职(或裸辞)之后很难再找到工作,而且能力越高越明显?
  8. 图表——SM2密钥协商与ECMQV对比
  9. 内部披露!最新互联网大厂的薪资和职级一览
  10. vpp之浅谈插件和使用