一 、ARM64架构基础

1 ARMv8 A 架构介绍

ARMv8 - A是ARM公司发布的第一代支持64位处理器的指令集和架构。它在扩充64位寄存器的同时提供对上一代架构指令集的兼容,因而能同时提供运行 32位 和 64位应用程序的执行环境。

  • 超大物理地址空间(large Physical Address),提供超过4GB物理内存的访问。
  • 64位宽的虚拟地址空间(64-bit Virtual Addressing)
  • 提供31个64位宽的通用寄存器,可以减少对栈的访问,从而提高性能。
  • 提供16KB 和 64KB的页面,有助于降低TLB的未命中率。
  • 全新的异常处理模型,有助于降低操作系统 和 虚拟化的实现复杂度。
  • 全新的加载 - 获取,存储 - 释放指令 (Load - Acquire, Store - Release Instructions)。

2 ARMv8 A 基础概念

2.1 处理器单元

处理器处理事务的过程抽象为处理单元。(PE:Processing Element)

2.2 执行状态

AArch64: 64位的执行状态
  • 提供31个64位通用寄存器。
  • 提供64位的程序计数寄存器 PC、栈指针寄存器SP、异常链接寄存器ELR。
  • 提供AArch64指令集
  • 定义Armv8异常模型,支持4个异常等级,El0 ~ EL3
  • 提供64位的内存模型
  • 定义一组处理器状态(PSTATE)用来保存PE的状态。
AArch32:32位的执行状态 ---- 待分析

2.3 ARMv8 指令集

ARMv8架构根据不同的执行状态提供不同指令集的支持。
A64指令集:运行在AArch64状态,提供64位指令集支持。
A32指令集:运行在AArch32状态,提供32位指令集支持。
T32指令集:运行在AArch32状态,提供16和32位指令集支持。

2.4 系统寄存器命名

系统寄存器 提供控制和状态。
在AArch64 状态下,很多系统寄存器会根据不同的异常等级,提供不同的变种寄存器。

  • 命名规则:<register_name>_ELx where x is 0, 1, 2, or 3 。
  • 比如:SP_EL0 表示在EL0下的栈指针寄存器,SP_EL1表示在EL1下的栈指针。
  • 系统寄存器 描述在ARv8.6手册的D13章。

3 ARMv8 A 运行状态 & 异常等级

ARMv8 处理器支持两种运行状态 – AArch64 状态 和AArch32 状态。

3.1 异常等级

AArch64架构的一场等级(Exception level)确定了处理当前运行的特权级别。类似ARMv7 架构中的特权等级。
EL0:用户特权,用于运行普通用户程序
EL1:系统特权,通常用于运行操作系统
EL2;运行虚拟化扩展的虚拟监控程序 (Hypervisor)
EL3:运行安全世界中的安全监控器(secure monitor)

3.2 数据宽度 & 指令对齐

数据宽度

  • ARMv8 架构支持如下几种数据宽度。
    字节(byte): 8位&16进制2位 / 1字节
    半字(halfword):16位 / 2字节
    字(word):32位 / 4字节
    4字节(quadword): 128位 / 16字节
  • 通用寄存器:支持64bit和32bit的通用寄存器
  • SIMD/FP寄存器:支持128bit寄存器
    不对齐访问
    一种是指令对齐,另一种是数据对齐
  • Arm64 指令集要求指令存放的位置必须以字(word)- 4字节为单位对齐。
  • 访问存储位置不是以字为单位对齐的指令会导致PC对齐异常(PC aligment fault)。
  • 对于数据访问,需要区分不同的内存类型。对内存类型是设备内存的不对齐访问会触发对齐异常。
  • 对于访问普通内存,除了使用独占之另外,还可以使用其他的用于加载和存储单个或多个寄存器的所有指令。
  • 如果访问地址和要访问的数据元素大小不对齐,根据一下进行处理:
  • 若对应的异常等级中的SCTLR_ELx 寄存器的 A域 设置为1,则说明打开地址对齐检查功能,会触发对齐异常。
  • 若对齐的异常等级中的SCTLR_ELx 寄存器的 A域 设置为0,则说明处理器支持不对齐访问。
  • 当然处理器支持的不不对齐访问也有一些限制
  • 不能保证单次访问原子地完成,有可能复制多次。
  • 不对齐访问 比 对齐访问需要更多的处理时间。
  • 不对齐的地址访问,可能会引发中止(abort)。
    二、ARMv8 寄存器

4 通用寄存器

AArch64 运行状态支持31个64位通用寄存器,分别是x0 ~ x30寄存器,而AArch32运行状态支持16个32位的通用寄存器。

  • x0 ~ x30 :通用寄存器

  • <x0 - x7 传参和结果> <x8 间接结果寄存器> <x9 - x15 调用函数需要保存,临时寄存器>

  • <x16 - x18 平台寄存器> <x19 - x28 被调用函数需保存> <x29/ FP 栈桢寄存器> <X30/LR 链接寄存器>

  • SP :栈指针寄存器

  • PC :程序计数寄存器

  • 在AArch64 运行状态下,使用 x 表示64位通用寄存器,比如:x0,x20等。

  • W表示低32位的寄存器,比如W0 表示 X0寄存器的低32位数据,W1表示 X1寄存器的低32位数据

5 处理器状态寄存器组(Processor State)

在ARMv7 中使用CPSR来表示当前处理器的状态,而在AArch64架构中使用处理状态寄存器组,简称PSTATE。

5.1 条件标志位 - NZCV (The Condition flags)

  • 举例
    cmp 指令:使用cmp指令来比较两个变量的大小,它会做减法运算,并且影响PASTAT寄存器的C标志位。
    小伙伴可以使用“updates the condition” 关键字来搜索哪些指令会影响pstate的条件标志位

5.2 异常掩码标志位

0 :表示enable,没有屏蔽这个异常
1 :表示disable, 屏蔽这个异常

5.3 执行状态控制位

5.4 处理器状态寄存器访问

在EL0访问pstate的问题,部分pstate的域可以通过特殊寄存器来访问,
部分pstate域在EL0里不能被访问,比如CurrenEL。

6 特殊寄存器

ARMv8架构除了支持31个通用寄存器之外,还提供多个特殊的寄存器。

零寄存器(Zero Register)
WZR寄存器是32位的零寄存器,XZR是64位的零寄存器。
栈指针(Stack Pointer)

  • SP_EL0:EL0下的栈指针寄存器。
  • SP_EL1:EL1下的栈指针寄存器。
  • SP_EL2:EL2下的栈指针寄存器。
  • SP_EL3:EL3下的栈指针寄存器。
    当处理器运行在比EL0高级别的异常等级时,处理器可以访问:
  • 当前异常等级对应的栈指针SP_ELn
  • EL0对应的栈指针SP_EL0寄存器可以当做一个临时寄存器,比如:Linux 内核使用这种临时寄存器存放进程的 task_struct 数据结构的指针。
  • EL0时,处理器只能访问SP_EL0寄存器,而不能访问其他高等级的SP寄存器。
    PC指针(Program Counter)
    PC(Program Counter)寄存器通常用来指向当前运行指令的下一条指令的地址,用于控制程序种指令的执行顺序,但是编程人员不能通过指令来直接访问。
    异常链接寄存器(Exception Link Register,ELR)
    异常链接寄存器(Exception Link Register),用来存放异常返回地址。
    保存处理状态寄存器(Saved Process Status Register,SPSR)
    当我们进行异常处理时,处理器的处理状态会保存到 保存处理状态寄存器(SPSR) 中。这种寄存器类似ARMv7中的CPSR。
    当异常将要发生时,处理器会把 处理器状态寄存器 (PSTATE) 的值保存到 保存处理状态寄存器(SPSR)中.
    当异常处理完成并返回时。再把 保存处理状态寄存器(SPSR)中的值恢复 到 处理器状态寄存器 (PSTATE)中。
    M[4] :处理器异常处理过程中处于哪种运行模式下,若为0 表示AArch64
    M[3:0] : 异常模式

通过msr/mrs指令来访问
CurrentEL寄存器
聊聊SOC启动(七) SPL启动分析 - 知乎 (zhihu.com)
处理器状态PSTATE中的EL字段保存了当前异常等级。使用MRS指令可以读取当前异常等级。
0: 表示EL0 (0<<2)
1: 表示EL1 (1<<2)
2: 表示EL2 (2<<2)
3: 表示EL3 (3<<2)
#define CurrentEL_EL1 (1 << 2)
#define CurrentEL_EL2 (2 << 2)
#define CurrentEL_EL3 (3 << 2)

DAIF寄存器

  • 表示处理器状态PSTATE中的{D, A, I, F}字段
    SPSel寄存器
  • 表示处理器状态PSTATE中的SP字段,用来在SP_EL0和SP_ELn中选择栈指针寄存器

7 系统寄存器

ARMv8 架构定义了其他相关系统寄存器,通过访问和设置这些系统寄存器来完成对处理器不同的功能配置。

  • ARmv8 架构支持7大类系统寄存器
  • 通用系统控制寄存器
  • 调试寄存器
  • 性能监控寄存器
  • 活动监控寄存器
  • 统计扩展寄存器
  • RAS寄存器
  • 通用定时器寄存器
  • 系统寄存器命名规范
  • 系统寄存器支持不同异常等级下的访问,通常系统寄存器可使用< Reg_ELn > 的方式来表示:
  • Reg_EL1:处理器处于EL1、EL2、EL3时可以访问该寄存器
  • Reg_EL2: 处理器处于EL2、EL3是可以访问该寄存器
  • 系统寄存器访问指令
  • 程序可以通过MSR和MRS指令访问系统寄存器,比如:
  • mrs x0, TTBR0_EL1 //把TTBR0_EL1寄存器的值复制到X0寄存器
  • msr TTBR0_EL1, x0 //把x0寄存器的值拷贝到TTBR0_EL1寄存器

三、ARM64 指令集
… 待梳理
五、ARM64 内存管理

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flutter专栏--深入剖析你的第一个flutter应用

使用fvm管理flutter版本 如果你有使用多版本flutter的需求&#xff0c;那么fvm将会给你提供较大的帮助。下面我列举一下mac flutter3.35.2的版本的操作命令&#xff0c;完成之后&#xff0c;你将可以随意切换flutter版本 # 下载fvm相关的依赖 brew tap leoafarias/fvm brew …

MongoDB 聚合查询超时:索引优化与分片策略的踩坑记录

人们眼中的天才之所以卓越非凡&#xff0c;并非天资超人一等而是付出了持续不断的努力。1万小时的锤炼是任何人从平凡变成超凡的必要条件。———— 马尔科姆格拉德威尔 &#x1f31f; Hello&#xff0c;我是Xxtaoaooo&#xff01; &#x1f308; “代码是逻辑的诗篇&#xff…

Augmentcode免费额度AI开发WordPress商城实战

Augment AI开发WordPress商城实战&#xff1a;从零构建到免费额度续杯完整指南 前言 在AI编程工具日益普及的今天&#xff0c;如何高效利用这些工具来开发实际项目成为了开发者关注的焦点。本文将详细介绍如何使用Augment AI从零开始构建一个功能完整的WordPress商城系统&#…

【C++八股文】数据结构篇

一、单例模式优化实现 原代码问题分析 ​内存序重排序风险​&#xff1a;双重检查锁在C中可能因指令重排导致半初始化对象被访问​锁粒度过大​&#xff1a;每次获取实例都需要加锁&#xff0c;影响性能​线程安全性不足​&#xff1a;未考虑C11前的内存模型问题 改进方案&a…

并发编程——15 线程池ForkJoinPool实战及其工作原理分析

1 一道算法题引发的思考及其实现 1.1 算法题 问&#xff1a;如何充分利用多核 CPU 的性能&#xff0c;快速对一个2千万大小的数组进行排序&#xff1f; 这道题可以通过归并排序来解决&#xff1b; 1.2 什么是归并排序&#xff1f; 归并排序&#xff08;Merge Sort&#xff…

Kafka面试精讲 Day 6:Kafka日志存储结构与索引机制

【Kafka面试精讲 Day 6】Kafka日志存储结构与索引机制 在“Kafka面试精讲”系列的第6天&#xff0c;我们将深入剖析 Kafka的日志存储结构与索引机制。这是Kafka高性能、高吞吐量背后的核心设计之一&#xff0c;也是中高级面试中的高频考点。面试官常通过这个问题考察候选人是否…

Linux 字符设备驱动框架学习记录(三)

Linux字符设备驱动开发新框架详解 一、新旧驱动框架对比 传统字符设备驱动流程 手动分配设备号 (register_chrdev_region)实现file_operations结构体使用mknod手动创建设备节点 新式驱动框架优势 自动设备号分配&#xff1a;动态申请避免冲突自动节点创建&#xff1a;通过class…

《计算机网络安全》实验报告一 现代网络安全挑战 拒绝服务与分布式拒绝服务攻击的演变与防御策略(1)

目 录 摘 要 一、研究背景与目的 1.1 介绍拒绝服务&#xff08;DoS&#xff09;和分布式拒绝服务&#xff08;DDoS&#xff09;攻击的背景 &#xff08;1&#xff09;拒绝服务攻击&#xff08;DoS&#xff09;  &#xff08;2&#xff09;分布式拒绝服务攻击&#xff0…

深度学习篇---模型组成部分

模型组成部分&#xff1a;在 PyTorch 框架下进行图像分类任务时&#xff0c;深度学习代码通常由几个核心部分组成。这些部分中有些可以在不同网络间复用&#xff0c;有些则需要根据具体任务或网络结构进行修改。下面我将用通俗易懂的方式介绍这些组成部分&#xff1a;1. 数据准…

关于ANDROUD APPIUM安装细则

1&#xff0c;可以先参考一下连接 PythonAppium自动化完整教程_appium python教程-CSDN博客 2&#xff0c;appium 需要对应的版本的node&#xff0c;可以用nvm对node 进行版本隔离 3&#xff0c;对应需要安装android stuido 和对应的sdk &#xff0c;按照以上连接进行下载安…

八、算法设计与分析

1 算法设计与分析的基本概念 1.1 算法 定义 &#xff1a;算法是对特定问题求解步骤的一种描述&#xff0c;是有限指令序列&#xff0c;每条指令表示一个或多个操作。特性 &#xff1a; 有穷性&#xff1a;算法需在有限步骤和时间内结束。确定性&#xff1a;指令无歧义&#xff…

机器学习从入门到精通 - 神经网络入门:从感知机到反向传播数学揭秘

机器学习从入门到精通 - 神经网络入门&#xff1a;从感知机到反向传播数学揭秘开场白&#xff1a;点燃你的好奇心 各位&#xff0c;有没有觉得那些能识图、懂人话、下棋碾压人类的AI特别酷&#xff1f;它们的"大脑"核心&#xff0c;很多时候就是神经网络&#xff01;…

神经网络模型介绍

如果你用过人脸识别解锁手机、刷到过精准推送的短视频&#xff0c;或是体验过 AI 聊天机器人&#xff0c;那么你已经在和神经网络打交道了。作为深度学习的核心技术&#xff0c;神经网络模仿人脑的信息处理方式&#xff0c;让机器拥有了 “学习” 的能力。一、什么是神经网络&a…

苹果开发中什么是Storyboard?object-c 和swiftui 以及Storyboard到底有什么关系以及逻辑?优雅草卓伊凡

苹果开发中什么是Storyboard&#xff1f;object-c 和swiftui 以及Storyboard到底有什么关系以及逻辑&#xff1f;优雅草卓伊凡引言由于最近有个客户咨询关于 苹果内购 in-purchase 的问题做了付费咨询处理&#xff0c;得到问题&#xff1a;“昨天试着把您的那几部分code 组装成…

孩子玩手机都近视了,怎样限制小孩的手机使用时长?

最近两周&#xff0c;我给孩子检查作业时发现娃总是把眼睛眯成一条缝&#xff0c;而且每隔几分钟就会用手背揉眼睛&#xff0c;有时候揉得眼圈都红了。有一次默写单词&#xff0c;他把 “太阳” 写成了 “大阳”&#xff0c;我给他指出来&#xff0c;他却盯着本子说 “没有错”…

医疗AI时代的生物医学Go编程:高性能计算与精准医疗的案例分析(六)

第五章 案例三:GoEHRStream - 实时电子病历数据流处理系统 5.1 案例背景与需求分析 5.1.1 电子病历数据流处理概述 电子健康记录(Electronic Health Record, EHR)系统是现代医疗信息化的核心,存储了患者从出生到死亡的完整健康信息,包括 demographics、诊断、用药、手术、…

GEM5学习(2):运行x86Demo示例

创建脚本 配置脚本内容参考官网的说明gem5: Creating a simple configuration script 首先根据官方说明创建脚本文件 mkdir configs/tutorial/part1/ touch configs/tutorial/part1/simple.py simple.py 中的内容如下&#xff1a; from gem5.prebuilt.demo.x86_demo_board…

通过 FinalShell 访问服务器并运行 GUI 程序,提示 “Cannot connect to X server“ 的解决方法

FinalShell 是一个 SSH 客户端&#xff0c;默认情况下 不支持 X11 图形转发&#xff08;不像 ssh -X 或 ssh -Y&#xff09;&#xff0c;所以直接运行 GUI 程序&#xff08;如 Qt、GNOME、Matplotlib 等&#xff09;会报错&#xff1a; Error: Cant open display: Failed to c…

1.人工智能——概述

应用领域 替代低端劳动&#xff0c;解决危险、高体力精力损耗领域 什么是智能制造&#xff1f;数字孪生&#xff1f;边缘计算&#xff1f; 边缘计算 是 数字孪生 的 “感官和神经末梢”&#xff0c;负责采集本地实时数据和即时反应。琐碎数据不上传总服务器&#xff0c;实时进行…

传统园区能源转型破局之道:智慧能源管理系统驱动的“源-网-荷-储”协同赋能

传统园区能源结构转型 政策要求&#xff1a;福建提出2025年可再生能源渗透率≥25%&#xff0c;山东强调“源网荷储一体化”&#xff0c;安徽要求清洁能源就地消纳。系统解决方案&#xff1a;多能协同调控&#xff1a;集成光伏、储能、充电桩数据&#xff0c;通过AI算法动态优化…