• ARM架构的基本知识


    ARM两种授权

    • 体系结构授权, 一种硬件规范, 用来约定指令集, 芯片内部体系结构(内存管理, 高速缓存管理), 只约定每一条指令的格式, 行为规范, 参数, 客户根据这个规范自行设计与之兼容的处理器
    • 处理IP授权, ARM公司根据某个版本的体系结构设计处理器, 再把处理器设计方案授权给客户

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    ARM体系结构又根据不同的应用场景分为3种系列

    • A系列: 面向性能密集型系统的应用处理器内核
    • R系列: 面向实时应用的高性能内核
    • M系列: 面向各类嵌入式应用的微控制内核

    ARMv8体系结构中的基本概念

    ARM处理器实现的是精简指令集体系结构。在ARMv8体系结构中有如下一些基本概念和定义。

    • 处理机(Processing Element,PE):在ARM公司的官方技术手册中提到的一个概念,把处理器处理事务的过程抽象为处理机。
    • 执行状态(execution state):处理器运行时的环境,包括寄存器的位宽、支持的指令集、异常模型、内存管理以及编程模型等。ARMv8体系结构定义了两个执行状态。
      • AArch64:64位的执行状态。
        • 提供31个64位的通用寄存器。提供64位的程序计数(Program Counter,PC)指针寄存器、栈指针(Stack Pointer,SP)寄存器以及异常链接寄存器(Exception Link Register,ELR)。
        • 提供A64指令集。定义ARMv8异常模型,支持4个异常等级,即EL0~EL3。
        • 提供64位的内存模型。定义一组处理器状态(PSTATE)用来保存PE的状态。
      • AArch32:32位的执行状态。
        • 提供13个32位的通用寄存器,再加上PC指针寄存器、SP寄存器、链接寄存器(Link Register,LR)。
        • 支持两套指令集,分别是A32和T32(Thumb指令集)指令集。
        • 支持ARMv7-A异常模型,基于PE模式并映射到ARMv8的异常模型中。
        • 提供32位的虚拟内存访问机制。
        • 定义一组PSTATE用来保存PE的状态。
    • ARMv8指令集:ARMv8体系结构根据不同的执行状态提供不同指令集的支持。A64指令集:运行在AArch64状态下,提供64位指令集支持。A32指令集:运行在AArch32状态下,提供32位指令集支持。T32指令集:运行在AArch32状态下,提供16位和32位指令集支持。
    • 系统寄存器命名:在AArch64状态下,很多系统寄存器会根据不同的异常等级提供不同的变种寄存器。系统寄存器的使用方法如下。
    _Elx  //最后一个字母 x 可以表示0、1、2、3
    
    • 1

    如SP_EL0表示在EL0下的SP寄存器,SP_EL1表示在EL1下的SP寄存器。

    ARMv8处理器执行状态

    ARMv8处理器支持两种执行状态——AArch64状态和AArch32状态

    AArch64状态是ARMv8新增的64位执行状态,而AArch32是为了兼容ARMv7体系结构的32位执行状态

    AArch32执行状态

    支持16个32位的通用寄存器

    ARMv8体系架构下AArch64执行状态

    异常等级

    确定了处理器当前运行特权级别

    • EL0:用户特权,用于运行普通用户程序。
    • EL1:系统特权,通常用于操作系统内核。如果系统使能了虚拟化扩展,运行虚拟机操作系统内核。
    • EL2:运行虚拟化扩展的虚拟机监控器(hypervisor)。
    • EL3:运行安全世界中的安全监控器(secure monitor)
    • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    ARMv8体系结构允许切换应用程序的运行模式。如在一个运行64位操作系统的ARMv8处理器中,我们可以同时运行A64指令集的应用程序和A32指令集的应用程序,但是在一个运行32位操作系统的ARMv8处理器中就不能运行A64指令集的应用程序了。

    当需要运行A32指令集的应用程序时,需要通过一条管理员调用(Supervisor Call,SVC)指令切换到EL1,操作系统会做任务的切换并且返回AArch32的EL0,从而为这个应用程序准备好AArch32状态的运行环境。

    通用寄存器

    支持31个64位的, 分别是X0 ~ X30

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    可以使用W来表示低32位的数据, W0表示X0寄存器的低32位数据, W1表示X1寄存器的低32位数据

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    特殊寄存器

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    系统寄存器

    ARMv8体系结构支持如下7类系统寄存器:

    • 通用系统控制寄存器;
    • 调试寄存器;
    • 性能监控寄存器;
    • 活动监控寄存器;
    • 统计扩展寄存器;
    • RAS寄存器;
    • 通用定时器寄存器。

    系统寄存器支持不同的异常等级的访问,通常系统寄存器会使用“Reg_ELn”的方式来表示。

    • Reg_EL1:处理器处于EL1、EL2以及EL3时可以访问该寄存器。
    • Reg_EL2:处理器处于EL2和EL3时可以访问该寄存器。
    • 大部分系统寄存器不支持处理器处于EL0时访问,但也有一些例外,如CTR_EL0。

    数据类型

    支持的数据宽度

    字节(8bit), 半字(16bit), 字(32bit), 双字(64bit),四字(128bit)

  • 相关阅读:
    echart 雷达图
    Leetcode3200. 三角形的最大高度
    Linux进程管理之通过pid号找到struct task_struct
    02矩阵01 —— 基本矩阵 : 对角矩阵、方幂、数量矩阵、转置矩阵、对称矩阵、逆矩阵、奇异矩阵、三角矩阵
    Autostrade per l’Italia选择LITESTAR 4D进行隧道照明设计
    Linux基础
    C#数据去重的5种方式,你知道几种?
    《Python3 网络爬虫开发实战》:HTML基本原理
    Python是信奥的基础吗,学习信奥要不要先学python
    统计字符串中元素的个数(多种方法)
  • 原文地址:https://blog.csdn.net/zbbzb/article/details/133849962