ARM架构的基本知识

news2024/11/28 21:55:35

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状态下,很多系统寄存器会根据不同的异常等级提供不同的变种寄存器。系统寄存器的使用方法如下。
<register_name>_Elx  //最后一个字母 x 可以表示0、1、2、3

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

ARMv8处理器执行状态

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

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

AArch42执行状态

支持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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1096327.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 全栈体系(三)

第一章 Java 基础语法 八、标识符 业内大多数程序员都在遵守阿里巴巴的命名规则。 1. 硬性要求 必须要这么做&#xff0c;否则代码会报错。 必须由数字、字母、下划线_、美元符号$组成。数字不能开头不能是关键字区分大小写的。 2. 软性建议 如果不这么做&#xff0c;代…

前后端数据导入导出Excel

一&#xff1a;导入 Excel有读取也便有写出&#xff0c;Hutool针对将数据写出到Excel做了封装。 原理 Hutool将Excel写出封装为ExcelWriter&#xff0c;原理为包装了Workbook对象&#xff0c;每次调用merge&#xff08;合并单元格&#xff09;或者write&#xff08;写出数据&…

【实操】基于ChatGPT构建知识库

前言 最近有些实践&#xff0c;因为后面要去研究fine-tune了&#xff0c;想着记录一下chatgpt向量数据库构建知识库的一些实操经验&#xff0c;不记我很快就忘了&#xff0c;哈哈。 首先&#xff0c;提一下为啥会出现向量数据库这个技术方案&#xff1f; 大家经过实践发现&…

10.2手动推导linux中file, cdev, inode之间的关系

是时候可以手动推导一下linux里面基类父类和子类的关系了 代码放最后把 简单说明版 详细流程 第一步注册驱动 cdev结构体能看做是一个基类,那么链表里面都是字符设备驱动的cdev连载一起,啥串口,lcd的,通过cdev->list_head连接 那cdev结构体里有主次设备号 第一步 使用r…

【机器学习】特征工程:从理论到实践的关键技巧

机器学习之特征工程实践技巧 1、引言2、了解特征工程2.1 机器学习2.2 特征工程 3、特征工程的思路4、特征工程的方法5、特征工程的实践6、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c; 你不厚道~ 小鱼&#xff1a;啥情况&#xff1f; 小屌丝&#xff1a;你为啥不给我讲…

GMSH如何对STL模型再次划分网格

由于时间比较忙&#xff0c;一直未曾继续写博文&#xff0c;今天写一篇关于Gmsh对STL模型二次划分网格的测试。此项测试还不够完善&#xff0c;目前仅实现了STL模型的细分&#xff0c;效果还可以&#xff0c;在OSG下显示的效果如下&#xff1a; 一、原始STL显示效果&#xff0…

SVN服务端客户端安装配置

SVN服务端客户端安装配置 1、服务端下载安装1.1 软件下载1.2 软件安装 2、客户端下载安装2.1 软件下载2.2 软件安装2.2.1 安装2.2.2. 汉化 3、SVN配置3.1 SVN服务器端配置3. 2 SVN客户端配置 1、服务端下载安装 1.1 软件下载 百度网盘链接&#xff1a;VisualSVN-Server-5.3.0…

YApi和Swagger接口管理

这篇博客针对苍穹外卖而写 YApi 之前的官网&#xff1a;yapi.smart-xwork.cn 由于之前的网址访问不了&#xff0c;现在我用的是这个网址&#xff1a;YApi Pro-高效、易用、功能强大的可视化接口管理平台 登录之后如下 创建两个工作空间 用户端接口也是如法炮制 Swagger 使用…

SSM - Springboot - MyBatis-Plus 全栈体系(二十七)

第六章 SpringBoot 二、SpringBoot3 配置文件 1. 统一配置管理概述 SpringBoot 工程下&#xff0c;进行统一的配置管理&#xff0c;你想设置的任何参数&#xff08;端口号、项目根路径、数据库连接信息等等)都集中到一个固定位置和命名的配置文件&#xff08;application.pro…

九、K8S之Ingress

Ingress 一、Ingress 概念 Ingress提供从集群外部到集群内服务的Http路由&#xff0c;流量路由由 Ingress 资源所定义的规则来控制。通过配置&#xff0c;Ingress可为Service提供外部可访问的URL&#xff0c;对其流量作负载均衡&#xff0c;代理转发。Ingress 的使用可以大大…

基于EtherCAT的机器人多轴同步运动控制

随着工业自动化的发展&#xff0c;机器人在生产线上的应用越来越广泛。为了实现高效、精确的运动控制&#xff0c;机器人的多轴运动必须能够实现同步操作&#xff0c;它能够提高机器人的运动精度和稳定性&#xff0c;实现更高效的生产线操作。同时&#xff0c;它也为机器人的协…

力扣刷题 day45:10-15

1&#xff0c;整数拆分 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 方法一&#xff1a;动态规划 #方法一&#xff1a;动态规划 def integerBreak…

2022最新版-李宏毅机器学习深度学习课程-P16 Loss可能影响网络训练失败softmax与sigmoid

一、实例回顾 分类的例子在前几讲中已详细分析&#xff0c;此处略过。 二、softmax与sigmoid 此处要明白&#xff01;softmax和sigmoid的区别和联系 Softmax函数和Sigmoid函数的区别与联系 - 知乎 (zhihu.com) Sigmoid 多标签分类问题多个正确答案非独占输出&#xff08;例如…

四叉堆在GO中的应用-定时任务timer

堆作为必须掌握的数据结构之一&#xff0c;在众多场景中也得到了广泛的应用。 比较典型的&#xff0c;如java中的优先队列PriorityQueue、算法中的TOP-K问题、最短路径Dijkstra算法等&#xff0c;在这些经典应用中堆都担任着灵魂般的角色。 理论基础 binary heap 再一起回忆…

2022最新版-李宏毅机器学习深度学习课程-P13 局部最小值与鞍点

一、优化失败的原因 局部最小值&#xff1f;鞍点&#xff1f; 二、数学推导分析 用泰勒公式展开 一项与梯度&#xff08;L的一阶导&#xff09;有关&#xff0c;一项与海赛矩阵&#xff08;L的二阶导&#xff09;有关 海瑟矩阵 VTHV通过海瑟矩阵的性质可以转为判断H是否是正…

LangChain-Decorators 包学习

libraryIO的链接&#xff1a;https://libraries.io/pypi/langchain-decorators 来colab玩玩它的demo 感觉这确实是个挺好用的库 想到之前纯调prompt来控制输出格式的痛苦&#xff0c;这个可太有效了 cool~ 最下面这个react的多智能体例子很好玩&#xff0c;来看看&…

MySQL 函数 索引 事务 管理

目录 一. 字符串相关的函数 二.数学相关函数 ​编辑 三.时间日期相关函数 date.sql 四.流程控制函数 centrol.sql 分页查询 使用分组函数和分组字句 group by 数据分组的总结 多表查询 自连接 子查询 subquery.sql 五.表的复制 六.合并查询 七.表的外连接 …

【微服务 SpringCloud】实用篇 · 服务拆分和远程调用

微服务&#xff08;2&#xff09; 文章目录 微服务&#xff08;2&#xff09;1. 服务拆分原则2. 服务拆分示例1.2.1 导入demo工程1.2.2 导入Sql语句 3. 实现远程调用案例1.3.1 案例需求&#xff1a;1.3.2 注册RestTemplate1.3.3 实现远程调用1.3.4 查看效果 4. 提供者与消费者 …

windows安装npm教程

在安装和使用NPM之前&#xff0c;我们需要先了解一下&#xff0c;NPM 是什么&#xff0c;能干啥&#xff1f; 一、NPM介绍 NPM&#xff08;Node Package Manager&#xff09;是一个用于管理和共享JavaScript代码包的工具。它是Node.js生态系统的一部分&#xff0c;广泛用于构…

MyBatisPlus(十八)字段类型处理器:对象存为JSON字符串

说明 将一个复杂对象&#xff08;集合或者普通对象&#xff09;&#xff0c;作为 JSON字符串 存储到数据库表中的某个字段中。 MyBatisPlus 提供优雅的方式&#xff0c;映射复杂对象类型字段和数据库表中的字符串类型字段。 核心注解 TableName(autoResultMap true)TableF…